Nelle lezioni successive, verrà creata una serie di regole per gestire i contenuti dell'assieme.
Il modello include una parte denominata manifold_block:1, che presenta regole iLogic. È necessario trasferire il parametro livello di assieme alla parte.
Questa regola consente di impostare i parametri nella parte in base ai valori corrispondenti dei parametri di controllo nell'assieme. La funzione Parametro consente di specificare il nome del componente, nonché il nome del parametro.
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
Nell'esercitazione Blocco collettore, viene aggiunta una regola alla parte blocco collettore che controlla gli stili T e gomito. È inoltre necessario aggiungerla a livello di assieme. Anziché riscrivere la regola esistente, viene copiata l'originale.
If component_type = "standard" Then port_b_size = port_a_size port_c_size = port_a_size End If
Quando si modifica la dimensione della Porta A, è necessario eseguire diverse operazioni:
Viene aggiunta una regola per garantire l'esecuzione:
La prima parte di questa regola consente di regolare la spaziatura della serie di viti, in base alle informazioni memorizzate nella tabella di iPart della parte di unione.
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")
La parte successiva della regola consente di selezionare la riga di iPart appropriata all'interno della parte vite in base alla dimensione della porta selezionata.
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 è diverso da Port A e Port C, poiché non è presente in un blocco collettore gomito. Se il blocco collettore è un blocco stile gomito, è necessario sopprimere la calotta di giunzione e le viti di unione utilizzati per questa porta. È inoltre necessario sopprimere i vincoli coincidenti associati alla calotta di giunzione.
Poiché è in corso l'eliminazione dei componenti, è necessario impostare un livello di dettaglio prima di scrivere la regola. Le regole che influiscono sugli elementi correlati al livello di dettaglio in un assieme, richiedono che venga definito un livello di dettaglio personalizzato, salvato prima di procedere alla scrittura delle regole. Se il livello di dettaglio personalizzato non è definito, iLogic genera un messaggio di errore.
Impostare un livello di dettaglio
Viene aggiunto un nuovo livello di dettaglio.
Scrivere la regola
È ora possibile scrivere la regola.
If block = "elbow" Then isTee = False ElseisTee = True End If
È possibile utilizzare questa variabile in seguito per impostare altri parametri.
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
È possibile utilizzare la variabile isTee per attivare o disattivare tali vincoli in base al valore del parametro blocco.
Component.IsActive("port_b_union") = isTee Component.IsActive("port_b_screw_pattern") = isTee
Queste righe utilizzano la variabile isTee. Quando la serie di viti viene soppressa, il componente vite viene a sua volta soppresso.
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
È incluso l'intero blocco in un'istruzione If isTee, in modo che queste righe siano elaborate solo per un blocco collettore stile T. L'istruzione If isTee Then equivale a If isTee = True Then, ma fornisce un formato espressione più conciso.
È prima necessario scegliere la riga corrispondente nella tabella di iPart della parte unione, corrispondente al valore del parametro port_b_size, quindi estrarre i valori da utilizzare per gli offset della serie x e y. È quindi possibile estrarre il numero parte dalla parte unione e memorizzarne il valore in un altro parametro per riferimenti futuri.
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
La regola per Port C è quasi identica a quella per Port A, ad eccezione del fatto che tutti gli elementi che fanno riferimento a Port A devono fare invece riferimento 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")