无论是基于什么平台做软件的二次开发,除了需要掌握基本的编程语言语法以及SDK(Software Development Kit,软件开发包)中的API(Application Program Interface,应用程序接口)外,对该软件的基本概念都需要有一个正确而清晰的了解。MicroStation软件从其前身IGDS(Interactive Graphics Design System,交互式图形设计系统)继承而来,又发展至今,至少有五六十年的历程了,其基本概念有的也在不断演化中。
另外,熟练掌握软件的使用也非常有助于软件的二次开发工作。比如开发文档中的某些函数的参数描述得不一定非常详细,那么,我们可以通过在软件界面中操作该函数对应的工具来了解这些参数的具体含义。对于有些功能可能找不到对应的API,那么也可以通过向软件发送一个键入命令来实现自动化之目的。这时候就需要我们对软件如何录制宏,如果从宏里面找到对应的后台键入命令有了解。
本章内容就是围绕这两个方面来展开的。

基础数据结构

DGN文件(File)是由一到多个模型(Model)组成的,每个模型又是由多个元素(Element)组成的,而元素可以挂接自定义属性,EC属性就是最常用的一种。

文件

MicroStation中所用到的文件类型主要有DGN、DGNLIB、DGNWS和CEL四类。DGN文件主要用来保存设计成果,我们创建的三维模型、二维切图等内容都要保存在一个或多个DGN文件中;DGNLIB文件主要用来保存一些设置,比如用来保存层库、文字样式、标注样式、显示样式、打印样式、材质定义等等信息,还可以用来保存Ribbon界面的定制信息;DGNWS与工作集(WorkSet)相关,用来保存一个工作集中的自定义属性、图纸索引(SheetIndex)等信息;CEL文件是我们常说的单元库,用来保存定制好的单元(Cell)。在MicroStation CE中,又新增了参数化单元,也是可以保存到CEL类别的文件中的。
【小知识】:需要在Windows的资源浏览器中打开文件扩展名选项才能看到这些文件类型。
Bentley软件程序设计基础 - 图1

DGN和CEL文件又分V7格式和V8格式。V7格式的文件用于MicroStation J及其之前的版本。V8格式的文件用于MicroStation V8及其之后的各个版本。虽然文件扩展名相同,但其内容存储完全不同。V7DGN和V8DGN可以相互转换,但V7CEL只能升级为V8CEL,V8CEL无法降级到V7CEL。
以上介绍的这四类文件,其内部格式其实都是一样的,都是符合微软的复合文件二进制格式CFBF(Compound File Binary Format)的,这种文件格式和老版的DOC和XLS是一样的存储机制。同时,MicroStation的这四种文件内部还引入了压缩机制,这就使得DGN文件没有更多的压缩空间。同时,一旦文件被破坏,将很难修复。我们偶尔会接到用户的报告,说是因为将DGN文件放到了一个共享的文件夹服务器上造成文件破坏的情况。这是由于MicroStation在工作过程中需要不断地将新添加的内容写入DGN文件中,而由于网络的不稳定有可能导致这种写入发生错误从而导致文件被破坏。故建议用户要么采用Bentley提供的ProjectWise或文档管理平台来集中管理文件,要么将DGN文件保存到本地。这样就不会造成文件破坏的情况发生。当然,每天的文件备份机制还是很有必要的。一旦出现文件破坏,可以从备份中找到前一天的设计内容。
【小知识】:为何采用ProjectWise就能避免文件因网络的不稳定而导致破坏呢?ProjectWise软件采用服务器和客户端的体系架构。当我们用MicroStation从ProjectWise服务器上获取一个文件后,ProjectWise会将该文件从服务器端复制一份到本地的一个临时文件夹下,然后让MicroStation从该临时文件夹下打开文件。这样就避免了MicroStation频繁地通过网络远程写文件了。只有在MicroStation退出该文件时,这个文件才会从本地复制到ProjectWise服务器上。
除以上四类文件外,MicroStation还会用到一种叫做资源的文件,其文件扩展名是RSC(即英文Resource的缩写)。在RSC文件中可以保存自定义线型、公式曲线定义、老式的字体等信息。

模型

