当前位置: 首页 > news >正文

深度解析UG二次开发装配的部件事件、部件原型和部件实例

        做UG二次开发快一年了,每次遇到装配的问题涉及到部件事件、部件原型和部件实例还是一头雾水,什么是实例,什么是原型这些专业术语等等。

        针对这个问题,今天专门写了一篇特辑,结合装配实例深度剖析装配过程中的的所有参数。

先来看看装配相关的基本概念:

UG装配是以树型结构组织装配中的部件,一个部件文件中只能有一棵装配树,即只能存在一个装配根节点。装配中的节点由部件原型、部件事件与部件实例3种对象进行描述。

  • 部件事件(partoccurrence)是装配环境下对实际存在的部件模型(即部件原型)的一种引用,部件事件也可以理解为指向部件原型的指针。如果需要一次或多次装配一个部件,并不复制该部件的原型,而是建立该部件原型所对应的事件。在装配中,不同的部件事件表征不同的装配节点,因此UG赋予它唯一的标识。
  • 部件原型(partPrototype)是真实存在的部件模型,它记录了模型所需的所有数据。当一个部件文件被多次装入时,将产生不同的部件事件,但这些事件都指向相同的部件原型。可以看出,部件原型与部件事件之间形成一对多的映射关系。部件事件随原型的改变而改变,但修改部件事件不会影响它的原型。
  • 部件实例(partInstance)记录子节点与其父节点之间的关联关系,从而形成各节点间的层次结构。在装配体重,部件与其子部件之间的装配关系是利用部件实例来描述的。部件实例是指一次或多次装入装配体的部件对象,它描述装配环境下实例之间的层次关系,并表征唯一的上下级部件间的装配关系。部件实例也可以理解为一种指针,由下级部件事件指向上一级部件事件。可以看出,部件实例与部件事件之间形成一对多的映射关系,即不同的装配节点可能具有相同的装配关系。

一、实例截图及免费下载地址

从截图可以看到,本实例创建了一个简单的装配,为了方便区分各节点特意用了:2个球、1个圆柱、一个圆锥和一个长方体来进行案例分析。

 实例免费下载地址入口:https://download.csdn.net/download/MarcoPro/87452892

二、 部件事件、部件原型和部件实例分析

光看上面的概念,很难理解部件事件、部件原型和部件实例到底是什么,更不要提怎么用了,那么我们先把所有节点的数据拿出来看一下:

 

 上图的数字都是相关属性的Tag值,从上之下三层代表了装配的层级关系,其中根节点下有:2个球和2个长方体,长方体下面有两个子节点:圆柱和圆锥。下面我会逐个分析所有节点:

1、根节点_asm1

根节点比较特殊,因为他没有原型,实际上是一个虚拟的节点,参数获取方法如下:

workpart = theUFSession.Assem.AskWorkPart(); //获得当前workpart的部件 tag
workocc = theUFSession.Assem.AskWorkOccurrence(); //获得当前workpart的occurrence tag

2、二级节点COMPONENT ball 1、COMPONENT ball 2和COMPONENT block 1

1)为什么这里要做2个球体,就是为了看看来自同一个零件原型的节点,他的部件原型是否相同。

从数据不难发现,他们有相同的部件原型tag:32161,有不同的部件事件33595和33597,不同的部件实例33581和33580,然后他们的父部件和父部件事件是相同的。

2)反观同样在二级目录的球和长方体的数据,他们的部件事件、部件原型和部件实例都是不一样的,父部件和父部件事件是相同的。

3、三级节点COMPONENT Cylinder 1和COMPONENT Cone 1

从长方体和圆柱体、圆锥的数据不难发现,部件事件、部件原型和部件实例以及父节点和子节点的关系已经很明朗了。 

三、 部件事件、部件原型和部件实例数据的获取方法

那么,上面的数据是怎么获取的呢?下面直接上源码:

1、调用主方法

