NX二次开发——测量距离(两个对象之间最近、最远距离)

一、概述

        最近看到 一些文章比较有趣,所以做个记录,顺便写一下博客,附上全部代码,方便刚从事NX二次开发同僚的理解。本次主要模拟NX自带的测量工具中对两个实体对象进行测量距离。NX系统功能如下所示:

二、代码解析

主要代码:

void measureDistance(tag_t objTAG1, tag_t objTAG2, double &MeasureDistance_Max, double &MeasureDistance_Min)
{double retMax = 0.0, retMin = 0.0;NXOpen::Session* theSession = NXOpen::Session::GetSession();NXOpen::Part* workPart(theSession->Parts()->Work());//测量对象1NXOpen::DisplayableObject* object1(dynamic_cast<NXOpen::DisplayableObject*>(NXObjectManager::Get(objTAG1)));//测量对象2NXOpen::DisplayableObject* object2(dynamic_cast<NXOpen::DisplayableObject*>(NXObjectManager::Get(objTAG2)));NXOpen::MeasureDistance* measureDistance0;NXOpen::MeasureDistance* measureDistance1;// 获得最远距离measureDistance0 = workPart->MeasureManager()->NewDistance(NULL, NXOpen::MeasureManager::MeasureType::MeasureTypeMaximum, object1, object2);// 获得最近距离measureDistance1 = workPart->MeasureManager()->NewDistance(NULL, NXOpen::MeasureManager::MeasureType::MeasureTypeMinimum, object1, object2);// 获取值MeasureDistance_Max = measureDistance0->Value();MeasureDistance_Min = measureDistance1->Value();delete measureDistance0, measureDistance1;
}

全部代码:

//NX12_NXOpenCPP_Wizard1// Mandatory UF Includes
#include <uf.h>
#include <uf_object_types.h>// Internal Includes
#include <NXOpen/ListingWindow.hxx>
#include <NXOpen/NXMessageBox.hxx>
#include <NXOpen/UI.hxx>// Internal+External Includes
#include <NXOpen/Annotations.hxx>
#include <NXOpen/Assemblies_Component.hxx>
#include <NXOpen/Assemblies_ComponentAssembly.hxx>
#include <NXOpen/Body.hxx>
#include <NXOpen/BodyCollection.hxx>
#include <NXOpen/Face.hxx>
#include <NXOpen/Line.hxx>
#include <NXOpen/NXException.hxx>
#include <NXOpen/NXObject.hxx>
#include <NXOpen/Part.hxx>
#include <NXOpen/PartCollection.hxx>
#include <NXOpen/Session.hxx>// Std C++ Includes
#include <iostream>
#include <sstream>
#include <uf_defs.h>
#include <NXOpen/NXException.hxx>
#include <NXOpen/Session.hxx>
#include <NXOpen/ModelingView.hxx>
#include <NXOpen/ModelingViewCollection.hxx>
#include <NXOpen/Part.hxx>
#include <NXOpen/PartCollection.hxx>
#include <NXOpen/View.hxx>#include <NXOpen/Session.hxx>
#include <NXOpen/Body.hxx>
#include <NXOpen/BodyCollection.hxx>
#include <NXOpen/Builder.hxx>
#include <NXOpen/DatumAxis.hxx>
#include <NXOpen/DatumCollection.hxx>
#include <NXOpen/Direction.hxx>
#include <NXOpen/DirectionCollection.hxx>
#include <NXOpen/DisplayableObject.hxx>
#include <NXOpen/Expression.hxx>
#include <NXOpen/ExpressionCollection.hxx>
#include <NXOpen/MeasureDistanceBuilder.hxx>
#include <NXOpen/MeasureManager.hxx>
#include <NXOpen/Part.hxx>
#include <NXOpen/PartCollection.hxx>
#include <NXOpen/ScCollector.hxx>
#include <NXOpen/SelectDisplayableObject.hxx>
#include <NXOpen/SelectDisplayableObjectList.hxx>
#include <NXOpen/SelectObject.hxx>
#include <NXOpen/Session.hxx>
#include <NXOpen/SmartObject.hxx>
#include <NXOpen/MeasureDistance.hxx>
#include "uf_ui.h"
#include<NXOpen/NXObjectManager.hxx>
using namespace NXOpen;
using std::string;
using std::exception;
using std::stringstream;
using std::endl;
using std::cout;
using std::cerr;//------------------------------------------------------------------------------
// 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 environmentMyClass::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);
}void measureDistance(tag_t objTAG1, tag_t objTAG2, double &MeasureDistance_Max, double &MeasureDistance_Min)
{double retMax = 0.0, retMin = 0.0;NXOpen::Session* theSession = NXOpen::Session::GetSession();NXOpen::Part* workPart(theSession->Parts()->Work());//测量对象1NXOpen::DisplayableObject* object1(dynamic_cast<NXOpen::DisplayableObject*>(NXObjectManager::Get(objTAG1)));//测量对象2NXOpen::DisplayableObject* object2(dynamic_cast<NXOpen::DisplayableObject*>(NXObjectManager::Get(objTAG2)));NXOpen::MeasureDistance* measureDistance0;NXOpen::MeasureDistance* measureDistance1;// 获得最远距离measureDistance0 = workPart->MeasureManager()->NewDistance(NULL, NXOpen::MeasureManager::MeasureType::MeasureTypeMaximum, object1, object2);// 获得最近距离measureDistance1 = workPart->MeasureManager()->NewDistance(NULL, NXOpen::MeasureManager::MeasureType::MeasureTypeMinimum, object1, object2);// 获取值MeasureDistance_Max = measureDistance0->Value();MeasureDistance_Min = measureDistance1->Value();delete measureDistance0, measureDistance1;
}//------------------------------------------------------------------------------
// Do something
//------------------------------------------------------------------------------
void MyClass::do_it()
{// TODO: add your code hereNXOpen::Session *theSession = NXOpen::Session::GetSession();NXOpen::Part *workPart(theSession->Parts()->Work());NXOpen::Part *displayPart(theSession->Parts()->Display());NXOpen::Body *body1(dynamic_cast<NXOpen::Body *>(workPart->Bodies()->FindObject("BLOCK(1)")));tag_t bodyTag1 = body1->Tag();NXOpen::Body *body2(dynamic_cast<NXOpen::Body *>(workPart->Bodies()->FindObject("BLOCK(2)")));tag_t bodyTag2 = body2->Tag();double MeasureDistance_Max = 0.0;double MeasureDistance_Min = 0.0;measureDistance(bodyTag1, bodyTag2, MeasureDistance_Max, MeasureDistance_Min);char msg1[256];sprintf(msg1, "%f", MeasureDistance_Max);char msg2[256];sprintf(msg2, "%f", MeasureDistance_Min);UF_UI_open_listing_window();//打开窗口UF_UI_write_listing_window("两个测量对象最大距离");UF_UI_write_listing_window(msg1);//打印UF_UI_write_listing_window("\n");UF_UI_write_listing_window("两个测量对象最小距离");UF_UI_write_listing_window(msg2);//打印UF_UI_write_listing_window("\n");}//------------------------------------------------------------------------------
// 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 instanceMyClass *theMyClass;theMyClass = new MyClass();theMyClass->do_it();delete theMyClass;}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;
}

