Revit二次開發——自動標註軸網

 

引言:在自動標註大主題下,自動標註軸網;利弊等望讀者自行改進(僅限平面視圖)

開始:

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
 

namespace AutoDimention
{
    [TransactionAttribute(TransactionMode.Manual)]
    public class AutoDimentionGrid_Cmd : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;

            FilteredElementCollector collectorGrid = new FilteredElementCollector(doc);
            collectorGrid.OfClass(typeof(Grid)).OfCategory(BuiltInCategory.OST_Grids);
            IList<Element> listGrids = collectorGrid.ToElements().ToList();
            List<Line> ListGridY = new List<Line>();
            List<Line> ListGridX = new List<Line>();
            Line lineGridX = null;
            Line lineGridY = null;
            XYZ Xvec = new XYZ(-1, 0, 0);//*-X單位向量
            XYZ Xvec2 = new XYZ(1, 0, 0);//*X單位向量
            XYZ Yvec = new XYZ(0, -1, 0);//*-Y單位向量
            XYZ Yvec2 = new XYZ(0, 1, 0);//*Y單位向量
            ReferenceArray refArryGridY = new ReferenceArray();
            ReferenceArray refArryGridX = new ReferenceArray();

            foreach (Element TemElement in listGrids)
            {
                Grid grid = TemElement as Grid;
                Line line = grid.Curve as Line;
                if (line.Direction.IsAlmostEqualTo(Yvec) || line.Direction.IsAlmostEqualTo(Yvec2))
                {
                    ListGridY.Add(line);
                    refArryGridY.Append(new Reference(grid));
                }
                if (line.Direction.IsAlmostEqualTo(Xvec) || line.Direction.IsAlmostEqualTo(Xvec2))
                {
                    ListGridX.Add(line);
                    refArryGridX.Append(new Reference(grid));
                }

            }
            if (ListGridX.Count >= 2)
            {
                 lineGridX = Line.CreateBound(ListGridX[0].Origin, ListGridX[1].Origin);

            }
            if (ListGridY.Count >= 2)
            {
                lineGridY = Line.CreateBound(ListGridY[0].Origin, ListGridY[1].Origin);
            }
            using (Transaction transaction = new Transaction(doc, "AutoDimenionGrid"))
            {
                try
                {
                    transaction.Start();
                    doc.Create.NewDimension(doc.ActiveView, lineGridY, refArryGridY);
                    doc.Create.NewDimension(doc.ActiveView, lineGridX, refArryGridX);
                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Commit();
                }
            }
 
            return Result.Succeeded;
        }
    }
}

技術羣:1090519856

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章