各位老师:
周末好。关于元素的范围,使用DisplayHandler->GetBasisRange()和mdlElmdscr_computeRange()测试矩形的范围结果如图:紫色的圆为坐标原点,通过原点的直线为displayhandler测试结果,矩形中的红色直线为mdl函数的结果。为什么会出现这种情况呢。text窗口为结果坐标值。请老师帮忙解答,谢谢。
DisplayHandler->GetBasisRange这个函数获取的不是元素真正的AABB包围盒,mdlElmdscr_computeRange()的结果是正确的。其实DisplayHandler下有一个函数没有公开,其获取的包围盒和mdlElmdscr_computeRange()是一致的。
郭老师,能解释一下这个basisRange和basisTransform表示的是什么意思吗?
这个没有实际测试过,猜测应该是Cell被旋转后,其包围盒会发生变化,basisRange可能是Cell在原点以及没有被旋转的情况下的包围盒。而这个basisTransform是从当前位置到原点的变换矩阵。您可以创建一个单元,旋转某个角度并平移一段距离后试一下。
Answer Verified By: hj z
如果要用C++方法取元素范围的话,可以调用DetailingSymbolManager::CalculateElementRange,该函数封装了郭老师说的那个未公开的DisplayHandler下的CalcElementRange函数。
ms15 和 ms16的SDK上DisplayHandler.h文件里已经有了这个CalcElementRange这个函数
---------------------------------------------------------------
中国市政工程西北设计研究院有限公司武汉分院