예제 #1
0
        //get the total length of the multisegment grid providing one of the grids of the multiseg grid
        private double getMultiGridTotalLength(Document doc, Grid targetGrid)
        {
            MultiSegmentGrid currentMultiSegGrid = doc.GetElement(MultiSegmentGrid.GetMultiSegementGridId(targetGrid)) as MultiSegmentGrid;
            double           totalLength         = 0;

            foreach (ElementId eID in currentMultiSegGrid.GetGridIds())
            {
                Grid currentGrid = doc.GetElement(eID) as Grid;
                totalLength += getTheoricalLengthOfTheGrid(currentGrid);
            }
            return(totalLength);
        }
예제 #2
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);
        }
예제 #3
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;
                }
            }
        }
예제 #4
0
        private void doTheRenumberingOrLettering(Document doc, IList <Grid> targetListOfGrids, IList <Grid> targetListOfGridsFromMultiSegGrids, IList <ElementId> allMultiGridsIDs, bool isNumber)
        {
            Grid prevGrid      = null;
            bool prevGridIsSub = false;
            int  counter       = 0;
            int  subCounter    = 1;
            char letter        = 'A';
            char subLetter     = 'a';


            double currentGridLength = 0;
            double prevGridLength    = 0;

            foreach (Grid currentGrid in targetListOfGrids)
            {
                if (targetListOfGridsFromMultiSegGrids.Contains(currentGrid))
                {
                    MultiSegmentGrid currentMultiSegGrid = doc.GetElement(MultiSegmentGrid.GetMultiSegementGridId(currentGrid)) as MultiSegmentGrid;
                    currentGridLength = getMultiGridLengthSameOrientationMainGrid(doc, currentMultiSegGrid, currentGrid);

                    if (prevGrid != null)
                    {
                        if (allMultiGridsIDs.Contains(MultiSegmentGrid.GetMultiSegementGridId(prevGrid)))
                        {
                            MultiSegmentGrid PrevMultiSegGrid = doc.GetElement(MultiSegmentGrid.GetMultiSegementGridId(prevGrid)) as MultiSegmentGrid;
                            prevGridLength = getMultiGridLengthSameOrientationMainGrid(doc, PrevMultiSegGrid, prevGrid);
                        }
                        else
                        {
                            prevGridLength = getTheoricalLengthOfTheGrid(prevGrid);
                        }
                        if (canUseSubNumering)
                        {
                            if (isBiggerEqualSmaller(prevGridLength, currentGridLength) == "isEqual")
                            {
                                if (prevGridIsSub == false)
                                {
                                    if (isNumber)
                                    {
                                        increaseWholeNumber(doc, ref currentMultiSegGrid, ref counter, ref subCounter, ref prevGridIsSub);
                                    }
                                    else
                                    {
                                        increaseWholeLetter(doc, ref currentMultiSegGrid, ref letter, ref subLetter, ref prevGridIsSub);
                                    }
                                }
                                if (prevGridIsSub == true)
                                {
                                    if (isNumber)
                                    {
                                        increaseSubNumber(doc, ref currentMultiSegGrid, ref prevGrid, ref subCounter, ref prevGridIsSub);
                                    }
                                    else
                                    {
                                        increaseSubLetter(doc, ref currentMultiSegGrid, ref prevGrid, ref subLetter, ref prevGridIsSub);
                                    }
                                }
                            }
                            if (isBiggerEqualSmaller(prevGridLength, currentGridLength) == "isBigger")
                            {
                                if (isNumber)
                                {
                                    increaseSubNumber(doc, ref currentMultiSegGrid, ref prevGrid, ref subCounter, ref prevGridIsSub);
                                }
                                else
                                {
                                    increaseSubLetter(doc, ref currentMultiSegGrid, ref prevGrid, ref subLetter, ref prevGridIsSub);
                                }
                            }
                            if (isBiggerEqualSmaller(prevGridLength, currentGridLength) == "isSmaller")
                            {
                                if (isNumber)
                                {
                                    increaseWholeNumber(doc, ref currentMultiSegGrid, ref counter, ref subCounter, ref prevGridIsSub);
                                }
                                else
                                {
                                    increaseWholeLetter(doc, ref currentMultiSegGrid, ref letter, ref subLetter, ref prevGridIsSub);
                                }
                            }
                        }
                        else
                        {
                            if (isNumber)
                            {
                                increaseWholeNumber(doc, ref currentMultiSegGrid, ref counter, ref subCounter, ref prevGridIsSub);
                            }
                            else
                            {
                                increaseWholeLetter(doc, ref currentMultiSegGrid, ref letter, ref subLetter, ref prevGridIsSub);
                            }
                        }
                    }
                    else
                    {
                        if (isNumber)
                        {
                            increaseWholeNumber(doc, ref currentMultiSegGrid, ref counter, ref subCounter, ref prevGridIsSub);
                        }
                        else
                        {
                            increaseWholeLetter(doc, ref currentMultiSegGrid, ref letter, ref subLetter, ref prevGridIsSub);
                        }
                    }
                }
                else
                {
                    currentGridLength = getTheoricalLengthOfTheGrid(currentGrid);

                    if (prevGrid != null)
                    {
                        if (allMultiGridsIDs.Contains(MultiSegmentGrid.GetMultiSegementGridId(prevGrid)))
                        {
                            MultiSegmentGrid PrevMultiSegGrid = doc.GetElement(MultiSegmentGrid.GetMultiSegementGridId(prevGrid)) as MultiSegmentGrid;
                            prevGridLength = getMultiGridLengthSameOrientationMainGrid(doc, PrevMultiSegGrid, prevGrid);
                        }
                        else
                        {
                            prevGridLength = getTheoricalLengthOfTheGrid(prevGrid);
                        }
                        if (canUseSubNumering)
                        {
                            if (isBiggerEqualSmaller(prevGridLength, currentGridLength) == "isEqual")
                            {
                                if (prevGridIsSub == false)
                                {
                                    if (isNumber)
                                    {
                                        currentGrid.Name = increaseWholeNumber(doc, currentGrid, ref counter, ref subCounter, ref prevGridIsSub);
                                    }
                                    else
                                    {
                                        currentGrid.Name = increaseWholeLetter(doc, currentGrid, ref letter, ref subLetter, ref prevGridIsSub);
                                    }
                                }
                                if (prevGridIsSub == true)
                                {
                                    if (isNumber)
                                    {
                                        currentGrid.Name = increaseSubNumber(doc, currentGrid, ref prevGrid, ref subCounter, ref prevGridIsSub);
                                    }
                                    else
                                    {
                                        currentGrid.Name = increaseSubLetter(doc, currentGrid, ref prevGrid, ref subLetter, ref prevGridIsSub);
                                    }
                                }
                            }
                            if (isBiggerEqualSmaller(prevGridLength, currentGridLength) == "isBigger")
                            {
                                if (isNumber)
                                {
                                    currentGrid.Name = increaseSubNumber(doc, currentGrid, ref prevGrid, ref subCounter, ref prevGridIsSub);
                                }
                                else
                                {
                                    currentGrid.Name = increaseSubLetter(doc, currentGrid, ref prevGrid, ref subLetter, ref prevGridIsSub);
                                }
                            }
                            if (isBiggerEqualSmaller(prevGridLength, currentGridLength) == "isSmaller")
                            {
                                if (isNumber)
                                {
                                    currentGrid.Name = increaseWholeNumber(doc, currentGrid, ref counter, ref subCounter, ref prevGridIsSub);
                                }
                                else
                                {
                                    currentGrid.Name = increaseWholeLetter(doc, currentGrid, ref letter, ref subLetter, ref prevGridIsSub);
                                }
                            }
                        }
                        else
                        {
                            if (isNumber)
                            {
                                currentGrid.Name = increaseWholeNumber(doc, currentGrid, ref counter, ref subCounter, ref prevGridIsSub);
                            }
                            else
                            {
                                currentGrid.Name = increaseWholeLetter(doc, currentGrid, ref letter, ref subLetter, ref prevGridIsSub);
                            }
                        }
                    }
                    else
                    {
                        if (isNumber)
                        {
                            currentGrid.Name = increaseWholeNumber(doc, currentGrid, ref counter, ref subCounter, ref prevGridIsSub);
                        }
                        else
                        {
                            currentGrid.Name = increaseWholeLetter(doc, currentGrid, ref letter, ref subLetter, ref prevGridIsSub);
                        }
                    }
                }
                prevGrid = currentGrid;
            }
        }
