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); }
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); }