Beispiel #1
0
        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)
 {
 }