catia怎么装配(CATIA怎么装配约束)

前沿拓展:

catia怎么装配

CATIA装配里阵列的方法及步骤为:工具/原料:CATIA软件,CATIA软件电脑配置1、首先打开电脑,双击打开CATIA软件,然后新建一个PART文件;2、接着绘制一个直径200的圆,高度20;3、然后在圆上绘制一个孔,直径10;阵列出另外7个孔;点击保存文件;4、然后再建一个PART文件,绘制一个抬肩轴;点击保存文件;5、接着再新建一个PRODUCT文件;6、然后选择现有部件,把新建好的PART1与PART2导入PRODUCT文件中,然后进行重复阵列;7、最后把PART1与PART2约束一下,然后同事选择PART1与PART2部件点击重复阵列命令,点击确定即可。


在桥墩BIM设计中,设计单位交付的BIM模型无法全面考虑施工过程的影响。对于高度大于某一范围的桥墩,实际施工时,无法一次浇筑,需要沿高度方向分节段浇筑或拼装,图1所示为某桥墩节段拼装工程实例,这种情况下,施工阶段桥墩BIM模型必须能够反映出这种节段的划分。同时,由于每一个桥墩在现场施工环境和可用设备方面存在差异性,即使是相同高度的桥墩,其竖向节段的划分标准也不相同,而这种差异性是设计阶段BIM模型无法预估的。因此,解决这种问题的最好办法是将桥墩分节段浇筑或拼装导致的模型变化交给施工阶段来完成。

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

图1 桥墩分节段拼装工程实例

本文介绍一种桥墩BIM模型切割工具,该工具使用达索系统/组件应用架构(CAA)二次开发语言实现,嵌入到达索系统软件装配设计模块内部[1]。由用户选择被切割体、切割面和切割结果的装配目标位置,程序运行结束后,自动将切割结果插入到装配目标位置。

1

程序交互界面及操作流程设计

根据前述应用需求,设计出如图2所示的用户交互界面。该人机交互的桥墩切割工具采用达索系统/CAA语言二次开发,直接嵌入到达索系统软件内部[2-3]。具备以下几个特点:

1

桥墩切割工具嵌入到达索系统装配设计(AssemblyDesign)模块中;

2

被切割体可由多个部分构成,各部分可分属于不同的物理产品(Physical Product),对物理产品的层次结构没有限制,同一个物理产品下还可包含多个3DShape;

3

属于同一物理产品的被切割体,在切割后,将被分解为多个物理产品,每个物理产品包含一个无法编辑、轻量化的 Datum 类型特征[4]。

以某桥墩的主墩切割过程为例,如图2所示,主墩模型存储于“01Pier main”节点下,由三部分组成,由图中结构树可知这三部分所在物理产品节点的层次结构。如图3所示,首先点击嵌入到达索系统装配设计模块下的操作按钮,打开用户交互窗口,在CutProduct位置选择被切割体所在的节点“01Pier main”,在CutSurfaces位置选择切割面所在的几何图形集“CutSurface”,在TargetProduct位置选择切割结果需要装配的目标位置。

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

图2 切割前的桥墩模型用户交互界面

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

图3 嵌入到装配设计模块下的操作按钮

点击“确定”按钮后,程序使用用户所选几何图形集内的三个切割平面执行切割操作。切割前,被切割拓扑体存储在三个3DShape下,对比图2和图4可以看出,切割前后,主墩由三个部分变成12个部分。切割后,目标装配总结点下包含由12个物理产品组成的子节点。

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

图4 切割后的桥墩模型

2

二次开发策略和思路

为了实现上一节介绍的操作。需要使用如图5所示的流程进行二次开发,具体分为以下三个重要步骤:

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

a)获取切割面、被切割体、目标位置;

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

b)遍历、存储被切割体;

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

c)生成切割结果并组装至目标位置。

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

图5. 程序二次开发流程

以下各节将依次通过对此三个步骤的介绍,阐述本程序的二次开发策略和思路。

3

获取切割面、被切割体、目标位置

切割面、被切割体、目标位置,这三种元素作为程序执行的先决条件,它们的获取是属于用户界面交互功能的职能范畴,用户界面交互功能分为创建工具按钮和创建用户交互窗口两部分。

3.1

创建工具按钮并与桥墩切割命令关联

