NX二次开发获取相切面

从一组面中找和你传的另外一组(你已经判断出相切,没判断出你就传单个面)有相切关系的面,注意输入的两组面要排除重复面。

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

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值