1. 程式人生 > 實用技巧 >【NX二次開發】 獲取產品曲面上多個點對應的面的垂直向量!

【NX二次開發】 獲取產品曲面上多個點對應的面的垂直向量!

說明:
選擇一個產品面,選擇面上的點,生成點在此面上的法線反向,生成直線。
生成向量的起點座標,和向量方向資訊。可用於三座標測量,如果需要可以自己編個外掛用!

效果圖:

原始碼:

//------------------------------------------------------------------------------ 
//Callback Name: update_cb 
//------------------------------------------------------------------------------ 

int Test003::update_cb(NXOpen::BlockStyler::UIBlock* block)
{
    
static tag_t face_tag = 0; char msg[132] = ""; try { if (block == face_select0) { //---------Enter your code here----------- std::vector<TaggedObject*>objects = face_select0->GetSelectedObjects(); //選面,得到的TAG賦給objects face_tag = objects[0
]->Tag();//將C++的TAG轉換成C的TAG } else if (block == point0) { //---------Enter your code here----------- double ref_pnt[3] = { 0,0,0 }; //輸入一個點 Point3d originPt = this->point0->GetProperties()->GetPoint("Point"); ref_pnt[0] = originPt.X; ref_pnt[
1] = originPt.Y; ref_pnt[2] = originPt.Z; double parm1[2]; double face_pnt[3] = { 0,0,0 }; UF_MODL_ask_face_parm(face_tag, ref_pnt, parm1, face_pnt); //分析點在面上U,V方向的位置 double point[3]; double u1[3]; double v1[3]; double u2[3]; double v2[3]; double unit_norm[3] = { 0.0, 0.0, 0.0 }; double radii[2]; UF_MODL_ask_face_props(face_tag, parm1, point, u1, v1, u2, v2, unit_norm, radii); unit_norm[0] = -unit_norm[0]; unit_norm[1] = -unit_norm[1]; unit_norm[2] = -unit_norm[2]; UF_UI_open_listing_window(); sprintf(msg, "起點位置: %.2f,%.2f,%.2f\n", ref_pnt[0], ref_pnt[1], ref_pnt[2]); UF_UI_write_listing_window(msg); sprintf(msg, "向量方向: %.2f,%.2f,%.2f\n", unit_norm[0], unit_norm[1], unit_norm[2]); UF_UI_write_listing_window(msg); //歡迎加入二次開發QQ群:753801561 本原始碼僅自學請不要轉載 UF_CURVE_line_t line_coords; tag_t line = 0; line_coords.start_point[0] = ref_pnt[0]; line_coords.start_point[1] = ref_pnt[1]; line_coords.start_point[2] = ref_pnt[2]; line_coords.end_point[0] = ref_pnt[0] + unit_norm[0]; line_coords.end_point[1] = ref_pnt[1] + unit_norm[1]; line_coords.end_point[2] = ref_pnt[2] + unit_norm[2]; UF_CURVE_create_line(&line_coords, &line); } } catch (exception& ex) { //---- Enter your exception handling code here ----- Test003::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what()); } return 0; }