工具条采用Add-in的方式添加,为了将桥墩切割功能嵌入到装配设计(AssemblyDesign)模块,用于添加工具条的 Add-in类必须实现CATIAssyWorkBenchAddin 接口。再通过CATAfrCommandHeader:CATCreateCommandHeader()成员函数使添加的工具条与桥墩切割命令相关联。这样就实现了在已有装配设计模块下添加一个按钮,用户点击此按钮,激活桥墩切割命令[5]。

3.2

在桥墩切割命令中嵌入用户交互窗口

首先创建用户交互窗口Dialog文件,该文件与切割命令所在文件相互独立。在桥墩切割命令文件中,通过对CATMmrPanelStateCmd类的派生,重载GiveMyPanel方法,使包含桥墩切割命令的派生类与用户交互对话窗口 Dialog 文件关联。Dialog文件仅用于窗口控件属性的获取和赋值,而 对话流程操作是通过切割命令文件对BuildGraph()方法的重载实现的。

BuildGraph方法通过命令状态(Command)和代理(Agent)两个关键元素来实现用户与界面的交互响应[6]。

本程序使用了两种代理:CATDialogAgent代理用于获取界面控件响应,命令当中定义了三个此类代理,分别表示对代表切割面、被切割体、目 标位置的三种DialogList 控件的选择 ;CATPathElementAgent 继承自CATDialogAgent,命令当中也定义了三个此类代理,此种代理用于获 取从根节点开始,到鼠标下对象的完整路径,这个对象可以是位于模型显示空间的某几何体或者是位于结构树的某个节点,再通过对该代理施加对象类型和过滤条件的限制,使之分别用于获取鼠标下的切割面(几何图形集)、被切割体(物理产品)、目标位置(物理产品)。

对于前述两种代理,当用户成功选择了相应的DialogList控件时,CATDialogAgent代理就被赋值;当用户成功选择了鼠标下的某个符合要求的对象时,CATPathElementAgent代理就被赋值。每个命令状态都存储了若干个代理,在程序中,对于每个命令状态,预定义了其中的各个代理被赋值以后程序应该执行的具体操作,以及向其他命令状态转换的规则。图6以命令状态1为例,介绍了用户与界面交互的原理。在程序执行过程中,当某命令状态中的一个代理被成功赋值以后,CAA程序就会查阅前述转换规则,来决定此时应该向哪一个命令状态进行转换。

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

图6 通过命令状态和代理实现用户与程序交互

4

遍历、存储被切割体

4.1

被切割体的组织结构

从二次开发层面来说,达索系统有四种常用的核心成员对象(PLM Core Data),分别是:参考(References) ,实 例(Instances) ,

代 理 参 考(RepresentationReferences)和代理实例(RepresentationInstances)。结构树的每一个节点可以是实例或代理实例,而实例或代理实例分别是由参考和代理参考实例化而来。从用户手动操作的层面来说,达索系统向用户开放的操作对象有两种,分别是:物理产品(Physical Product)和三维形状(3DShape)。用户手动操作层面的两种对象与二次开发层面的四种对象有如下对应关系:物理产品对应于参考和实例,三维形状对应于代理参考和代理实例[7]。

CAA提供了四种接口CATIPLMNavReference, CATIPLMNavInstance,CATIPLMNavRepReference, CATIPLMNavRepInstance,它们分别与二次开发层面的四种常用核心成员对象相对应,用于对树形结构中各成员的遍历和检索。

在用户与界面的交互过程中,程序成功获取了一个用于存储被切割体的物理产品,由于具体建模方式和组织结构的多样性,从层次结构上讲,该物理产品可以再分解为多个子物理产品,每一个子物理产品还可以继续分解。在这种树型的被切割体组织结构中,3Dshape是具体的特征存储位置,每一个3Dshape都必须依附于某物理产品才能存在,而模型的几何形状体现在各种特征当中,因此,对被切割体的遍历和存储最终都是在3Dshape中完成的。对于“程序界面及操作流程设计”一节所介绍的示例,其树型组织结构如图7所示,可以看出,它是四层树形结构,如果要获取承载被切割体的特征,需要在3个3DShape下进行遍历。

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

图7 示例中主墩被切割体模型树型组织结构

4.2

RecursionGetCutBodys()递归函数获取

