在v8i上运行的好好的函数mdlIntersect_allBetweenElms,却在connect上不能正确运行,同样的程序,编译成connect版本后,结果不对。请问符老师,是什么原因,谢谢。
CE SDK确实变化非常大,推荐尽量改用新的class写代码。对于两个元素间的求交,可考虑调用CurveCurve类下的IntersectionsXY方法。 不再用MSElementDescrP,全都改用新的Elementhandle/EditElementHandle了。
Answer Verified By: 伟 周
谢谢。作为过渡,还完全抛弃不了C API,这个过程好痛苦。有些程序是重写,可以这么做,有些仅仅是升级而已
=======================================
我在最新版的Mstn CE Update2(10.02.00.39)下作了一个最简单的测试,该函数可以运行。二维模型,1842和1843分别是两条直接的ElementID。
MSElementDescrP edP1 = NULL, edP2 = NULL; DPoint3d p1[2], p2[2]; int numPts; mdlAssoc_getElementDescr(&edP1, NULL, 1842, ACTIVEMODEL, FALSE); mdlAssoc_getElementDescr(&edP2, NULL, 1843, ACTIVEMODEL, FALSE); numPts = mdlIntersect_allBetweenElms(p1, p2, 2, edP1, edP2, NULL, 1.0);
经过测试,发现测试用例不同,我的其中一个线是垂直的,得到的相交结果是0,同样的程序,在v8i下可以得到相交的结果。如果两条线都不是垂直的,是可以测试通过的,是不是这个函数在ce的版本下的内部逻辑经过了修改?您把其中一条线做成垂直的,就能测试出两个版本不同的结果了
我用一条垂直线来测试,也还是能正确得到交点坐标。我用的是最新版Mstn CE Update2 (10.02.00.39)。附件为测试用DGN。
3884.test.dgn