È ora possibile modificare le dimensioni di ciascuna porta ed è necessario determinare quale faccia sarà dotata della porta più grande, in modo che il blocco possa essere dimensionato correttamente. Questa operazione richiede un'altra regola.
Per determinare quale porta è più grande, è necessario esaminare i valori dei parametri di dimensione delle tre porte e individuare il valore più alto. Come con block_shape_rule, il comportamento per i blocchi stile T deve essere diverso rispetto a quello di blocchi stile gomito.
Per i blocchi stile T vengono utilizzate tutte e tre le porte, perciò è necessario controllare le dimensioni di ognuna. Per blocchi stile gomito, invece, non è necessario verificare Port B, che è stata soppressa. È possibile utilizzare la funzione MaxOfMany per ottenere il valore maggiore da un gruppo di valori immessi.
If block = "tee" Then port = MaxOfMany(port_a_size,port_b_size,port_c_size) ElseIf block = "elbow" Then port = MaxOfMany(port_a_size,port_c_size) End If
Una nuova variabile locale denominata port contiene le dimensioni della porta più grande disponibile. Ora è necessario comunicare al modello cosa fare con queste informazioni. Il modello ottiene le informazioni da un foglio di calcolo Excel incorporato, è quindi necessario esaminare il foglio di calcolo per aggiornare le dimensioni complessive del modello.
i = GoExcel.FindRow("3rd Party:Embedding 1", "Sheet1", "port_size", "=", port)
Si stanno utilizzando la colonna port_size per la ricerca e il valore della variabile assegnata come valore da cercare.
block_depth = GoExcel.CurrentRowValue("block_depth") port_c_depth_from_front = GoExcel.CurrentRowValue("port_c_depth_from_front") block_width = GoExcel.CurrentRowValue("block_width") port_a_hor_offset = GoExcel.CurrentRowValue("hor_offset") port_b_hor_offset = GoExcel.CurrentRowValue("hor_offset") port_c_hor_offset = GoExcel.CurrentRowValue ("hor_offset")
Dopo aver così definito la porta più grande, è ora necessario dimensionare la parte superiore del blocco di conseguenza. A questo punto, è necessario determinare l'altezza del blocco esaminando il T e il gomito, per selezionare la porta di dimensioni maggiori sulla faccia Port A/Port B.
If block = "tee" Then porta = MaxOfMany(port_a_size, port_b_size) ElseIf block = "elbow" porta = port_a_size End If
La funzione MaxOfMany non viene utilizzata per blocchi di tipo a gomito, poiché deve essere considerato un solo valore. È possibile impostare la variabile da tale valore.
i = GoExcel.FindRow("3rd Party:Embedding 1", "Sheet1", "port_size", "=", porta)
port_a_vert_offset = GoExcel.CurrentRowValue("vert_offset") port_b_vert_offset = GoExcel.CurrentRowValue("vert_offset")
Per questo valore, è necessario aggiungere una logica speciale per inserire ulteriore spazio oltre l'offset verticale utilizzato per le altre porte. Tali informazioni vengono ricavate da un'altra cella del foglio di calcolo. È necessario eseguire tale operazione solo per blocchi di tipo gomito.
If block = "elbow" Then port_c_vert_offset = GoExcel.CurrentRowValue("vert_offset") + (GoExcel.CurrentRowValue("port_dia")/4) Else port_c_vert_offset = GoExcel.CurrentRowValue("vert_offset") End If block_height = GoExcel.CurrentRowValue("block_height")
La regola block_size è completa.