在接下來的數個課程中,您將建立一系列規則來管理組合的內容。
此模型包括一個名為 manifold_block:1 的零件,其中包含 iLogic 規則。我們必須將組合層級參數傳遞至零件。
此規則會根據組合中對應的控制參數值,設定零件中的參數。Parameter 函數會指定元件名稱,也會指定參數名稱。
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
在〈歧管擋塊零件〉自學課程中,我們對控制 T 形和彎頭型式的歧管擋塊零件加入了規則。我們也必須在元件層級加入此規則。我們要複製原始規則,而不是重新編寫現有規則。
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
請注意,我們可以使用 isTee 變數,根據 block 參數的值來打開或關閉這些約束。
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 陳述式來封閉整個程式碼塊,因此僅在 T 形歧管擋塊的情形下才會處理這幾行規則。陳述式 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")