zoukankan      html  css  js  c++  java
  • NX二次开发-装配篇详解(UFUN C,NXOPEN C++,C# API介绍)【更新日期2020.10.8】

    这篇文章的内容涉及比较多,我一次写不完,要分几次去更新。

    相信很多人在刚开始学NX装配相关二次开发的时候,都会有点搞不清楚,什么是实例,什么是原型这些专业术语等等。

    我在刚接触的时候,也是很懵逼的。今天我整理了一下,做个装配篇特辑。

    ------------------------------------------------------------------------

    Assembly装配的常用术语

    在装配环境中总保持只有一个部件是当前活动的,它叫工作部件(workpart)。用户创建的所有UF对象、表达式等都是在工作部件中创建。此外,还有一个叫当前显示部件(displaypart)的概念。

    在UG的某些应用(如Modeling)时,当前显示部件和工作部件可以不同。

     

    装配图是一类特殊的Part,它本身由多个Part所组成。装配图中的各个子图称为组件,组件本身也可以是装配图。装配图中并不包含子图,而是子图的再现。子图的所有再现都来自子图的原型

    子图的每个再现都叫做子图的实例

    • Prototype Tag:Part或Object在原本文件中的tag。
    • Instance Tag:子Part被装配到父档中作为Instance的tag,是指用户绝对装配次数。
    • Occurrence Tag:子Part或Object装配到主文档中作为Occurrence的tag。它只是一种映像,当同一个子Part或Object在主文档中被装配多次,它们的Occurrence Tag是不同的,分别表明了装配的先后次序以及在主文档中不同的映像。

    装配树的结构

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

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

    装配节点具有相同部件实例的条件有3个:

    • 装配节点具有相同的部件原型。
    • 父装配节点不能相同,即父节点事件不同。
    • 父节点事件指向同一个部件文件,即父节点原型相同。

    Assembly结构范例

     

     例如,由于Wheel Part-occur-tag-5与Wheel Part-occur-tag-7具有相同的部件原型和不同的父节点事件Axle Part-occur-tag-3与Axle Part-occur-tag-4,且父节点事件都指向相同

    的部件原型,因此它们具有相同的部件实例Instance-tag-1;尽管Wheel Part-occur-tag-5与Wheel Part-occur-tag-6指向同一个部件原型,但其父节点相同,不满足上述条件(2),因此它们具有不同的部件实例Instance-tag-1与Instance-tag-2。

    通俗讲解:

    以上这一堆专业术语都是出自西门子文档里。

    你能看懂,能理解最好,不理解,我下面在通俗的讲一下,我个人的理解。如果理解有误,请留言评论指正错误。

    一个工作部件里面添加了装配,由装配树根目录可以找到实例,实例可以找到部件事件(partocc),事件可以找到原型对象(objectocc)

    当前工作部件,当前显示部件,装配树,装配引用集这些我就不讲了,做二次开发的,应该多少都知道。

    这里只重点介绍 部件事件部件原型部件实例。三种的区别。

    • 部件事件(也叫partocc)
    • 部件原型(也叫partPrototype)
    • 部件实例(也叫partInstance)

    请看下图

    如图所示:我在当前的part里装配进来三个装配组件,这三个装配实际是由两个part装配进来的。而这两个单独part里的块和球是就是部件原型

     然后现在你把块装配进来了,就产生了一种映射关系,被装配进来的并不是部件原型,而是部件事件,一个部件原型块,被装配进来两次,就产生了两个部件事件。

     上面装配进来显示的1,2,3块和球就是部件事件(partocc)

    那部件实例,又是什么呢?装配进来后,在装配树上体现父子级的,就是装配实例的体现。我们对装配子部件的操作,也都是要对部件实例去操作的,比如组件移动,组件抑制等等。

    简单讲,每一个部件事件(partocc)都对应一个部件实例,想要在当前工作部件里对装配子部件做操作,就要先获取部件实例,在对其操作。如果操作部件事件或者部件原型是不管用的。

    每个部件实例的名字是不同的,正常来说就是part文件的名字。但可以通过二次开发API把名字改掉,可以改成全部一样,或者全部不一样。手动没有办法去修改实例的名字,只能另存组件part,或者

    重新装一个不同名字的组件进来。

    装配模块常用API介绍:

    1.UFUN C

     UF_ASSEM装配相关
    1  UF_ASSEM_ask_component_data获取装配部件的相关信息  https://www.cnblogs.com/nxopen2018/p/11342916.html
    2  UF_ASSEM_use_alternate替换组件  https://www.cnblogs.com/nxopen2018/p/11343137.html
    3 UF_ASSEM_substitute_component替换组件 https://www.cnblogs.com/nxopen2018/p/11343171.html
    4 UF_ASSEM_ask_work_part获取当前工作部件tag https://www.cnblogs.com/nxopen2018/p/12305403.html
    5 UF_ASSEM_add_part_to_assembly装配添加组件 https://www.cnblogs.com/nxopen2018/p/12305496.html
    6 UF_ASSEM_set_work_part设置当前工作部件 https://www.cnblogs.com/nxopen2018/p/12305748.html
    7 UF_PART_ask_part_tag通过prt名字得到prt的tag  https://www.cnblogs.com/nxopen2018/p/12305758.html
    8 UF_ASSEM_reposition_instance移动组件 https://www.cnblogs.com/nxopen2018/p/12926382.html
    9 UF_ASSEM_ask_root_part_occ获得装配树根tag https://www.cnblogs.com/nxopen2018/p/13696620.html
    10 UF_ASSEM_ask_part_occ_children遍历装配树根下面的所有子组件 https://www.cnblogs.com/nxopen2018/p/13696649.html
    11 UF_ASSEM_ask_inst_of_part_occ部件事件partocc转部件实例instance https://www.cnblogs.com/nxopen2018/p/13696683.html
    12 UF_ASSEM_suppress_instances 组件抑制 https://www.cnblogs.com/nxopen2018/p/13696692.html
    13 UF_ASSEM_unsuppress_instances取消组件抑制 https://www.cnblogs.com/nxopen2018/p/13696704.html
    14 UF_ASSEM_ask_instance_of_name有装配实例名字得到实例tag https://www.cnblogs.com/nxopen2018/p/13696742.html
    15 UF_ASSEM_ask_part_occurrence获取某个部件或对象事例的父部件或对象事例(PartOcc) https://www.cnblogs.com/nxopen2018/p/13782767.html

    2.NXOPEN C++

    3.NXOPEN C#

    Caesar卢尚宇

    2020年9月19日

  • 相关阅读:
    为用户添加角色
    WCF、MongoDB
    文件分布式存储实现例程
    Redis的Replication(复制)
    Lucene热词显示并选择
    Lucene热词统计
    通过队列解决Lucene文件并发创建索引
    Lucene.net应用
    Lucene.net
    Redis
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/13696416.html
Copyright © 2011-2022 走看看