打开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日