深入探讨CATIA CAA开发中的一个重要概念——PLM Product Reference。作为PLM Core Reference对PRODUCT modeler的专业化实现,掌握它对于产品结构管理至关重要。本文将为你揭示Product与3D Part的本质区别,并通过代码示例展示如何精准创建和管理它们。
一、Product vs 3D Part:本质区别
在PLM系统中,Product Reference可以有两种行为模式,这也是很多开发者容易混淆的地方:
1. Product(产品)
- 一个没有限制的PLM Product Reference
- 可以聚合:
- 0…N个PLM Product Instances
- 0到N个单实例化PLM Product Representation References
- 0到N个多实例化PLM Product Representation References
- 图标:
- 具有高度灵活性,适合构建复杂产品结构
2. 3D Part(3D零件)
- 自动创建并实例化一个单实例化的PLM Product Representation Reference,其数据流是一个3D Shape
- 3D Shape实例不可删除(无论是交互式操作还是API)
- 不能插入PLM Product Instances(3D Part在产品装配中是叶节点)
- 生命周期与3D Shape绑定:删除、版本控制或复制3D Part,会同时影响其3D Shape
- 可以包含其他PLM Representation Instances(除3DShape外)
- 可通过V_usage属性值为"3DPart"来识别
- 图标:
可以添加其他表示引用,但3DShape实例不可删除
二、创建Product Reference的技术实现
创建Product Reference遵循三个明确步骤:获取Factory接口、创建Product Reference、修改PLM属性。
1. 获取Factory接口
普通Product的工厂接口:
#include"CATPrdFactory.h"
#include"CATIPrdReferenceFactory.h"
CATIPrdReferenceFactory* piFactory = NULL;
HRESULT hr = CATPrdFactory::CreatePrdFactory(IID_CATIPrdReferenceFactory, (void**)&piFactory);
3DPart的工厂接口:
#include"CATPrdFactory.h"
#include"CATIPrd3DPartReferenceFactory.h"
CATIPrd3DPartReferenceFactory* piFactory = NULL;
HRESULT hr = CATPrdFactory::CreatePrdFactory(IID_CATIPrd3DPartReferenceFactory, (void**)&piFactory);
2. 创建Product Reference
创建普通Product:
#include"CATIPLMProducts.h"
#include"CATListValCATICkeParm.h"
CATIType_var spRefType;
CATCkePLMNavPublicServices::RetrieveKnowledgeType("VPMReference", spRefType);
CATIPLMProducts* piProduct = NULL;
CATListValCATICkeParm_var EmptyPLMAttributeList;
CATIAdpEnvironment* piAdpEnv = ...; // 环境设置
hr = piFactory->CreatePrdReference(spRefType, EmptyPLMAttributeList, piProduct, piAdpEnv);
重要参数说明:
spRefType: 通过CATCkePLMNavPublicServices::RetrieveKnowledgeType获取的VPMReference类型EmptyPLMAttributeList: PLM属性列表必须为空piProduct: 新创建的Product ReferencepiAdpEnv: 环境参数,NULL表示使用当前环境,批处理代码通常使用特定环境
创建3DPart:
#include"CATIPLMProducts.h"
#include"CATListValCATICkeParm.h"
CATIAdpEnvironment* piAdpEnv = ...;
CATListValCATICkeParm_var EmptyPLMAttributeList;
CATIType_var spRefType;
CATCkePLMNavPublicServices::RetrieveKnowledgeType("VPMReference", spRefType);
CATIPLMProducts* piProduct = NULL;
hr = piFactory->Create3DPart(piAdpEnv, spRefType, EmptyPLMAttributeListForRef,
EmptyPLMAttributeListForRepRef, piProduct);
3. 修改PLM属性
创建API会调用业务逻辑初始化PLM属性,通常不需要通过输入属性列表来设置。如果需要在创建后修改属性值,可以使用CATCkeObjectAttrWriteServices API。
4. 删除Product Reference
使用CATPLMPrdDeleteServices类的DeleteProductStructures方法可删除PLM Product Reference列表。
三、实用开发建议
- 环境选择:在批处理代码中使用特定环境,而在交互式命令中使用当前环境(NULL)
- 3DPart识别:通过检查V_usage属性值是否为"3DPart"来区分3DPart和普通Product
- 生命周期管理:对3DPart的操作会直接影响其3D Shape,务必注意这种关联性
四、总结
理解PLM Product Reference的核心概念和创建模式,是进行高效CAA二次开发的关键。Product提供灵活的结构聚合能力,而3DPart则与3D几何紧密关联,两者各有适用场景。通过正确使用工厂接口和创建API,我们可以精准控制产品结构的构建过程。
评论