【Revit二次开发】模型线

模型线

模型线

与之前的创建轴网和标高不同,没有特意去设置Revit参数。另外,在创建之前要首先创建一个成为草图平面的图元来承载模型线。因为在revit中普通的模型线图元是基于面的。综合我们已经创建的标高、轴网和模型线,在建立这些模型时,都需要一些几何信息,如点,线,面等。对于几何信息在Revit API中的相关类将会在最后一节中介绍,这些类的操作都支持中学的几何知识,主要涉及到三维正交坐标系,极坐标系,线段、弧的表达,点、线、面关系等等。

在Revit二次开发中,模型线是Revit中最基本的几何元素之一,用于表示Revit构件的几何形状和位置。可以使用Revit API中提供的类来创建、修改和删除模型线。

模型线(ModelLine):在Revit中,模型线是由起点和终点坐标定义的直线。可以使用ModelLine类来表示一个模型线,如下所示:

XYZ startPoint = new XYZ(0, 0, 0);
XYZ endPoint = new XYZ(10, 0, 0);
Line line = Line.CreateBound(startPoint, endPoint);
ModelLine modelLine = doc.Create.NewModelCurve(line, SketchPlane.Create(doc, plane));

其中,startPoint和endPoint是模型线的起点和终点坐标,line是模型线的线段对象,plane是模型线所在的平面。

模型线的属性:模型线有许多属性,例如线型、颜色、权重等。可以使用ModelLine类的属性来获取或设置模型线的属性值。例如,可以使用ModelLine.LineStyle属性来获取或设置模型线的线型,使用ModelLine.Color属性来获取或设置模型线的颜色。

将模型线添加到文档中:创建模型线后,您需要将它们添加到文档中。可以使用Document类的方法来添加模型线或其他几何元素。例如,您可以使用doc.Create.NewModelCurve方法将模型线添加到文档中。

总的来说,模型线是Revit二次开发中最基本的几何元素之一,它可以用于定义Revit构件的几何形状和位置。可以使用Revit API中提供的类和方法来创建、修改和删除模型线,从而实现对Revit模型的几何操作和修改。

示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

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

namespace ElementBasicDemo
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    public class CreateSimpleModelLineCmd : IExternalCommand
    {
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            try
            {
                Document doc = commandData.Application.ActiveUIDocument.Document;


                using (Transaction transaction = new Transaction(doc))
                {
                    if (transaction.Start("简单模型线") == TransactionStatus.Started)
                    {
                        try
                        {
                            SketchPlane sketch = CreateSketchPlane(doc, XYZ.BasisZ, XYZ.Zero);
                            CreateArc(sketch, XYZ.BasisX, XYZ.BasisY, XYZ.BasisX + XYZ.BasisY);
                            CreateLine(sketch, XYZ.BasisX, XYZ.BasisY);

                            if (TransactionStatus.Committed != transaction.Commit())
                            {
                                TaskDialog.Show("简单模型线", "事务提交失败");
                            }
                            else
                            {
                                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;
            }
        }

        /// <summary>
        /// 创建模型线所在的草图平面.
        /// </summary>
        /// <param name="normal">草图平面的法向量</param>
        /// <param name="origin">草图平面上的任一点</param>
        private SketchPlane CreateSketchPlane(Document doc, XYZ normal, XYZ origin)
        {
            try
            {
                //几何平面
                Plane geometryPlane = Plane.CreateByNormalAndOrigin(normal, origin);
                if (null == geometryPlane)
                {
                    throw new Exception("创建平面失败.");
                }
                // 由几何平面生成草图平面
                SketchPlane plane = SketchPlane.Create(doc, geometryPlane);
                if (null == plane)
                {
                    throw new Exception("创建草图平面失败.");
                }

                return plane;
            }
            catch (Exception ex)
            {
                throw new Exception("无法创建草图平面,出错原因: " + ex.Message);
            }
        }


        /// <summary>
        /// 创建线性模型线 
        /// </summary>
        /// <param name="workPlane">模型线所在的草图平面</param>
        /// <param name="startPoint">模型线起点</param>
        /// <param name="endPoint">模型线终点</param>
        public ModelLine CreateLine(SketchPlane workPlane, XYZ startPoint, XYZ endPoint)
        {
            try
            {
                Document doc = workPlane.Document;
                if (startPoint.Equals(endPoint))
                {
                    throw new ArgumentException("起点与重点重合");
                }

                // create geometry line
                Line geometryLine = Line.CreateBound(startPoint, endPoint);
                if (null == geometryLine)
                {
                    throw new Exception("创建几何线失败");
                }
                ModelLine line = doc.Create.NewModelCurve(geometryLine, workPlane) as ModelLine;
                if (null == line)
                {
                    throw new Exception("创建模型线失败.");
                }
                return line;
            }
            catch (Exception ex)
            {
                throw new Exception("无法创建模型线,出错原因: " + ex.Message);
            }

        }


        public ModelArc CreateArc(SketchPlane workPlane, XYZ startPoint, XYZ endPoint, XYZ thirdPoint)
        {
            try
            {
                Document doc = workPlane.Document;
                if (startPoint.Equals(endPoint) || startPoint.Equals(thirdPoint)
                    || endPoint.Equals(thirdPoint))
                {
                    throw new ArgumentException("起点,重点和辅助点三点存在重合.");
                }

                Arc geometryArc = Arc.Create(startPoint, endPoint, thirdPoint);
                if (null == geometryArc)
                {
                    throw new Exception("创建弧失败.");
                }
                ModelArc arc = doc.Create.NewModelCurve(geometryArc, workPlane) as ModelArc;
                if (null == arc)
                {
                    throw new Exception("创建模型线(弧)失败.");
                }
                return arc;

            }
            catch (Exception ex)
            {
                throw new Exception("无法创建模型线(弧),出错原因: " + ex.Message);
            }
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孤影墨客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值