一个DGN文件由一到多个模型(Model)组成。首先是一个隐藏的字典模型(V8i版中叫做NonModel,即非模型的模型),其中保存DGN文件中的一些公用的表或其他定义。比如,层表(LevelTable)、字体表(FontTable)、各种样式定义、共享单元定义(SharedCell Definition)、ECShema定义等等。接下来是一到多个普通的图形模型,这些图形模型由控制元素(Control Elements)和图形元素(Graphic Elements)组成。所以,我们可以将模型理解成元素的容器。而元素是组成DGN文件的最小的不可分割的单元。
Bentley软件程序设计基础 - 图2
模型从用途上分三种:设计模型(Design Model)、绘图模型(Drawing Model)和图纸模型(Sheet Model)。设计模型中主要用来保存我们设计的三维图形,对三维图形进行某个视角的切图后形成一个保存的视图(Saved View),将这个保存视图参考到绘图模型中进行标注,最后再进一步参考到图纸模型中供打印输出。这就是三类模型的最典型的应用场景。我们会在本章最后一节的“基本建模流程”中再详细描述。
下图从左到右就是设计模型、绘图模型和图纸模型。默认的视图背景色为黑色、灰色和白色。
Bentley软件程序设计基础 - 图3
模型从维度上分三维(3D)和二维(2D)两类。设计模型可以是三维的也可以是二维的,绘图模型只能是二维的,图纸模型一般来是二维的,但在某些特定场景(比如管道轴侧图)下也可以是三维的。
一个模型和另外一个模型是相互独立的,但我们也可以让它们之间发生关系。比如,将一个模型参考(Reference)或引入到另外一个模型中。参考仅仅是在当前模型中放入了一个指针,指向了被参考的模型。虽然能在当前模型中看到被参考模型中的元素,但不能直接去修改这些元素。这种参考功能在多专业设计和最终的总装中非常有用。参考可以有多层,可以自参考,可以对参考的内容执行剪切。参考可以是在同一个文件内的模型间的参考,也可以是在不同文件间的模型参考。
下面再介绍一个和模型相关的概念:单元(Cell)。单元是类似AutoCAD中的块(Block)的概念,也就是一个固定的图形组合。比如一个阀门会由固定的一些图形元素组成,我们以整体方式使用它,这类构件就非常适合创建成一个单元。一类单元要放入一个单元库(Cell Library),单元库文件扩展名为CEL,每个CEL文件中含有一到多个单元,每个单元就是单元库文件中的一个模型。故,如果想修改现有一个单元库中的单元定义的话,就可以直接用MS软件打开这个CEL文件,切换到相应的模型,直接修改基本图形即可。

元素

元素是DGN文件中最基本的组成单位。元素分图形元素和非图形元素。两类元素都有统一的一个元素头(Element Header)结构,如果是图形元素的话,在元素头后紧跟显示头(Display Header)。然后才是该元素的具体数据。在元素头中记录了该元素的基本类型(Type)、锁定状态、元素大小、元素ID、最后修改时间等信息。在显示头中记录了元素的显示优先级、线符(Symbology,即颜色、线宽和线型的统称)、元素范围等信息。
DGN中常用的元素类型列表在如下的枚举类型中定义:
public enum MSElementType
{
None = 0,
CellHeader = 2,
Line = 3,
LineString = 4,
GroupData = 5,
Shape = 6,
TextNode = 7,
DigSetData = 8,
DgnFileHeader = 9,
LevSym = 10,
Curve = 11,
ComplexString = 12,
ComplexShape = 14,
Ellipse = 15,
Arc = 16,
Text = 17,
Surfce = 18,
Solid = 19,
BsplinePole = 21,
PointString = 22,
Cone = 23,
BsplineSurface = 24,
BsurfBoundary = 25,
BsplineKnot = 26,
BsplineCurve = 27,
BsplineWeight = 28,
Dimension = 33,
SharedCellDefinition = 34,
SharedCellInstance = 35,
Multiline = 36,
Tag = 37,
DgnStoreComponent = 38,
DgnStoreHeader = 39,
Type44 = 44,
MicroStation = 66,
RasterHeader = 87,
RasterComponent = 88,
RasterReference = 90,
RasterReferenceComponent = 91,
RasterHierarchy = 92,
RasterHierarchyComponent = 93,
RasterFrame = 94,
TableEntry = 95,
Table = 96,
ViewGroup = 97,
View = 98,
LevelMask = 99,
ReferenceAttachment = 100,
MeshHeader = 105,
}
在这些元素类型中,有些元素被称为简单元素(Simple Element),如线(Line)、线串(LineString)、形(Shape)等;有些则被称为复杂元素(Complex Element),如复杂串(ComplexString)、复杂形(ComplexShape)、B样条曲线(BsplineCurve)、网格元素(Mesh)等。所谓简单元素就是靠一个基本元素单位就能表达的元素,而复杂元素则需要两个以上的连续多个元素单位才能表达。在DGN中每个元素单位最大只能含有128K的数据量,对于像含有数百万个顶点的网格元素,就需要许多连续的元素单位来表达它。
接下来我们结合下图来解释一下模型和元素。前面我们曾经提过,在DGN文件中最开头有一个字典模型,下图字典模型中保存了一个层表元素,其中含有两个层Default和MyLevel,它们的LevelId分别是1和5。接下来是两个共享单元的定义元素,分别是Tower和Door。共享单元定义是一个复杂元素,它会由多个元素单位组成。字典模型中的这些元素都不能从视图中直接看到。
Bentley软件程序设计基础 - 图4
在图形模型中,含有四个元素:一个线元素、一个形元素、两个共享单元元素(其实叫做共享单元实例元素更确切)。其中的线元素位于Default层,但在线元素中并没有保存这个Default字符串,而是保存了层的Id值1,根据这个1就能到字典模型中找到该层的其他所有信息,包括层名、层描述、层线符等等信息。共享单元元素Tower是一个简单元素,其中并不含有具体的几何元素,仅仅含有一个单元名称Tower和单元的插入点、旋转角度和缩放比例等基本信息。程序会根据这些信息到字典模型中搜索到该共享单元的定义,将定义中的几何执行相应的变换后显示在视图区中。从这些解释能容易地看出来为何叫字典模型了,就是供我们来查询更基础的信息的。这样设计的目的当然是为了节省存储空间和方便管理。
对于图形元素来说,128K存储空间中除了开头的元素头和显示头外,剩余的都可以用来存储其具体的几何信息。比如一条线,仅需存储两个端点即可,这样的话,128K根本用不完,用不完的部分可以用来保存元素的扩展属性。这些几何信息和扩展属性共同组成了元素的大小,该值保存在元素头的元素大小字段中。

