W następnych kilku ćwiczeniach utworzysz serię reguł zarządzających zawartością zespołu.
Ten model ma część o nazwie manifold_block:1, zawierającą reguły iLogic. Należy przekazać parametry z poziomu zespołu do tej części.
Reguła ta ustala parametry w części w oparciu o odpowiednie wartości parametrów sterowania w zespole. Funkcja Parametr określa nazwę komponentu oraz nazwę parametru.
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
W ćwiczeniu Część bloku kolektora dodaliśmy do części bloku kolektora regułę sterującą stylami teownika i kolanka. Musimy ją dodać również na poziomie zespołu. Zamiast przepisywać regułę, możemy skopiować oryginał.
If component_type = "standard" Then port_b_size = port_a_size port_c_size = port_a_size End If
Gdy zmieniamy rozmiar gniazda Port A, musimy wykonać kilka czynności:
Dodajemy regułę:
Pierwsza część tej reguły reguluje odstępy w szyku śrub na podstawie informacji przechowywanych w tabeli części 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")
Następna część reguły wybiera odpowiedni wiersz iPart wewnątrz części śruby w oparciu o wyznaczony rozmiar gniazda.
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 różni się od gniazd Port A i Port C, ponieważ nie występuje w bloku kolektora kolankowego. Jeśli blok kolektora jest blokiem typu kolankowego, musimy wyłączyć zaślepkę i śruby użyte dla tego punktu. Musimy również wyłączyć wiązania zestawiające przypisane do zaślepki.
Ponieważ wyłączamy komponenty, przed zapisaniem reguły wybieramy poziom szczegółu. Reguły wpływające na obiekty powiązane z poziomem szczegółu w zespole wymagają zdefiniowania i zapisania niestandardowego poziomu szczegółu przed przystąpieniem do zapisu reguł. Jeśli niestandardowy poziom szczegółu nie zostanie zdefiniowany, iLogic wygeneruje komunikat o błędzie.
Wybór poziomu szczegółu
Dodany zostanie nowy poziom szczegółu.
Zapis reguły
Następnie możemy zapisać regułę.
If block = "elbow" Then isTee = False ElseisTee = True End If
Użyjemy tej zmiennej później, by określić inne parametry.
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
Zauważ, że zmiennej isTee można używać do włączania lub wyłączania wiązań odpowiednio do wartości parametru block.
Component.IsActive("port_b_union") = isTee Component.IsActive("port_b_screw_pattern") = isTee
W tych wierszach używana jest zmienna isTee. Gdy szyk śruby jest wyłączony, wyłączony jest również komponent śruby.
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
Zawarliśmy cały ten blok w instrukcji If isTee, aby te wiersze były przetwarzane wyłącznie w przypadku teownikowego bloku kolektora. Instrukcja If isTee Then jest równoważna instrukcji If isTee = True Then, ale sprawia, że wyrażenie jest bardziej zwięzłe.
Najpierw w tabeli iPart części stanowiącej dwuzłączkę wybieramy właściwy wiersz odpowiadający wartości parametru port_b_size, a następnie pobieramy wartości, których użyjemy jako wartości odsunięcia szyków x i y. Następnie pobieramy numer części z części dwuzłączki i zapisujemy jego wartość w innym parametrze na użytek w przyszłości.
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
Reguła dla gniazda Port C jest prawie taka sama, jak w przypadku gniazda Port A, z wyjątkiem tego, że wszystko, co odnosi się do gniazda Port A musi odnosić się do gniazda 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")