Nyní když můžeme měnit rozměry každého portu, musíme určit která plocha má největší port, aby byly rozměry bloku adekvátně stanoveny. To vyžaduje další pravidlo.
Chceme-li určit největší port, prozkoumáme hodnoty parametrů rozměrů tří portů a uložíme největší hodnotu. Stejně jako v případě pravidla block_shape_rule se liší chování bloků se stylem „tvarovka T“ od bloků se stylem „koleno“.
V případě bloků typu T-kusu jsou použity všechny tři porty, takže kontrolujeme rozměry všech portů. V případě bloků typu kolena nekontrolujeme Port B, který je vypnutý. Největší hodnotu ze sady vstupních hodnot lze získat pomocí funkceMaxOfMany.
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
Nová místní proměnná nazvaná port obsahuje rozměry největšího dostupného portu. Nyní musíme modelu říct, co má s těmito informacemi dělat. Model získává informace z vloženého tabulkového pro cesoru aplikace Excel, takže se podíváme do tabulkového pro cesoru za účelem aktualizace všech rozměrů modelu.
i = GoExcel.FindRow("3rd Party:Embedding 1", "Sheet1", "port_size", "=", port)
K vyhledání je použit sloupec port_size a jako vyhledávaná hodnota je zadána hodnota přiřazené proměnné.
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")
Nyní jsme určili který port je největší a podle toho stanovíme rozměry horní části bloku. Nyní určíme výšku bloku prozkoumáním T-kusu a kolena k určení které rozměry portu jsou větší na ploše portu A / portu B.
If block = "tee" Then porta = MaxOfMany(port_a_size, port_b_size) ElseIf block = "elbow" porta = port_a_size End If
Funkce MaxOfMany není používána na bloky se stylem „koleno“, protože je nutné uvažovat pouze jednu hodnotu. Z této hodnoty můžeme nastavit pro měnnou.
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")
Pro tuto hodnotu přidáme speciální logiku k vložení pracovního prostoru za vertikální odsazení použité pro ostatní porty. Tato informace je získaná z jiné buňky tabulkového pro cesoru. Toto děláme pouze pro bloky typu kolena.
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")
Pravidlo block_size je dokončeno.