【Revit二次开发】模型线 您所在的位置:网站首页 revit模型线画不到参照平面上 【Revit二次开发】模型线

【Revit二次开发】模型线

2023-06-30 06:46| 来源: 网络整理| 查看: 265

模型线 模型线示例

模型线

与之前的创建轴网和标高不同,没有特意去设置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; } } /// /// 创建模型线所在的草图平面. /// /// 草图平面的法向量 /// 草图平面上的任一点 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); } } /// /// 创建线性模型线 /// /// 模型线所在的草图平面 /// 模型线起点 /// 模型线终点 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); } } } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有