在接下来的几节课程中,创建一系列规则来管理部件中的零部件。
此模型中包含名为 manifold_block:1 的零件,其中包含 iLogic 规则。我们必须将部件级别的参数传递到零件。
此规则将基于部件中控制参数的对应值设定零件中的参数。我们的参数功能可以指定零部件名称以及参数名称。
Parameter("manifold_block:1", "block") = block Parameter("manifold_block:1", "component_type") = component_type Parameter("manifold_block:1", "port_a_size") = port_a_size Parameter("manifold_block:1", "port_b_size") = port_b_size Parameter("manifold_block:1", "port_c_size") = port_c_size
在“集成块零件”教程中,我们向集成块零件添加了控制三通和弯头样式的规则。我们还必须在部件级别添加该规则。但我们不是要重写现有规则,而是复制原来的规则。
If component_type = "standard" Then port_b_size = port_a_size port_c_size = port_a_size End If
更改 Port A 的端口尺寸时,我们必须执行几项任务:
我们将添加规则来实现此目的:
此规则的第一部分将基于活接头零件的 iPart 表中存储的信息调整螺钉阵列的间隔。
i = iPart.FindRow("port_a_union", "port_size", "=", port_a_size) port_a_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw") port_a_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw")
规则的下一部分将基于选定的端口尺寸在螺钉零件内部选择适当的 iPart 行。
If port_a_size = .50 Then iPart.ChangeRow("port_a_union_screw", "Screw-01") ElseIf port_a_size = 0.75 Then iPart.ChangeRow("port_a_union_screw", "Screw-02") ElseIf port_a_size = 1.00 Then iPart.ChangeRow("port_a_union_screw", "Screw-02") ElseIf port_a_size = 1.25 Then iPart.ChangeRow("port_a_union_screw", "Screw-03") ElseIf port_a_size = 1.50 Then iPart.ChangeRow("port_a_union_screw", "Screw-04") ElseIf port_a_size = 2.00 Then iPart.ChangeRow("port_a_union_screw", "Screw-04") ElseIf port_a_size = 2.50 Then iPart.ChangeRow("port_a_union_screw", "Screw-05") ElseIf port_a_size = 3.00 Then iPart.ChangeRow("port_a_union_screw", "Screw-06") End If
port_a_union_part_number = iProperties.Value("port_a_union", "Project", "Part Number")
Port B 不同于 Port A 和 Port C,因为它不存在于弯头集成块中。如果集成块是弯头样式块,那么我们必须抑制用于此端口的活接阀帽和活接螺钉。我们还必须抑制与活接阀帽关联的配合约束。
因为我们要抑制零部件,因此在撰写规则之前要设定详细等级。如果规则影响到与部件中的详细等级相关的项目,那么需要在撰写规则之前定义并保存自定义详细等级。如果未定义自定义详细等级,则 iLogic 会生成错误消息。
设定详细等级
新的详细等级将添加。
撰写规则
现在,我们可以撰写规则了。
If block = "elbow" Then isTee = False ElseisTee = True End If
我们稍后使用此变量设定其他参数。
Constraint.IsActive("port_b_cap_center") = isTee Constraint.IsActive("port_b_cap_hole") = isTee Constraint.IsActive("port_b_cap_face") = isTee Constraint.IsActive("port_b_cap_screw") = isTee
请注意,我们可以根据 block 参数的值使用 isTee 变量打开或关闭这些约束。
Component.IsActive("port_b_union") = isTee Component.IsActive("port_b_screw_pattern") = isTee
这些代码行使用 isTee 变量。当螺钉阵列受抑制时,螺钉零部件也会受到抑制。
if isTee Then i = iPart.FindRow("port_b_union", "port_size", "=", port_b_size) port_b_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw") port_b_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw") port_b_union_part_number = iProperties.Value("port_b_union", "Project", "Part Number") End If
我们已经将整个代码块包含在 If isTee 语句中,这样系统仅会针对三通样式集成块处理这些代码行。If isTee Then 语句与 If isTee = True Then 语句功能相同,但前者提供了更为简洁的表达式格式。
我们首先在活接头零件的 iPart 表中选择对应于 port_b_size 参数值的相应行,然后提取用于 x 和 y 阵列偏移的值。然后,从活接头零件提取零件代号,并将值存储在另一参数中,以备稍后参考。
If port_b_size = .50 then iPart.ChangeRow("port_b_union_screw", "Screw-01") elseif port_b_size = .75 then iPart.ChangeRow("port_b_union_screw", "Screw-02") elseif port_b_size = 1.00 then iPart.ChangeRow("port_b_union_screw", "Screw-02") elseif port_b_size = 1.25 then iPart.ChangeRow("port_b_union_screw", "Screw-03") elseif port_b_size = 1.50 then iPart.ChangeRow("port_b_union_screw", "Screw-04") elseif port_b_size = 2.00 then iPart.ChangeRow("port_b_union_screw", "Screw-04") elseif port_b_size = 2.50 then iPart.ChangeRow("port_b_union_screw", "Screw-05") elseif port_b_size = 3.00 then iPart.ChangeRow("port_b_union_screw", "Screw-06") End If
Port C 的规则与 Port A 的几乎相同,只不过参考 Port A 的所有对象都必须参考 Port C。
i = iPart.FindRow("port_c_union", "port_size", "=", port_c_size) port_c_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw") port_c_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw") If port_c_size = .50 then iPart.ChangeRow("port_c_union_screw", "Screw-01") elseif port_c_size = .75 then iPart.ChangeRow("port_c_union_screw", "Screw-02") elseif port_c_size = 1.00 then iPart.ChangeRow("port_c_union_screw", "Screw-02") elseif port_c_size = 1.25 then iPart.ChangeRow("port_c_union_screw", "Screw-03") elseif port_c_size = 1.50 then iPart.ChangeRow("port_c_union_screw", "Screw-04") elseif port_c_size = 2.00 then iPart.ChangeRow("port_c_union_screw" "Screw-04") elseif port_c_size = 2.50 then iPart.ChangeRow("port_c_union_screw", "Screw-05") elseif port_c_size = 3.00 then iPart.ChangeRow("port_c_union_screw", "Screw-06") End If port_c_union_part_number = iProperties.Value("port_c_union", "Project", "Part Number")