【NX】NX二次开发中遍历所有部件完整范例

news2024/11/15 17:51:19

一个入门的基本例子,这里提供完整代码,遍历所有部件,其他同理。

 

//author:autumoon
//邮箱:9506@163.com
//日期:2023-08-03 
/*****************************************************************************
**
** AssembleTraversal.cpp
**
** Description:
**     Contains Unigraphics entry points for the application.
**
*****************************************************************************/

#include "uf_assem.h"
#include "NXOpen/ListingWindow.hxx"

#include <NXOpen/NXException.hxx>
#include <NXOpen/Session.hxx>
#include <NXOpen/AttributeManager.hxx>
#include <NXOpen/AttributePropertiesBaseBuilder.hxx>
#include <NXOpen/AttributePropertiesBuilder.hxx>
#include <NXOpen/BasePart.hxx>
#include <NXOpen/Body.hxx>
#include "NXOpen/PartCollection.hxx"

/* Include files */
#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>

#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);
}

static void find_all_parts(tag_t root)
{
	NXOpen::Session *theSession = NXOpen::Session::GetSession();
	NXOpen::ListingWindow* lw = theSession->ListingWindow();
	lw->Open();


	tag_t* child_part_occs;
	int part_num=UF_ASSEM_ask_part_occ_children(root,&child_part_occs);
	for(int i=0;i<part_num;i++)
	{
		char part_name[ 256 + 1 ];
		char refset_name[ 30 + 1 ];
		char instance_name[ 30 + 1 ];
		double origin[ 3 ];
		double csys_matrix[ 9 ];
		double transform[ 4 ][ 4 ];
		UF_CALL(UF_ASSEM_ask_component_data(child_part_occs[i],
			part_name,
			refset_name,
			instance_name,
			origin,
			csys_matrix,
			transform));

		char szInfo[256];
		sprintf(szInfo, "Ocurrence tag=%d,instance name=%s\n",child_part_occs[i],instance_name);
		lw->WriteLine(szInfo);

		find_all_parts(child_part_occs[i]);
	}
	UF_free(child_part_occs);
}

/*****************************************************************************
**  Activation Methods
*****************************************************************************/
/*  Unigraphics Startup
**      This entry point activates the application at Unigraphics startup */
extern DllExport void ufsta( char *param, int *returnCode, int rlen )
{
    /* Initialize the API environment */
    if( UF_CALL(UF_initialize()) ) 
    {
        /* Failed to initialize */
        return;
    }
    
    /* TODO: Add your application code here */

	// 获取根部件
	NXOpen::Session *theSession = NXOpen::Session::GetSession();
	NXOpen::Part *workPart(theSession->Parts()->Work());

	tag_t workTag = workPart->Tag();

	tag_t root = UF_ASSEM_ask_root_part_occ(workTag);

	tag_t* child_part_occs;

	int part_num = UF_ASSEM_ask_part_occ_children(root, &child_part_occs);

	find_all_parts(root);

    /* Terminate the API environment */
    UF_CALL(UF_terminate());
}

/*****************************************************************************
**  Utilities
*****************************************************************************/

/* Unload Handler
**     This function specifies when to unload your application from Unigraphics.
**     If your application registers a callback (from a MenuScript item or a
**     User Defined Object for example), this function MUST return
**     "UF_UNLOAD_UG_TERMINATE". */
extern int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_IMMEDIATELY );
}

欢迎交流与讨论。

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

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

相关文章

大数据开发的前景怎么样?该怎么学习?

猎聘大数据研究院发布了《2022未来人才就业趋势报告》 从排名来看&#xff0c;2022年1-4月各行业中高端人才平均年薪来看&#xff0c;人工智能行业中高端人才平均年薪最高&#xff0c;为31.04万元&#xff1b;金融行业中高端人才以27.69万元的平均年薪位居第二&#xff1b;通信…

Prometheus-各种exporter

一、 nginx-prometheus-exporter 1 nginx 配置 1.1 Nginx 模块支持 nginx 安装的时候需要有 nginx 的状态模块: stub_status 可通过如下命令检查 nginx -V 2>&1 | grep -o with-http_stub_status_module1.2 Nginx 配置文件配置 添加如下配置到自己 nginx 的配置文…

【Spring框架】SpringBoot统一功能处理

目录 用户登录权限校验用户登录拦截器排除所有静态资源练习&#xff1a;登录拦截器拦截器实现原理 统一异常处理统一数据返回格式为什么需要统⼀数据返回格式&#xff1f;统⼀数据返回格式的实现 用户登录权限校验 用户登录拦截器 1.自定义拦截器 package com.example.demo.…

数据结构【第3章】——线性表

线性表的定义 线性表&#xff1a;零个或多个数据元素的有限序列。 1&#xff09;线性表是一个序列。即元素之间是有顺序的&#xff0c;若元素存在多个&#xff0c;则第一个元素无前驱&#xff0c;最后一个元素无后继&#xff0c;其他每个元素都有且只有一个前驱和后继。 2&a…

百度地图18.8.0首创红绿灯雷达功能,支持全程静音导航、停车推荐

百度地图App最新版本18.8.0已发布&#xff0c;独家推出红绿灯雷达功能&#xff0c;适用于安卓和iOS系统。 根据官方描述说明&#xff0c;行车时手机启用红绿灯雷达&#xff0c;能够自动检测红绿灯&#xff0c;值得一提的是无需输入目的地。同时&#xff0c;依靠北斗高精定位技术…

如何用python做自然语言处理