工程数据EC

上一节我们介绍了元素,元素除了自身在元素头和显示头中存储的内置属性外,还可以通过以下三种手段存储扩展属性。第一种是给一个元素关联一个Tag元素,这种方式在MSCE下已经不推荐使用了。第二种是在元素128K剩余空间中保存用户数据链接(UserDataLinkage)。但用户数据链接有两个致命的缺点:一是数据块大小受限,特别是对于几何部分已经几乎要将128K空间占满的元素,没有多少空间用来保存用户数据了;而是要修改用户数据的话,必须将整个元素读入内存,修改完后再写回模型中。当修改后的元素大于原来元素空间时,还需要删除原来的元素,将新元素添加到模型元素列表的尾部。所以,Bentley公司从MSV8.9版开始引入了扩展属性(XAttribute)的概念。扩展属性不是保存在元素内而是保存在元素上(原文是XAttribute is not in element but on element)。它是在另外一块存储区保存扩展属性的,因而克服了以上两个缺点。
Bentley软件程序设计基础 - 图5
XAttribute可以理解为一块任意的二进制数据块,这个数据块仅能被附加它的程序所理解。故Bentley又基于此扩展出了一个EC框架(EC=Engineering Content),用XML来表达用户属性。这样不仅含有数据,还含有数据的解释信息。EC这个概念仅针对编程者,对于MS软件的使用者,ItemType就是EC技术的一个简化版。
Bentley软件程序设计基础 - 图6

平台基本功能

在我们了解了DGN文件的基本概念后,接下来会具体介绍MicroStation软件的基本操作。如果您已经非常熟悉软件的使用了,可以跳过这一部分内容。

基本界面