三、显示结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一图看懂git merge和git rebase的区别!!

一图看懂git merge和git rebase的区别&#xff01;&#xff01; Git 是一个非常流行的版本控制系统&#xff0c;它帮助开发者管理代码的不同版本。在 Git 中&#xff0c;merge 和 rebase 是两种常用的将不同分支的更改合并到一起的方法&#xff0c;但它们在处理方式和结果上有…

CP模型--Raft协议介绍

文章目录 前言一、Raft 是什么&#xff1a;二、Raft的工作原理&#xff1a;2.1 Raft 节点的3中状态&#xff1a;2.2 集群启动 leader 节点的选举&#xff1a;在这里插入图片描述2.3 数据的同步&#xff08;日志复制&#xff09;&#xff1a;2.4 leader 重新选举&#xff1a;2.5…

目前公认的一些好用AI工具

ChatGPT&#xff1a;这是一个广泛推荐和使用的AI聊天机器人&#xff0c;能够进行高效的文本生成和对话管理。它在多个证据中被提及&#xff0c;显示其普遍性和实用性。 Midjourney&#xff1a;这是一款强大的AI绘画工具&#xff0c;特别适合创意写作和图像生成。它在多个来源中…

Web 安全漏洞之文件上传

目录 文件上传漏洞及危害 文件名 HTML 和 SVG 软链 服务器磁盘 防御方法 网络安全学习路线 &#xff08;2024最新整理&#xff09; 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明&#xff1a; 文件上传漏洞及危害 文件上传漏洞…

基于Idea搭建Android开发环境

文章目录 下载SDK ManagerAndroid SDK Platform-toolsAndroid SDK Build-toolsAndroid SDKAndroid SDK Extras IDEA设置创建TestApp导入Android Studio创建的项目 下载SDK Manager SDK Manager是Google提供的&#xff0c;专门用于下载/管理&#xff0c;安卓开发中需要用到的工…

CANopen总线_CANOpen开源协议栈

CANopen是自动化中使用的嵌入式系统的通信协议栈和设备配置文件规范。就OSI 模型而言&#xff0c;CANopen 实现了以上各层&#xff0c;包括网络层。 CANopen 标准由一个寻址方案、几个小型通信协议和一个由设备配置文件定义的应用层组成。通信协议支持网络管理、设备监控和节点…

