iLogic 提供了一些用于设定或读取零部件抑制状态、模型状态和颜色的规则函数,还提供了一个用于将一个零部件替换为另一个零部件的函数。
这些函数对于驱动不同的零件或部件配置非常有用。
您可以创建模型(零件或部件),其中包含表达所有可能有效的产品配置所需的零部件。该方法称为“超级造型”。当零件或零部件太复杂或太多,超级造型变得不可行时,请使用 Component.Replace 函数。
若要访问零部件函数,请展开 iLogic“编辑规则”对话框的“代码段”区域中“系统”选项卡上的“零部件(经典)”节点。
在规则中参考名称之前,请自定义所有零部件名称。当您更改 Autodesk Inventor 为零部件指定的默认名称时,请确保该名称不会随参考的 .ipt 或 .iam 文件名更改而更改。
对于资源中心零部件,应用 Component.IsActive 函数和 Component.Replace 函数时需要更改名称。
设定或读取部件的抑制状态和 BOM 表结构。使用该函数可以从部件配置中引入零部件或从中排除零部件。
该函数适用于单个零部件或零部件阵列。应用于阵列时,请使用阵列名称。阵列必须与规则位于同一个部件等级上并且不在子部件中。
请勿抑制子零部件。另一个好方法是从零部件中的规则中执行抑制。
例如,名为 TopAssembly 的部件包含 SubAssembly:1,并且该子部件包含 SamplePart:1。
使用 SubAssembly 中的规则可以抑制 SamplePart:1。该规则可以包含用于驱动抑制状态的参数,您可以使用 TopAssembly 中的规则驱动该参数。
当您使用 Component.IsActive 抑制零部件时,零部件的 BOM 表结构将设定为“参考”。该操作可以防止零部件显示在 BOM 表中。零部件会显示在“模型数据”视图中,但是不显示在“装配结构”或“仅零件”视图中。如果解除抑制零部件(使用 Component.IsActive),iLogic 会将零部件恢复到抑制前的状态(“普通件”、“不可拆分件”、“外购件”或“虚拟件”)。
语法
Component.IsActive("ComponentName")
示例
您可以使用 1 代替 true,使用 0 代替 false。
若要设定抑制状态和 BOM 表结构:
Component.IsActive("PartA:1") = false Component.IsActive("PartB:1") = 0 Component.IsActive("PartC:1") = false Component.IsActive("PartD:1") = 0
若要读取抑制状态:
MyBooleanParam = Component.IsActive("ComponentName:1) If Component.IsActive("PartE") Then ' do something End If
该函数是 Component.IsActive 的变体,可以设定或读取 iPart 或 iAssembly 零部件的抑制状态。如果您未手动更改零部件名称,则 iPart 和 iAssembly 需要使用该特定语法。
建议您更改零部件名称。如果要更改零部件名称,请使用 Component.IsActive,而不是该函数。
语法
Component.iComponentIsActive(“iPartParentName:1”)
iPartParentName
不带 .ipt 文件扩展名的工厂零件名称。
设定或读取零部件的颜色。
语法
Component.Color(“iPartA:1”)
示例
设定颜色:
Component.Color("iPartA:1") = "Green" Component.Color("iPartA:2") = "Aluminum (Cast)" Component.Color("iPartA:3") = "As Material"
读取颜色:
MyStringParameter = Component.Color("iPartA:1")
设定或读取零部件的可见性。该函数不会更改零部件的 BOM 表结构。
语法
Component.Visible("componentName")
示例
设定可见性:
Component.Visible("Plate") = true Component.Visible("Bearing") = false
读取可见性:
parameter = Component.Visible("Plate") parameter = Component.Visible("Bearing")
If Component.Visible("PartE") Then do something End If
指定在零部件文档发生更改然后又被规则抑制后,是否保存该文档。
语法
Component.SkipDocumentSave = True
设定为 True 时,将不保存零部件文档。
默认值为 False (Component.SkipDocumentSave = False);将保存零部件文档。
设定或读取零部件的激活模型状态。
语法
Component.ActiveModelState(“ComponentName”)
示例
Component.ActiveModelState(“PartA:1”) = “Model State2”
Dim partB1_state = Component.ActiveModelState(“PartB:1”)
使用其他零件或子部件替换一个零件或子部件。该函数还可以用于替换零部件阵列。
在要交换的零部件中使用 iMate 以保持装配约束固定不变。您可以为零件交换零件,为部件交换零件,或为零件交换部件。
该功能将在多个文件夹中搜索要用作替换的文件:
文件名可以是相对路径(相对于其中任意搜索位置)。
语法
Component.Replace(“ComponentToReplaceName”, “OtherPartfilename.ipt”, <replaceAll>)
ComponentToReplaceName
要替换的零件或子部件的名称。
OtherPartfilename
要用作替换的零件或部件。
<replaceAll>
将该布尔值设定为 True,以替换该零部件的所有实例。将该值设定为 False,以仅替换单独命名的实例。
示例
If PartType = "Type A" Then Component.Replace("Widget","PartA.ipt", True) ElseIf PartType = "Type B" Then Component.Replace("Widget","PartB.ipt", True) End If
Component.Replace 函数的此变体可将部件中的某个零部件替换为处于特定模型状态的另一个零部件。
语法
Component.Replace("SubAssem:1", "OtherAssemFilename.iam<Model State>", <replaceAll>)
在该函数中,<replaceAll> 参数与更一般的 Component.Replace 函数的参数相同。
您也可以使用此函数将某个零件或子部件替换为处于不同模型状态的同一零件或子部件。不过,使用 Component.ActiveModelState 函数更高效。
必须对具有自定义参数的 iPart 使用该函数;还建议对标准 iPart 使用该函数。当零部件是 iPart 时,使用该函数而不是 Component.Replace。替换后,您可以使用 iPart.ChangeRow 或 iPart.FindRow 来更改特定的 iPart 配置。
对于具有自定义参数的 iPart,请在 rowNumber 后列出自定义参数的值。这些值必须按照在表中被找到的顺序列出。
语法
Component.ReplaceiPart("iPart1:1", "OtherPartfilename.ipt", True, rowNumber)
使用 rowNumber 替换零部件,同时选择 iPart 行。
示例
若要设定自定义参数,请在规则中的 Component.ReplaceiPart 中重复自定义值,然后在 iPart.ChangeRow 或 iPart.FindRow 中重复自定义值。
对于 ChangeRow:
Component.ReplaceiPart("iPart1:1", "OtherPartfilename.ipt", True, rowNumber, customParam1, customParam2) iPart.ChangeRow("iPart1:1", rowNumber, customParam1, customParam2)
对于 FindRow:
Component.ReplaceiPart("iPart1:1", "OtherPartfilename.ipt", True, rowNumber, customParam1, customParam2) i = iPart.FindRow("iPart1:1", "Dia", ">=", 3.0, "r;|", customParam1, customParam2)
定义子部件中零部件名称的路径。若要指定路径,请按照子部件在树中的显示顺序列出所有子部件等级。如果您想指定的零部件名称与部件中其他地方的零部件名称相同,则需要该函数。
语法
MakePath(“SubassemblyComponentName”,“PartComponentName”)
示例
Component.Color(MakePath("SubAssem1:1", "Part2:1")) = “Green” Component.IsActive(MakePath("SubAssem1:1", "SubSubAssem2:1", "Part2:1")) = “Yellow”