Nelle lezioni successive, verrà creata una serie di regole per gestire i contenuti dell'assieme.
Trasferire i parametri dall'assieme alle parti
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.

Copiare il blocco di codice sottostante
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_sizeModificare regole a livello di parte in un assieme
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.

Copiare il blocco di codice sottostante
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.

Copiare il blocco di codice sottostante
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.

Copiare il blocco di codice sottostante
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 IfCopiare il blocco di codice sottostante
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
È ora possibile scrivere la regola.

Copiare il blocco di codice sottostante
If block = "elbow" Then isTee = False ElseisTee = True End If
È possibile utilizzare questa variabile in seguito per impostare altri parametri.

Copiare il blocco di codice sottostante
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.
Copiare il blocco di codice sottostante
Component.IsActive("port_b_union") = isTee
Component.IsActive("port_b_screw_pattern") = isTeeQueste righe utilizzano la variabile isTee. Quando la serie di viti viene soppressa, il componente vite viene a sua volta soppresso.

Copiare il blocco di codice sottostante
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.

Copiare il blocco di codice sottostante
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 IfLa 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.

Copiare il blocco di codice sottostante
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")