← 返回首页

深入理解PLM Product Reference

深入探讨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
  • 图标:图片|43
  • 具有高度灵活性,适合构建复杂产品结构

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 Reference
  • piAdpEnv: 环境参数,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列表。

三、实用开发建议

  1. 环境选择:在批处理代码中使用特定环境,而在交互式命令中使用当前环境(NULL)
  2. 3DPart识别:通过检查V_usage属性值是否为"3DPart"来区分3DPart和普通Product
  3. 生命周期管理:对3DPart的操作会直接影响其3D Shape,务必注意这种关联性

四、总结

理解PLM Product Reference的核心概念和创建模式,是进行高效CAA二次开发的关键。Product提供灵活的结构聚合能力,而3DPart则与3D几何紧密关联,两者各有适用场景。通过正确使用工厂接口和创建API,我们可以精准控制产品结构的构建过程。

评论