Example #1
0
        /***************************************************/

        public static Panel ToBHoMObject(this IWall ramWall)
        {
            //Find corner points of wall in RAM model
            SCoordinate TopstartPt    = new SCoordinate();
            SCoordinate TopendPt      = new SCoordinate();
            SCoordinate BottomstartPt = new SCoordinate();
            SCoordinate BottomendPt   = new SCoordinate();

            ramWall.GetEndCoordinates(ref TopstartPt, ref TopendPt, ref BottomstartPt, ref BottomendPt);

            // Create list of points
            List <Point> corners = new List <Point>();

            corners.Add(TopstartPt.PointFromRAM());
            corners.Add(TopendPt.PointFromRAM());
            corners.Add(BottomendPt.PointFromRAM());
            corners.Add(BottomstartPt.PointFromRAM());
            corners.Add(TopstartPt.PointFromRAM());

            // Create outline from corner points
            Polyline outline = new Polyline();

            outline.ControlPoints = corners;

            //Create opening outlines
            List <ICurve>  wallOpeningPLs   = new List <ICurve>();
            List <Opening> bhomWallOpenings = new List <Opening>();

            // Create openings
            IFinalWallOpenings IFinalWallOpenings = ramWall.GetFinalOpenings();
            IRawWallOpenings   rawOpenings        = ramWall.GetRawOpenings();

            if (rawOpenings.GetCount() > 0)
            {
                IRawWallOpening check = rawOpenings.GetAt(0);
            }

            for (int i = 0; i < IFinalWallOpenings.GetCount(); i++)
            {
                IFinalWallOpening IFinalWallOpening = IFinalWallOpenings.GetAt(i);
                IPoints           openingPts        = IFinalWallOpening.GetOpeningVertices();

                //Re-add first point to close Polygon
                IPoint      firstOPt    = openingPts.GetAt(0);
                SCoordinate firstOCoord = new SCoordinate();
                firstOPt.GetCoordinate(ref firstOCoord);
                openingPts.Add(firstOCoord);

                ICurve wallOpeningOutline = ToPolyline(openingPts);

                Opening bhomOpening = Engine.Structure.Create.Opening(wallOpeningOutline);
                bhomWallOpenings.Add(bhomOpening);
            }

            //  Create wall
            Panel bhomPanel = Engine.Structure.Create.Panel(outline, bhomWallOpenings);

            HashSet <String> tag = new HashSet <string>();

            tag.Add("Wall");

            //Get wall section property
            ConstantThickness wall2DProp    = new ConstantThickness();
            string            wallLabel     = "";
            double            wallThickness = ramWall.dThickness.FromInch();
            IMaterialFragment Material      = null;

            if (ramWall.eMaterial == EMATERIALTYPES.EWallPropConcreteMat)
            {
                wallLabel = "Concrete " + ramWall.dThickness.ToString() + " in";
                Material  = Engine.Structure.Create.Concrete("Concrete");
            }
            else
            {
                wallLabel = "Other " + ramWall.dThickness.ToString() + " in";
                Material  = Engine.Structure.Create.Concrete("Other");
            }

            wall2DProp.Name      = wallLabel;
            wall2DProp.Thickness = wallThickness;
            wall2DProp.PanelType = PanelType.Wall;
            wall2DProp.Material  = Material;

            bhomPanel.Property = wall2DProp;
            bhomPanel.Tags     = tag;
            bhomPanel.Name     = ramWall.lLabel.ToString();

            // Add custom data
            RAMId RAMId = new RAMId();

            RAMId.Id = ramWall.lUID;
            bhomPanel.SetAdapterId(RAMId);
            bhomPanel.Tags.Add("Wall");

            return(bhomPanel);
        }