NX二次开发:Checkmate例子根据dfa文件检查模型数据
Posted huangym1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NX二次开发:Checkmate例子根据dfa文件检查模型数据相关的知识,希望对你有一定的参考价值。
NX中的checkmate功能是用于检查模型、图纸数据的工具,在UGOPEN中有例子。手动操作可以检查已加载的装配下所有零部件,可以设置通过后保存模型,检查结果保存到Teamcenter中,默认保存在零组件版本下。
代码中可以设置多个检查规则。相关设置可以在用户默认设置中进行设置。
//============================= // Checkmate例子 //============================= // Mandatory UF Includes #include <uf.h> #include <uf_object_types.h> #include <uf_draw.h> #include <uf_part.h> #include <uf_ugmgr.h> #include <uf_ui.h> #include <uf_obj.h> #include <uf_drf.h> // Std C++ Includes #include <iostream> #include <sstream> #include <vector> #include <string> #include <algorithm> #include <tchar.h> #include <atlconv.h> #include <shellapi.h> // check mate #include <NXOpen/Validate_ValidationManager.hxx> #include <NXOpen/Validate_Validator.hxx> #include <NXOpen/Validate_ValidatorOptions.hxx> #include <NXOpen/Validate_Parser.hxx> #include <windows.h> #undef CreateDialog #pragma comment(lib,"shell32.lib") using namespace NXOpen; using std::string; using std::exception; using std::stringstream; using std::endl; using std::cout; using std::cerr; int ExecuteCheckerAndGetResults(); extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen ) try UF_CALL(UF_initialize()); ExecuteCheckerAndGetResults(); UF_CALL(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."); extern "C" DllExport int ufusr_ask_unload() return (int)NXOpen::Session::LibraryUnloadOptionImmediately;// 调试用 //return (int)NXOpen::Session::LibraryUnloadOptionAtTermination;// 程序发布用 //return (int)NXOpen::Session::LibraryUnloadOptionExplicitly; int ExecuteCheckerAndGetResults() // Get the NX session, work part, display part. Session *theSession = Session::GetSession(); Part *workPart(theSession->Parts()->Work()); Part *displayPart(theSession->Parts()->Display()); // Get the NX Check-Mate Validator object. std::vector<Validate::Validator *> validators1; theSession->ValidationManager()->FindValidator("Check-Mate", validators1); // Get the NX Check-Mate ValidatorOptions, and set options. Validate::ValidatorOptions *validatorOptions1; validatorOptions1 = validators1[0]->ValidatorOptions(); validatorOptions1->SetSkipChecking(false); validatorOptions1->SetSkipCheckingDontLoadPart(false); validatorOptions1->SetSaveResultInTeamcenter(Validate::ValidatorOptions::SaveModeTypesSaveIfPassed); validatorOptions1->SetSavePartFile(Validate::ValidatorOptions::SaveModeTypesSaveIfPassed); validatorOptions1->SetSaveResultInPart(false); // 2023_0328 validatorOptions1->SetAutoDisplayResults(Validate::ValidatorOptions::ResultsDisplayModeTypesAlwaysDisplay); validatorOptions1->SetExcludeNonOwnerParts(true); validatorOptions1->SetExcludeReadonlyParts(true); validatorOptions1->SetGenerateCheckFlag(false); validatorOptions1->SetGenerateLogFile(false); validatorOptions1->SetStopOnError(false); validatorOptions1->SetStopOnWarning(false); // 2023_0328 // Clear part nodes if any. validators1[0]->ClearPartNodes(); // Appends the full path of a part file or the current work part. validators1[0]->AppendPartNode(workPart); // Manually add this line to clean all existing tests validators1[0]->ClearCheckerNodes(); // Select a checker and append it into the Validator object. std::vector<NXString> classnames1(2); classnames1[0] = "%mqc_report_browseable_features";//mqc_profile_modeling_cn.dfa classnames1[1] = "%mqc_profile_modeling_cn";//mqc_profile_modeling_cn.dfa validators1[0]->AppendCheckerNodes(classnames1); // Execute the Check-Mate checker. Validation::Result status1; status1 = validators1[0]->Commit(); // Get a Parser object, and show the checker result. std::vector<Validate::Parser *> parsers1; theSession->ValidationManager()->FindParser("Validation Gadget", parsers1); parsers1[0]->ClearResultObjects(); parsers1[0]->SetDataSource(Validate::Parser::DataSourceTypesMostRecentRun); parsers1[0]->SetMaxDisplayObjects(10); parsers1[0]->Commit(); return 0;
设置、保存后、用户默认设置截图:
调试GIF动态图:
黄河远上白云间,一片孤城万仞山。
羌笛何须怨杨柳,春风不度玉门关。
诗人初到凉州,面对黄河、边城的辽阔景象,又耳听着《折杨柳》曲,有感而发,写成了这首表现戍守边疆的士兵思念家乡情怀的诗作。
诗的前两句描绘了西北边地广漠壮阔的风光。首句抓住自下(游)向上(游)、由近及远眺望黄河的特殊感受,描绘出“黄河远上白云间”的动人画面:汹涌澎湃波浪滔滔的黄河竟像一条丝带迤逦飞上云端。写得真是神思飞跃,气象开阔。诗人的另一名句“黄河入海流”,其观察角度与此正好相反,是自上而下的目送;而李白的“黄河之水天上来”,虽也写观望上游,但视线运动却又由远及近,与此句不同。“黄河入海流”和“黄河之水天上来”,同是着意渲染黄河一泻千里的气派,表现的是动态美。而“黄河远上白云间”,方向与河的流向相反,意在突出其源远流长的闲远仪态,表现的是一种静态美。同时展示了边地广漠壮阔的风光,不愧为千古奇句。
以上是关于NX二次开发:Checkmate例子根据dfa文件检查模型数据的主要内容,如果未能解决你的问题,请参考以下文章
UG NX二次开发(C#)-Part-根据模型名称获取part的对象
UG NX二次开发(C#)-Part-根据模型名称获取part的对象