用戶出口(User Exit)是NX Open 中的一個重要概念。NX在運行過程中某些特定的位置存在規定的出口,當進程執行到這些出口時,NX會自動檢查用戶是否在此處已定義了指向內部程序位置的環境變量:若沒有定義,則以NX默認的方式繼續運行下去;若已定義,則從該處自動運行用戶定制的應用程序。利用不同的User Exit,可使用戶定制的應用程序在NX運行到特定點時被自動執行。每個User Exit 都有唯一的出口名稱,以便用戶在子程序中調用,不同的 User Exit使用不同的出口函數,最常用的 User Exit是ufsta()與 ufusr(),ufsta()是NX菜單啟動時的 User Exit,ufusr()是直接激活的 User Exit。通常情況下,User Exit函數的參數和返回值都相同。User Exit函數的定義如下:void 入口函數名(char * param,int * retcode,int rlen);其中param和retcode 是輸出參數,rlen 是指參數param 的長度,由NX系統自動處理。
根據最后的附表,可以完成許多調用dll的方法。下面以打開部件時運行dll為例。
第一步 設置環境變量:
方法1(不推薦):右鍵計算機->屬性->高級系統設置->環境變量
方法2:打開 ".....\Siemens\NX 12.0\UGII\ugii_env_ug.dat",搜索找到打開部件時運行dll,對應的環境變量USER_RETRIEVE,在ugii_env_ug.dat文件中搜一下(如下圖),然后 將“#USER_RETRIEVE=” 改為 “USER_RETRIEVE=D:\WangPaiFeiXingYuan.dll” 。
第二步 設置出口函數:
打開部件時運行dll需要設置入口為ufget,例子:
1 #include <uf.h> 2 #include <uf_ui.h> 3 #include <uf_exit.h> 4 extern DllExport void ufget(char *param, int *returnCode, int rlen)//注意入口不是ufusr 5 { 6 UF_initialize(); 7 uc1601("Hello 王牌飛行員!", 1); 8 UF_terminate(); 9 } 10 11 extern int ufusr_ask_unload(void) 12 { 13 return (UF_UNLOAD_IMMEDIATELY); 14 }
生成的dll放到 上一步環境變量指定的路徑。
第三步 打開NX,點擊打開部件,測試成功!
附:環境變量、用戶出口對應表。
描述 | 環境變量 | 入口函數 |
Open Part | USER_RETRIEVE | ufget |
New Part | USER_CREATE | ufcre |
Save Part | USER_FILE | ufput |
Save Part As | USER_SAVEAS | ufsvas |
Import Part | USER_MERGE | ufmrg |
Execute GRIP Program | USER_GRIP | ufgrp |
Add Existing Part | USER_RCOMP | ufrcp |
Export Part | USER_FCOMP | uffcp |
Component Where-used | USER_WHERE_USED | ufusd |
Plot File | USER_PLOT | ufplt |
2D Analysis Using Curves | USER_AREAPROPCRV | uf2da |
User Defined Symbols | USER_UDSYMBOL | ufuds |
Open CLSF | USER_CLS_OPEN | ufclso |
Save CLSF | USER_CLS_SAVE | ufclss |
Rename CLSF | USER_CLS_RENAME | ufclsr |
Generate CLF | USER_CL_GEN | ufclg |
Postprocess CLSF | USER_POST | ufpost |
Create Component | USER_CCOMP | ufccp |
Change Displayed Part | USER_CDISP | ufcdp |
Change Work Part | USER_CWORK | ufcwp |
Remove Component | USER_DCOMP | ufdcp |
Reposition Component | USER_MCOMP | ufmcp |
Substitute Component Out | USER_SCOMP1 | ufscpo |
Substitute Component In | USER_SCOMP2 | ufscpi |
Open Spreadsheet | USER_SPRD_OPN | ufspop |
Close Spreadsheet | USER_SPRD_CLO | ufspcl |
Update Spreadsheet | USER_SPRD_UPD | ufspup |
Finish Updating Spreadsheet | USER_SPRD_UPF | ufspuf |
Replace Reference Set | USER_RRSET | ufrrs |
Rename Component | USER_NCOMP | ufncp |
NX Startup | USER_STARTUP | ufsta |
Access Genius Library Management System | USER_GENIUS | ufgen |
Execute DebUG GRIP | USER_GRIPDEBUG | ufgrpd |
Execute User Function | USER_UFUNC | ufufun |
Initialize new operation | USER_CREATE_OPER | ufnopr |
CAM Startup | USER_CAM_STARTUP | ufcams |