Agora que pode ser alterado o tamanho de cada porto, deve ser determinado qual face tem o maior porto, de modo que o bloco possa ser ajustado de forma adequada. É requerido outra regra.
Para determinar o porto de maior tamanho, procure os valores dos três parâmetros de tamanho de porto, e conserve o maior valor. Assim como em block_shape_rule, o comportamento dos blocos em T deve ser diferente daquele dos blocos em forma de cotovelo.
Nos blocos em forma de T, são utilizados todos os três portos, de maneira que se deve verificar o tamanho de todos eles. Nos blocos em forma de cotovelo, não é verificado o Porto B, que é excluído. A função MaxOfMany é utilizada para obter o valor mais alto de um conjunto de valores de entrada.
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
Uma nova variável local denominada porta contém o tamanho da maior porta disponível. Agora deve ser indicado ao modelo que fazer com esta informação. O modelo obtém a informação de uma folha de cálculo de Excel inserida, de modo que a folha de cálculo é observado para atualizar os tamanhos globais do modelo.
i = GoExcel.FindRow("3rd Party:Embedding 1", "Sheet1", "port_size", "=", port)
A coluna port_size será utilizada na consulta, e o valor da variável atribuída será o valor pesquisado.
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")
Agora se determinou qual é o maior porto, e é ajustado o tamanho da parte superior do bloco por consequência. Agora, determinaremos a altura do bloco examinando o T e o cotovelo para definir qual porto tem maior tamanho na face Porto A / Porto B.
If block = "tee" Then porta = MaxOfMany(port_a_size, port_b_size) ElseIf block = "elbow" porta = port_a_size End If
A função MaxOfMany não é utilizada para blocos de estilo cotovelo, pois apenas um dos valores deve ser considerado. A variável pode ser definida a partir desse valor.
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")
Para este valor, é adicionado lógica especial para inserir espaço adicional para além do deslocamento vertical utilizada para os outros portos. Esta informação é obtida a partir de outra célula de folha de cálculo. Somente é obtido para os blocos de estilo cotovelo.
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")
A regra block_size está completa.