Exemplo n.º 1
0
 //increase the whole letter of a multi segmented grid
 private void increaseWholeLetter(Document doc, ref MultiSegmentGrid currentMultiSegGrid, ref char letter, ref char subLetter, ref bool prevGridIsSub)
 {
     currentMultiSegGrid.Name = WholeName;
     subLetter = 'a';
     foreach (ElementId eID in currentMultiSegGrid.GetGridIds())
     {
         Grid currentGridInMultiSegGrid = doc.GetElement(eID) as Grid;
         currentGridInMultiSegGrid.Name = WholeName;
     }
     if (letter != 90)
     {
         letter++;
         WholeName = WholeName.Remove(WholeName.Length - 1) + letter.ToString();
     }
     else
     {
         letter = 'A';
         char first = WholeName.First();
         if (first == 90)
         {
             WholeName = "A" + letter.ToString();
         }
         else
         {
             first++;
             WholeName = WholeName.Remove(0);
             WholeName = first.ToString() + WholeName + letter.ToString();
         }
     }
     prevGridIsSub = false;
 }
Exemplo n.º 2
0
 // 获取链接模型中多段轴网信息
 private void GetAllMultiSegmentGridInfoInLinkDoc()
 {
     foreach (RevitLinkInstance revitLinkInstance in m_lstLinkInst)
     {
         Document linkDocument = revitLinkInstance.GetLinkDocument();
         if (linkDocument != null && m_doc.ActiveView.ViewType != ViewType.Section)
         {
             try
             {
                 FilteredElementCollector filteredElementCollector = new FilteredElementCollector(linkDocument, m_uiDoc.ActiveView.Id);
                 filteredElementCollector.OfClass(typeof(MultiSegmentGrid));
                 foreach (Element element in filteredElementCollector)
                 {
                     MultiSegmentGrid multiSegmentGrid = element as MultiSegmentGrid;
                     if (multiSegmentGrid != null)
                     {
                         ICollection <ElementId> gridIds = multiSegmentGrid.GetGridIds();
                         foreach (ElementId elementId in gridIds)
                         {
                             Grid grid = m_doc.GetElement(elementId) as Grid;
                             if (grid != null)
                             {
                                 DrawElement item = new DrawElement(grid, ElemType._MultiSegGrid);
                                 m_DrawElems.Add(item);
                             }
                         }
                     }
                 }
             }
             catch (Exception)
             {
             }
         }
     }
 }
Exemplo n.º 3
0
 private void increaseSubLetter(Document doc, ref MultiSegmentGrid currentMultiSegGrid, ref Grid prevGrid, ref char subLetter, ref bool prevGridIsSub)
 {
     currentMultiSegGrid.Name = prevGrid.Name.ElementAt(0).ToString() + "." + subLetter;
     foreach (ElementId eID in currentMultiSegGrid.GetGridIds())
     {
         Grid currentGridInMultiSegGrid = doc.GetElement(eID) as Grid;
         currentGridInMultiSegGrid.Name = prevGrid.Name.ElementAt(0).ToString() + "." + subLetter;
     }
     prevGridIsSub = true;
     subLetter++;
 }
Exemplo n.º 4
0
        //get the total length of the multisegment grid providing the multisegment grid
        private double getMultiGridTotalLength(Document doc, MultiSegmentGrid targetMultiSegGrid)
        {
            double totalLength = 0;

            foreach (ElementId eID in targetMultiSegGrid.GetGridIds())
            {
                Grid currentGrid = doc.GetElement(eID) as Grid;
                totalLength += getTheoricalLengthOfTheGrid(currentGrid);
            }
            return(totalLength);
        }
Exemplo n.º 5
0
 //increase the whole number of a multi segmented grid
 private void increaseWholeNumber(Document doc, ref MultiSegmentGrid currentMultiSegGrid, ref int counter, ref int subCounter, ref bool prevGridIsSub)
 {
     currentMultiSegGrid.Name = (counter + 1).ToString();
     subCounter = 1;
     foreach (ElementId eID in currentMultiSegGrid.GetGridIds())
     {
         Grid currentGridInMultiSegGrid = doc.GetElement(eID) as Grid;
         currentGridInMultiSegGrid.Name = (counter + 1).ToString();
     }
     counter++;
     prevGridIsSub = false;
 }
Exemplo n.º 6
0
        //get the length of only the Grids that have the same orientation that the main grid
        private double getMultiGridLengthSameOrientationMainGrid(Document doc, MultiSegmentGrid targetMultiSegGrid, Grid targetMainGrid)
        {
            double totalLength = 0;

            foreach (ElementId eID in targetMultiSegGrid.GetGridIds())
            {
                Grid currentMultiSegGrid = doc.GetElement(eID) as Grid;
                if (verifyGridOrientation(currentMultiSegGrid) == verifyGridOrientation(targetMainGrid))
                {
                    Grid currentGrid = doc.GetElement(eID) as Grid;
                    totalLength += getTheoricalLengthOfTheGrid(currentGrid);
                }
            }
            return(totalLength);
        }
