NX二次開發:一個DLL設定多個按鈕操作的方法

huangym1發表於2023-03-29

還有很多人不知道如何設定一個DLL呼叫不同的功能,今天說的是透過入口函式引數值進行設定。還有一種方法是使用UF_MB.h裡面的函式也可以實現,今天先說一種,具體看程式碼。

  1 //=============================
  2 // 一個DLL設定多個按鈕操作的方法
  3 //=============================
  4 // Mandatory UF Includes
  5 #include <uf.h>
  6 #include <uf_object_types.h>
  7 #include <uf_draw.h>
  8 #include <uf_part.h>
  9 #include <uf_ugmgr.h>
 10 #include <uf_ui.h>
 11 #include <uf_obj.h>
 12 #include <uf_drf.h>
 13 
 14 // Std C++ Includes
 15 #include <iostream>
 16 #include <sstream>
 17 #include <vector>
 18 #include <string>
 19 #include <algorithm>
 20 #include <tchar.h>
 21 #include <atlconv.h>
 22 #include <shellapi.h>
 23 
 24 #include <windows.h>
 25 #undef CreateDialog
 26 #pragma comment(lib,"shell32.lib")
 27 
 28 using namespace NXOpen;
 29 using std::string;
 30 using std::exception;
 31 using std::stringstream;
 32 using std::endl;
 33 using std::cout;
 34 using std::cerr;
 35 
 36 static enum StringValue {
 37     evNotDefined,
 38     evStringValue1,
 39     evStringValue2,
 40     evStringValue3,
 41     evStringEnd
 42 };
 43 static std::map<std::string, StringValue> s_mapStringValues;
 44 static void Initialize()
 45 {
 46     s_mapStringValues["HNMDL_TOOL251"] = evStringValue1;
 47     s_mapStringValues["HNMDL_TOOL252"] = evStringValue2;
 48     s_mapStringValues["HNMDL_TOOL253"] = evStringValue3;
 49     s_mapStringValues["end"] = evStringEnd;
 50 
 51     cout << "s_mapStringValues contains " << s_mapStringValues.size() << " entries." << endl;
 52 }
 53 
 54 
 55 extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen )
 56 {
 57     try
 58     {
 59         UF_CALL(UF_initialize());
 60 
 61         Initialize();
 62 
 63         switch (s_mapStringValues[parm])
 64         {
 65         case evStringValue1:
 66             uc1601(parm, 1);
 67             // 其他操作
 68             break;
 69         case evStringValue2:
 70             uc1601(parm, 1);
 71             // 其他操作
 72             break;
 73         case evStringValue3:
 74             uc1601(parm, 1);
 75             // 其他操作
 76             break;
 77         default:
 78             uc1601(parm, 1);
 79             // 其他操作
 80             break;
 81         }
 82 
 83         UF_CALL(UF_terminate());
 84     }
 85     catch (const NXException& e1)
 86     {
 87         UI::GetUI()->NXMessageBox()->Show("NXException", NXOpen::NXMessageBox::DialogTypeError, e1.Message());
 88     }
 89     catch (const exception& e2)
 90     {
 91         UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, e2.what());
 92     }
 93     catch (...)
 94     {
 95         UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, "Unknown Exception.");
 96     }
 97 }
 98 
 99 extern "C" DllExport int ufusr_ask_unload()
100 {
101     return (int)NXOpen::Session::LibraryUnloadOptionImmediately;// 除錯用
102     //return (int)NXOpen::Session::LibraryUnloadOptionAtTermination;// 程式釋出用
103     //return (int)NXOpen::Session::LibraryUnloadOptionExplicitly;
104 }

 

相關簡介及函式截圖:

 

GIF動圖:

 

黃河遠上白雲間,一片孤城萬仞山。
羌笛何須怨楊柳,春風不度玉門關。

詩人初到涼州,面對黃河、邊城的遼闊景象,又耳聽著《折楊柳》曲,有感而發,寫成了這首表現戍守邊疆計程車兵思念家鄉情懷的詩作。

  詩的前兩句描繪了西北邊地廣漠壯闊的風光。首句抓住自下(遊)向上(遊)、由近及遠眺望黃河的特殊感受,描繪出“黃河遠上白雲間”的動人畫面:洶湧澎湃波浪滔滔的黃河竟像一條絲帶迤邐飛上雲端。寫得真是神思飛躍,氣象開闊。詩人的另一名句“黃河入海流”,其觀察角度與此正好相反,是自上而下的目送;而李白的“黃河之水天上來”,雖也寫觀望上游,但視線運動卻又由遠及近,與此句不同。“黃河入海流”和“黃河之水天上來”,同是著意渲染黃河一瀉千里的氣派,表現的是動態美。而“黃河遠上白雲間”,方向與河的流向相反,意在突出其源遠流長的閒遠儀態,表現的是一種靜態美。同時展示了邊地廣漠壯闊的風光,不愧為千古奇句。

 

相關文章