V dalších několika lekcích vytvoříte řadu pravidel k řízení obsahu sestavy.
Tento model obsahuje součást s názvem manifold_block:1, která obsahuje pravidla modulu iLogic. Musíme převést parametr na úrovni sestavy do součásti.
Toto pravidlo nastavuje parametry v součásti na základě příslušných hodnot řídicích parametrů v sestavě. Funkce našeho parametru určuje název komponenty a také název 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
Ve výukovém programu Součást rozloženého bloku jsme do součásti rozloženého bloku přidali pravidlo, které řídí styly T-kusu a kolena. Toto pravidlo musíme přidat také na úrovni sestavy. Místo přepisování existujícího pravidla zkopírujeme originál.
If component_type = "standard" Then port_b_size = port_a_size port_c_size = port_a_size End If
Při změně velikosti portu Port A je nutné provést několik úkonů:
Provedení těchto činností zrealizujeme přidáním pravidla:
První část tohoto pravidla nastavuje vzdálenost pole šroubů na základě dat uložených v tabulce iSoučástí spojovací součásti.
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")
Další část pravidla volí příslušný řádek iSoučásti uvnitř součásti šroubu na základě zvolené velikosti portu.
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 Port B se liší od portů Port A a Port C, protože neexistuje v rozloženém bloku kolena. Jestliže rozložený blok je blok se stylem kolena, musíme vypnout spojovací víko a spojovací šrouby použité pro tento port. Dále musíme vypnout také vazby pro ti sobě sdružené se spojovacím víkem.
Protože vypínáme komponenty, nastavíme úroveň detailů předtím, než budeme pravidlo zapisovat. Pravidla ovlivňující položky týkající se úrovně detailů v sestavě vyžadují definování uživatelské úrovně detailů a její uložení před zapisováním pravidel. Pokud nebude uživatelská úroveň detailů definována, modul iLogic zobrazí chybové hlášení.
Nastavení úrovně detailů
Je přidána nová úroveň detailů.
Zapsání pravidla
Nyní můžeme pravidlo zapsat.
If block = "elbow" Then isTee = False ElseisTee = True End If
Tuto pro měnnou použijeme později k nastavení dalších parametrů.
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
Proměnnou isTee lze v závislosti na hodnotě parametru block použít k zapnutí nebo vypnutí těchto vazeb.
Component.IsActive("port_b_union") = isTee Component.IsActive("port_b_screw_pattern") = isTee
Tyto řádky používají proměnnou isTee. Když je pole šroubu vypnuto, komponenta šroubu je také vypnuta.
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
Celý blok uzavřeme příkazem If isTee tak, aby tyto řádky byly zpracovávány pouze pro rozložený blok stylu T-kusu. Výraz If isTee Then je stručnějším ekvivalentem výrazu If isTee = True Then.
Nejprve je nutné zvolit příslušný řádek v tabulce iSoučásti spojovací součásti, která odpovídá hodnotě parametru port_b_size, a poté extrahovat hodnoty ke stanovení odsazení pole x a y. Pak získáme číslo součásti ze spojovací součásti a uložíme jeho hodnotu do jiného parametru pro pozdější odkaz.
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
Pravidlo pro port Port C je téměř stejné jako pro port Port A, pouze je nutné změnit všechny odkazy z hodnoty Port A na hodnotu 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")