最近在写一个判断圆孔深度和通盲状态的功能,发现PK_BODY_pick_topols射线函数可以设置到射线垂直距离,相当于一个圆柱空间,但在测试发现,R7的孔,设置:
max_edge_dist = 0.007; max_vertices = 0.007;
结果测试发现返回值中小于7mm,通过设置pick_approx = PK_pick_approximate_no_c,也没有起作用。
在尝试调整离散曲线,并设置曲线弦长之后,结果越来越接近7mm,但如果将公差调整非常小,测试结果又恢复到默认值。
如果是直线边,测试结果准确,对于曲线边界,需要公差设置,而且必须在合理范围内的公差。
以上是我的测试记录,遇到问题的可以参考。如果有哪个参数可以直接设置,还望留言指正。
/*获取圆柱空间内面、体对象*/
//初始化射线区域
PK_BODY_pick_topols_o_t rayOptions;
PK_BODY_pick_topols_o_m(rayOptions);
rayOptions.max_faces = 1;
rayOptions.max_edges = 1;
rayOptions.max_vertices = 1;
rayOptions.method = PK_BODY_pick_radial_c;
rayOptions.is_curve_chord_tol = PK_LOGICAL_true;
rayOptions.curve_chord_tol = 0.00001 * 0.001;
rayOptions.pick_approx = PK_pick_approximate_no_c;
rayOptions.max_edge_dist = radius * 0.001;
rayOptions.max_vertices = radius * 0.001;
rayOptions.near_plane = PK_LOGICAL_true;
rayOptions.near_point.coord[0] = topCenterPt[0] * 0.001;
rayOptions.near_point.coord[1] = topCenterPt[1] * 0.001;
rayOptions.near_point.coord[2] = topCenterPt[2] * 0.001;
rayOptions.far_plane = PK_LOGICAL_true;
rayOptions.far_point.coord[0] = (topCenterPt[0] + refDir[0] * depth ) * 0.001;
rayOptions.far_point.coord[1] = (topCenterPt[1] + refDir[1] * depth ) * 0.001;
rayOptions.far_point.coord[2] = (topCenterPt[2] + refDir[2] * depth ) * 0.001;
//
PK_AXIS1_sf_t rayAxis;
rayAxis.location.coord[0] = topCenterPt[0] * 0.001;
rayAxis.location.coord[1] = topCenterPt[1] * 0.001;
rayAxis.location.coord[2] = topCenterPt[2] * 0.001;
rayAxis.axis.coord[0] = refDir[0];
rayAxis.axis.coord[1] = refDir[1];
rayAxis.axis.coord[2] = refDir[2];
//
PK_BODY_pick_topols_r_t pickedInfor;
PK_PART_t bodies[1] = { t_pkObject };
//
PK_BODY_pick_topols(1, bodies, PK_ENTITY_null, &rayAxis,&rayOptions, &pickedInfor);