theSession = Session.GetSession();
displayPart = theSession.Parts.Display;
List<Component> allComponents = new List<Component>();
List<ComponentModel> componentList = new List<ComponentModel>();
Component root = displayPart.ComponentAssembly.RootComponent;
if (root != null)
{AssemHelper.GetAllComponents(displayPart.ComponentAssembly.RootComponent, allComponents, componentList);
}theUFSession = UFSession.GetUFSession();
Tag workpart;
Tag workocc;
workpart = theUFSession.Assem.AskWorkPart(); //获得当前workpart的prototype tag
workocc = theUFSession.Assem.AskWorkOccurrence(); //获得当前workpart的occurrence tag
if (workocc == Tag.Null) workocc = theUFSession.Assem.AskRootPartOcc(workpart);int ChildOccNum = 0;
Tag[] childOccs; //子组件的occurrence
ChildOccNum = theUFSession.Assem.AskPartOccChildren(workocc, out childOccs);Tag[] childInstances = new Tag[ChildOccNum]; //子组件的instance
for (int i = 0; i < ChildOccNum; i++)
{Tag childInstance = theUFSession.Assem.AskInstOfPartOcc(childOccs[i]);childInstances[i] = childInstance;
}int ChildOccNum1 = 0;
Tag[] childOccs1;
ChildOccNum1 = theUFSession.Assem.AskPartOccChildren((Tag)int.Parse("33592"), out childOccs1);Tag[] childInstances1 = new Tag[ChildOccNum1]; //子组件的instance
for (int i = 0; i < ChildOccNum1; i++)
{Tag childInstance1 = theUFSession.Assem.AskInstOfPartOcc(childOccs1[i]);childInstances1[i] = childInstance1;
}

 2、子方法

/// <summary>
/// 用递归获得所有组件的方法
/// </summary>
/// <param name="fatherComponent">父组件</param>
/// <param name="allComponents">全部的组件集合</param>
public static void GetAllComponents(Component fatherComponent, List<Component> allComponents, List<ComponentModel> componentsList)
{theUFSession = UFSession.GetUFSession();Component[] tempComponent = fatherComponent.GetChildren();  //得到子组件数组foreach (Component x in tempComponent)//没有子组件时foreach的语句不会执行,跳出递归{allComponents.Add(x);string partName, refsetName, instanceName;double[] origin = new double[3]; //组件的位置double[] csys_matrix = new double[9]; //坐标系矩阵double[,] transform = new double[4, 4]; //转换矩阵theUFSession.Assem.AskComponentData(x.Tag, out partName, out refsetName, out instanceName, origin, csys_matrix, transform);ComponentModel model = new ComponentModel();model.origin = new double[3];model.csys_matrix = new double[9];model.transform = new double[4, 4];model.origin = origin;model.csys_matrix = csys_matrix;model.transform = transform;model.partName = partName;model.refsetName = refsetName;model.instanceName = instanceName;model.journalIdentifier = x.JournalIdentifier;componentsList.Add(model);GetAllComponents(x, allComponents, componentsList);}
}

 四、小节

        通过上面的梳理,我们了解了部件事件、部件原型和部件实例的基本概念以及在装配过程中的具体数据表现形式。

        但是说实话,在实际项目中这些概念似乎并不是必须有用的,比如在使用Nxopen进行开发的过程中,我们不需要了解部件原型和部件事件,我们只需要找到component Tag就能去操作零件,其实这里的component Tag就是部件事件。

        作为一名合格的程序员,我相信大家都有专研精神,对于黑盒的深入了解才是一步一步走向职业生涯巅峰的正确途径。

 

 

相关文章:

深度解析UG二次开发装配的部件事件、部件原型和部件实例

做UG二次开发快一年了&#xff0c;每次遇到装配的问题涉及到部件事件、部件原型和部件实例还是一头雾水&#xff0c;什么是实例&#xff0c;什么是原型这些专业术语等等。 针对这个问题&#xff0c;今天专门写了一篇特辑&#xff0c;结合装配实例深度剖析装配过程中的的所有参数…...

