Skoro możliwa jest zmiana rozmiaru każdego z gniazd, musimy określić, na której powierzchni znajdzie się największe gniazdo, aby poprawnie dostosować rozmiar bloku. Do tego wymagana jest kolejna reguła.
Aby określić największe gniazdo, należy przyjrzeć się wartościom parametrów rozmiaru trzech gniazd i zachować najwyższą wartość. Tak jak w przypadku reguły block_shape_rule, zachowanie dla bloków teownikowych musi być inne niż dla bloków kolankowych.
W blokach teownikowych wykorzystywane są wszystkie trzy gniazda, należy więc sprawdzić rozmiary wszystkich z nich. W blokach kolankowych nie trzeba sprawdzać rozmiaru Gniazda B, które jest wyłączone. Użyj funkcji MaxOfMany, by pobrać najwyższą wartość z zestawu wartości wejściowych.
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
Nowa lokalna zmienna o nazwie port zawiera rozmiar największego dostępnego gniazda. Musimy teraz poinstruować model, w jaki sposób informacje te mają zostać wykorzystane. Model pobiera informacje z osadzonego arkusza kalkulacyjnego Excel, musimy więc przyjrzeć się arkuszowi i zaktualizować ogólne rozmiary modelu.
i = GoExcel.FindRow("3rd Party:Embedding 1", "Sheet1", "port_size", "=", port)
Do wyszukiwania wykorzystaj kolumnę port_size, a jako wyszukiwaną wartość podaj wartość przypisanej zmiennej.
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")
Ustaliliśmy, które gniazdo jest największe, musimy więc odpowiednio określić rozmiar górnej powierzchni bloku. Musimy następnie określić wysokość bloku, przyglądając się teownikowi i kolanku, by ocenić, który rozmiar gniazda jest większy na powierzchni 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
Funkcja MaxOfMany nie jest stosowana w przypadku bloków kolankowych, ponieważ wymagane jest rozpatrzenie tylko jednej wartości. Dzięki tej wartości możemy określić zmienną.
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")
Na potrzeby tej wartości należy zastosować specjalną składnię logiczną, by wstawić dodatkowy odstęp za odsunięciem pionowym wykorzystywanym dla pozostałych gniazd. Informacje te są pobierane z osobnego arkusza kalkulacyjnego. Operacja ta jest konieczna tylko w przypadku bloków kolankowych.
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")
Reguła block_size jest gotowa.