void ReconstructBuildingPadByOutline ( DB.Document doc, ref DB.Architecture.BuildingPad element, IList <Rhino.Geometry.Curve> boundaries, Optional <DB.BuildingPadType> type, Optional <DB.Level> level ) { ChangeElementType(ref element, type); var scaleFactor = 1.0 / Revit.ModelUnits; boundaries = boundaries.Select(x => x.ChangeUnits(scaleFactor)).ToArray(); var boundaryBBox = Rhino.Geometry.BoundingBox.Empty; foreach (var boundary in boundaries) { boundaryBBox.Union(boundary.GetBoundingBox(true)); } var curveLoops = boundaries.Select(region => DB.CurveLoop.Create(region.ToHostMultiple().SelectMany(x => x.ToBoundedCurves()).ToList())); SolveOptionalLevel(ref level, doc, boundaryBBox.Min.Z); if (element is DB.Architecture.BuildingPad buildingPad) { element.get_Parameter(DB.BuiltInParameter.LEVEL_PARAM).Set(level.Value.Id); buildingPad.SetBoundary(curveLoops.ToList()); } else { SolveOptionalType(ref type, doc, DB.ElementTypeGroup.BuildingPadType, (document, param) => DB.BuildingPadType.CreateDefault(document), nameof(type)); var newPad = DB.Architecture.BuildingPad.Create ( doc, type.Value.Id, level.Value.Id, curveLoops.ToList() ); ReplaceElement(ref element, newPad, ParametersMask); } element?.get_Parameter(DB.BuiltInParameter.BUILDINGPAD_HEIGHTABOVELEVEL_PARAM).Set(boundaryBBox.Min.Z - level.Value.Elevation); }
public bool CanConvertToSpeckle(object @object) { return(@object switch { DB.DetailCurve _ => true, DB.DirectShape _ => true, DB.FamilyInstance _ => true, DB.Floor _ => true, DB.Level _ => true, DB.View _ => true, DB.ModelCurve _ => true, DB.Opening _ => true, DB.RoofBase _ => true, DB.Area _ => true, DB.Architecture.Room _ => true, DB.Architecture.TopographySurface _ => true, DB.Wall _ => true, DB.Mechanical.Duct _ => true, DB.Mechanical.Space _ => true, DB.Plumbing.Pipe _ => true, DB.Electrical.Wire _ => true, DB.CurtainGridLine _ => true, //these should be handled by curtain walls DB.Architecture.BuildingPad _ => true, DB.Architecture.Stairs _ => true, DB.Architecture.StairsRun _ => true, DB.Architecture.StairsLanding _ => true, DB.Architecture.Railing _ => true, DB.Architecture.TopRail _ => true, DB.Ceiling _ => true, DB.PointCloudInstance _ => true, DB.Group _ => true, DB.ProjectInfo _ => true, DB.ElementType _ => true, DB.Grid _ => true, DB.ReferencePoint _ => true, DB.Structure.AnalyticalModelStick _ => true, DB.Structure.AnalyticalModelSurface _ => true, DB.Structure.BoundaryConditions _ => true, _ => (@object as Element).IsElementSupported() });
void ReconstructBuildingPadByOutline ( DB.Document doc, ref DB.Architecture.BuildingPad element, IList <Rhino.Geometry.Curve> boundaries, Optional <DB.BuildingPadType> type, Optional <DB.Level> level ) { ChangeElementType(ref element, type); SolveOptionalLevel(doc, boundaries, ref level, out var boundaryBBox); var curveLoops = boundaries.ConvertAll(GeometryEncoder.ToCurveLoop); if (element is DB.Architecture.BuildingPad buildingPad) { element.get_Parameter(DB.BuiltInParameter.LEVEL_PARAM).Set(level.Value.Id); buildingPad.SetBoundary(curveLoops); } else { SolveOptionalType(ref type, doc, DB.ElementTypeGroup.BuildingPadType, (document, param) => DB.BuildingPadType.CreateDefault(document), nameof(type)); var newPad = DB.Architecture.BuildingPad.Create ( doc, type.Value.Id, level.Value.Id, curveLoops ); ReplaceElement(ref element, newPad, ParametersMask); } element?.get_Parameter(DB.BuiltInParameter.BUILDINGPAD_HEIGHTABOVELEVEL_PARAM).Set(boundaryBBox.Min.Z / Revit.ModelUnits - level.Value.GetHeight()); }
public BuildingPad(DB.Architecture.BuildingPad floor) : base(floor) { }