Microstation中的工作单位
在编程时,经常遇到需要做单位换算,因为在Addin和MDL编程中,所给的值的单位为UOR(Unit Of Resolution)即分辨率单位,需要将其换算成公制单位。
double UorPerMas = Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMaster;
(转载整理至中国优先社区)
不知您注意到没有,在MicroStation中输入一个长度值时有时会看到如下所示的情况:
图片.png
怎么要我输入的长度值还带有两个冒号呢?这就要从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概念的延续性,仍然保留了这个概念。
如何设置我当前工作单位的显示呢?在V8i下选菜单Settings > Design File打开设计文件对话框(在CE中是选菜单File > Settings > File > Design File Settings来打开),最后一行的Working Units就是所有对工作单位的控制项。其中的Format可以选择MU:SU:PU、MU:SU或者就是MU。如下图所示:
图片.png
对于MU:SU:PU这种显示设置,假设MU指定的为Meters(米),SU指定的是Millimeters(毫米),而PU为每米10000的话,我们要输入一个500mm的长度,以下几种写法都是正确的
0.5
:500
::5000
如果你想故意为难自己也没关系,输入0.3:100:1000也是可以的。
【注意】:在MVBA编程中,所给的值默认为主单位;在MDL编程中,所给的值默认为UOR(Unit Of Resolution)单位,即PU单位。