В следующих упражнениях будут созданы правила для управления содержимым сборки.
Данная модель включает в себя деталь с именем manifold_block:1, в которой содержатся правила iLogic. Параметр уровня сборки необходимо передать в деталь.
Это правило устанавливает параметры детали на основании соответствующих значений управляющих параметров сборки. В данном примере функция Параметр определяет как имя компонента, так и имя параметра.
Parameter("manifold_block:1", "block") = block Parameter("manifold_block:1", "component_type") = component_type Parameter("manifold_block:1", "port_a_size") = port_a_size Parameter("manifold_block:1", "port_b_size") = port_b_size Parameter("manifold_block:1", "port_c_size") = port_c_size
В учебном пособии Деталь коллектора было добавлено правило для детали блока разветвителя трубопровода, управляющее стилями Т-образный и отводной. Его также следует добавить на уровне сборки. Вместо повторного создания существующего правила скопируем оригинал.
If component_type = "standard" Then port_b_size = port_a_size port_c_size = port_a_size End If
При изменении размера канала Port A необходимо выполнить следующие действия:
Для этого необходимо добавить правило:
В первой части этого правила расстояния для массива винтов адаптируются на основании информации из таблицы параметрических деталей для детали соединения.
i = iPart.FindRow("port_a_union", "port_size", "=", port_a_size) port_a_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw") port_a_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw")
В следующей части правила на основании выбранного размера канала выбирается нужная строка параметрической детали в детали "винт".
If port_a_size = .50 Then iPart.ChangeRow("port_a_union_screw", "Screw-01") ElseIf port_a_size = 0.75 Then iPart.ChangeRow("port_a_union_screw", "Screw-02") ElseIf port_a_size = 1.00 Then iPart.ChangeRow("port_a_union_screw", "Screw-02") ElseIf port_a_size = 1.25 Then iPart.ChangeRow("port_a_union_screw", "Screw-03") ElseIf port_a_size = 1.50 Then iPart.ChangeRow("port_a_union_screw", "Screw-04") ElseIf port_a_size = 2.00 Then iPart.ChangeRow("port_a_union_screw", "Screw-04") ElseIf port_a_size = 2.50 Then iPart.ChangeRow("port_a_union_screw", "Screw-05") ElseIf port_a_size = 3.00 Then iPart.ChangeRow("port_a_union_screw", "Screw-06") End If
port_a_union_part_number = iProperties.Value("port_a_union", "Project", "Part Number")
Port B отличается от Port A и Port C, потому что он не существует в коллекторе отводного типа. Если в качестве коллектора используется блок отводного типа, следует подавить отображение крышки и винтов соединения для этого канала. Следует также подавить зависимости совмещения, связанные с соединительной крышкой.
Для подавления компонентов перед созданием правила следует установить уровень детализации. Для правил, влияющих на элементы, связанные с уровнем детализации в сборке, необходимо определить и сохранить пользовательский уровень детализации до создания правила. Если пользовательский уровень детализации не определен, то функция iLogic выдает сообщение об ошибке.
Установка уровня детализации
Новый уровень детализации будет добавлен.
Запись правила
Теперь создадим правило.
If block = "elbow" Then isTee = False ElseisTee = True End If
Эта переменная будет впоследствии использоваться для установки других параметров.
Constraint.IsActive("port_b_cap_center") = isTee Constraint.IsActive("port_b_cap_hole") = isTee Constraint.IsActive("port_b_cap_face") = isTee Constraint.IsActive("port_b_cap_screw") = isTee
Обратите внимание на то, что для включения и выключения этих зависимостей можно использовать переменную isTee в соответствии с параметром block.
Component.IsActive("port_b_union") = isTee Component.IsActive("port_b_screw_pattern") = isTee
В этих строках применяется переменная isTee. Массив винтов подавляется вместе с компонентом винта.
if isTee Then i = iPart.FindRow("port_b_union", "port_size", "=", port_b_size) port_b_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw") port_b_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw") port_b_union_part_number = iProperties.Value("port_b_union", "Project", "Part Number") End If
Этот блок включен в выражение If isTee, чтобы эти строки обрабатывались только для Т-образного коллектора. Оператор If isTee Then равен If isTee = True Then, но он обеспечивает меньший размер.
Вначале выберем строку в таблице параметрической детали для детали соединения, соответствующей значению параметра port_b_size, а затем извлечем значения, используемые в массиве для смещения по осям Х и Y. Далее из детали соединения извлечем номер детали и сохраним его в виде отдельного параметра для дальнейшего использования.
If port_b_size = .50 then iPart.ChangeRow("port_b_union_screw", "Screw-01") elseif port_b_size = .75 then iPart.ChangeRow("port_b_union_screw", "Screw-02") elseif port_b_size = 1.00 then iPart.ChangeRow("port_b_union_screw", "Screw-02") elseif port_b_size = 1.25 then iPart.ChangeRow("port_b_union_screw", "Screw-03") elseif port_b_size = 1.50 then iPart.ChangeRow("port_b_union_screw", "Screw-04") elseif port_b_size = 2.00 then iPart.ChangeRow("port_b_union_screw", "Screw-04") elseif port_b_size = 2.50 then iPart.ChangeRow("port_b_union_screw", "Screw-05") elseif port_b_size = 3.00 then iPart.ChangeRow("port_b_union_screw", "Screw-06") End If
Правило для Port C почти совпадает с правилом для Port A, за исключением того, что все компоненты, ссылающиеся на Port A, должны ссылаться на Port C.
i = iPart.FindRow("port_c_union", "port_size", "=", port_c_size) port_c_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw") port_c_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw") If port_c_size = .50 then iPart.ChangeRow("port_c_union_screw", "Screw-01") elseif port_c_size = .75 then iPart.ChangeRow("port_c_union_screw", "Screw-02") elseif port_c_size = 1.00 then iPart.ChangeRow("port_c_union_screw", "Screw-02") elseif port_c_size = 1.25 then iPart.ChangeRow("port_c_union_screw", "Screw-03") elseif port_c_size = 1.50 then iPart.ChangeRow("port_c_union_screw", "Screw-04") elseif port_c_size = 2.00 then iPart.ChangeRow("port_c_union_screw" "Screw-04") elseif port_c_size = 2.50 then iPart.ChangeRow("port_c_union_screw", "Screw-05") elseif port_c_size = 3.00 then iPart.ChangeRow("port_c_union_screw", "Screw-06") End If port_c_union_part_number = iProperties.Value("port_c_union", "Project", "Part Number")