判断两个面是否相切,相切
原理:
两个面相切说明是相邻面
相邻面会有一个公共边,
取公共边的中点,判断该点在面1的法向和该点在面2的法向,
如果这两个法向的夹角小于公差,则为相切
如果是一个参考点判断,处理拉伸面、规则的曲面比较合适
不规则的曲面 需要多设置参考点判断
//判断两个面是否相切,相切
tag_t facea; //面1
tag_t face; //面2
int aaa=判断两个面是否相切(facea,face); //返回1表示相切
extern "C" int 判断两个面是否相切(tag_t facea,tag_t face)
{
double tol=0.01; //相切公差
int guess1_given; //【输入】我们输入0就可以了
double guess1[ 3 ]; //【输入】假设最近点1(如果上一个参数是0无需设置)
int guess2_given; //【输入】我们输入0就可以了
double guess2[ 3 ]; //【输入】假设最近点2(如果上一个参数是0无需设置)
double min_dist; //【输出】最小距离
double pt_on_ent1[ 3 ]; //【输出】最小距离测量点1位置(这个点一定是在对象1上的)
double pt_on_ent2[ 3 ]; //【输出】最小距离测量点2位置(这个点一定是在对象2上的)
被隐藏内容已经显示出来
UF_MODL_ask_minimum_dist (facea,face,0,guess1,0,guess2,&min_dist,pt_on_ent1,pt_on_ent2);
double param[2]; //U,V方向值
double u1[ 3 ]; //输出 输出一阶导数在U位置
double v1[ 3 ]; //输出 输出一阶导数在V位置
double u2[ 3 ]; //输出 输出二阶导数在U位置
double v2[ 3 ]; //输出 输出二阶导数在V位置
double radii[ 2 ]; //输出,双半径,输出主曲率半径
UF_MODL_ask_minimum_dist (facea,face,0,guess1,0,guess2,&min_dist,pt_on_ent1,pt_on_ent2);
double fx_5[3],fx_6[3];
UF_MODL_ask_face_parm(facea,pt_on_ent1,param,pt_on_ent1);
UF_MODL_ask_face_props (facea,param,pt_on_ent1,u1,v1,u2,v2,fx_5,radii);
UF_MODL_ask_face_parm(face,pt_on_ent2,param,pt_on_ent2);
UF_MODL_ask_face_props (face,param,pt_on_ent1,u1,v1,u2,v2,fx_6,radii);
if(
fabs(fabs(fx_5[0])-fabs(fx_6[0]))
fabs(fabs(fx_5[1])-fabs(fx_6[1]))
fabs(fabs(fx_5[2])-fabs(fx_6[2]))
) return(1);
return(0);
}
UG二次开发培训,可面授、远程视频指导、手把手教使用NXopen C++ 、UFun进行UG二次开发,入门开始,不懂C语言没有关系,但UG NX软件要会用,系统性的教,深度学会UG二次开发的原理与细节,让你完全可以独立完成复杂的项目开发。有意可联系胡君QQ:85585969
胡君UG二次开发技术论坛: http://www.ugapi.com/