Linux安装elasticsearch-head

elasticsearch-head 是一款专门针对于 elasticsearch 的客户端工具&#xff0c;用来展示数据。 elasticsearch-head 是基于 JavaScript 语言编写的&#xff0c;可以使用 Nodejs 下的包管理器 npm 部署。 1 安装Nodejs nodejs下载地址&#xff1a; https://nodejs.org/en/dow…...

MySQL InnoDB表的碎片量化和整理(data free能否用来衡量碎片?)

网络上有很多MySQL表碎片整理的问题&#xff0c;大多数是通过demo一个表然后参考data free来进行碎片整理&#xff0c;这种方式对myisam引擎或者其他引擎可能有效&#xff08;本人没有做详细的测试&#xff09;.对Innodb引擎是不是准确的&#xff0c;或者data free是不是可以参…...

Leetcode-每日一题1250. 检查「好数组」(裴蜀定理)

题目链接&#xff1a;https://leetcode.cn/problems/check-if-it-is-a-good-array/description/ 思路 方法&#xff1a;数论 题目意思很简单&#xff0c;让你在数组 nums中选取一些子集&#xff0c;可以不连续&#xff0c;子集中的每个数再乘以任意的数的和是否为1&#xff…...

OpenStack手动分布式部署环境准备【Queens版】

目录 1.基础环境准备&#xff08;两个节点都需要部署&#xff09; 1.1关闭防火墙 1.2关闭selinux 1.3修改主机名 1.4安装ntp时间服务器 1.5修改域名解析 1.6添加yum源 2.数据库安装配置 2.1安装数据库 2.2修改数据库 2.3重启数据库 2.4初始化数据库 3.安装RabbitMq…...

Web自动化测试——selenium的使用

⭐️前言⭐️ 本篇文章就进入了自动化测试的章节了&#xff0c;如果作为一名测试开发人员&#xff0c;非常需要掌握自动化测试的能力&#xff0c;因为它不仅能减少人力的消耗&#xff0c;还能提升测试的效率。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f…...

虚拟交换单元技术

支持VSU&#xff08;Virtual Switch Unit&#xff09;即虚拟交换单元技术。通过聚合链路连接&#xff0c;将多台物理设备虚拟为一台逻辑上统一的设备&#xff0c;使其能够实现统一的运行&#xff0c;利用单一IP 地址、单一Telnet 进程、单一命令行接口(CLI)、自动版本检查、自动…...

【STM32笔记】HAL库外部定时器、系统定时器阻塞、非阻塞延时

【STM32笔记】HAL库外部定时器、系统定时器阻塞、非阻塞延时 外部定时器 采用定时器做延时使用时 需要计算好分频和计数 另外还要配置为不进行自动重载 对于50MHz的工作频率 分频为50-1也就是50M/501M 一次计数为1us 分频为50000-1也就是1k 一次计数为1ms 我配置的是TIM6 只…...

[Springboot 单元测试笔记] - Mock 和 spy的使用

Springboot单元测试 - 依赖类mock测试 通常单元测试中&#xff0c;我们会隔离依赖对于测试类的影响&#xff0c;也就是假设所有依赖的一定会输出理想结果&#xff0c;在测试中可以通过Mock方法来确保输出结果&#xff0c;这也就引入另一个测试框架Mockito。 Mockito框架的作用…...

互联网新时代要来了(二)什么是AIGC?

什么是AIGC&#xff1f; 最近&#xff0c;又火了一个词“**AIGC”**2022年被称为是AIGC元年。那么我们敬请期待&#xff0c;AIGC为我们迎接人工智能的下一个时代。 TIPS:内容来自百度百科、知乎、腾讯、《AIGC白皮书》等网页 什么是AIGC&#xff1f;1.什么是AIGC&#xff1f;…...

75V的TVS二极管有哪些型号?常用的