3DShape下的所有拓扑体

在达索系统当中,特征无法直接存储于3DShape下,而是通过有两种特征存储集合(geometrical features set)实现存储功能:几何图形集(Geometrical Set)和零件几何体(Solid features set)[8],几何图形集无法存储与三维拓扑对应的特征,而零件几何体可用于存储任何拓扑类型的特征。这两种特征存储集合还可以继续嵌套几何图形集和零件几何体,也形成一种与前述被切割体类似的树型组织结构。本小节介绍如何从具备这样一种组织结构的3DShape 下,获取其中的拓扑体,并将其存储于一个CATLISTP(CATBody)类型的集合中,该集合中的拓扑体分别与3DShape下的所有特征一一对应。

目前,在CAA可用的API中,CATIPartRequest接口的GetDirectBodies()方法,能够获取当前3DShape下的第一级特征存储集合 ;CATIBodyRequest 接口的GetDirectBodies()方法,能够获取当前特征存储集合的第一级子特征存储集合。因此,对于这种不确定具体层数的树型组织结构 ,可采用递归调用的方法获取某一3DShape下的所有特征存储集合,继而获取其中的被切割体拓扑,当通过CATIBodyRequest 接口的GetDirectBodies()方法获取某一特征存储集合下的所有子特征集合,并且集合大小为0时,说明当前集合没有子集合,递归调用满足终止条件。具体流程如图8所示。

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

图8 获取具备树型组织结构的3DShape下所有拓扑体的流程

通过CATIPartRequest 接口获取当前3DShape的所有特征存储集合后,循环操作,依次对每一个特征存储集合执行如下递归调用的过程:

通过CATIMmiUseBodyContent接口获取当前特征存储集合i下的所有特征,对于其中的第j个特征,通过CATIMmiUseGeometricalElement接口获取与之对应的拓扑体;把步骤a中生成的拓扑体追加到CATLISTP(CATBody)类型的集合中;在j的范围内循环,也就是在存储集合i 下的所有特征范围内循环。循环结束时,通过CATIBodyRequest 接口,查看当前特征存储集合i下是否还有其他子存储集合;如果通过步骤c发现,特征存储集合i下还有其他子存储集合,返回步骤 a,对每一个子存储集合执行递归调用的过程。如果通过步骤c发现,特征存储集合i 下不再包含其他子存储集合,不再执行递归操作,执行下一个循环,返回步骤a,继续对3DShape下的第i+1个特征存储集合执行获取拓扑体的操作。

5

生成切割结果并组装至目标位置

5.1

BrowseOccurrences()函数执行切割操作

该函数以被切割体总结点的物理产品(Physical Product)作为输入参数,输出一个用于存储CutBodyStruct 类型结构体的集合。在作为输出结果的集合中,每一个 CutBodyStruct 类型的结构体数据代表切割后的最小单元。

该类型结构体的声明如下:

typedef struct

{ CATLISTP(CATBody)BodyList;CATIPLMNavOccurrence_var cOnCurrentNode;

}CutBodyStruct;

从前述第4.1节可知,被切割体的拓扑形状存储在总结点树型组织结构下各离散的 3DShape中。切割之前,作为输入参数的CutBodyStruct结构体,其 BodyList成员代表总结点物理产品下某3DShape中存储的拓扑体集合,切割之后,一个3DShape中存储的拓扑形状会被分为若干个部分,与各部分相对应的多个CutBodyStruct结构体会以集合的方式输出,其中每个CutBodyStruct结构体的BodyList成员代表切割后每个部分中存储的拓扑体子集,每个结构体的spOccOnCurrentNode成员代表与该3DShape直接相关的上一级物理产品节点。

切割操作的大致步骤是:对于一个指定的3DShape,首先在所有切割面的范围内循环,依次使用每一个切割面对当前被切割体进行切割,当完成一次循环、也就是使用其中一个切割面完成切割后,CutBodyStruct类型结构体的集合就会更新。在下一次循环使用新的切割面进行切割时,切割对象就是上一次循环产生的新的CutBodyStruct类型结构体集合,这样,循环结束后的结构体集合正是所需的输出结果。

