MSCE C# 关于microstation的模型再OBD软件显示的数据顶点坐标和矩阵问题

ms-1.dgn

obd-2.dgn

老师您好,请问我在ms-1里面画个模型A,主单位是米,分辨率:每米是10000,,然后放大100倍,获取的元素的顶点坐标为集合verticsA,矩阵是transformA,然后将模型A参照并合并在OBD软件里面,模型名称是obd-2,OBD软件里面的主单位是米,分辨率每米是1000,获取的元素的顶点坐标为集合verticsB,矩阵是transformB,现在获取到数据:verticsA和verticsB里面的数据是相等的,矩阵transformA和transformB相差100倍

这数据正常吗?我在前端显示的结果ms-1模型是正常的,obd-2模型显示的结果有问题,几何数值相差100倍,请问问题出在哪一环?

  • 老师,按照我的理解是,2个dgn的分辨率不同,求出来的顶点坐标应该也是不相同的,顶点坐标应该相差100倍才对,我这样理解正确吗?

  • 您如果是在问编程问题的话,请提供您的提取坐标的代码供我们分析。模型间参考有许多参数在控制,如果您选择了True Scale,参考时就会自动调整比例的(即按照两个模型的主单位去换算,忽略掉分辨率的不同)。



  • 分辨率的单位应该时“uor/单位”,dgn文件底层保存的数据都是uor单位。例如主单位是“米”,分辨率是“10000 uor/米”,有一个线段,两端坐标是(0,0,0)和(1米,0,0)的话,那么dgn文件中实际保存的坐标点是(0,0,0)和(10000 uor,0,0)。两个分辨率不同的dgn文件相互参考时,如果"True Scale“打开的话,会对参考文件中的元素缩放,使参考文件中的元素在主文件中的大小仍保持在参考文件中的原始主单位长度,例如前面说的这个线段,被参考到另外一个文件中,这个文件的主单位是“毫米”,分辨率为“1000 uor/毫米”的话,被参考的文件中的这条线段,就变成(0,0,0)和(1000000 uor,0,0)了。即线段在主文件中显示出来的还是1米,保持在原参考文件中的长度。

  • 郭老师,我求出来的元素顶点坐标和矩阵里面的数据都是后台存储的数据,如果2个模型尺寸完全相同,一个在Ms-1中,一个在obd-2中,由于分辨率的单位应该时“uor/单位”不相同,2个文件图形中元素的顶点坐标数据应该是不一样的,但是我这2个图形中的元素顶点坐标是相同的,问题就出在这里

  • 原因是这个元素是SmartSolid,您换一个其他类型的元素测试就不一样了,SmartSolid元素比较特殊,底层是西门子的ParaSolid内核支持的。所以用"analyze element"命令查看时可以看到SmartSolid元素的子元素中有一个名为“Smart Geometry Header”的子元素,这个子元素保存的就是ParaSolid内核使用的数据。这个数据两边是一致的,提取数据时,都来源于这个子元素。但最终还有加上那个变换矩阵才是Mstn中元素最终表现出来的数据。