请选择 进入手机版 | 继续访问电脑版

NX二次开发

 找回密码
 立即注册
查看: 289|回复: 0

[分享] [UFUN函数] 获取产品曲面上多个点对应的面的垂直矢量!(...

[复制链接]

2

主题

11

帖子

99

积分

见龙在田

Rank: 2

积分
99
发表于 2019-9-12 08:48:48 | 显示全部楼层 |阅读模式
说明:
选择一个产品面,选择面上的点,生成点在此面上的法线反向。
生成直线
生成矢量的起点坐标,和矢量方向信息。可用于三坐标测量,如果需要可以自己编个插件用!
效果图:


源码:

  1. [/size][/font][/color][/align]//------------------------------------------------------------------------------  
  2.    //Callback Name: update_cb  
  3.    //------------------------------------------------------------------------------  
  4.   
  5.   
  6.    int Test003::update_cb(NXOpen::BlockStyler::UIBlock* block)  
  7.    {  
  8.     static tag_t face_tag = 0;  
  9.     char msg[132] = "";  
  10.        try  
  11.        {  
  12.            if(block == face_select0)  
  13.            {  
  14.            //---------Enter your code here-----------  
  15.             std::vector<TaggedObject*>objects = face_select0->GetSelectedObjects(); //选面,得到的TAG赋给objects  
  16.             face_tag = objects[0]->Tag();//将C++的TAG转换成C的TAG  
  17.            }  
  18.         else if (block == point0)  
  19.         {  
  20.             //---------Enter your code here-----------  
  21.             double ref_pnt[3] = { 0,0,0 }; //输入一个点  
  22.             Point3d originPt = this->point0->GetProperties()->GetPoint("Point");  
  23.             ref_pnt[0] = originPt.X;  
  24.             ref_pnt[1] = originPt.Y;  
  25.             ref_pnt[2] = originPt.Z;  
  26.               
  27.             double parm1[2];            
  28.             double face_pnt[3] = { 0,0,0 };        
  29.             UF_MODL_ask_face_parm(face_tag, ref_pnt, parm1, face_pnt); //分析点在面上U,V方向的位置  
  30.               
  31.             double point[3];     
  32.             double u1[3];        
  33.             double v1[3];        
  34.             double u2[3];      
  35.             double v2[3];        
  36.             double unit_norm[3] = { 0.0, 0.0, 0.0 };
  37.             double radii[2];     
  38.             UF_MODL_ask_face_props(face_tag, parm1, point, u1, v1, u2, v2, unit_norm, radii);  
  39.   
  40.   
  41.             unit_norm[0] = -unit_norm[0];  
  42.             unit_norm[1] = -unit_norm[1];  
  43.             unit_norm[2] = -unit_norm[2];  
  44.   
  45.             UF_UI_open_listing_window();  
  46.             sprintf(msg, "起点位置: %.2f,%.2f,%.2f\n", ref_pnt[0], ref_pnt[1], ref_pnt[2]);  
  47.             UF_UI_write_listing_window(msg);  
  48.             sprintf(msg, "矢量方向: %.2f,%.2f,%.2f\n", unit_norm[0], unit_norm[1], unit_norm[2]);  
  49.             UF_UI_write_listing_window(msg);  
  50.             //本源码仅自学请不要转载  
  51.             UF_CURVE_line_t line_coords;  
  52.             tag_t  line = 0;  
  53.             line_coords.start_point[0] = ref_pnt[0];  
  54.             line_coords.start_point[1] = ref_pnt[1];  
  55.             line_coords.start_point[2] = ref_pnt[2];  
  56.             line_coords.end_point[0] = ref_pnt[0] + unit_norm[0];  
  57.             line_coords.end_point[1] = ref_pnt[1] + unit_norm[1];  
  58.             line_coords.end_point[2] = ref_pnt[2] + unit_norm[2];  
  59.             UF_CURVE_create_line(&line_coords, &line);  
  60.         }  
  61.     }  
  62.        catch(exception& ex)  
  63.        {  
  64.            //---- Enter your exception handling code here -----  
  65.            Test003::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());  
  66.        }  
  67.        return 0;  
  68.    }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋| ( 蜀ICP备16014681号

GMT+8, 2019-10-17 19:14 , Processed in 0.073748 second(s), 23 queries .

Powered by www.nxopen.cn

© 2001-2013 nxopen.cn

快速回复 返回顶部 返回列表