启动MicroStation软件后首先会遇到选择工作集(Workset)的界面如下:
Bentley软件程序设计基础 - 图7
该界面分三个部分:最左侧是最近访问过的工作集;中间部分的顶部有下拉的工作空间(Workspace)和工作集选项。然后是位于该工作集下的DGN文件列表,我们还能通过底部的Browse按钮浏览任意文件夹下的DGN文件来打开,或者用New File按钮新建一个DGN文件;最右侧是工作集的属性栏,可以和云端的ProjectWise项目关联,还可以定义扩展的工作集属性。
一组相似的工作集会位于一个工作空间下面。对工作空间和工作集的具体使用Bentley公司没有给出固定的答案,您可以根据您的具体应用场景来灵活地使用它们。比如,将工作空间当做具体项目的类别(比如设计院中的国内项目和国外项目),而工作集对应一个个具体的项目。
您选择了不同的工作集,就意味着后台对应一个特定的配置环境,这个环境适合您的具体设计工作。比如,您选择了国外项目(工作空间)类别下的某个项目(工作集),则与国外项目相关的文字样式、标注样式、打印样式等资源都会切换。
选择了一个具体DGN文件后就进入了MicroStation软件的图形界面,如下图所示:
最顶部一行从左至右为工作流、快捷访问工具、软件标题和用户账号以及帮助区。工作流是用来将不同的任务工具分组的,比如,所有二维绘图相关的工具都放到了Drawing这个工作流下,三维建模相关的工具放到了Modeling工作流下,渲染动画相关的工具放到了Visualization工作流下。
【注】:如果当前模型是二维模型的话,则没有Modeling和Visualization工作流,因为这两个工作流中的工具不能在二维模型中使用。
Bentley软件程序设计基础 - 图8
接下来的部分是Ribbon区,Ribbon原意就是带状的,它是微软首先启用的最新一代用户交互式界面。所有工具分在选项卡(Tab)下,选项卡下又分成组(Group),组下是各类按钮(Button)等控件。选择不同的工作流会出现不同的Ribbon界面。在Ribbon区的最右侧有个快速搜索区,当您找不到某个工具时可以在此栏中输入单词来快速查找到。比如,配置变量对话框可以选菜单File > Settings > Configuration > Configuration Variables来打开,但您也可以在快速搜索栏中直接输入Configuration并回车就能打开。
在Ribbon区选择最左侧的File会弹出一个下拉菜单,同时右侧是选择打开文件的区域。这个界面被称为后台(Backstage)。因为在后台界面下是看不到“前台”的图形的。
Ribbon区下面是视图区。MS软件最多可支持八个视图,这八个视图的位置和大小由您自由排布。八个视图中显示的内容也由您自由控制。每个视图区标题栏下方还有一排视图操作工具,可用于方便地操作当前视图。
最下面一行是软件的状态栏,状态栏也被分成了多个小的可显示或隐藏的区域,依次是命令提示区、消息中心区、捕捉区、加解锁区、当前层、选择集状态区、当前坐标值显示区、围栅状态区、文件锁定状态区等等。

基本视图操作

在Drawing工作流下选择View选项卡打开所有与视图相关的操作工具,如下图所示:
Bentley软件程序设计基础 - 图9
我们从左至右选择一些最常用的功能大致介绍一下。
View Attribute:打开视图属性对话框,里面含有许多开关,能控制视图的多方面的显示。比如,Presentation卡片下的Line Style和Line Weight两个开关会控制视图中是否显示出线的线型和线宽。Level Overrides开关控制是否以元素所在层的覆盖线符来显示。这三个开关打开的话,元素自身的线符属性可能就显示不出来了。View Setup卡片下的Models下拉菜单能控制不同的视图显示同一个DGN文件中的不同模型。这是一个非常有用的功能。比如,在视图1中显示三维模型,在视图2中显示切图模型,这样,在视图1中调整剪切面的位置时,能在视图2中看到动态的切图效果。
Apply Display Style:给指定视图应用显示样式。显示样式是对视图中显示的多个参数集中起了一个名字。切换不同的显示样式,视图就会以不同的表现来显示,比如线框(Wireframe)、光滑(Smooth)、透明(Transparent)、专题图(Thematic)等。我们还可以创建自己的显示样式,在里面定义自己期望的参数。每个显示样式还可以关联一个显示规则(Display Rules),在显示规则中可进行更复杂的定义。比如,按照元素的Item属性值来定义元素的显示颜色。
Window Area、Zoom In/Out、Fit View、Update View和Pan View:这是一组视图的缩放、更新和平移工具。当我们想查看全图时,点击Fit View按钮就能实现。MicroStation中的大多数命令工具都会有一些选项,这些选项会展现在一个叫做工具设置(Tool Settings)的对话框中。比如当我们点击这个Fit View工具时就会出现如下图所示的工具设置对话框。其中有选项Files(文件),备选值有All(所有的)、Active(当前模型)、Reference(参考模型)和Raster(光栅)。如果采取默认值All的话,就会将当前模型中的内容以及当前模型中参考的模型中的内容以及当前模型中参考的光栅中的内容都作为操作对象而整体充满当前视图。但在某些情况下,我们可能只想查看某一类数据。比如,我明明知道当前模型中参考的有光栅数据,但由于它比较小,不知道在哪个地方了,这时候就可以选择Files为Raster,这样,点击视图后只有光栅数据被充满视图,就很容易发现了。
Bentley软件程序设计基础 - 图10
接下来是一组各标准视图的工具图标,点击其中一个就能让当前视图旋转到顶视图(Top View)、左视图(Left View)、前视图(Front View)、右视图(Right View)、后视图(Back View)、轴测图(Isometric View)和右轴测图(Right Isometric View)。还有视图的任意旋转工具(Rotate View)和往后退一个视图(Previous View)或往前进一个视图(Next View)工具。
接下来是Camera(相机)、Named Boundary(命名边界)、Clip(剪切)和Named View(命名视图)工具组。相机用来定义当前视图的查看角度等参数,可以以相机的镜头方式来查看视图中的图形;命名边界就是将一个设计范围保存为一个名字,在MSV8i版本中,叫做命名围栅(Named Fence),MSCE中更改了名称并加强了其功能;剪切能实现对三维模型执行按范围立体剪切(并非真正地切割的立体元素,而仅仅是一种显示技术)。这样方便我们观察过于复杂的模型,同时还能对剪切的断面执行出图;命名视图可以将一个视图的布局及其属性保存为一个名字,而后可以根据这个名字再回复视图的布局和属性。
Windows(窗口)组工具用来对多个视图实现层叠(Cascade)、平铺(Tile)、自动安排(Arrange)等操作。每个视图的边界都可以用鼠标方便地拖拽以设置每个视图的大小,拖拽视图标题栏就能移动视图的位置。
【注】:我们调整好的视图布局下次打开DGN文件时并不会自动被保存。如果想要保存调整好的视图布局需要选菜单File(文件)> Save Settings(保存设置)。当然,如果您想每次退出文件时都自动保存这些设置也是可以的。需要打开Preferences(预选项)对话框,如下图所示勾选Operation(操作)分组中的Save Settings on Exit(退出时保存设置)即可。
Bentley软件程序设计基础 - 图11
如何打开预选项对话框?选菜单File(文件)> Settings(设置)> User(用户)> Preferences
View Groups(视图组)是对多个视图布局的保存,而Named View仅仅是对某个视图。在View Groups组中还有对八个视图的打开和关闭按钮。
除了从Ribbon的View选项卡来操作视图外,每个视图标题栏下都自带一个图标工具栏,也能更方便地操作视图。这些工具基本上在上面都介绍过,在此就不一一赘述了。
第三个操作视图的途径是用快捷方式。在具有三键鼠标的前提下,压住并拖拽鼠标中键就是平移视图;滚动鼠标中键的滚轮就是缩放视图;按住键盘上的Shift键的同时压住并拖拽鼠标中键就是旋转视图。

