今天碰到一个客户问题,他想修改衍生零件的属性:UseColorOverridesFromSource, 该布尔值用来决定是否使用衍生源零件中的体,特征和面的颜色。他的代码是这样写的:
Public Sub ModifyDerivedPartExample()
Dim oDoc As PartDocument
oDoc = _InvApplication.ActiveDocumen
Dim oCompDef As PartComponentDefinition
oCompDef = oDoc.ComponentDefinition
Dim oDerivedPartComps As DerivedPartComponents
oDerivedPartComps =oCompDef.ReferenceComponents.DerivedPartComponents
Dim oDerivePart As DerivedPartComponent
oDerivePart = oDerivedPartComps.Item(1)
oDerivePart.Definition.IncludeAll()
oDerivePart.Definition.UseColorOverridesFromSource = True
oDoc.Rebuild()
End Sub
编译和运行都 没有任何错误,但结果是衍生件的颜色并没有使用源零件的颜色。这是为何?
其实,这里有个小小的技巧。当需要修改衍生零件属性时,需要先创建一个临时的衍生定义DerivedPartDefinition。把该定义的属性按照希望的内容设定好,再覆盖衍生件的定义。
Public Sub ModifyDerivedPartExample()
DimoDoc As PartDocument
oDoc = _InvApplication.ActiveDocument
DimoCompDef As PartComponentDefinition
oCompDef = oDoc.ComponentDefinition
DimoDerivedPartComps As DerivedPartComponents
oDerivedPartComps =oCompDef.ReferenceComponents.DerivedPartComponents
DimoDerivePart As DerivedPartComponent
oDerivePart = oDerivedPartComps.Item(1)
'定义一个临时的 DerivedPartDefinition变量
'用旧的定义初始化。即复制一份
DimoDerivedPartDef As DerivedPartDefinition
oDerivedPartDef =oDerivePart.Definition
'对这个临时变量做你需要的修改
oDerivedPartDef.UseColorOverridesFromSource = True
' 覆盖衍生件旧的定义
oDerivePart.Definition = oDerivedPartDef
End Sub