Exemplo n.º 7
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);
        }
Exemplo n.º 8
0
        //获取多段轴网信息
        private void GetAllMultiSegmentGridInfo()
        {
            FilteredElementCollector filteredElementCollector = new FilteredElementCollector(m_doc, m_uiDoc.ActiveView.Id);

            filteredElementCollector.OfClass(typeof(MultiSegmentGrid));
            foreach (Element element in filteredElementCollector)
            {
                MultiSegmentGrid multiSegmentGrid = element as MultiSegmentGrid;
                if (multiSegmentGrid != null)
                {
                    ICollection <ElementId> gridIds = multiSegmentGrid.GetGridIds();
                    foreach (ElementId elementId in gridIds)
                    {
                        Grid grid = m_doc.GetElement(elementId) as Grid;
                        if (grid != null)
                        {
                            DrawElement item = new DrawElement(grid, ElemType._MultiSegGrid);
                            m_DrawElems.Add(item);
                        }
                    }
                }
            }
        }
Exemplo n.º 9
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document   doc   = uidoc.Document;
            Selection  sel   = uidoc.Selection;

            IList <Element>   allGrids         = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Grids).WhereElementIsNotElementType().ToElements();
            IList <Element>   allMultiGrids    = new FilteredElementCollector(doc).OfClass(typeof(MultiSegmentGrid)).ToElements();
            IList <ElementId> allMultiGridsIDs = new List <ElementId>();
            IList <Grid>      allSingleGrids   = new List <Grid>();
            IList <string>    allGridNames     = new List <string>();

            try
            {
                if (allGrids.Count == 0)
                {
                    message = "Não foi possível encontrar eixos no projeto, por favor crie-os e rode o comando novamente";
                    return(Result.Failed);
                }

                RenumberGridsUI currentGridUI = new RenumberGridsUI();
                currentGridUI.ShowDialog();
                if (currentGridUI.DialogResult == false)
                {
                    return(Result.Cancelled);
                }

                foreach (Element e in allMultiGrids)
                {
                    MultiSegmentGrid currentMultiSegGrid = e as MultiSegmentGrid;
                    allMultiGridsIDs.Add(currentMultiSegGrid.Id);
                }

                foreach (Element e in allGrids)
                {
                    Grid currentGrid = e as Grid;
                    if (allGridNames.Contains(currentGrid.Name))
                    {
                        continue;
                    }
                    allGridNames.Add(currentGrid.Name);
                    allSingleGrids.Add(currentGrid);
                }

                IList <Grid> allOrganizedSingleGrids = new List <Grid>();

                foreach (Grid currentGrid in allSingleGrids)
                {
                    if (allMultiGridsIDs.Contains(MultiSegmentGrid.GetMultiSegementGridId(currentGrid)))
                    {
                        continue;
                    }
                    allOrganizedSingleGrids.Add(currentGrid);
                }

                IList <Grid> allOrganizedHorizontalGrids = new List <Grid>();
                IList <Grid> allOrganizedVerticalGrids   = new List <Grid>();

                IList <Grid> allOrganizedHorizontalMainGridsFromMultiGrids = new List <Grid>();
                IList <Grid> allOrganizedVerticalMainGridsFromMultiGrids   = new List <Grid>();

                foreach (Grid currentGrid in allOrganizedSingleGrids)
                {
                    if (verifyGridOrientation(currentGrid) == "isVertical")
                    {
                        allOrganizedVerticalGrids.Add(currentGrid);
                    }
                    else
                    {
                        allOrganizedHorizontalGrids.Add(currentGrid);
                    }
                }

                foreach (Element e in allMultiGrids)
                {
                    MultiSegmentGrid  curentMultiGrid = e as MultiSegmentGrid;
                    IList <ElementId> GridsIds        = curentMultiGrid.GetGridIds().ToList();
                    IList <Curve>     gridCurves      = new List <Curve>();
                    Grid MainGrid = null;

                    foreach (ElementId eID in GridsIds)
                    {
                        gridCurves.Add((doc.GetElement(eID) as Grid).Curve);
                    }

                    XYZ farAwayPoint = new XYZ(9999999, -9999999, 9999999);
                    gridCurves = gridCurves.Where(c => c is Curve).OrderBy(p => p.Distance(farAwayPoint)).ToList();

                    Curve lastCurve = gridCurves.Last();

                    //Organize the lists to the order of positioning
                    //I dont know why, but I had to put a "where" query that always pass just to make "OrderBy" and "OrderByDescending" work
                    ElementId MainGridID = allGrids.Where(g => g is Grid).OrderBy(d => lastCurve.Distance((d as Grid).Curve.GetEndPoint(1))).First().Id;

                    MainGrid = doc.GetElement(MainGridID) as Grid;

                    if (verifyGridOrientation(MainGrid) == "isVertical")
                    {
                        allOrganizedVerticalMainGridsFromMultiGrids.Add(MainGrid);
                    }
                    else
                    {
                        allOrganizedHorizontalMainGridsFromMultiGrids.Add(MainGrid);
                    }
                }

                //Organize the lists to the order of positioning
                //I dont know why, but I had to put a "where" query that always pass just to make "OrderBy" and "OrderByDescending" work
                allOrganizedHorizontalGrids = allOrganizedHorizontalGrids.Union(allOrganizedHorizontalMainGridsFromMultiGrids).Where(g => g is Grid).OrderByDescending(f => f.Curve.GetEndPoint(0).Y).ToList();
                allOrganizedVerticalGrids   = allOrganizedVerticalGrids.Union(allOrganizedVerticalMainGridsFromMultiGrids).Where(g => g is Grid).OrderBy(f => f.Curve.GetEndPoint(0).X).ToList();

                using (TransactionGroup tG = new TransactionGroup(doc, "Renumerar Eixos"))
                {
                    tG.Start();

                    using (Transaction RenameAllGrids = new Transaction(doc, "Ajustar Nomes"))
                    {
                        RenameAllGrids.Start();
                        for (int i = 0; i < allGrids.Count; i++)
                        {
                            Grid currentGrid = allGrids.ElementAt(i) as Grid;
                            currentGrid.Name = string.Format("ONBOX {0}", i.ToString());
                        }
                        RenameAllGrids.Commit();
                    }

                    using (Transaction RenumberVerticalGrids = new Transaction(doc, "Renumerar Eixos Verticais"))
                    {
                        RenumberVerticalGrids.Start();

                        bool isNumber = true;

                        if (isVerticalGridsNumbered == false)
                        {
                            isNumber = false;
                        }

                        doTheRenumberingOrLettering(doc, allOrganizedVerticalGrids, allOrganizedVerticalMainGridsFromMultiGrids, allMultiGridsIDs, isNumber);

                        RenumberVerticalGrids.Commit();
                    }

                    using (Transaction RenumberHorizontalGrids = new Transaction(doc, "Renumerar Eixos Verticais"))
                    {
                        RenumberHorizontalGrids.Start();

                        bool isNumber = false;

                        if (isVerticalGridsNumbered == false)
                        {
                            isNumber = true;
                        }

                        doTheRenumberingOrLettering(doc, allOrganizedHorizontalGrids, allOrganizedHorizontalMainGridsFromMultiGrids, allMultiGridsIDs, isNumber);

                        RenumberHorizontalGrids.Commit();
                    }

                    using (Transaction regenerate = new Transaction(doc, "Regen"))
                    {
                        regenerate.Start();
                        doc.Regenerate();
                        uidoc.RefreshActiveView();
                        regenerate.Commit();
                    }

                    tG.Assimilate();
                }
                Debug.Print("end");
            }
            catch (Exception excep)
            {
                ExceptionManager eManager = new ExceptionManager(excep);
                return(Result.Cancelled);
            }
            return(Result.Succeeded);
        }
