NX二次开发:Checkmate例子根据dfa文件检查模型数据

NX中的checkmate功能是用于检查模型、图纸数据的工具,在UGOPEN中有例子。手动操作可以检查已加载的装配下所有零部件,可以设置通过后保存模型,检查结果保存到Teamcenter中,默认保存在零组件版本下。

代码中可以设置多个检查规则。相关设置可以在用户默认设置中进行设置。

  1 //=============================
  2 // Checkmate例子
  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 // check mate
 25 #include <NXOpen/Validate_ValidationManager.hxx>
 26 #include <NXOpen/Validate_Validator.hxx>
 27 #include <NXOpen/Validate_ValidatorOptions.hxx>
 28 #include <NXOpen/Validate_Parser.hxx>
 29 
 30 #include <windows.h>
 31 #undef CreateDialog
 32 #pragma comment(lib,"shell32.lib")
 33 
 34 using namespace NXOpen;
 35 using std::string;
 36 using std::exception;
 37 using std::stringstream;
 38 using std::endl;
 39 using std::cout;
 40 using std::cerr;
 41 
 42 int ExecuteCheckerAndGetResults();
 43 
 44 extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen )
 45 {
 46     try
 47     {
 48         UF_CALL(UF_initialize());
 49 
 50         ExecuteCheckerAndGetResults();
 51 
 52         UF_CALL(UF_terminate());
 53     }
 54     catch (const NXException& e1)
 55     {
 56         UI::GetUI()->NXMessageBox()->Show("NXException", NXOpen::NXMessageBox::DialogTypeError, e1.Message());
 57     }
 58     catch (const exception& e2)
 59     {
 60         UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, e2.what());
 61     }
 62     catch (...)
 63     {
 64         UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, "Unknown Exception.");
 65     }
 66 }
 67 
 68 extern "C" DllExport int ufusr_ask_unload()
 69 {
 70     return (int)NXOpen::Session::LibraryUnloadOptionImmediately;// 调试用
 71     //return (int)NXOpen::Session::LibraryUnloadOptionAtTermination;// 程序发布用
 72     //return (int)NXOpen::Session::LibraryUnloadOptionExplicitly;
 73 }
 74 
 75 int ExecuteCheckerAndGetResults()
 76 { 
 77     // Get the NX session, work part, display part.
 78     Session *theSession = Session::GetSession();
 79     Part *workPart(theSession->Parts()->Work());
 80     Part *displayPart(theSession->Parts()->Display());
 81 
 82     // Get the NX Check-Mate Validator object.
 83     std::vector<Validate::Validator *> validators1;
 84     theSession->ValidationManager()->FindValidator("Check-Mate", validators1);
 85 
 86     // Get the NX Check-Mate ValidatorOptions, and set options.
 87     Validate::ValidatorOptions *validatorOptions1;
 88     validatorOptions1 = validators1[0]->ValidatorOptions();
 89 
 90     validatorOptions1->SetSkipChecking(false);
 91     validatorOptions1->SetSkipCheckingDontLoadPart(false);
 92     validatorOptions1->SetSaveResultInTeamcenter(Validate::ValidatorOptions::SaveModeTypesSaveIfPassed);
 93     validatorOptions1->SetSavePartFile(Validate::ValidatorOptions::SaveModeTypesSaveIfPassed);
 94     validatorOptions1->SetSaveResultInPart(false);
 95 
 96     // 2023_0328
 97     validatorOptions1->SetAutoDisplayResults(Validate::ValidatorOptions::ResultsDisplayModeTypesAlwaysDisplay);
 98     validatorOptions1->SetExcludeNonOwnerParts(true);
 99     validatorOptions1->SetExcludeReadonlyParts(true);
100     validatorOptions1->SetGenerateCheckFlag(false);
101     validatorOptions1->SetGenerateLogFile(false);
102     validatorOptions1->SetStopOnError(false);
103     validatorOptions1->SetStopOnWarning(false);
104     // 2023_0328
105 
106     // Clear part nodes if any.
107     validators1[0]->ClearPartNodes();
108 
109     // Appends the full path of a part file or the current work part.
110     validators1[0]->AppendPartNode(workPart);
111 
112     // Manually add this line to clean all existing tests
113     validators1[0]->ClearCheckerNodes();
114 
115     // Select a checker and append it into the Validator object.
116     std::vector<NXString> classnames1(2);
117     classnames1[0] = "%mqc_report_browseable_features";//mqc_profile_modeling_cn.dfa
118     classnames1[1] = "%mqc_profile_modeling_cn";//mqc_profile_modeling_cn.dfa
119     validators1[0]->AppendCheckerNodes(classnames1);
120 
121     // Execute the Check-Mate checker.
122     Validation::Result status1;
123     status1 = validators1[0]->Commit();
124 
125     // Get a Parser object, and show the checker result.
126     std::vector<Validate::Parser *> parsers1;
127     theSession->ValidationManager()->FindParser("Validation Gadget", parsers1);
128     parsers1[0]->ClearResultObjects();
129     parsers1[0]->SetDataSource(Validate::Parser::DataSourceTypesMostRecentRun);
130     parsers1[0]->SetMaxDisplayObjects(10);
131     parsers1[0]->Commit();
132 
133     return 0;
134 }

 

