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倍才对,我这样理解正确吗?
分辨率的单位应该时“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米,保持在原参考文件中的长度。
老师说的AnnounceTransform的变换即可是通过displayableElement.GetBasisTransform(out transform);获取的transform是嘛,我就是只加上transform的变换,但是获取的transform数值数值变化了
不要用displayableElement.GetBasisTransform返回的这个变换矩阵,AnnounceTransform传递的变换矩阵就行了。
Bao Liu said:但是获取的transform数值数值变化了
这个数值变换了没错,所以要按我上边说的对于参考文件中的元素的话,要乘上两个文件分辨率之间的比值。当然前提是楼上符老师说的"TrueScale“比例打开的情况下。
老师:
1.我需要用到这个矩阵,需要求出displayableElement.GetBasisTransform这个变换矩阵,然后再求出其逆矩阵,因为元素矩阵与视图矩阵互为逆矩阵,在与AnnounceTransform传递的变换矩阵求出点坐标,然后再前端显示,我求矩阵的逻辑是不是有错误
2.我测试了下AnnounceTransform求出的矩阵是乘以像素每米的数值,
3.符老师说的"TrueScale“比例打开的情况下。这个比例指的打开那个比例?可否截个图说明下
用我说的方法的到的数据单位确实都是uor单位,如果想变成其他单位,例如以”米“为单位,那再除以这个分辨率(Session.Instance.GetActiveDgnModelRef().GetModelInfo().UorPerMeter)就行了呀。我不明白这提取数据跟视图矩阵有啥关系?视图矩阵是视图中显示模型时从哪个方向去显示,提取图形数据跟这也没关系吧。TureScale通过下图所示的开关控制:
谢谢老师