基本绘图操作

MSCE中绘图操作大致可以分为二维绘图和三维绘图两部分。
1、二维绘图工具位于Drawing工作流Home选项卡下的Placement(放置)组。如下图所示,它包含了绘图工具:智能线(SmartLine)、线、弧、圆、矩形和多边形、B样条曲线、多线、文字和单元等。
Bentley软件程序设计基础 - 图12
智能线工具可以绘制出线(Line)、线串(LineString)、复杂链(ComplexChain)和复杂形(ComplexShape)等类型的元素。线是仅含有起点和终点两个端点的一段线段;线串是含有2到5000个端点的多段线;复杂链是可含有直线段和弧段的组合图形;复杂形是可含有直线段和弧段的闭合图形。B样条曲线是具有特殊数学含义的光滑曲线。多线是含有2到16组平行线的特殊元素,但它不支持弧段,故应用范围受限。单元(Cell)是一组固定的图形元素的组合,比如一个阀门图形。单元可以事先定义在单元库(Cell Library)文件中,连接某个单元库后就可以从该单元库中放置指定单元名的单元了。
类似于前面介绍的视图操作,每个绘图工具也都有一组工具设置选项,当启动该工具后其选项会出现在工具设置对话框中。比如,Place SmartLine的工具选项如下:
Bentley软件程序设计基础 - 图13
Segment(段)用来控制当前绘制的段是直线段还是弧段。按键盘上的波浪(~)键可在直线段和弧段间切换;Vertex(顶点)用于确定每个转角处是直弯、折线弯还是弧弯。
工具中的每个选项都非常重要,MSCE软件的丰富性可通过这些选项以及选项的组合来体现。比如使用Place Text(放置文本)工具时勾选选项View Independent(不依赖于视图),则放入模型中的文字将不随着视图的旋转而旋转。
Bentley软件程序设计基础 - 图14
下面再介绍一个重要的基本概念——工作单位(Working Unit)。不知您注意到没有,在MicroStation中输入一个长度值时有时会看到如下所示的情况:
Bentley软件程序设计基础 - 图15
怎么我要输入的长度值还带有两个冒号呢?这就要从MicroStation的工作单位说起。在MicroStation中,一个长度值由三部分组成:主单位:子单位:位置单位(也就分辨率单位),用英文表达就是Master Unit:Sub Unit:Positional Unit(缩写为MU:SU:PU)。为何要引入主单位和子单位?这主要是为了英制单位服务的。我们知道1英尺等于12英寸,对于英制来说,我们可以将主单位设置为英尺,子单位设置为英寸。这样当您想输入2’5”时就可以直接输入2:5而不需要将5”先换算成0.41666666666667’进而输入2.41666666666667。这种巧妙的设计对于公制来说反而显得多此一举了。
那为何还需要一个分辨率单位呢?这是由于历史原因造成的。在V7DGN时代,为了提高程序的工作效率,内部全部用整数表达。那现实世界中不能没有实数呀,那就设置一个PU,当显示给用户看时就用内部保存的整数除以这个PU变成实数,当保存用户输入的实数时就乘以这个PU转换为整数后保存。所以,您应该能知道,这个PU其实就表达了V7DGN时代的数值精度。不过到了V8DGN,内部数据直接用实数表达了,这个PU其实意义已经不大了,但为了保持和V7DGN概念的延续性,仍然保留了这个概念。
如何设置我当前工作单位的显示呢?在MSCE中是选菜单File > Settings > File > Design File Settings打开设计文件设置对话框,左侧列表中最后一行的Working Units就是所有对工作单位的控制项。其中的Format可以选择MU:SU:PU、MU:SU或者就是MU。如下图所示:
Bentley软件程序设计基础 - 图16
对于MU:SU:PU这种显示设置,假设MU指定的为Meters(米),SU指定的是Millimeters(毫米),而PU为每米10000的话,我们要输入一个500mm的长度,以下三种写法都是正确的
0.5
:500
::5000
如果你想故意为难自己也没关系,输入0.3:100:1000也是可以的。
【注】:当我们用C#语言(或.NET下的其它语言,如VB.NET或C++/CLI)来开发MSCE下的应用程序时会有两个对象模型可用。一个是为VBA/COM服务的Interop对象模型,一个是为.NET封装的新的对象模型。在Interop对象模型下,默认的工作单位是主单位;而在.NET对象模型下,默认的工作单位则是分辨率单位。这一点一定要注意!
2、三维绘图主要分三大类,分别位于Modeling工作流下的Solids(实体)、Surfaces(曲面)和Mesh(网格面)三个选项卡下。它们分别是用来绘制三维实体、三维曲面和网格面的。
三维实体又分为基本实体(Primitive Solids)和参数化实体(Parametric Solids)。基本实体没有大小范围的限制,而参数化实体则有默认1公里(其实在MSCE中最好是小于500m)的大小限制,这个一定要注意。仅依靠眼睛是不能准确区分基本实体和参数化实体的,我们可以通过一个键入命令Analyze Element调出旧式的元素信息对话框来查看。基本实体元素类型为19,而参数化实体元素类型为106。其实还有一种叫做智能实体的元素,它的类型是2(和单元类型重叠了)。当我们对基本实体进行复杂操作时,它就会自动转换为参数化实体,而当前对参数化实体执行打散(Drop)动作,勾选Application选项后,参数化实体就会降级为智能实体。
Bentley软件程序设计基础 - 图17
Bentley软件程序设计基础 - 图18
Bentley软件程序设计基础 - 图19
曲面造型生成的元素有可能是B样条的曲面,也有可能是智能曲面或参数化曲面。网格面是另外一种创建三维面或三维体的方法,它是通过构建网格(常常是三角网)来做成面或体的。下表是对这三种三维技术的一个总结。

