Пример #1
0
        public Ceiling BrepToSpeckleCeiling(RH.Brep brep)
        {
            Ceiling ceiling   = null;
            var     extCurves = GetSurfaceBrepEdges(brep, getExterior: true); // extract outline
            var     intCurves = GetSurfaceBrepEdges(brep, getInterior: true); // extract voids

            if (extCurves != null)
            {
                ceiling = new Ceiling(extCurves[0], intCurves);
            }
            return(ceiling);
        }
Пример #2
0
        public List <ApplicationPlaceholderObject> CeilingToNative(Ceiling speckleCeiling)
        {
            if (speckleCeiling.outline == null)
            {
                throw new Speckle.Core.Logging.SpeckleException("Ceiling is missing an outline curve.");
            }

            var outline = CurveToNative(speckleCeiling.outline);
            var profile = new CurveLoop();

            foreach (DB.Curve segment in outline)
            {
                profile.Append(segment);
            }

            DB.Level level = null;
            double   slope = 0;

            DB.Line slopeDirection = null;
            if (speckleCeiling is RevitCeiling speckleRevitCeiling)
            {
                level          = LevelToNative(speckleRevitCeiling.level);
                slope          = speckleRevitCeiling.slope;
                slopeDirection = (speckleRevitCeiling.slopeDirection != null) ? LineToNative(speckleRevitCeiling.slopeDirection) : null;
            }
            else
            {
                level = LevelToNative(LevelFromCurve(outline.get_Item(0)));
            }

            var ceilingType = GetElementType <CeilingType>(speckleCeiling);

            var docObj = GetExistingElementByApplicationId(speckleCeiling.applicationId);

            if (docObj != null)
            {
                Doc.Delete(docObj.Id);
            }

            DB.Ceiling revitCeiling;

            if (slope != 0 && slopeDirection != null)
            {
                revitCeiling = DB.Ceiling.Create(Doc, new List <CurveLoop> {
                    profile
                }, ceilingType.Id, level.Id, slopeDirection, slope);
            }
            else
            {
                revitCeiling = DB.Ceiling.Create(Doc, new List <CurveLoop> {
                    profile
                }, ceilingType.Id, level.Id);
            }

            Doc.Regenerate();

            try
            {
                CreateVoids(revitCeiling, speckleCeiling);
            }
            catch (Exception ex)
            {
                Report.LogConversionError(new Exception($"Could not create openings in ceiling {speckleCeiling.applicationId}", ex));
            }

            SetInstanceParameters(revitCeiling, speckleCeiling);

            var placeholders = new List <ApplicationPlaceholderObject>()
            {
                new ApplicationPlaceholderObject {
                    applicationId = speckleCeiling.applicationId, ApplicationGeneratedId = revitCeiling.UniqueId, NativeObject = revitCeiling
                }
            };

            var hostedElements = SetHostedElements(speckleCeiling, revitCeiling);

            placeholders.AddRange(hostedElements);
            Report.Log($"Created Ceiling {revitCeiling.Id}");
            return(placeholders);
        }