Exemple #1
0
        /***************************************************/

        public static BH.oM.Geometry.SettingOut.Grid GridFromRevit(this MultiSegmentGrid revitGrid, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            settings = settings.DefaultIfNull();

            oM.Geometry.SettingOut.Grid grid = refObjects.GetValue <oM.Geometry.SettingOut.Grid>(revitGrid.Id);
            if (grid != null)
            {
                return(grid);
            }

            List <Grid> gridSegments = revitGrid.GetGridIds().Select(x => revitGrid.Document.GetElement(x) as Grid).ToList();

            if (gridSegments.Count == 0)
            {
                return(null);
            }
            else if (gridSegments.Count == 1)
            {
                return(gridSegments[0].GridFromRevit(settings, refObjects));
            }
            else
            {
                List <BH.oM.Geometry.PolyCurve> joinedGridCurves = BH.Engine.Geometry.Compute.IJoin(gridSegments.Select(x => x.Curve.IFromRevit()).ToList());
                if (joinedGridCurves.Count != 1)
                {
                    BH.Engine.Reflection.Compute.RecordError(String.Format("Revit grid consists of disjoint segments. Element id: {0}", revitGrid.Id));
                    return(null);
                }

                grid      = BH.Engine.Geometry.SettingOut.Create.Grid(joinedGridCurves[0]);
                grid.Name = revitGrid.Name;
            }

            //Set identifiers, parameters & custom data
            grid.SetIdentifiers(revitGrid);
            grid.CopyParameters(revitGrid, settings.ParameterSettings);
            grid.SetProperties(revitGrid, settings.ParameterSettings);

            refObjects.AddOrReplace(revitGrid.Id, grid);
            return(grid);
        }
Exemple #2
0
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static BH.oM.Geometry.SettingOut.Grid GridFromRevit(this Grid revitGrid, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            settings = settings.DefaultIfNull();

            oM.Geometry.SettingOut.Grid grid = refObjects.GetValue <oM.Geometry.SettingOut.Grid>(revitGrid.Id);
            if (grid != null)
            {
                return(grid);
            }

            grid      = BH.Engine.Geometry.SettingOut.Create.Grid(revitGrid.Curve.IFromRevit());
            grid.Name = revitGrid.Name;

            //Set identifiers, parameters & custom data
            grid.SetIdentifiers(revitGrid);
            grid.CopyParameters(revitGrid, settings.ParameterSettings);
            grid.SetProperties(revitGrid, settings.ParameterSettings);

            refObjects.AddOrReplace(revitGrid.Id, grid);
            return(grid);
        }
Exemple #3
0
        /***************************************************/
        /****              Public methods               ****/
        /***************************************************/

        public static Element ToRevit(this oM.Geometry.SettingOut.Grid grid, Document document, RevitSettings settings = null, Dictionary <Guid, List <int> > refObjects = null)
        {
            return(grid.ToRevitGrid(document, settings, refObjects));
        }
Exemple #4
0
        /***************************************************/
        /****              Public methods               ****/
        /***************************************************/

        public static Element ToRevitGrid(this oM.Geometry.SettingOut.Grid grid, Document document, RevitSettings settings = null, Dictionary <Guid, List <int> > refObjects = null)
        {
            Element revitGrid = refObjects.GetValue <Grid>(document, grid.BHoM_Guid);

            if (revitGrid != null)
            {
                return(revitGrid);
            }

            settings = settings.DefaultIfNull();

            if (BH.Engine.Geometry.Query.IIsClosed(grid.Curve))
            {
                BH.Engine.Reflection.Compute.RecordError("Element could not be created: Revit allows only open curve-based grids. BHoM_Guid: " + grid.BHoM_Guid);
                return(null);
            }

            List <BH.oM.Geometry.ICurve> gridCurves = BH.Engine.Geometry.Query.ISubParts(grid.Curve).ToList();

            if (gridCurves.Count == 0)
            {
                return(null);
            }
            else if (gridCurves.Count == 1)
            {
                Curve curve = grid.Curve.IToRevit();

                if (curve is Line)
                {
                    revitGrid = Grid.Create(document, (Line)curve);
                }
                else if (curve is Arc)
                {
                    revitGrid = Grid.Create(document, (Arc)curve);
                }
                else
                {
                    BH.Engine.Reflection.Compute.RecordError("Element could not be created: Revit allows only line- and arc-based grids. BHoM_Guid: " + grid.BHoM_Guid);
                    return(null);
                }
            }
            else
            {
                CurveLoop loop = new CurveLoop();
                foreach (BH.oM.Geometry.ICurve curve in gridCurves)
                {
                    Curve revitCurve = curve.IToRevit();
                    if (revitCurve is Line || revitCurve is Arc)
                    {
                        loop.Append(revitCurve);
                    }
                    else
                    {
                        BH.Engine.Reflection.Compute.RecordError("Element could not be created: Revit allows only line- and arc-based grids. BHoM_Guid: " + grid.BHoM_Guid);
                        return(null);
                    }
                }

                Plane plane;
                try
                {
                    plane = loop.GetPlane();
                }
                catch
                {
                    BH.Engine.Reflection.Compute.RecordError("Grid curves need to be coplanar. BHoM_Guid: " + grid.BHoM_Guid);
                    return(null);
                }

                SketchPlane sketchPlane = SketchPlane.Create(document, plane);
                ElementId   gridTypeId  = document.GetDefaultElementTypeId(ElementTypeGroup.GridType);
                ElementId   gridId      = MultiSegmentGrid.Create(document, gridTypeId, loop, sketchPlane.Id);
                revitGrid = document.GetElement(gridId);
            }

            revitGrid.CheckIfNullPush(grid);
            if (revitGrid == null)
            {
                return(null);
            }

            try
            {
                revitGrid.Name = grid.Name;
            }
            catch
            {
                BH.Engine.Reflection.Compute.RecordWarning(String.Format("Grid name '{0}' was not unique, name '{1}' has been assigned instead. BHoM_Guid: {2}", grid.Name, revitGrid.Name, grid.BHoM_Guid));
            }

            // Copy parameters from BHoM object to Revit element
            revitGrid.CopyParameters(grid, settings);

            refObjects.AddOrReplace(grid, revitGrid);
            return(revitGrid);
        }