三维技术 容量限制 精度 灵活性 性能 最佳适应场合
基本实体 三维基本造型首选,不支持复杂形体
智能实体 有(<500m) 支持任意复杂的形体,但不能太大了
参数化实体 有(<500m) 支持任意复杂的带参形体,不能太大
B样条曲面 光滑曲面表达最佳
网格面 大型面表达性能最佳。对精度要求不高

操作三维绘图工具还需要掌握精确绘图(AccuDraw)辅助工具。下面以绘制一个立方体为例说明三维绘图工具的基本操作方法。

  1. 如果尚未启动精确绘图的话,需要到Drawing Aids(绘图辅助)选项卡下点击如下图所示的开关图标打开它;

Bentley软件程序设计基础 - 图20

  1. 点选当前视图工具栏中的旋转视图工具下的Isometric View将视图转到轴测图;
  2. 切换到Modeling工作流的Solids选项卡下,点选最左侧第一个图标Slab启动绘制长方体的工具。
  3. 在视图区任意位置点一点确定长方体的一个顶点的位置。此时出现一个绘图靶区,它是正对着我们的。此时按键盘上的T键切换到顶视图(Top View),然后沿着靶区的红色线方向移动鼠标确定一个位置。靶区的红色线方向为X轴,绿色线方向为Y轴。

