经过搜索得出以下方案1:https://communities.bentley.com/communities/other_communities/chinafirst/f/microstation-projectwise/199718/msce-c/595962#595962
遍历元素,然后将元素转成面,再调用SolidUtil::RayTestFace求交点(感觉,solidutil是mdlsolid相关函数的封装?)
2:https://communities.bentley.com/communities/other_communities/chinafirst/f/microstation-projectwise/123991/microstation-v8i-c/376481#376481
遍历元素,然后将元素转成solid,再调用mdlSolid_getEntities求交点(mssolid.fdf好像要手动请加mssolid.h引用,否则编译不通过?)
采用第二个帖子里的代码可行,但是对于其中的变换没看懂,是因为body的坐标系统与dgn的UOR系统不一样?
另,从说明来看,mdlSolid_rayTestBody好像更符合需求,不知道方法2中描述的函数缺陷是否已被修复?
Mstn中SmartSolid底层用的是西门子的ParaSolid技术,Solid体在做各种操作运算的时候需要转换成ParaSolid的数据结构去完成,这个时候Solid元素都要转换到其坐标系下。Solid元素会被缩小变换到原点附近。
Answer Verified By: Chao Cheng
看起来像是ParaSolid的几何体都在原点,SmartSolid在外面套了一层Transform。
另外问一下,mdlSolid_rayTestBody是可以查找多实体的,这里的BODY_TAG怎么构造成多元素?
BODY_TAG用mdlSolid_bodyToElement转换成元素
可能我描述有问题,我看mdlSolid_rayTestBody的说明,感觉可以在多元素里找射线的交点,比如我传N堵墙进去,会返回交到的墙。不知道是不是我理解有误
只能是一个Body(第六个参数),函数会把这个实体里边所有与射线相交的边、面返回(通过第一个参数)。
感谢