NX二次開發-遍歷所有物件UF_MODL_ask_object()
阿新 • • 發佈:2020-10-26
//Test // Mandatory UF Includes #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> #include <uf_eval.h> #include <uf_ui.h> #include <uf_object_types.h> // Internal Includes #include <NXOpen/ListingWindow.hxx> #include <NXOpen/NXMessageBox.hxx> #include <NXOpen/UI.hxx> #include <NXOpen/NXException.hxx> #include <NXOpen/PartCollection.hxx> #include <NXOpen/Session.hxx> // Std C++ Includes using namespace NXOpen; using std::string; using std::exception; using std::stringstream; using std::endl; //------------------------------------------------------------------------------ // NXOpen c++ test class //------------------------------------------------------------------------------ class MyClass { // class members public: static Session *theSession; static UI *theUI; MyClass(); ~MyClass(); void do_it(); void print(const NXString &); void print(const string &); void print(const char*); private: BasePart *workPart, *displayPart; NXMessageBox *mb; ListingWindow *lw; LogFile *lf; }; //------------------------------------------------------------------------------ // Initialize static variables //------------------------------------------------------------------------------ Session *(MyClass::theSession) = NULL; UI *(MyClass::theUI) = NULL; //------------------------------------------------------------------------------ // Constructor //------------------------------------------------------------------------------ MyClass::MyClass() { // Initialize the NX Open C++ API environment MyClass::theSession = NXOpen::Session::GetSession(); MyClass::theUI = UI::GetUI(); mb = theUI->NXMessageBox(); lw = theSession->ListingWindow(); lf = theSession->LogFile(); workPart = theSession->Parts()->BaseWork(); displayPart = theSession->Parts()->BaseDisplay(); } //------------------------------------------------------------------------------ // Destructor //------------------------------------------------------------------------------ MyClass::~MyClass() { } //------------------------------------------------------------------------------ // Print string to listing window or stdout //------------------------------------------------------------------------------ void MyClass::print(const NXString &msg) { if(! lw->IsOpen() ) lw->Open(); lw->WriteLine(msg); } void MyClass::print(const string &msg) { if(! lw->IsOpen() ) lw->Open(); lw->WriteLine(msg); } void MyClass::print(const char * msg) { if(! lw->IsOpen() ) lw->Open(); lw->WriteLine(msg); } //------------------------------------------------------------------------------ // Do something //------------------------------------------------------------------------------ void MyClass::do_it() { // TODO: add your code here UF_UI_open_listing_window(); tag_t obj = NULL_TAG; UF_MODL_ask_object(UF_solid_type, UF_solid_body_subtype, &obj);//把UF_solid_type,UF_solid_body_subtype修改成你想要得到的物件型別 while (NULL_TAG != obj) { UF_OBJ_set_color(obj, 186);//設定顏色為紅色 char msg[256]; sprintf_s(msg, "%d\n", obj);//列印tag值 UF_UI_write_listing_window(msg); UF_MODL_ask_object(UF_solid_type, UF_solid_body_subtype, &obj); } } //------------------------------------------------------------------------------ // Entry point(s) for unmanaged internal NXOpen C/C++ programs //------------------------------------------------------------------------------ // Explicit Execution extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen ) { try { // Create NXOpen C++ class instance UF_initialize(); MyClass *theMyClass; theMyClass = new MyClass(); theMyClass->do_it(); delete theMyClass; UF_terminate(); } catch (const NXException& e1) { UI::GetUI()->NXMessageBox()->Show("NXException", NXOpen::NXMessageBox::DialogTypeError, e1.Message()); } catch (const exception& e2) { UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, e2.what()); } catch (...) { UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, "Unknown Exception."); } } //------------------------------------------------------------------------------ // Unload Handler //------------------------------------------------------------------------------ extern "C" DllExport int ufusr_ask_unload() { return (int)NXOpen::Session::LibraryUnloadOptionImmediately; }