Bentley软件程序设计基础 - 图21 Bentley软件程序设计基础 - 图22 Bentley软件程序设计基础 - 图23

  1. 沿着绿色线方向移动鼠标并确认一个点,这样就确定长方体底面的另外一个边长。
  2. 此时靶区会自动转向前视图(Front View),在垂直方向上移动鼠标确定长方体的高。

【注】:在三维绘图过程中,可以通过按键盘上的T、F、S和V来切换靶区平面到顶视图、前视图、右视图和平行当前视图。在精度绘图对话框中还有X、Y和Z的输入区域,我们可以用鼠标确定方位后直接在精确绘图对话框中输入一个精确的长度值。
【注】:MSCE中还有一个重要的概念就是辅助坐标系(ACS),它能方便地让我们将坐标系锁定到某个斜面上。一旦启用了ACS,则上面所说的T、F、S和V的切换则会基于ACS而非全局坐标系了。

键入命令

MicroStation支持通过键入命令操控软件。从Drawing工作流的Home选项卡的Primary(基本)组中能找到Key-in(键入)图标,点击它就能打开键入命令对话框,可在此对话框的输入栏输入MicroStation中的任意命令。按上下箭头键能翻出以前输入过的命令。
Bentley软件程序设计基础 - 图24
命令可由一到多个英文单词组成,单词中的字母不区分大小写,每个单词间用空格隔开。每个单词不必输入完整,只要在同一级没有重复的单词即可。比如,输入Place Line并回车后可启动画线命令,输入Pl Li并回车也能启动同样的Place Line画线命令。
在MicroStation中有一个管理键入的队列,无论是用户键入的还是发自应用程序的键入都会被排到这个队列中等待处理。待处理到这个键入时会有一个分析程序来判断该键入是否是一个属于某个程序的命令,是的话就会将其分发给指定的程序来处理。了解这一点对我们今后编程非常重要,在程序中调用的API函数是会被立刻执行的,而程序中发送的键入命令则不会,故在一个函数中不要将函数调用和命令键入混合在一起,这样做最终的执行顺序将不是按你的调用进行的。
键入命令还是用户界面和后台程序的一个桥梁。用户在Ribbon界面中点击一个图标工具之所以能执行一个功能,其原理就是在该工具定义中包含了一个键入命令字段。如下图是Ribbon定制界面截图,我们可以自定义一个工具来调用系统的Place Line命令。
Bentley软件程序设计基础 - 图25
MicroStation还提供有双字母键入命令的缩写形式。比如:CO=表示Active Color(设置当前颜色),WT=表示Active Weight(设置当前线宽),LT=表示Active Style(设置当前线型),LV=Active Level(设置当前层),AA=表示Active Angle(设置当前角度),XY=表示输入一个坐标点。
【技巧】:XY=中还支持#符号,表示当前坐标。如:XY=#,#,10表示XY保持不变,Z坐标为10。还能实现加减,如#10和#-10表示对当前坐标加减10。
MicroStation中支持 @文件名 格式来执行一个含有多个命令的文本文件。下面举例说明如何已知一组坐标点,通过键入命令文件绘制过这些点的线串。
用记事本或任何文本编辑工具写如下一个文件,比如叫做D:\PlaceLine.txt:
Place Smartline
XY=1.5242,2.9798,0.0000
XY=2.5759,3.6577,0.0000
XY=3.4256,2.9798,0.0000
XY=4.4774,3.6577,0.0000
XY=1.5908,4.3266,0.0000
Reset
在键入命令栏输入@d:\PlaceLine.txt并回车就能绘出一条含有五个点的折线来。Place Smartline是启动绘制智能线的命令,后面连续的五个XY=就是为智能线命令提供输入坐标点的。最后一行的Reset命令是结束当前命令的。
下面再介绍两种探测MicroStation图标后台对应的键入命令的方法:宏录制法和查看定制法。
点击Utilities选项卡下的Macros(宏)组中的Record(录制)按钮启动宏录制功能,然后操作您想探测的工具,操作完后回到宏录制界面,点击Stop按钮停止录制,此时要求我们输入一个宏文件名称,输入完后保存。再点击该宏文件后面的笔符号就能打开宏文件查看录制的内容。
Bentley软件程序设计基础 - 图26
查看定制法的操作步骤是,在Ribbon界面中空白处右击鼠标,选择弹出菜单中的Customize Ribbon(自定义功能区),在打开的对话框中左下角点击Custom Tools and Tasks打开Customize对话框,Tools选项卡下展开Application Tools > MicroStation则能看到MicroStation中带有的大量工具栏。展开某个工具栏,选中我们感兴趣的某个工具,则在下部Command Data属性区就能找到一个Key-in,这就是对应与前台图标的后台键入命令。
【注】:有些键入命令前带有一个方括号的内容,比如下图所示的Key-in中就有[CONSTRAINT2D],这个表示其后的键入命令constraint2d create parallel2d是位于CONSTRAINT2D应用程序中的。我们需要加载该应用后才能找到这个键入命令。
Bentley软件程序设计基础 - 图27

