查找符合设定下限值得最小值

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);
	}
	  
} 

  

posted @ 2021-10-26 18:05  阿、、呆  阅读(182)  评论(0)    收藏  举报