Revit二次开发之轴网标注

Revit二次开发之轴网标注

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

namespace 标注轴网
{
    [Autodesk.Revit.Attributes.Transaction(TransactionMode.Manual)]
    public class Command:IExternalCommand
    {
        //X方向的向量
        public XYZ vectX = new XYZ(-1, 0, 0);
        public XYZ vectX2 = new XYZ(1, 0, 0);
        //Y方向的向量
        public XYZ vectY = new XYZ(0, 1, 0);
        public XYZ vectY2 = new XYZ(0, -1, 0);
        public Result Execute(ExternalCommandData externalCommandData,ref string message,ElementSet elementSet)
        {
            UIDocument uidoc = externalCommandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;
            Selection selection = uidoc.Selection;
            View view = uidoc.ActiveView;
            List<Grid> gridsX = new List<Grid>();//存放X方向的轴线
            List<Grid> gridsY = new List<Grid>();//存放Y反向的轴线
           ReferenceArray reffX=new ReferenceArray();//存放X方向轴线的引用
           ReferenceArray reffY=new ReferenceArray();//存放Y方向的轴线的引用
            Line xLine = null;//X方向的标注线
            Line yLine = null;//Y方向的标注线
            FilteredElementCollector coll = new FilteredElementCollector(doc);
            coll.OfClass(typeof(Grid)).OfCategory(BuiltInCategory.OST_Grids);
            //遍历所有的轴线,进行XY方向的分类
            foreach(Grid gr in coll)
            {
                Grid temp = gr as Grid;
                Line line = temp.Curve as Line;
                if(line.Direction.IsAlmostEqualTo(vectX)||line.Direction.IsAlmostEqualTo(vectX2))
                {
                    gridsX.Add(temp);
                    reffX.Append(new Reference(temp));
                }
                if(line.Direction.IsAlmostEqualTo(vectY)|| line.Direction.IsAlmostEqualTo(vectY2))
                {
                    gridsY.Add(temp);
                    reffY.Append(new Reference(temp));
                }
            }
            if(gridsX.Count>=2)
            {
                xLine = Line.CreateBound((gridsX[0].Curve as Line).Origin, (gridsX[1].Curve as Line).Origin);
            }
            if(gridsY.Count>=2)
            {
                yLine = Line.CreateBound((gridsY[0].Curve as Line).Origin, (gridsY[1].Curve as Line).Origin);
            }

            //开启事务
            using (Transaction ts = new Transaction(doc))
            {
                ts.Start("dimension");
                try
                {
                   
                    doc.Create.NewDimension(view, xLine, reffX);
                    doc.Create.NewDimension(view, yLine, reffY);
                }
                catch(Exception)
                {
                   
                }
                ts.Commit();

            }
                return Result.Succeeded;
        }
    }
}


点击我查看效果
参考资料

发布了65 篇原创文章 · 获赞 8 · 访问量 3233

猜你喜欢

转载自blog.csdn.net/yasenRK/article/details/103940615