本人想在自定义tool中,根据指定线串和点,获取线串上距离指定点最近位置的坐标,以下是调用代码:
double d; DPoint3d p1, p2; mdlElmdscr_distanceAtPoint(&d, &p1, &p2, eehRefLine.GetElementDescrP(), &pt, 1e-6 * UOR_PER_METER);
其中pt是_OnDynamicFrame(DgnButtonEventCR ev)中的ev.GetPoint()得来;
在计算得到参数3后,将结果向上下各延伸一定长度用于测试计算结果,最终测试得到了以下结果,
其中1是光标悬停的位置(未开启捕捉),2是根据计算结果动态绘制的线串,明显可以看出计算结果不正确,个人分析有两个可能的原因:
1._OnDynamicFrame(DgnButtonEventCR ev)中的ev.GetPoint()得到的坐标与我们主观感觉的坐标有偏差;
2.mdlElmdscr_distanceAtPoint方法有漏洞或者我调用方式错误;
请教,为什么会出现这种情况呢?
这个射线需要自己去构造,获取到当前视图的旋转矩阵得到Z轴方向,以鼠标获取到的点和这个方向构造。
那么构造出了这条射线之后,计算线串到射线最近位置的方法是什么呢?
mdlMeasure_closestPointOnElement
郭工你好,你给出的这个方法也没有参数用来指定射线啊,抱歉我对DisplayPath的理解还是有疑问,以下是我的调用代码; DPoint3d p1;
DisplayPathCP path = mdlDisplayPath_new(eehRefLine.GetElementRef(), eehRefLine.GetModelRef()); mdlMeasure_closestPointOnElement(&p1, &eehRefLine, NULL ,&target); mdlDisplayPath_release(path);
得到的结果还是不对
抱歉发错函数了,那个函数是获取元素上离指定空间点最近的点,请用这个函数mdlIntersect_closestBetweenElms