Microstation SDK主要对象及应用

1、文件

1.1、文件

DgnDocument:磁盘上的dgn文件
DgnFile:装载到内存中的dgn文件就叫做DgnFile,实际上就是整个dgn文件

Microstation SDK主要对象及应用_第1张图片
图片.png


Dictionary Model:字典模型,引用(例如:层表,各种样式定义,字体表,ECSchema)

一个文件含有一个或多个模型。

1.2、模型

DgnModel:一个dgn文件中有很多个Model,单个model就叫做DgnModel
DgnAttachment:被参考的模型,原始数据在被参考模型中,当前主模型中不存在具体的被参考的模型的数据,在主模型中需要存储一个元素(用来存储参考的文件名称,文件的位置,旋转角,缩放角)
同一个文件之间进行参考(内部参考),不同文件之间相互参考(外部参考)
DgnModel和DgnModelRef

1.3、元素

Element:在模型或者参考文件中的元素,如线,点
ElementAgenda:元素数组,它里面有很多数组操作。
Element、ElementRef和ElementId的区别
Element:把元素从dgn文件中拿出来,在另外一块内存中,可以对其进行修改,删除操作。
ElementRef:dgn文件最开始存储在磁盘上,Microstation打开dgn文件时,会把dgn加载到内存中,ElementRef就是dgn文件加载到内存之后,指向dgn文件加载到内存里,dgn文件中的元素的在内存中位置索引。ElementRef为只读的,不能对其中元素进行修改。
ElementId:添加到dgn文件之前没有ID,添加到dgn文件之后就会分配一个ElementId,在同一个dgn文件中,ElementId是唯一的,但是在两个不同dgn文件中,ElementId是有可能相同的。

Microstation SDK主要对象及应用_第2张图片
图片.png

1.4、资源

Levels:层
TextStyle:字体样式
DimensionStyle:标注样式
LineStyle:线样式
DisplayStyle:显示样式
Named Views

1.5、会话期

Session:Microstation从启动到结束的操作,翻译成会话期

1.6、事务

Transaction:一系列动作的集合,Undo和Redo
TransactionManage
参看https://blog.csdn.net/Scalzdp/article/details/7222496

1.7、基本几何对象

DPoint3d:三维空间点
Dpoint3d.Add(Dpoint3d origin,DVector3d vector,double scale)

            DPoint3d P0 = DPoint3d.Zero;//P0(0,0,0)
            DVector3d vec = DVector3d.FromXYZ(0,1*UorPerMas,0);//vec=(0,1,0)
            DPoint3d P1 = DPoint3d.Add(P0,vec,6);//P1=(0,6,0)
            DSegment3d seg = new DSegment3d(P0,P1);
            LineElement lineEle = new LineElement(dgnModel,null,seg);
            lineEle.AddToModel();

生成的线段如下:

Microstation SDK主要对象及应用_第3张图片
图片.png

DSegment3d:三维线段,起点和终点。
Dplane3d:三维空间平面面,由DPoint3d(空间点)和Dvector3d(平面法向量)组成
DRange3d:三维包围盒,一种是平行于世界坐标的包围盒,另一种是局部坐标的包围,AABB和OBB的包围盒。
参看 https://blog.csdn.net/qq_16775293/article/details/82801240
DEllipse3d:表达弧或者椭圆,(圆是椭圆的特殊情况)
Dvector3d:三维空间矢量
Dray3d:射线,一个起点和一个方向。
DMatrix3d:空间旋转矩阵,3×3矩阵,可以用来表达旋转和缩放功能
DTransform3d:空间变换矩阵。

2、C# SDK框架

Microstation SDK主要对象及应用_第4张图片
图片.png

Geometry1NET:不依赖于Microstation的几何对象,如DMatrix3d、Dpoint3d、DTransform3d,这些东西只要进行几何处理就要用到,拿到其他平台也能用,不是Microstation所特有。
ECObjects:EC对象,如ECClass、ECSchema。
DgnPlatformNET:内存中dgn文件的读写操作。
DgnDisplayNET:把dgn文件显示到图形界面上去。

3、SDK 帮助文档

Microstation SDK主要对象及应用_第5张图片
图片.png