java 解决跨域时遇到问题,怎么来做一个跨域环境

今天遇到一个问题&#xff1a; 关于#java#的问题&#xff1a;java 解决跨域时遇到问题&#xff1a;为什么跨域访问时配置的CorsFilter没有进入&#xff1f;直接访问请求地址时进入了配置的CorsFilter 由于没有实际的跨域环境&#xff0c;因此打算在本机建一个跨域环境&#xff…

庙算兵棋推演AI开发初探(4-调用AI模型)

前面讲了如何开展编写规则脚本型Agent&#xff08;智能体&#xff09;的方法&#xff0c;现在探究一下如何调用知识型&#xff08;一般而言的训练出的模型&#xff09;智能体的方法。 这次调用的是庙算平台的demo&#xff08;网址见图&#xff09; 下载了“知识强化学习型”…

【异常处理】(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 求一元二次方程式ax^2bxc0的实根&#xff0c;如果方程没有实根&#xff0c;则输入有关警告信息。要求&#xff1a;建立一元二次方程类&#xff0c;利用异常技术处理。 源码 #include <iostream> #include <cmath>using namespa…

力扣HOT100 - 763. 划分字母区间

解题思路&#xff1a; class Solution {public List<Integer> partitionLabels(String s) {int[] last new int[26];int len s.length();for (int i 0; i < len; i) {last[s.charAt(i) - a] i;//记录字母最远的下标}List<Integer> partition new ArrayList…

java spring boot动态数据库获得配置信息连接多数据源(数据库)

数据库 数据库文件和代码文件 https://download.csdn.net/download/qq_34631220/89304173 链接&#xff1a;https://pan.baidu.com/s/1xoh6xiSRx4nW_gKvR1QPjg 提取码&#xff1a;i7b7 –来自百度网盘超级会员V5的分享 文章位置 添加链接描述 说明&#xff1a;事务只能单库…

学习软考----数据库系统工程师32

NoSQL非关系型数据库 CAP理论和BASE特性 关系型数据库主要使用ACID理论 各种NoSQL数据 库的分类与特点

中国海洋大学整体来说值得报考吗?中国海洋大学考情分析。

中国海洋大学&#xff08;Ocean University of China&#xff09;&#xff0c;简称中国海大。位于中国青岛&#xff0c;是中华人民共和国教育部直属的综合性重点大学&#xff0c;国家“双一流”、“985工程”和“211工程”重点建设高校之一&#xff0c;入选“2011计划”、“111…

RT-Thread事件集

文章目录 前言一、RT-Thread事件集的概念二、事件集函数的使用1.创建事件集函数2.事件集发送函数3.事件集接收函数4.事件集删除函数 三、事件集使用例程总结 前言 本篇文章将给大家讲解RT-Thread中事件集的概念&#xff0c;了解什么是事件集及事件集的函数使用方法。 一、RT-…

Lesson5--二叉树(超详细版)

【本节目标】 1. 树概念及结构 2. 二叉树概念及结构 3. 二叉树顺序结构及实现 4. 二叉树链式结构及实现 1.树概念及结构 1.1树的概念 树是一种 非线性&#xff08;线性结构就是顺序表链表&#xff09; 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个…

Linux 第三十章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

ms17-010(永恒之蓝)

1.漏洞介绍: 永恒之蓝&#xff08;ms17-010&#xff09;爆发于2017年4月14日晚&#xff0c;是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限&#xff0c;以此来控制被入侵的计算机。甚至于2017年5月12日&#xff0c; 不法分子通过改造“永恒之蓝”制作了wannacry勒索病…

国际护士节庆祝活动向媒体投稿有方法很轻松

作为一名医院职工,我肩负着医院对外信息宣传的重任。在国际护士节这个特殊的日子里,我们医院举办了一系列庆祝活动,以表彰护士们的辛勤付出和无私奉献。然而,在将这些活动信息投稿至媒体的过程中,我最初却遭遇了诸多挑战。 起初,我采用传统的邮箱投稿方式,将精心撰写的稿件发送…

RabbitMq出现Not management user问题解决

在RabbitMq登录的时候突然弹出如下图&#xff1a; 提示“当前用户不是管理员用户”进入mq控制命令台下&#xff1a; windows版本在mq安装路径下的sbin下进入cmd弹出框&#xff1b; Linux版本没有测试&#xff1b; 输入以下命令&#xff1a; rabbitmqctl list_users 查询当…

栈与队列OJ题【括号适配问题】【用队列实现栈】【用栈实现队列】【设计循环队列】

一.有效的括号 ​​​OJ链接 这一道题我们就可以用栈来解决&#xff1a; 不了解栈的可以看我的上一篇博客。 typedef char STDataType; //用数组来实现栈 typedef struct stack {STDataType* a;int capacity;int top; }ST; void STInit(ST* pst) {assert(pst);pst->a NU…