本人想在自定义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值为0),即使在三维模型也能得到正确结果。但若线串是三维线串(所有端点Z值不相同),那么计算结果就不对。
视图中捕捉的点有一个深度如果不用精确绘图坐标系来精确捕捉的话是没办法控制的,因为屏幕是二维的,而模型是三维的,有一个维度是需要通过这个精确绘图坐标系来控制的。
您好,这个我是清楚的,视图获取的理论上来说应该是一条射线而非单独一个点。那么能否通过某些接口获取到此射线,然后调用某个方法计算线串与射线的最近点得到我想要的结果呢?
当使用MS自身的精确捕捉(设置为最近点Nearest)时,能够准确的附着到指定最近位置,那么MS自身是如何实现的呢?
这个射线需要自己去构造,获取到当前视图的旋转矩阵得到Z轴方向,以鼠标获取到的点和这个方向构造。
那么构造出了这条射线之后,计算线串到射线最近位置的方法是什么呢?
mdlMeasure_closestPointOnElement