MicrostationAPI.chm是C++的开发文档,其内容更全,C#可以参照这个,来查询没有公开的C#方法。

  • Bentley.GeometryNET.Structs.chm
  • BentleyGeometryNet.chm
  • DgnPlatformNet.chm
  • MSTNPlatformNET.chm
    这四个都是C#的帮助文档,其中Bentley.GeometryNET.Structs.chm、 BentleyGeometryNet.chm两个很像,其区别在于:
  • Bentley.GeometryNET.Structs.chm,是更基础的几何,如DMatrix3d、Dpoint3d
  • BentleyGeometryNet.chm,贴近Microstation的几何,如CurveVector
CurveVector curveVec=CurveVector.Create(CurveVector.BoundaryType.Outer);

public enum BoundaryType
{
None=0,//没有边界
Open=1,//封闭的轮廓,Open看着是封闭的,但是没有面积的概念。
Outer=2,//GroupHole的外部
Inner=3,//GroupHole的内部
ParityRegion=4,//两个图形相交,去掉相交部分
UnionRegion=5//两个图形相交,算上相交部分
}

对于GroupHole构件,Inner部分为空心,Outer部分为实心。


Microstation SDK主要对象及应用_第6张图片
图片.png

ParityRegion,UnionRegion


Microstation SDK主要对象及应用_第7张图片
图片.png
public static void LineDotNet(string unparsed)
{
DgnModel dgnModel=Session.Instance.GetActiveDgnModel();//
Dsegment3d segment=new Dsegment3d(0,0,10000,20000);//创建元素的几何,C#和C++的默认单位是分辨率单位,故此单位20000=2×10000(UOR)
LineElement myline=new LineElement(dgnModel,null,segment);//创建Microstation中的元素,在内存中,在视图中看不到
myLine.AddToModel();//添加到模型中去
}

Microstation SDK主要对象及应用_第8张图片
图片.png

Master Unit:主单位(MU)
Sub Unit:子单位(SU)
Positional Unit: (PU)=Unit of Resolution(UOR) 分辨率单位
C#和C++写程序的内部单位为分辨率单位,需要进行换算才能得到实际大小
VBA默认的内部单位是主单位
获取分辨率单位的方法
double UorPerMas = Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMaster;
上述代码改成

Dsegment3d segment=new Dsegment3d(0,0,1*UorPerMas,2*UorPerMas);

在使用Interop方法创建几何元素时,需要引用下面两个命名空间。

  • 添加引用Bentley.Interop.MicroStationDGN.dll
  • 引用命名空间
    using BIM=Bentley.Interop.MicroStationDGN;
    using BMI=Bentley.MstnPlatformNET.InteropServices;
  • VBA SDK帮助文档
    C:\Program Files\Bentley\MicroStation CONNECT Edition\MicroStation


    图片.png
public static void LineIntrop(string unparsed)
{
BIM.Application msApp=BMI.Utilities.comApp;//拿到Application对象
BIM.Point3d StartPt=BIM.msApp.Point3dZero();
BIM.Point3d enPt=msApp.Point3dFromXY(2,1);//VBA默认的单位是主单位,不需要做换算
BIM.LineElement myLine=msApp.CreateLineElement2(null,ref startPt,ref endPt);
msApp.ActiveModelReference.AddElement(LineElement); //添加到模型中去
}

VBA COM(Interop)对象模型

Microstation SDK主要对象及应用_第9张图片
图片.png

Microstation SDK主要对象及应用_第10张图片
图片.png

帮助文档所在位置:C:\Program Files\Bentley\MicroStation CONNECT Edition\MicroStation


Microstation SDK主要对象及应用_第11张图片
图片.png

Global Display:影响所有视图,打开Global Display,关闭某一图层,8个视图中的这个图层都会关闭。


Microstation SDK主要对象及应用_第12张图片
图片.png

View Display:在Global Display下某一图层是打开时,在View Display下关闭该图层,仅当前视图中的这一图层会关闭,而另外7个视图中的该图层是打开的 。


Microstation SDK主要对象及应用_第13张图片
图片.png
Microstation SDK主要对象及应用_第14张图片
图片.png

创建和删除集合元素
通用创建元素的方法—DraftingElementSchema::ToElement
CurvePrimitive:表示所有的二维几何线性元素,如Line、LineString、Shape
CurveVector:是CurvePrimitive的容器,如ComplexShape、ComplexLine
例如

