Ahora que se puede cambiar el tamaño de cada puerto, se debe determinar qué cara tiene el mayor puerto, de modo que el bloque se pueda ajustar de forma adecuada. Se requiere otra regla.
Para determinar el puerto de mayor tamaño, examine los valores de los tres parámetros de tamaño de puerto y conserve el valor más alto. Como con block_shape_rule, el comportamiento de los bloques en T debe ser diferente al de los bloques de estilo de codo.
En los bloques en forma de T, se utilizan los tres puertos, de modo que debe comprobar el tamaño de todos ellos. En los bloques en forma de codo, no se comprueba el puerto B, que se ha suprimido. Se utiliza la función MaxOfMany para obtener el valor más alto de un 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
Una nueva variable local denominada port contiene el tamaño del mayor puerto disponible. Ahora se debe indicar al modelo qué hacer con esta información. El modelo obtiene la información de una hoja de cálculo de Excel insertada, de modo que la hoja de cálculo se observa para actualizar los tamaños globales del modelo.
i = GoExcel.FindRow("3rd Party:Embedding 1", "Sheet1", "port_size", "=", port)
Se utiliza la columna port_size para la búsqueda, y el valor de la variable asignada como valor que se desea buscar.
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")
Ahora se ha determinado cuál es el puerto más grande, y se está ajustando el tamaño de la parte superior del bloque en consecuencia. A continuación, determinaremos la altura del bloque examinando la T y el codo para establecer cuál es el tamaño de puerto mayor en la cara Puerto A / Puerto B.
If block = "tee" Then porta = MaxOfMany(port_a_size, port_b_size) ElseIf block = "elbow" porta = port_a_size End If
La función MaxOfMany no se utiliza para bloques de estilo de codo, ya que solo se debe tener en cuenta uno de los valores. Se puede establecer la variable a partir de ese 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, se añade lógica especial para insertar espacio adicional más allá del desfase vertical para el resto de los puertos. Esta información se obtiene a partir de otra celda de hoja de cálculo. Solo se obtiene para los bloques de estilo de codo.
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 regla block_size se habrá completado.