1、文件
1.1、文件
DgnDocument:磁盘上的dgn文件
DgnFile:装载到内存中的dgn文件就叫做DgnFile,实际上就是整个dgn文件
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是有可能相同的。
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();
生成的线段如下:
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框架
Geometry1NET:不依赖于Microstation的几何对象,如DMatrix3d、Dpoint3d、DTransform3d,这些东西只要进行几何处理就要用到,拿到其他平台也能用,不是Microstation所特有。
ECObjects:EC对象,如ECClass、ECSchema。
DgnPlatformNET:内存中dgn文件的读写操作。
DgnDisplayNET:把dgn文件显示到图形界面上去。
3、SDK 帮助文档
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部分为实心。
ParityRegion,UnionRegion
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();//添加到模型中去
}
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
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)对象模型
帮助文档所在位置:C:\Program Files\Bentley\MicroStation CONNECT Edition\MicroStation
Global Display:影响所有视图,打开Global Display,关闭某一图层,8个视图中的这个图层都会关闭。
View Display:在Global Display下某一图层是打开时,在View Display下关闭该图层,仅当前视图中的这一图层会关闭,而另外7个视图中的该图层是打开的 。
创建和删除集合元素
通用创建元素的方法—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)后变成智能实体。
使用键入命令的方式获取元素信息
键入命令:analyze element,查看元素信息,可以帮助开发者深入理解元素的存储格式。
使用方法:选中元素,在Key-in中输入analyze element
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:结束动态绘制
自定义属性
Linkage:在图形元素后面找了个空闲的区域,把属性挂上去的 (使用Attribute Data,在元素里)
XAttribute:元素和属性是一一对应的,在图形元素外,将属性和元素对应。 (在元素上)
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)