[NXOpen C++] UG二次开发,通过SelectTaggedObjects,选择多个UG对象并获得对象标签

    xiaoxiao2023-09-27  174

    说明:通过SelectTaggedObjects,通过SelectTaggedObjects,选择多个UG对象并输出对象的类型

    对象的类型分为:(Type)大类和子类(SubType),UG中大部分公共对象都是在头文件uf_object_type.h中定义。

    测试代码:选择多个对象并输出对象的类型和子类型

    //通过SelectTaggedObject选择对象并输出tag标签 #if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun ) # include <strstream> # include <iostream> using std::ostrstream; using std::endl; using std::ends; using std::cerr; #else # include <strstream.h> # include <iostream.h> #endif #include <uf.h> #include <uf_ui.h> #include <uf_exit.h> #include <uf_defs.h> #include <NXOpen/NXException.hxx> #include <NXOpen/ModelingView.hxx> #include <NXOpen/ModelingViewCollection.hxx> #include <NXOpen/Part.hxx> #include <NXOpen/PartCollection.hxx> #include <uf_ui.h> #include <uf_ui_ugopen.h> #include <uf.h> #include <NXOpen/Session.hxx> #include <NXOpen/UI.hxx> #include <NXOpen/selection.hxx> #include <NXOpen/Features_Feature.hxx> #include <NXOpen/ListingWindow.hxx> #include <uf_obj.h> using namespace NXOpen; using namespace std; #define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X))) static int report_error( char *file, int line, char *call, int irc) { if (irc) { char err[133], msg[133]; sprintf(msg, "*** ERROR code %d at line %d in %s:\n+++ ", irc, line, file); UF_get_fail_message(irc, err); UF_print_syslog(msg, FALSE); UF_print_syslog(err, FALSE); UF_print_syslog("\n", FALSE); UF_print_syslog(call, FALSE); UF_print_syslog(";\n", FALSE); if (!UF_UI_open_listing_window()) { UF_UI_write_listing_window(msg); UF_UI_write_listing_window(err); UF_UI_write_listing_window("\n"); UF_UI_write_listing_window(call); UF_UI_write_listing_window(";\n"); } } return(irc); } extern DllExport void ufsta( char *param, int *returnCode, int rlen ) { /* Initialize the API environment */ if( UF_CALL(UF_initialize()) ) { return; } /* TODO: Add your application code here */ Session *theSession = Session::GetSession(); Part *workPart(theSession->Parts()->Work()); UI *theUI = UI::GetUI(); vector<TaggedObject*> vecObjects; //提示 标题 选择范围 是否包含特征 是否保持高亮 被选择的对象 光标位置坐标 Selection::Response res; res=theUI->SelectionManager()->SelectTaggedObjects("请选择3个尺寸,工具自动对比图框中的备料尺寸,并自动修改附加文本为(备料尺寸)","请选择3个尺寸",Selection::SelectionScopeWorkPart,true,false,vecObjects); //SelectionScopeUseDefault 整个装配 在工作部件和组件内 仅在工作部件内 //SelectionScopeWorkPart 仅在工作部件内 //SelectionScopeWorkPartAndOccurrence 在工作部件和组件内 if (res == 3)//如果点了确定 { for(int i=0; i<vecObjects.size() ;i++) { tag_t tagTag=NULL_TAG; tagTag=vecObjects[i]->GetTag(); } } /* Terminate the API environment */ UF_CALL(UF_terminate()); } extern int ufusr_ask_unload( void ) { return (UF_UNLOAD_IMMEDIATELY); }

     

    最新回复(0)