CurvePrimitive curvePri = CurvePrimitive.CreateLineString(ptArr);
CurveVector curVec = CurveVector.Create(CurveVector.BoundaryType.Outer);
curVec.Add(curvePri);

SolidPrimitive:基本实体
DgnBoxDetail(长方体)/DgnConeDetail(圆台体)/DgnSphereDetail(球)
PolyfaceConstruction.GetClientMesh—>PolyfaceHeader

构造函数创建元素方法
LineElement (DSegment3d)、LineStringElement / ShapeElement (DPoint3d [ ])
ArcElement (DEllipse3d)、ComplexStringElement / ComplexShapeElement
BSplineSurfaceElement (MSBsplineSurface)
MeshHeaderElement
BrepCellHeaderElement (SolidKernelEntity)
CellHeaderElement

public static void ElementCreate(string unparsed)
{
DgnModel dgnModel=Session.Instance.GetActiveDgnModel();
ModelInfo modelInfo=dgnModel.GetModelInfo();
Double uorPerMe=modelInfo.UorPerMeter;
Dsegement3d segment3d=new Dsegment3d(0,0,0,1*uorPerMe,0);
LineElement lineEle=new LineElment(dgnModel,null,segment);
LineEle.AddToModel();
}

添加到模型中/从模型中删除
Element.AddToModel();
Element.DeleteFromModel();

CE版基本实体、参数化实体和智能实体的转化关系
基本实体经倒角,剪切,布尔运算等操作后,会变成Parametric实体。
参数化实体经打散(Drop Element)(勾选Application Element)后变成智能实体。

Microstation SDK主要对象及应用_第15张图片
图片.png

使用键入命令的方式获取元素信息
键入命令:analyze element,查看元素信息,可以帮助开发者深入理解元素的存储格式。
使用方法:选中元素,在Key-in中输入analyze element
Microstation SDK主要对象及应用_第16张图片
图片.png

Microstation SDK主要对象及应用_第17张图片
图片.png

Microstation中的单元:
Normal Cell:普通单元
Shared Cell(SharedCell Definition/SharedCell Instance):共享单元
Parametric Cell:参数化单元

MicroStation中的命令框架
DgnTool:
DgnViewTool:视图类命令,对视图缩放,旋转,很少用,一般用系统的视图工具。
DgnPrimitiveTool:放置类命令,如画一条线,放置单元,第一个操作就是选一个点。
DgnELementSetTool:修改和维护元素的类,其第一个操作就是选择元素。
DgnRegionElementTool:对封闭类元素的操作。
ElementGraphicsTool:对复杂三维实体的操作,如对两个SmartSolid进行布尔运算。
LocateSubEntityTool:针对SmartSolid,如先选一个实体,再选这个实体的一条边或一个面的功能。
OnRestartTool:重启
ExitTool:关闭
OnDataButton:按下左键时触发的事件
OnResetButton:按下右键时触发的事件
BeginDynamic:启动动态绘制
EndDynamic:结束动态绘制

Microstation SDK主要对象及应用_第18张图片

自定义属性
Linkage:在图形元素后面找了个空闲的区域,把属性挂上去的 (使用Attribute Data,在元素里)
XAttribute:元素和属性是一一对应的,在图形元素外,将属性和元素对应。 (在元素上)

Microstation SDK主要对象及应用_第19张图片
图片.png

Ms V8i中的二维元素 Element 简单元素(S)和复杂元素(C)
1、Line (S)
2、LineString(S)
3、Shape(S)两个重要的属性:(1)Fill (2)Area--Pattern
4、Ellipse (S)
5、Arc (S)
6、Curve(S)
7、BsplineCurve (C)
8、ComplexChain (C)
9、ComplexShape (C)
10、MultiLine (S)
11、Text(S) EDF(Enter Data Field),Field
支持三种字体:RSC、TTF、SHX
12、TextNode (C)
13、Dimension (S)
14、NormalCell (C) /SharedCell Definition (C) /SharedCell Instance (S) ----GroupHole
类型:Graphic,point
15、Pattern (C) (S)
16、Tag (S)

Simple Element和Complex Element
MSElement (Simple Element)
MSElementDescr(Complex Element/Simple Element/Element Set)

你可能感兴趣的:(Microstation SDK主要对象及应用)