瞬态抑制TVS二极管工作峰值反向电压最低3.3V&#xff0c;最高可达513V&#xff0c;甚至更高。很多电子工程师都知道&#xff0c;TVS二极管在实际应用选型过程中&#xff0c;第一步要确认的就是其工作峰值反向电压。2023年春节已过&#xff0c;东沃电子正月初八就开工了&#xf…...

测试开发之Django实战示例 第十章 创建在线教育平台

第十章 创建在线教育平台在上一章&#xff0c;我们为电商网站项目添加了国际化功能&#xff0c;还创建了优惠码和商品推荐系统。在本章&#xff0c;会建立一个新的项目&#xff1a;一个在线教育平台&#xff0c;并创内容管理系统CMS&#xff08;Content Management System&…...

Hadoop高可用搭建(二)

目录 解压Hadoop 改名 更改配置文件 workers hdfs-site.xml core-site.xml hadoop-env.sh mapred-site.xml yarn-site.xml 设置环境变量 启动集群 启动zk集群 启动journalnode服务 格式化hfds namenode 启动namenode 同步namenode信息 查看namenode节点状态 …...

如何用企微SCRM管理系统发掘老客户的新增长点?

如何用企微SCRM管理系统发掘老客户的新增长点&#xff1f; 一直做投放拉新&#xff0c;很快营销成本会难以支撑&#xff0c;如果在私域运营中始终留不下老用户&#xff0c;那么运营也是失败的。 开发老客户的成本只需新客户成本的1/6&#xff0c;但很多企业对老客户都忽视了&…...

我用python疯狂爬取公司数据

我是半路从一个纯小白学过来的&#xff0c;学习途中也掉过许多坑&#xff0c;在这里建议新手要先把基础打扎实&#xff0c;然后再去学习自己需要的内容&#xff0c;不要想着全部学完再用&#xff0c;那样你是永远学不完的&#xff0c;用哪方面就学习哪方面的内容&#xff0c;不…...

EMR集群运行TPC-DS在云盘和OSS中的对比

1.简介 TPC-DS是大数据领域最为知名的Benchmark标准。本文介绍使用阿里云EMR集群运行TPC-DS在云盘和OSS中的表现对比。 2.环境准备 1.创建EEMR-5.10.1集群 1个master,2个core,3台机器都s是4c16g。 2.安装Git和Maven sudo yum install -y git maven3.下载TPC-DS Benchmark工…...

菜鸟在 windows 下 python 中安装 jupyter 踩坑要点 、被神化的 VsCode

我平时用不到 python &#xff0c;更没用过 jupyter &#xff0c;因此我的 python知识仅限于知道有 python 这么个编程语言&#xff0c;会写个 print("Hello World!!!") 而已&#xff0c;完全没听过 jupyter &#xff0c;因为某些原因今天需要安装下 jupyter 看看&am…...

k8s简单搭建

前言 最近学习k8s&#xff0c;跟着网上各种教程搭建了简单的版本&#xff0c;一个master节点&#xff0c;两个node节点&#xff0c;这里记录下防止以后忘记。 具体步骤 准备环境 用Oracle VM VirtualBox虚拟机软件安装3台虚拟机&#xff0c;一台master节点&#xff0c;两台…...

计算机SCI期刊审稿人,一般关注论文的那些问题? - 易智编译EaseEditing

编辑主要关心&#xff1a; &#xff08;1&#xff09;文章内容是否具有足够的创新性&#xff1f; &#xff08;2&#xff09;文章主题是否符合期刊的受众读者&#xff1f; &#xff08;3&#xff09;文章方法学是否合理&#xff0c;数据处理是否充分&#xff1f; &#xff08;…...

Docker迁移以及环境变量问题

问题一描述将docker容器通过docker export命令打包&#xff0c;传输到另外的服务器&#xff0c;再通过docker import命令导入后&#xff0c;发现原来docker容器中的环境变量失效了。解决方案1. 【无效方案】直接在docker容器中通过export命令设置环境变量。export LD_LIBRARY_P…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...