Revit二次开发——轴网

轴网

轴网

轴网由Element类派生的Grid类来表示。它包含所有的轴网属性和方法。继承的Name
属性用于检索轴网线的编号圈内容。
1.曲线(Curve )
Grid类Curve属性获取-一个对象, 该对象代表轴线几何形状。
●如果IsCurved属性返回true, 则Curve属性为Arc类对象。
●如果IsCurved属性返回false, 则Curve属性为Line类对象。

轴网对应的类是Grid,也继承自Element
1)轴网曲线(Curve)
通过Grid.Curve属性能够拿到轴网的曲线,如果Grid.IsCurved返回true,那么Curve将是一个弧形曲线Arc 对象,否则就是Line对象。

2)创建轴网
创建轴网的函数有两个重载,分别对应于直线和弧线轴网:
●Document. Create. NewGrid( Arcarc)
●Document. Create. NewGrid(Lineline)

2.创建轴网( Creating a Grid)
在Revit平台API中,有两个重载Document方法可用于创建新的轴网。采用不同的参
数使用代码3-39方法,可以创建曲线或直线轴网。
代码3- -39: NewGrid( )
public Grid NewGrid (Arc arc);
public Grid NewGrid (Line line );
注意:用于创建轴网的弧线或直线必须在水平面内。

注意:在Revit中,轴网创建时会以数字或字母顺序自动命名。
多个轴网可以使用Document.NewGrids( )方法同时进行创建,该方法采用CurveArray
参数。

using System;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;

namespace ElementBasicDemo
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    public class CreateGridCmd : IExternalCommand
    {
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            try
            {
                Document doc = commandData.Application.ActiveUIDocument.Document;
                // 弧线
                double arcRadius = 20000/304.8 ; // 弧线的内径长:英寸, 1 英寸 = 304.8mm
                double startAngle = 0;
                double endAngle = Math.PI / 4.0;
                Arc arc = Arc.Create(XYZ.Zero,arcRadius,startAngle,endAngle,XYZ.BasisX,XYZ.BasisY);

                // 直线
                XYZ startPoint = XYZ.BasisY * arcRadius;
                XYZ endPoint = XYZ.BasisX * arcRadius + startPoint;
                Line line = Line.CreateBound(startPoint, endPoint);

                using (Transaction transaction = new Transaction(doc))
                {
                    if (transaction.Start("轴网") == TransactionStatus.Started)
                    {
                        try
                        {
                            Grid arcGrid = CreateArcGrid(doc, arc, "弧形轴网");
                            Grid lineGrid = CreateLineGrid(doc, line, "线性轴网");
                            GridType gdtype = (GridType) doc.GetElement(lineGrid.GetTypeId());
                            SetGridType(gdtype);
                           
                            if (TransactionStatus.Committed != transaction.Commit())
                            {
                                TaskDialog.Show("失败", "轴网创建失败");
                            }
                        }
                        catch (Exception exception)
                        {
                            transaction.RollBack();
                            throw exception;
                        }
                    }
                }
                return Autodesk.Revit.UI.Result.Succeeded;
            }
            catch (Exception ex)
            {
                message = ex.Message;
                return Autodesk.Revit.UI.Result.Failed;
            }
        }

        private Grid CreateArcGrid(Document doc, Arc arc, string gridname)
        {
            Grid arcGrid = Grid.Create(doc, arc);
            arcGrid.Name = gridname;
            return arcGrid;
        }

        private Grid CreateLineGrid(Document doc, Line line, string gridname)
        {
            Grid lineGrid = Grid.Create(doc, line);
            lineGrid.Name = gridname;
            return lineGrid;
        }

        private GridType SetGridType(GridType gridType)
        {
            if (null != gridType)
            {
                gridType.get_Parameter(BuiltInParameter.GRID_CENTER_SEGMENT_STYLE).SetValueString("连续");
            }
            return gridType;
        }
    }
}
using (Transaction transaction = new Transaction(RevitDoc))
{
   transaction.Start("Create Grid");
   Grid grid = RevitDoc.Create.NewGrid(
      Line.CreateBound(new XYZ(0, 0, 0), new XYZ(10, 10, 0)));
   grid.Name = "BB";
   transaction.Commit();
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤影墨客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值