예제 #5
0
        private void doTheRenumberingOrLettering(Document doc, IList <GridInfo> targetListOfGrids, IList <ElementId> allMultiGridsIDs, bool isNumber)
        {
            Grid prevGrid      = null;
            bool prevGridIsSub = false;
            int  counter       = 0;
            int  subCounter    = 1;
            char letter        = 'A';
            char subLetter     = 'a';

            WholeName = "A";


            double currentGridLength = 0;
            double prevGridLength    = 0;

            IList <ElementId> allMultiGridSubGridsIDs = new List <ElementId>();

            foreach (ElementId currentMultiGridId in allMultiGridsIDs)
            {
                allMultiGridSubGridsIDs = allMultiGridSubGridsIDs.Union((uidoc.Document.GetElement(currentMultiGridId) as MultiSegmentGrid).GetGridIds()).ToList();
            }

            foreach (GridInfo currentGridInfo in targetListOfGrids)
            {
                Grid currentGrid = null;

                currentGrid = uidoc.Document.GetElement(new ElementId(currentGridInfo.Id)) as Grid;

                if (allMultiGridSubGridsIDs.Contains(new ElementId(currentGridInfo.Id)))
                {
                    MultiSegmentGrid currentMultiSegGrid = doc.GetElement(MultiSegmentGrid.GetMultiSegementGridId(currentGrid)) as MultiSegmentGrid;

                    currentGridLength = getMultiGridLengthSameOrientationMainGrid(doc, currentMultiSegGrid, currentGrid);
                }
                else
                {
                    currentGridLength = getTheoricalLengthOfTheGrid(currentGrid);
                }

                if (prevGrid != null)
                {
                    if (allMultiGridsIDs.Contains(MultiSegmentGrid.GetMultiSegementGridId(prevGrid)))
                    {
                        MultiSegmentGrid PrevMultiSegGrid = doc.GetElement(MultiSegmentGrid.GetMultiSegementGridId(prevGrid)) as MultiSegmentGrid;
                        prevGridLength = getMultiGridLengthSameOrientationMainGrid(doc, PrevMultiSegGrid, prevGrid);
                    }
                    else
                    {
                        prevGridLength = getTheoricalLengthOfTheGrid(prevGrid);
                    }
                    GridInfo prevGridInfo = targetListOfGrids.Where(g => g.Id == prevGrid.Id.IntegerValue).FirstOrDefault();
                    if (canUseSubNumering)
                    {
                        if (CompareGridLength(prevGridLength, currentGridLength) == GridLength.Equal)
                        {
                            if (prevGridIsSub == false)
                            {
                                if (isNumber)
                                {
                                    currentGridInfo.newName = increaseWholeNumber(doc, currentGridInfo, ref counter, ref subCounter, ref prevGridIsSub);
                                }
                                else
                                {
                                    currentGridInfo.newName = increaseWholeLetter(doc, currentGridInfo, ref letter, ref subLetter, ref prevGridIsSub);
                                }
                            }
                            if (prevGridIsSub == true)
                            {
                                if (isNumber)
                                {
                                    currentGridInfo.newName = increaseSubNumber(doc, currentGridInfo, ref prevGridInfo, ref subCounter, ref prevGridIsSub);
                                }
                                else
                                {
                                    currentGridInfo.newName = increaseSubLetter(doc, currentGridInfo, ref prevGridInfo, ref subLetter, ref prevGridIsSub);
                                }
                            }
                        }
                        if (CompareGridLength(prevGridLength, currentGridLength) == GridLength.Bigger)
                        {
                            if (isNumber)
                            {
                                currentGridInfo.newName = increaseSubNumber(doc, currentGridInfo, ref prevGridInfo, ref subCounter, ref prevGridIsSub);
                            }
                            else
                            {
                                currentGridInfo.newName = increaseSubLetter(doc, currentGridInfo, ref prevGridInfo, ref subLetter, ref prevGridIsSub);
                            }
                        }
                        if (CompareGridLength(prevGridLength, currentGridLength) == GridLength.Smaller)
                        {
                            if (isNumber)
                            {
                                currentGridInfo.newName = increaseWholeNumber(doc, currentGridInfo, ref counter, ref subCounter, ref prevGridIsSub);
                            }
                            else
                            {
                                currentGridInfo.newName = increaseWholeLetter(doc, currentGridInfo, ref letter, ref subLetter, ref prevGridIsSub);
                            }
                        }
                    }
                    else
                    {
                        if (isNumber)
                        {
                            currentGridInfo.newName = increaseWholeNumber(doc, currentGridInfo, ref counter, ref subCounter, ref prevGridIsSub);
                        }
                        else
                        {
                            currentGridInfo.newName = increaseWholeLetter(doc, currentGridInfo, ref letter, ref subLetter, ref prevGridIsSub);
                        }
                    }
                }
                else
                {
                    if (isNumber)
                    {
                        currentGridInfo.newName = increaseWholeNumber(doc, currentGridInfo, ref counter, ref subCounter, ref prevGridIsSub);
                    }
                    else
                    {
                        currentGridInfo.newName = increaseWholeLetter(doc, currentGridInfo, ref letter, ref subLetter, ref prevGridIsSub);
                    }
                }
                prevGrid = currentGrid;
            }
        }