Exemplo n.º 10
0
        internal void ApplyTheRenumberingOnTheActualGrids(IList <GridInfo> targetGridInfoList)
        {
            IList <Element>   allMultiGrids    = new FilteredElementCollector(uidoc.Document).OfClass(typeof(MultiSegmentGrid)).ToElements();
            IList <ElementId> allMultiGridsIDs = new List <ElementId>();

            foreach (Element currentMultiGridElement in allMultiGrids)
            {
                MultiSegmentGrid currentMultiGrid = currentMultiGridElement as MultiSegmentGrid;
                if (currentMultiGrid == null)
                {
                    continue;
                }
                allMultiGridsIDs = allMultiGridsIDs.Union(currentMultiGrid.GetGridIds()).ToList();
            }

            foreach (GridInfo currentGridInfo in targetGridInfoList)
            {
                bool isCurrentGridPartOfMultiGridItem = false;
                Grid currentGrid = uidoc.Document.GetElement(new ElementId(currentGridInfo.Id)) as Grid;

                if (currentGrid == null)
                {
                    isCurrentGridPartOfMultiGridItem = false;
                    continue;
                }

                if (allMultiGridsIDs.Contains(currentGrid.Id))
                {
                    isCurrentGridPartOfMultiGridItem = true;
                }

                if (isCurrentGridPartOfMultiGridItem)
                {
                    ElementId        multisegGridID = MultiSegmentGrid.GetMultiSegementGridId(currentGrid);
                    MultiSegmentGrid multiSegGrid   = uidoc.Document.GetElement(multisegGridID) as MultiSegmentGrid;
                    if (multiSegGrid == null)
                    {
                        continue;
                    }

                    foreach (ElementId currentMultiSegGridMemberID in multiSegGrid.GetGridIds())
                    {
                        Grid currentMultiSegGrid = uidoc.Document.GetElement(currentMultiSegGridMemberID) as Grid;
                        if (currentMultiSegGrid == null)
                        {
                            continue;
                        }
                        currentMultiSegGrid.Name = currentGridInfo.newName;
                    }

                    multiSegGrid.Name = currentGridInfo.newName;
                }
                else
                {
                    if (currentGrid == null)
                    {
                        continue;
                    }
                    currentGrid.Name = currentGridInfo.newName;
                }
            }
        }