基本建模流程

Bentley的软件是为适合大项目多专业协作而设计的。如果贵单位购买有Bentley的协同软件ProjectWise(简称PW)的话,则所有设计成果都可以集中放在PW服务器上。这样,每台机器在启动MicroStation时就能直接访问到PW服务器上的文件夹,摆脱设计文件分散在每个设计人员机器上的弊端。当然,如果没有架设PW服务器,采用文件共享方式也能实现文件共享,但由于MicroStation是随时会自动保存文件内容的,这会对网络质量要求很高,一旦在通过网络保存文件时发生网络故障,则很有可能破坏掉正在设计的文件而造成无法恢复,故强烈不推荐这种文件共享的使用方式,而PW的特殊设计则能避免这个情况的发生。
解决了文件的共享存储后接下来要考虑各专业间的协同。要设计一个总装文件,用来参考各个专业的设计文件,而各专业的设计文件也可以分多个文件来存储,它们之间也是有参考关系的。这样最终会形成一棵庞大的参考树。我们想要看到最新的设计结果时可以到参考文件对话框中执行更新动作,这样,就能看到各个专业的最新设计结果了。同时,PW会严格控制各专业人员的访问权限,不允许跨专业的修改设计模型(除非有特殊需要,也是可以设计一个总控角色,他可以修改各个专业的设计模型)。
每个设计单位都需要设置一到两位精通MicroStation软件配置的管理员,该角色负责定制Workspace(工作空间)和Workset(工作集),负责定制标准的打印配置文件*.PLTCFG,负责定制标准的文字样式、标注样式、打印样式、详图符号样式、单元库等等内容。如果有PW服务器的话,可以将这些标准内容托管到PW服务器上,一旦选择了合适的工作空间和工作集,这些被托管的内容就会复制一份到本地被MicroStation所使用。
除了DGN文件之间的参考外,我们还需要考虑出图时的参考关系。我们在前面“模型”一节讲过,DGN文件中可以有设计模型、绘图模型和图纸模型三种。设计模型中主要用来保存我们设计的三维图形,对三维图形进行某个视角的切图后形成一个保存的视图,将这个保存视图参考到绘图模型中进行标注,最后再进一步参考到图纸模型中供打印输出。这三种模型的关联关系如下图所示:
Bentley软件程序设计基础 - 图28
使用MicroStation软件中的Annotate下的Detailing部分就能实现上图所示的自动关联关系。
Bentley软件程序设计基础 - 图29
将当前设计模型中的视图转到前视图,选中如上图所示的Plan Callout工具,然后在前视图中指定两点确定切图面,然后再指定一个切图方向,同时需要在工具设置对话框中选择合适的种子,确定后就能自动生成Drawing Model和Sheet Model。
Bentley软件程序设计基础 - 图30
Bentley软件程序设计基础 - 图31
MicroStation CE还引入了更高级的Named Boundary和Drawing Boundary的概念, 能让我们精确地指定设计模型中的一个范围出图到图纸模型中的一个范围内。在图纸模型中,其实还有一个Sheet Boundary的概念,它能指定一个参考文件(往往是图框文件)作为图纸模型的边界。这样,当我们移动或旋转图纸模型中的可见边界时,该图框文件也会随之变化。
MicroStation软件的功能浩如烟海,我们作为编程的书籍不太可能在此一一赘述。如果您想详细了解MicroStation软件的功能,请学习我们赵老师(赵顺耐)书写的教材《MicroStation CONNECTION Edition——Bentley数字孪生数据创建平台》。