设置、保存后、用户默认设置截图:

NX二次开发:Checkmate例子根据dfa文件检查模型数据

 NX二次开发:Checkmate例子根据dfa文件检查模型数据NX二次开发:Checkmate例子根据dfa文件检查模型数据

 NX二次开发:Checkmate例子根据dfa文件检查模型数据

 

 调试GIF动态图:

NX二次开发:Checkmate例子根据dfa文件检查模型数据

 

黄河远上白云间,一片孤城万仞山。
羌笛何须怨杨柳,春风不度玉门关。

 

诗人初到凉州,面对黄河、边城的辽阔景象,又耳听着《折杨柳》曲,有感而发,写成了这首表现戍守边疆的士兵思念家乡情怀的诗作。

  诗的前两句描绘了西北边地广漠壮阔的风光。首句抓住自下(游)向上(游)、由近及远眺望黄河的特殊感受,描绘出“黄河远上白云间”的动人画面:汹涌澎湃波浪滔滔的黄河竟像一条丝带迤逦飞上云端。写得真是神思飞跃,气象开阔。诗人的另一名句“黄河入海流”,其观察角度与此正好相反,是自上而下的目送;而李白的“黄河之水天上来”,虽也写观望上游,但视线运动却又由远及近,与此句不同。“黄河入海流”和“黄河之水天上来”,同是着意渲染黄河一泻千里的气派,表现的是动态美。而“黄河远上白云间”,方向与河的流向相反,意在突出其源远流长的闲远仪态,表现的是一种静态美。同时展示了边地广漠壮阔的风光,不愧为千古奇句。

 

原文链接:https://www.cnblogs.com/huangym1/p/17266787.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NX二次开发:Checkmate例子根据dfa文件检查模型数据 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • 【Visual Leak Detector】配置项 ReportFile

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 配置文件中配置项 ReportFile 的使用方法。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 配置文件使用说明 2. 设置输出文件的路径 2.1 测试代码 2.2 ReportFile 为空时的输出 2.3 ReportFile 指定中文文件名时的输出 2.…

    C++ 2023年4月18日
    00
  • 驱动开发:通过MDL映射实现多次通信

    在前几篇文章中LyShark通过多种方式实现了驱动程序与应用层之间的通信,这其中就包括了通过运用SystemBuf缓冲区通信,运用ReadFile读写通信,运用PIPE管道通信,以及运用ASYNC反向通信,这些通信方式在应对一收一发模式的时候效率极高,但往往我们需要实现一次性吐出多种数据,例如ARK工具中当我们枚举内核模块时,往往应用层例程中可以返回几条甚至…

    C++ 2023年4月30日
    00
  • 如何将 Spire.Doc for C++ 集成到 C++ 程序中

    Spire.Doc for C++ 是一个专业的 Word 库,供开发人员在任何类型的 C++ 应用程序中阅读、创建、编辑、比较和转换 Word 文档。 本文演示了如何以两种不同的方式将 Spire.Doc for C++ 集成到您的 C++ 应用程序中。 通过 NuGet 安装 Spire.Doc for C++ 通过手动导入库安装 Spire.Doc f…

    C++ 2023年4月27日
    00
  • 高效c语言1快速入门

    本章将开发你的第一个C语言程序:传统的 “Hello, world!”程序。然后讨论一些编辑器和编译器的选项,并阐述移植性问题。 Hello, world! #include <stdio.h> #include <stdlib.h> int main(void) { puts(“Hello, world!”); return EXI…

    C++ 2023年5月10日
    00
  • Qt-FFmpeg开发-视频播放(5)

    音视频/FFmpeg #Qt Qt-FFmpeg开发-视频播放【软/硬解码 + OpenGL显示YUV/NV12】 目录 音视频/FFmpeg #Qt Qt-FFmpeg开发-视频播放【软/硬解码 + OpenGL显示YUV/NV12】 1、概述 2、实现效果 3、FFmpeg硬解码流程 4、优化av_hwframe_transfer_data()性能低问题…

    C++ 2023年4月17日
    00
  • L1-080 乘法口诀数列*(使用C++)

    L1-080 乘法口诀数列 分数 20 全屏浏览题目 切换布局 作者 陈越单位 浙江大学   本题要求你从任意给定的两个 1 位数字 a1​ 和 a2​ 开始,用乘法口诀生成一个数列 {an​},规则为从 a1​ 开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。 输入格式: 输入在一行…

    C++ 2023年4月18日
    00
  • luogu_P1040 [NOIP2003 提高组] 加分二叉树

    P1040 [NOIP2003 提高组] 加分二叉树 – 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意:给你一颗中序遍历为1到n的二叉树,和每个节点的val。树的值=左子树的值×右子树的值+根的val,空树值为1,求整个树最大值和这个值树的前序遍历。 题解:区间dp。dp[l][r]表示最大值,root[l][r]表示最大值的根,枚举区…

    C++ 2023年4月27日
    00
  • 【Visual Leak Detector】使用注意事项

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍使用 VLD 时的注意事项。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 官网文档 2. 注意事项 1. 官网文档 可以在 Using-Visual-Leak-Detector 官方文档里看到如何使用 VLD,里面介绍了如何在 Visual C++ 2003/2005/2…

    C++ 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部