creo toolkit二次开发学习之程序集(ProAsmcomp)和装配体组件路径对象(ProAsmcomppath)

程序集ProAsmcomp可以理解为装配体组件对象。

对象ProAssemblyProSolid的一个实例,并共享相同的声明。因此,ProAssembly对象可以作为适用于装配体的任何ProSolidProMdl函数的输入。特别是,因为你可以使用函数ProSolidFeatVisit()来遍历特征,所以你可以像处理零件一样提取装配基准特征及其几何形状(在 “核心:3D 几何” 部分中有详细描述)。

然而,装配体除了基准中的那些之外不包含活动的几何项 —— 也就是说,没有像 “核心:3D 几何” 和 “元素树:特征创建原理” 部分中所描述的 “实体” 几何形状。因此,函数ProSolidSurfaceVisit()将找不到任何曲面,并且诸如孔和槽之类的实体装配特征将不包含活动的曲面或边。

装配体的实体几何形状完全包含在其组件中。每个组件是类型为PRO_FEAT_COMPONENT的特征,它是对一个零件或另一个装配体的引用,加上一组用于确定其在父装配体中的几何位置的参数约束。(可以理解为组件下的零件相当于这个组件的特征,类型为PRO_FEAT_COMPONENT,加上参数约束构建成一个装配体

诸如孔和槽之类的实体装配特征,并且因此影响装配层次结构中零件的实体几何形状,它们本身并不包含描述那些修改的几何项。这些项总是包含在其几何形状被修改的零件中,在为此目的创建的类型为PRO_FEAT_ASSEM_CUT的局部特征中。

对于装配体来说,最重要的 Creo Parametric TOOLKIT 函数是那些对装配体的组件进行操作的函数。为此目的定义了对象ProAsmcomp,它是ProFeature的一个实例,并共享其DHandle声明。每个装配体组件都被视为一种特征,并且组件的整数标识符也是特征标识符。

一个装配体组件可以是另一个装配体。因此,一般来说,一个装配体可以在多个级别上包含装配体和零件的层次结构,其中一些装配体和零件可能会出现多次。为了在根装配体的上下文中确定任何数据库项的作用,仅拥有该项的整数标识符以及对其所属零件或装配体的句柄是不够的,就像其ProFeatureProGeomitem描述所提供的那样。还必须给出从根装配体到拥有数据库项的零件或装配体的装配体组件引用的完整路径。对象ProAsmcomppath用作 Creo Parametric TOOLKIT 装配体函数的输入,实现了这个目的。(可以理解为ProAsmcomppath是每个组件或者零件对象在根装配体下的路径信息

ProAsmcomppath的声明如下:

typedef struct pro_comp_path
{
    ProSolid    owner;
    ProIdTable  comp_id_table;
    int         table_num;
} ProAsmcomppath;

数据结构字段如下:

  • owner(所有者)—— 标识根装配体,即当前窗口模型顶级对象,如果是组件,则是当前窗口最大组件模型,零件下获取不到模型对象,只会返回随机内存中的东西。
  • comp_id_table(组件标识符表)—— 一个整数数组,包含形成从根装配体向下到被引用的组件零件或装配体的路径的组件的标识符。
  • table_num—— 指定comp_id_table数组中组件标识符的数量。

下图 “示例装配层次结构” 展示了一个装配层次结构,以及两个ProAsmcomppath对象内容的示例。

在上图中,子装配 C 是装配 A 中的元件标识符 11,零件 B 是装配 AB 中的元件标识符 3,然后打开。 子装配体 AB 出现两次。要引用 B 部分的两个实例,请使用以下内容:

Component B’           Component B"
table_num = 5          table_num = 4
comp_id_tab[0] = 2     comp_id_tab[0] = 11
comp_id_tab[1] = 2     comp_id_tab[1] = 6
comp_id_tab[2] = 5     comp_id_tab[2] = 12
comp_id_tab[3] = 2     comp_id_tab[3] = 3
comp_id_tab[4] = 3

table_num设置为 1 的 ProAsmcomppath 结构包含与 ProAsmcomp 对象相同的信息。

对象 ProAsmcomppath 是 ProSelection 对象中的主要成分之一,如 Selection 对象中所述。

装配体的每个零部件也是该装配体的一个特征。因此,要访问组件,请使用 ProSolidFeatVisit() 访问特征,并使用函数 ProFeatureTypeGet() 查找类型为 PRO_FEAT_COMPONENT 的特征。可以通过强制转换将每个组件的 ProFeature 对象转换为 ProAsmcomp 对象。

        要为组件创建 ProAsmcomppath 对象,请使用函数 ProAsmcomppathInit() 并将组件标识符表设置为仅包含单个组件标识符。
        函数 ProAsmcompMdlMdlnameGet() 检索组件的模型名称和类型。如果在检索时缺少装配体零部件,则函数 ProAsmcompMdlMdlnameGet() 仍提供有关该零部件的信息,而函数 ProAsmcompMdlGet() 无法检索有效的模型句柄。
        函数 ProAsmcompMdlGet() 为零部件所引用的零件或装配体提供 ProMdl 句柄。遍历装配体中所有级别的零部件 层次结构中,创建一个递归函数来执行以下步骤:
1.    为根装配体的每个零部件调用 ProAsmcompMdlGet() 以查找该零部件的模型。
2.    调用 ProMdlTypeGet() 以确定模型是零件还是装配体。
3.    如果模型是装配体,请再次调用 ProSolidFeatVisit() 遍历每个零部件。
函数 ProAsmcomppathMdlGet() 检索由 ProAsmcomppath 指定的模型,在分析引用程序集的 ProSelection 对象时非常有用。
函数 ProAsmcompTypeGet() 生成装配体零部件的类型。可能类型的示例如下:

•    PRO_ASM_COMP_TYPE_WORKPIECE - 工件
•    PRO_ASM_COMP_TYPE_REF_MODEL - 参考模型
•    PRO_ASM_COMP_TYPE_FIXTURE - 夹具
•    PRO_ASM_COMP_TYPE_MOLD_BASE - 模架
•    PRO_ASM_COMP_TYPE_MOLD_COMP - 模具元件
•    PRO_ASM_COMP_TYPE_MOLD_ASSEM - 模具组件
•    PRO_ASM_COMP_TYPE_GEN_ASSEM - 总装
•    PRO_ASM_COMP_TYPE_CAST_ASSEM - 铸造组件
•    PRO_ASM_COMP_TYPE_DIE_BLOCK - 模具块
•    PRO_ASM_COMP_TYPE_DIE_COMP - 模具元件
•    PRO_ASM_COMP_TYPE_SAND_CORE - 砂芯
•    PRO_ASM_COMP_TYPE_CAST_RESULT - 强制转换结果
•    PRO_ASM_COMP_TYPE_FROM_MOTION () - 供 Creo Simulate 使用的元件。
•    PRO_ASM_COMP_TYPE_NO_DEF_ASSUM () - Creo Parametric 无法为其应用默认假设的元件。

函数 ProAsmcompMdldataGet() 将程序集组件的句柄作为其输入参数,并检索以下信息:

r_mdl_type - 使用枚举数据类型 ProMdlType 指定模型的类型。

r_mdl_filetype () - 使用枚举数据类型 ProMdlfileType 指定元件的文件类型。

r_mdl_name () - 指定元件的名称。您必须使用函数 ProWstringFree() 释放此参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值