static void do_it(void)
{
tag_t selectedFace = select_a_face("选择平面");
if (selectedFace == NULL_TAG)
{
return;
}
tag_t psid = NULL_TAG;
UF_PS_ask_ps_tag_of_object(selectedFace,&psid);
XD_PKApi m_fun;
PK_BODY_t bodyid(0);
m_fun.PK_FACE_ask_body(psid, &bodyid);
int n_vertices(0);
PK_VERTEX_t* vertices(0);
m_fun.PK_BODY_ask_vertices(bodyid,&n_vertices,&vertices);
std::vector<PK_VERTEX_t>one, two;
int temp = (n_vertices / 2);
for (int i =0;i<n_vertices;++i)
{
if (i<temp)
{
one.push_back(vertices[i]);
}
else
{
two.push_back(vertices[i]);
}
}
PK_TOPOL_range_array_o_t option;
PK_TOPOL_range_array_o_m(option);
option.bound.have_lower_bound = PK_LOGICAL_true;
option.bound.lower_bound = (30*ugTopk); //下限
PK_range_result_t range_result(0);
PK_range_2_r_t rang = { 0 };
m_fun.PK_TOPOL_range_array((int)one.size(),&one.at(0),(int)two.size(),&two.at(0),&option,&range_result,&rang);
if (range_result != PK_range_result_lower_c && range_result!= PK_range_result_not_found_c) //判断是否找到最小值(最小值大于等于界限值)
{
ECHO("%f", (rang.distance * pktoUg));
UF_VEC3_scale(pktoUg, rang.ends[0].vector.coord, rang.ends[0].vector.coord);
UF_VEC3_scale(pktoUg, rang.ends[1].vector.coord, rang.ends[1].vector.coord);
UF_CURVE_line_t line;
memcpy(line.start_point, rang.ends[0].vector.coord, sizeof(double) * 3);
memcpy(line.end_point, rang.ends[1].vector.coord, sizeof(double) * 3);
tag_t linet(0);
UF_CURVE_create_line(&line, &linet);
}
if (n_vertices > 0)
{
m_fun.PK_MEMORY_free(vertices);
}
}