本小节前面部分介绍了在一个3DShape范围内的切割操作流程,为了对整个被切割体树型组织结构中的所有3DShape成员执行切割操作,BrowseOccurrence()函数采用如图9所示的流程,通过递归调用的方法完成切割任务,并最终返回一个存储CutBodyStruct 类型结构体的集合作为切割结果。流程如下:

基于达索系统3D体验平台CAA 架构的桥墩BIM切割工具开发(转)

图9 BrowseOccurrence()函数执行流程

使用 CATIPLMNavOccurrence 接口,以被切割体根节点物理产品的实例(Instance)为输入参数,首先从该参数获取所有子节点 Instance,及与根节点直接相关的3DShape;使用上一节介绍的 RecursionGetCutBodys()函数,从3DShape 中获取待切割拓扑体的集合, 放入OriCutBodyList 当中;分别在切割面数目和 OriCutBodyList 集合数目范围内执行循环,循环体内,使用第i 个切割面切割OriCutBodyList 集合中的第j 个成员。切割结束后,更新 OriCutBodyList 集合。在第i+1 次循环体当中,切割对象变成第 i 次循环生成的最新OriCutBodyList 集合;依次以当前根节点的所有子节点Instance 为输入参数,递归调用 BrowseOccurrence()函数, 当某个子节点instance不再包含子节点时,递归调用满足终止条件。

5.2

CreateNewCutObjectProduct()

函数生成代表切割结果的物理产品

对被切割体施加上一个小节介绍的BrowseOccurrence()函数 ,可以生成一个以CutBodyStruct类型结构体集合代表的切割结果,但是集合中的每一个结构体仅存储了切割后的拓扑体,必须要将这些拓扑体转换为特征并存储在相应的物理产品下才能作为真正的BIM交付物。

本小节介绍的CreateNewCutObjectProduct()函数以集合中的一个CutBodyStruct 类型结构体作为输入参数,处理方法是:

首先从输入参数结构体中抽取出spOccOnCurrentNode成员,使用CATAdpDuplicator 接口的Duplicate()方法,复制出一个新的物理产品的参考(Reference),采用复制的方法,能够保证物理产品类型和属性的一致性。再使用CATIPLMProducts 接口的AddProduc()方法,将复制结果添加到用户选择的目标装配体位置。

对于输入参数结构体中的BodyList 成员,使用 CATIMmiUseDatumFactory接口的InstanciateDatum()方法,将拓扑体变成轻量化、不可编辑的的Datum 类型特征,并插入到复制后生成的物理产品中。

在结构体集合范围内循环调用这个函数后,就能够在目标装配体下生成与切割结果数目相应 的若干物理产品,并且每个物理产品中都包含相应的特征结果。

6

结论

本文介绍了一种通过达索系统/CAA 二次开发实现桥墩BIM 切割的工具。该切割工具的作用是将桥墩分节段浇筑导致BIM模型变化的主动权交给施工单位,由施工单位根据现场具体情况快速、方便地修改模型。

本文继而从“获取切割面、被切割体、目标位置”,“遍历、存储被切割体”,“生成切割结果并组装至目标位置”三个方面重点介绍了程序的开发策略和思路。

“获取切割面、被切割体、目标位置”,从本质上就是用户与程序界面的交互。在这个交互功能的实现中,借助 Add-in 的方式添加工具条,并通过命令状态(Command State)和代理(Agent)两个关键元素来实现用户与界面的交互响应。

“遍历、存储被切割体”一节中,分析了被切割体所具有的一种复杂树型组成结构,RecursionGetCutBodys()作为一个递归调用函数,以一个 3DShape 作为输入参数,获取其中的被切割拓扑体 ,输出并存储于一个CATLISTP(CATBody)类型的集合中。

为了实现“生成切割结果并组装至目标位置” 的目的,首先使用 BrowseOccurrence()函数,以被切割体根节点做为输入参数,输出一个用于存储CutBodyStruct 类型结构体的集合。本函数也是递归函数,当根节点物理产品下仍然存在物理产品子节点时,继续对子节点施加本函数。最后,通CreateNewCutObjectProduct()函数 ,以CutBodyStruct类型结构体为输入参数,生成可以代表切割结果的物理产品并插入目标装配位置。

9

拓展知识:

原创文章,作者:趣淘网小编,如若转载,请注明出处:http://www.3322388.com/32921.html

发表评论

邮箱地址不会被公开。 必填项已用*标注