基于C#的Addin方式的MicroStation二次开发 中级教程[2] ---元素Element

元素Element 在MS的开发中是一个重要的概念,
  1. 从MS程序角度讲,Element 是DGN(MS的文件)文件中的一个基本设计元素,在MS中一个Element代表一个绘制元素例如矩形图形或者字符图形,又或者代表一组复杂的绘制图形,另外也有一些非绘制元素也是一个Element,比如Tag数据等。所以可以认为DNG文件是由多个model组成,而model是由多个Element组成。(关于什么事model,可参考MS的使用教程)
  2. 从开发语言的角度讲Element是一个类,通过它我们可以操作和修改DGN文件中的图形元素等,如果你熟悉MDL开发的话一个Element对象类似于MSElementDescr。

 理解的什么是Element后,我们看看Element的主要属性和函数:
 
  1. 以Is开头的只读属性,主要是用于确定元素的类型,例如IsConeElement等,另外还有一个Type的只读属性,也是确定元素的类型,只是返回的是类型的枚举。
  2. 以As开头的转换函数,当你通过Is函数确定了元素的类型后,便可以使用As函数转换成该类型,然后操作该类型。(一般Is属性和As函数是组合使用的

 
在开发过程中我们经常在创建、扫描model,选择等操作中使用,下面,我结合开发过程讲一下常用的模式
 
创建元素
在“快速入门”教程中,我们已经创建过几何元素了,创建元素的函数位于
Bentley.Interop.MicroStationDGN.Application类中以Creat打头。
需要注意的是创建出的Element如果没有调用保存函数的话,只是在内存中,不会存储到DGN文件中。
一个典型的创建流程如下:
            Bentley.Interop.MicroStationDGN.Application app = Utilities.ComApp;

Point3d p1 = app.Point3dFromXYZ(0,0,0);//创建点
Point3d p2 = app.Point3dFromXYZ(0, 100, 0);//创建点
LineElement l = app.CreateLineElement2(null, ref p1, ref p2);//创建一个直线
app.ActiveModelReference.AddElement(l);//把直线保存到DGN文件里

获取已有元素MicroStation为我们提供了多种的选择元素的方式,但最常用的有三种一是获取用户选择的元素集另外一种是通过fence选择,最后是扫描DGN文件。
  1. 获取用户选择集:用户通过MS界面提供的选择工具选择所需元素,然后你可以在你的程序中ActiveModelReference的GetSelectedElements方法获取当前选择集。
  2. 通过围栅选择,其实和获取选择集差不过,只不过是获取ActiveModelReference的Fence对象中的元素。
  3. 扫描DGN文件:ModelReference类已经提供了相应的扫描函数ElementEnumerator Scan(ElementScanCriteria ScanCriteria = null);

   一个扫描文件的典型用法:
Bentley.Interop.MicroStationDGN.ElementScanCriteria scanCriteria​ 
= new Bentley.Interop.MicroStationDGN.ElementScanCriteriaClass();

scanCriteria.ExcludeAllLevels();
scanCriteria.IncludeLevel(level);
Bentley.Interop.MicroStationDGN.ElementEnumerator elements = ActiveModelReference.Scan(esc);
Bentley.Interop.MicroStationDGN.Element[] elmts = elements.BuildArrayFromContents();
foreach (BIMDgn.Element elm in elmts)
{
..........
}
 
 

 
 
 
 
已邀请:

tumubaiyang

赞同来自:

期待后续更新

要回复问题请先登录注册