Bentley ORD(openroads designer) 二次开发(BIM)第七节 在ORD SDK中调用MicroStation SDK

文章介绍了如何利用ORDSDK读取道路信息和MicroStationSDK创建三维模型,具体展示了构建程序框架、创建DTM、创建Alignment,以及如何通过SDK接口绘制沿路线两侧的方柱。通过结合两种SDK,实现了自定义工程构造的功能,如绘制方柱,为实际工程开发提供了参考。
摘要由CSDN通过智能技术生成

 以上章节和大家一起学习了ORD SDK的使用。我们对Geometry Model SDK和Linear Geometry SDK的使用有了比较深刻的了解。从课程刚开始的时候我们就通过学习,了解了ORD的开发是基于MicroStation的,ORD SDK的接口发布的时候也对MicroStation SDK也做了一次发布。这一章将以我们对ORD SDK知识的了解为基础,使用ORD SDK的接口读取道路几何信息、计算桩号,然后再使用MicroStation SDK 读取地形数据和计算投影点的位置,并创建一组方柱形状的Soild。

一、构建程序框架

  1. 我们先创建一个名称为“Lesson6”的Addin项目,并按照以上章节的方法配置好项目文件、程序入口及.bat、.mke等文件。
  2. 我们创建一个CommandTable.xml文件,注册“Lesson6 ADDSOILD”命令。并新建一个Keyin.cs文件,把“Lesson6 ADDSOILD”命令子节点和AddSoild静态函数绑定。
  3. 在ORD目录下的..\config\appl\文件夹中,创建并配置Lesson6.cfg文件。

二、创建DTM

使用Terrain->Create->From File菜单命令,选择group.dtm文件,创建数字地面模型。我们可以通过选择“Default-3D Views”和选择不同的“Display Styles”,来查看数字地面模型创建情况。

三、创建一条包含纵断面的Alignment

  1. 使用Geometry-> Horizontal-> Complex Geometry->Complex by PI菜单命令,创建一个复杂平面线元素。
  2. 创建完成DTM和Alignment以后效果如下图所示:

四、实现功能 

  1. 本章将实现一个简单的功能,首先我们需要选择一条路线,然后程序在路线左右两侧各60m,以20m为间距绘制方形的柱子,要求柱子的底部与所处地形的标高齐平。

五、创建方形的柱子           

这里创建方形的柱子需要调用MicroStation SDK的接口。

       首先要创建一个普通实体(SolidPrimitive),我们创建一个实体的先决条件必须要有几何描述。我们使用DgnBoxDetail去描述一个方柱,DgnBoxDetail的构造函数解释如下:DgnBoxDetail(baseOrigin, topOrigin, vectorX, vectorY, baseX, baseY, topX, topY, capped)。baseOrigin与topOrigin分别指的是底部与顶部的中心点的坐标,我们的方柱顶底部的坐标在XY上重合,在Z上相差一个柱高。vectorX与 vectorY是指的方柱的局部坐标系X,Y与世界坐标系的关系,我们设置它和世界坐标系的X,Y相同。baseX, baseY, topX, topY这四个值分别代表的方柱局部坐标系下的底部X,Y方向的边长和顶部X,Y方向的边长。capped我们设置为true,因为我们的方柱是一个封闭实体。

       构建好了DgnBoxDetail以后,我们需要使用SolidPrimitive的CreateDgnBox方法去创建一个SolidPrimitive对象。调用CreateDgnBox的时候把我们先前创建的DgnBoxDetail对象传入。

       获得创建好的SolidPrimitive对象以后,我们调用DraftingElementSchema的ToElement函数去生成一个Element。如果我们对MicroStation C++ SDK了解的话,就知道这里实际是转换成了一个EditElementHandle。我们把生成的Element加入DgnModel(调用AddToModel函数),这时方柱实体对象就加入到当前模型中了,并可在视图里显示。

代码如下:

     public static void BuildBoxSolidElement(DgnModel model, DPoint3d pos, double h)

           {

           DPoint3d baseOrigin = pos;

           DPoint3d topOrigin = pos;

           topOrigin.Z += h * UorPerMeter();

           double length = 2;

           DVector3d vectorX = new DVector3d(1, 0, 0);

           DVector3d vectorY = new DVector3d(0, 1, 0);

           double baseX = length * UorPerMeter();

           double baseY = length * UorPerMeter();

           double topX = length * UorPerMeter();

           double topY = length * UorPerMeter();

           bool capped = true;

           DgnBoxDetail box = new DgnBoxDetail(baseOrigin, topOrigin, vectorX, vectorY, baseX, baseY, topX, topY, capped);

           SolidPrimitive sp = SolidPrimitive.CreateDgnBox(box);

           Bentley.DgnPlatformNET.Elements.Element ee =

               Bentley.DgnPlatformNET.Elements.DraftingElementSchema.ToElement(model, sp, null);

           ee.AddToModel();

           return;

       } 

绘制单个方柱的结果如下所示:

六、计算方柱底部的坐标并绘制

       计算方柱底部坐标要经过两大步骤,通过路线的桩号及偏移距离去定位方柱的平面位置,通过方柱的平面位置计算数字地面模型上的投影点的坐标。这个坐标就是我们方柱底部的坐标。

  1. 求方柱平面位置首先要定位桩号,本示例以桩号为0处开始,以终点桩号(Alignment中Linear Geometry的Length属性)处结束。起始与终止桩号中间以20m为间隔去求整条路线的定位桩号。偏移位置的求法是通过调用Linear Geometry的GetPointAtDistanceOffset方法,直接获取定位点(定位点的Z为0)。GetPointAtDistanceOffset方法传入两个参数,第一个为定位桩号,第二个为偏移距离(路线左侧为负,道路右侧为正)。
  2. 求数字地面模型上的投影点的坐标。首先我们要通过ConsensusConnection去连接当前激活模型。通过此连接去获取当前的GeometricModel,GeometricModel中有一个TerrainSurfaces的集合,每个集合元素中都包含一个DTM对象。接着我们把上面求得的方柱平面位置,传入DTM对象的DrapePoint方法,从而获得方柱在平面上的坐标点与DTM的垂直投影点坐标。
  3. 我们把三维Model对象、我们求得的投影点三维坐标和柱高传入BuildBoxSolidElement函数去绘制沿路线两侧均布的方柱。

绘制结果如下所示:

       本章介绍了怎么利用ORD SDK获取路线信息,然后调用MicroStation SDK,两者结合去绘制两排沿路线布置的方柱。实际工程中有着大量的这种创建自定义工程构造的需求,比如创建挡墙、排水设置等。ORD SDK给大家提供了大量与路线工程相关的接口,MicroStation SDK作为基础平台的接口提供了大量三维建模的功能。这两种SDK的结合会让您在与路线相关专业的软件开发中更加自如。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值