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;
        }
    }
}


点击我查看效果
参考资料

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值