我在使用ElementGraphicsProcessor解析元素的几何数据后,发现解析出来的顶点数据非常的大,比如顶点的x值会达到亿级,观察后发现导出的数据应该是以微米为单位,不知道有没有什么地方可以设置单位的,还是说导出的数据就是微米为单位,需要手动进行单位换算呢,希望老师能给出解答,谢谢
请看如下文章了解MS软件中的工作单位的概念:
MicroStation中的工作单位
老师您好,现在的问题是不管我工作单位设置成什么,解析出来的几何数据的尺度都非常的大,是微米级的,需要我手动进行换算,我想知道这个几何尺度是否有地方可以设置,让解析出来的几何是数值小一些,谢谢
你把每个面片化的顶点坐标xyz分别除uor,看看结果是多少。
您说的uor是什么,我一般会除以1000,把微米转成毫米,结果就和属性里的一样了,但我希望找到一个不用手动转的方法
CE程序接口函数用到的都是uor单位,uor单位到主单位有一个转换比例,通过Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter可以获取到这个转换比例,例如您函数返回了一个DPoint3d点,X,Y,Z坐标值要除以这个UorPerMeter才转换成米的
非常感谢郭老师,您的回答解答了我的部分疑问。
还有一个问题是我发现有些元素的PolyfaceHeader几何数据的尺度是正常的,只有十几,但对应的DTransform3d的尺度很大,经过Transform方法后整个几何的尺度就会非常大。
我在做一个几何导出的插件,希望保留PolyfaceHeader没有经过transform的数据,那么我是否可以让DTransform3d和您之前说的UorPerMeter通过某些运算得到一个尺度缩减后的DTransform3d,DTransform3d中是否有现成的方法实现我的目标,再次感谢老师的解答
DTransform3d就是个变换矩阵,您把缩放的部分除以UorPerMeter之后,再用DTransform3d对PolyfaceHeader变换,从PolyfaceHeader获取的就是以米为单位了。DTransform3d下有Scale成员函数