Функция изменения размера канала предполагает наличие функции, определяющей размер грани наибольшего канала для установки соответствующих размеров коллектора. Для этого необходимо создать еще одно правило.
Для определения наибольшего канала выполняется анализ трех параметров размеров канала, а затем сохраняется максимальное значение. Как и в случае с block_shape_rule, поведение Т-образных коллекторов должно отличаться от поведения коленчатых коллекторов.
Для Т-образных коллекторов используются все три канала, поэтому выполняется проверка всех трех значений. Для коленчатых коллекторов проверка канала B необязательна, поэтому ее можно пропустить. Для получения максимального значения из входного набора значений используется функция MaxOfMany.
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
Новая локальная переменная с именем port содержит размер наибольшего доступного канала. Теперь необходимо обработать эту информацию в модели. Модель получает сведения из внедренной таблицы Excel, поэтому для обновления общих размеров модели выполняется просмотр таблицы.
i = GoExcel.FindRow("3rd Party:Embedding 1", "Sheet1", "port_size", "=", port)
Поиск выполняется в столбце port_size по значению назначенной переменной.
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")
Теперь наибольший канал известен, а размер коллектора соответствующим образом изменяется. Затем следует рассчитать высоту коллектора путем анализа обеих форм и определения наибольшего канала на грани канал A / канал B.
If block = "tee" Then porta = MaxOfMany(port_a_size, port_b_size) ElseIf block = "elbow" porta = port_a_size End If
Функция MaxOfMany не используется для коленчатых блоков, так как в этом случае обрабатывается только одно значение. Значение может использоваться для установки переменной.
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")
Для этого параметра добавляется специальная логика, которая вставляет дополнительное пространство под вертикальным смещением, используемым другими каналами. Необходимые сведения считываются из другой ячейки таблицы. Эта операция выполняется только для коленчатых коллекторов.
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")
Правило block_size готово.