打開VS2013
點擊新建,選擇MFC DLL
點擊確定
點下一步
什么都不改,直接點完成
進來之后先編譯一下,看是否編譯成功
打開項目屬性,更改這幾處
1 $(UGII_BASE_DIR)\ugopen
libufun.lib
libufun_cae.lib
libufun_cam.lib
libufun_die.lib
libufun_vdac.lib
libufun_weld.lib
libnxopencpp.lib
libnxopencpp_annotations.lib
libnxopencpp_assemblies.lib
libnxopencpp_bodydes.lib
libnxopencpp_cae.lib
libnxopencpp_cam.lib
libnxopencpp_diagramming.lib
libnxopencpp_diagramminglibraryauthor.lib
libnxopencpp_die.lib
libnxopencpp_display.lib
libnxopencpp_drafting.lib
libnxopencpp_drawings.lib
libnxopencpp_facet.lib
libnxopencpp_features.lib
libnxopencpp_fields.lib
libnxopencpp_formboard.lib
libnxopencpp_gateway.lib
libnxopencpp_geometricanalysis.lib
libnxopencpp_geometricutilities.lib
libnxopencpp_issue.lib
libnxopencpp_layer.lib
libnxopencpp_layout2d.lib
libnxopencpp_markup.lib
libnxopencpp_mechanicalrouting.lib
libnxopencpp_mechatronics.lib
libnxopencpp_mfg.lib
libnxopencpp_modldirect.lib
libnxopencpp_motion.lib
libnxopencpp_openxml.lib
libnxopencpp_optimization.lib
libnxopencpp_options.lib
libnxopencpp_partfamily.lib
libnxopencpp_pdm.lib
libnxopencpp_physmat.lib
libnxopencpp_placement.lib
libnxopencpp_plas.lib
libnxopencpp_positioning.lib
libnxopencpp_preferences.lib
libnxopencpp_report.lib
libnxopencpp_routing.lib
libnxopencpp_shapesearch.lib
libnxopencpp_sheetmetal.lib
libnxopencpp_shipdesign.lib
libnxopencpp_sim.lib
libnxopencpp_tooling.lib
libnxopencpp_userdefinedobjects.lib
libnxopencpp_userdefinedtemplate.lib
libnxopencpp_validate.lib
libnxopencpp_visualreporting.lib
libnxopencpp_weld.lib
libugopenint.lib
libugopenint_cae.lib
libugopenint_cam.lib
libnxopenuicpp.lib
然后點確定
添加頭文件
添加ufusr入口函數和卸載方式
1 extern "C" DllExport void ufusr(char *param, int *retcod, int param_len) 2 { 3 4 if (UF_initialize()) 5 { 6 /* Failed to initialize */ 7 return; 8 } 9 // The following method shows the dialog immediately 10 11 12 13 UF_terminate(); 14 } 15 16 extern "C" DllExport int ufusr_ask_unload() 17 { 18 return (UF_UNLOAD_UG_TERMINATE); 19 //return (UF_UNLOAD_IMMEDIATELY); 20 //return UF_UNLOAD_SEL_DIALOG; 21 }
將項目改成64位的
打開配置管理器
編譯項目,成功
添加對話框,找到資源視圖,右鍵添加資源
選擇Dialog,點新建
添加類
對話框右鍵-添加類
隨便取名字,CFirstMFCDialog,點完成
編譯項目成功
添加對話框初始化虛函數
對話框點右鍵-添加類向導
然后點確定
在編譯項目成功
添加頭文件
在去ufusr入口函數里獲取UG窗口句柄,設置對話框。寫的內容固定格式
1 AFX_MANAGE_STATE(AfxGetStaticModuleState()); 2 3 4 5 HWND UGHwnd = (HWND)UF_UI_get_default_parent();//獲取UG窗口句柄 6 7 CWnd *ugwindow = CWnd::FromHandle(UGHwnd); 8 9 10 11 CFirstMFCDialog *dlg = new CFirstMFCDialog(ugwindow); 12 13 if (dlg != NULL) 14 15 { 16 17 BOOL ret = dlg->Create(IDD_DIALOG1, ugwindow); 18 19 dlg->ShowWindow(SW_SHOW); 20 21 //dlg->SetWindowPos(ugwindow, 300, 220, 200, 200, SWP_NOSIZE);//設置對話框固定位置 22 23 }
在編譯項目成功
打開UG去調對話框就出來了
提示,因為選擇的卸載方式,需求每次修改代碼重新編譯,都要關閉UG。來卸載掉。
截止到這個MFC+NX二次開發的這個環境搭建就結束了
下面做一個實例。
選擇位置,創建塊。(大概演示,不在詳細寫步驟)
對話框
對話框初始化代碼
1 BOOL CFirstMFCDialog::OnInitDialog() 2 { 3 CDialogEx::OnInitDialog(); 4 5 // TODO: 在此添加額外的初始化 6 7 //對話框初始值 8 m_edit1.SetWindowText("100"); 9 m_edit2.SetWindowText("50"); 10 m_edit3.SetWindowText("25"); 11 12 return TRUE; // return TRUE unless you set the focus to a control 13 // 異常: OCX 屬性頁應返回 FALSE 14 }
點構造器代碼
1 void CFirstMFCDialog::OnBnClickedButton1() 2 { 3 // TODO: 在此添加控件通知處理程序代碼 4 5 UF_initialize(); 6 7 UF_UI_lock_ug_access(UF_UI_FROM_CUSTOM);//對話框加鎖 8 9 char sCue[] = "點構造器"; 10 UF_UI_POINT_base_method_t base_method = UF_UI_POINT_INFERRED; 11 tag_t tPoint = NULL_TAG; 12 double sBasePoint[3]; 13 int iResponse; 14 UF_UI_point_construct(sCue, &base_method, &tPoint, sBasePoint, &iResponse); 15 16 UF_UI_unlock_ug_access(UF_UI_FROM_CUSTOM);//對話框解鎖 17 18 UF_terminate(); 19 }
點確定的代碼
1 void CFirstMFCDialog::OnBnClickedOk() 2 { 3 // TODO: 在此添加控件通知處理程序代碼 4 CDialogEx::OnOK(); 5 6 UF_initialize(); 7 8 //獲取對話框里的輸入值 9 CString length; 10 m_edit1.GetWindowTextA(length); 11 12 CString width; 13 m_edit2.GetWindowTextA(width); 14 15 CString high; 16 m_edit3.GetWindowTextA(high); 17 18 //轉換 19 //CString轉char* 20 USES_CONVERSION; 21 char* length1 = T2A(length.GetBuffer(0)); 22 length.ReleaseBuffer(); 23 24 char* width1 = T2A(width.GetBuffer(0)); 25 width.ReleaseBuffer(); 26 27 char* high1 = T2A(high.GetBuffer(0)); 28 high.ReleaseBuffer(); 29 30 UF_FEATURE_SIGN sign = UF_NULLSIGN; 31 char * edge_len[3] = { length1, width1, high1 }; 32 tag_t blk_obj_id = NULL_TAG; 33 UF_MODL_create_block1(sign, sBasePoint, edge_len, &blk_obj_id); 34 35 UF_terminate(); 36 }
Caesar盧尚宇
2019年7月13日