从一组面中找和你传的另外一组(你已经判断出相切,没判断出你就传单个面)有相切关系的面,注意输入的两组面要排除重复面。
int Istangentface(tag_t face1,tag_t face2);
void Gettangentfaces(vector<tag_t>other_edges,vector<tag_t>&tangentfaces);
int Istangentface(tag_t face1,tag_t face2)//判断两个面相切,1相切,0不相切
{
double tol=0.01;//相切公差
int guessl_given;//(I)输0就行
double guess1[3];//(I)假设最近点1,如果上个参数是0无需设置
int guess2_given;//(I)输0就行
double guess2[3];//(I)假设最近点1,如果上个参数是0无需设置
double min_dist; (O)输出最小距离
double pt_on_ent1[3];//(o)最小距离测量点1位置
double pt_on_ent2[3];//(O)最小距离测量点2位置
UF_MODL_ask_minimum_dist(face1,face,0,guess1,0,guess2,&min_dist,pt_on_ent1,pt_on_ent2);
double param[2];
double u1[3];
double v1[3];
double u2[3];
double v2[3];
double radius[2];
double fx_5[3],fx_6[3];
UF_MODL_ask_face_parm(face1,pt_on_ent1,param,pt_on_ent1);
UF_MODL_ask_face_props(face1,param,pt_on_ent1,u1,v1,u2,v2,fx_5,radius);
UF_MODL_ask_face_parm(face2,pt_on_ent2,param,pt_on_ent2);
UF_MODL_ask_face_props(face2,param,pt_on_ent1,u1,v1,u2,v2,fx_6,radius);
if(fabs(fabs(fx_5[0])-fabs(fx_6[0]))<tol&&fabs(fabs(fx_5[1])-fabs(fx_6[1]))
<tol&&fabs(fabs(fx_5[2])-fabs(fx_6[2]))<tol&&min_dist<tol)return 1;
return 0;
}
void Gettangentfaces(vector<tag_t>other_edges,vector<tag_t>&tangentfaces)
{
int num=0;
while(other_edges.size()!=num)//相当于里面没有面与找到的相切面相切就退出
{
num=0;
for(int i=0;i<other_edges.size();i++)
{
int count=0;
for(int k=0;k<tangentfaces.size();i++)
{
if(other_edges.begin()+i!=tangentfaces.end())
{
if(Istangentface(other_edges[i],tangentfaces[k]))
{
tangentfaces.push_back(other_edges[i]);
other_edges.erase(other_edges.begin()+i);
count++;
}
}
else
{
break;
}
}
if(count==0)num++;
}
}
}