您可以使用规则根据定义的条件和逻辑,更改 iPart 和 iAssembly 的当前配置。
使用 iPart 和 iAssembly 函数可驱动部件中的 iPart 和 iAssembly 配置。
这些函数用于 iAssembly 的方式与用于 iPart 的方式一样,但是,自定义参数只能用于 iPart。若要对 iAssembly 使用该函数,您还可以在指定函数时使用 iAssembly 替换 iPart。
若要访问 iPart 和 iAssembly 函数,请展开 iLogic“编辑规则”对话框“代码段”区域中“系统”选项卡上的“iPart”节点。
还有用于 iFeature 的相似函数。详细信息,请参见 iFeature 函数。
更改 iPart 或 iAssembly 表中的激活行。
语法
iPart.ChangeRow("iChangedComponentName:1", "memberName")
“iChangedComponentName:1”
零部件名称,与在 Inventor 部件浏览器中显示的名称一样。更改 Inventor 指定的默认零部件名称以稳定该名称,并防止在选择表中的其他行时该名称发生更改。
“memberName”
指定给表中该行“成员”列的名称。
对于具有自定义参数的 iPart,请使用该语法在 "memberName" 后列出自定义参数。按照自定义参数在表中的显示顺序进行显示:
iPart.ChangeRow("iChangedComponentName:1", "memberName", customParam1,customParam2)
使用该语法来指定行号而不是成员名称。行号可以是整数,从 1 开始,1 表示第一行(仅适用于标准 iPart):
iPart.ChangeRow("iChangedComponentName:1", rowNumber)
示例
在此示例中,当前的 iPart 配置将根据评估 Inventor 用户参数 Port_1_Size 的条件语句进行更改。该函数只需要用 iPart 零部件名称 port_1_Flange_screw 和 iPart 表成员名称 Screw-01 来驱动激活的 iPart 配置:
If Port_1_Size = .50 Then iPart.ChangeRow("port_1_flange_screw", "Screw-01") ElseIf Port_1_Size = .75 Then iPart.ChangeRow("port_1_flange_screw", "Screw-02") ElseIf Port_1_Size = 1.00 Then iPart.ChangeRow("port_1_flange_screw", "Screw-03") End If
在 iPart 或 iAssembly 表中按列搜索包含特定值或近似值的行,并将激活的配置设定为找到的行。
语法
i=iPart.FindRow("iChangedComponentName:1", "columnName","<=",0.2,"columnName","<=", 4.1,"|",customParam1,customParam2)
i=iPart.FindRow("iChangedComponentName:1","columnName", "<=",d1,"columnName","<=",d2)
“i”
可用来测试是否找到了有效行号的局部变量。
“iChangedComponentName:1”
零部件名称,与在 Inventor 部件浏览器中显示的名称一样。更改 Inventor 指定的默认零部件名称以稳定该名称,并防止在选择表中的其他行时该名称发生更改。
“columnName”
要在 iPart 表中搜索的列。使用与 iPart 表中所显示的列表头名称完全一样的列表头名称。
示例
该示例将搜索 iPart 表中列值等于或大于指定值的行。iLogic 会将当前的 iPart 配置切换为找到的行:
iPart.FindRow("port_1_flange_screw", "Thread_Diameter", ">=", 0.45, "Thread_Length", ">=", 2.0)
一旦使用 iPart.FindRow 找到了行,该函数即会从该行读取关联的列值。该函数仅读取数值。使用 iPart.CurrentRowStringValue 可读取包含文本值的列。
语法
d0 = iPart.CurrentRowValue("columnName")
以下任意函数可以设定当前行:
iPart.FindRow 或 iPart.ChangeRow。
“columnName”
您想用的 iPart 表列的名称。
示例
在此示例中,我们将在 port_1_flare_flange iPart 表的 Port_Size 列中搜索与 Inventor 参数 Port_1_Size 的值精确匹配的值。一旦找到了行,我们即会使用 iPart.CurrentRowValue 从表的 A_dim 和 B_dim 列中检索尺寸。然后,我们将其值指定给名为 Port_1_screw_A_dim 和 Port_1_screw_B_dim 的 Inventor 参数:
i = iPart.FindRow("port_1_flare_flange", "Port_Size", "=", Port_1_Size) Port_1_screw_A_dim = iPart.CurrentRowValue("A_dim") Port_1_screw_B_dim = iPart.CurrentRowValue("B_dim")
一旦使用 iPart.FindRow 找到了行,即会使用该函数从此行读取关联的列值。该函数与 iPart.CurrentRowValue 类似,但是它只读取文本值。使用 iPart.CurrentRowValue 可读取包含数字值的列。
语法
iPart.CurrentRowStringValue("PartNumber")
零部件名称的替换语法
若要指定零部件名称在 iPart 行发生更改时不进行更改:
iPart.ChangeRow("iParentFileName:1", "memberName")
iPart.FindRow("iParentFileName:1","columnName","<=",d1,"columnName","<=",d2)
“iParentFileName:1”
iPart 父文件名,其中“:1”替换了常规的 .ipt 或 .iam 扩展名。将“:1”更改为您正在处理的零部件的编号。
尽管系统也支持该语法,但是不建议使用该语法。更标准的方法是:更改零部件名称以将其稳定。
获取 iPart 或 iAssembly 零部件引用中激活行的成员名。在由“iPart 或 iAssembly 更改零部件”事件触发的规则中,该函数非常有用。使用 iPart.ChangeRow 或 iPart.FindRow 以从规则中自动选择行。如果您想允许用户手动选择行,可以将该事件与该函数结合,以对更改进行响应。
语法
iPart.RowName("iChangedComponentName:1")
示例
memberName = iPart.RowName("port_1_flange_screw:1")
获取 iPart 或 iAssembly 零部件引用中激活行的行号。
语法
iPart.RowNumber("iChangedComponentName:1")
示例
rowNumber = iPart.RowNumber("port_1_flange_screw:1")
将该函数与 iPart.FindRow 函数结合使用,您可以搜索某范围内的值,而不是搜索一个确切的值。该搜索始终使用公差。默认公差为 0.0000001 并且与文档单位无关。
语法
iPart.Tolerance = <值>
设定更高的公差以扩大可接受值的范围。
示例
假设您使用以下语句:
iPart.Tolerance = 0.001 i = iPart.FindRow("Block:1","length", "=", 2.3)
同时,这些语句会与以下不使用公差的搜索等效:
i = iPart.FindRow("Block:1", "length", ">=", 2.299, "length","<=", 2.301)
若要使用不同工厂中的成员替换 iPart 成员,请使用 Component.ReplaceiPart。