如何用python做自然语言处理 使用Python进行自然语言处理&#xff08;NLP&#xff09;是非常常见和强大的。以下是一些基本步骤&#xff1a; 安装所需的库&#xff1a; 首先&#xff0c;您需要安装一些用于自然语言处理的Python库&#xff0c;如NLTK&#xff08;自然语言工具包…

AMEYA360:尼得科科宝旋转型DIP开关系列汇总

旋转型DIP开关 S-4000 电路&#xff1a;BCD(十进制) 代码格式&#xff1a;实码 安装类型&#xff1a;表面贴装 调整位置&#xff1a;顶部 可水洗&#xff1a;无 端子类型&#xff1a;J 引线, 鸥翼型 旋转型DIP开关 SA-7000 电路&#xff1a;BCD(十进制), BCH(十六进制) 代码格式…

Qt5.14.2的安装教程

Qt5.14.2的安装教程 qt creator是qt桌面开发必备的软件&#xff0c;最近重新下载了一份&#xff0c;本文介绍一下Qt的安装过程。 找安装包 本文找到安装包&#xff0c;网址链接 qt5.14.2安装包官网&#xff1a; https://download.qt.io/archive/qt/5.14/5.14.2/ 这个官网下载速…

利用openTCS实现车辆调度系统(一)系统介绍

系统介绍 openTCS简介 官方的回答&#xff1a; openTCS&#xff08;开放式运输控制系统的缩写&#xff09;是一种免费的控制系统软件&#xff0c;用于协调自动导引车&#xff08;AGV&#xff09;和移动机器人车队&#xff0c;例如在生产工厂中。 通常应该可以控制任何具有通信…

Vue.js2+Cesium 五、WMS 服务加载,控制自图层显隐

Vue.js2Cesium 五、WMS 服务加载&#xff0c;控制自图层显隐 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"><div class"layer_container"><button id"btn">清除</button&g…

快速增加Shopee,lazada店铺销量的秘籍大揭秘

在竞争激烈的电商市场中&#xff0c;如何快速提高Shopee。lazada店铺的销量一直是卖家们关注的焦点。 优化产品信息&#xff1a;在Shopee平台上&#xff0c;完整填写产品标题、描述和关键词等信息非常重要。确保您的产品信息准确、清晰&#xff0c;并包含与目标买家搜索相关的…

Jest和Mocha两者之间有哪些区别?

什么是单元测试&#xff1f; 所谓单元测试&#xff0c;是对软件中单个功能组件进行测试的一种软件测试方式&#xff0c;其目的是确保代码中的每一个基本单元都能正常运行。因此&#xff0c;开发人员在应用程序开发的整个过程&#xff08;即代码编写过程&#xff09;中都需要进行…

SpringBoot + ajax 实现分页和增删查改

0目录 1.SpringBoot 2.SpringBoot分页&#xff1b;增删改查 1.SpringBoot分页 创建数据库和表 创建SpringBoot工程&#xff0c;引入springboot下的分页依赖 配置application.yml 实体类 Mapper接口 Mapper.xml Service接口 Service实现类 控制层 测试 加…

Liunx环境下git的详细使用(gitee版)

Liunx环境下git的详细使用&#xff08;gitee版&#xff09; 1.git是什么2.git操作2.1在gitee创建一个仓库2.2.gitignore2.3.git 3.git三板斧3.1add3.2 commit3.3push 4.git其他命令4.1查看当前仓库状态4.2查看提交日志4.3修改git里面文件名称4.4删除文件4.5修改远端仓库内容 1.…

《吐血整理》高级系列教程-吃透Fiddler抓包教程(26)-Fiddler如何抓取Android7.0以上的Https包-上篇

1.简介 众所周知&#xff0c;假如设备是android 7.0的系统同时应用设置targetSdkVersion > 24的话&#xff0c;那么应用默认是不信任安装的Fiddler用户证书的&#xff0c;所以你就没法抓到应用发起的https请求&#xff0c;然后你在Fiddler就会看到一堆200 HTTP Tunnel to x…

SpringBoot3---核心特性---1、快速入门

星光下的赶路人star的个人主页 年轻人仍然所见有极限&#xff0c;又迷失在太多讯息中–讯息不等于眼界 文章目录 1、简介1.1 前置知识1.2 环境要求1.3 SpringBoot是什么 2、快速体验2.1 开发流程2.2 特性小结2.3 Spring Initializr 3、应用分析3.1 依赖管理机制3.2 自动配置机制…

工作日志怎么写?聪明灵犀能帮你撰写

工作日志怎么写&#xff1f;工作日志是每个职场人士都需要编写的重要文档之一&#xff0c;它记录了我们在工作中所做的事情、遇到的问题以及解决方法等重要信息。然而&#xff0c;写工作日志并不是一件容易的事情&#xff0c;特别是对于那些不擅长记录的人来说。不过&#xff0…

go 语言实战入门案例之实现Socks5

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/backend-tutorial 】或者公众号【AIShareLab】回复 go 也可获取。 文章目录 实现 Socks 5 代理介绍原理TCP echo serverauth请求阶段完整代码 学习路线推荐 实现 Socks 5 代理 介绍 socks5 协议它虽…

2023 8-2 ~ 8-3

2181 合并0之间的节点 思路挺简单 就是注意一下指针不要制空 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNod…

【Linux】在服务器上创建Crontab(定时任务),自动执行shell脚本

业务场景&#xff1a;该文即为上次编写shell脚本的姊妹篇,在上文基础上,将可执行的脚本通过linux的定时任务自动执行,节省人力物力,话不多说,开始操作! 一、打开我们的服务器连接工具 连上服务器后,在任意位置都可以执行:crontab -e 如果没有进入编辑cron任务模式 根据提示查看…