13.03.2026 • C3D Solver

Применение паттернов в задачах создания параметрических массивов геометрии

Алексей Строков, инженер-программист отдела разработки КОМПАС-3D, компания АСКОН, рассказывает о работе с параметрическими массивами.

Компания АСКОН ведет разработку САПР КОМПАС-3D, в которой особое внимание уделяется 2D-документам. Все, что касается создания, редактирования и оформления чертежей, спецификаций и других двумерных элементов, находится в зоне ответственности нашей группы разработчиков. Разработка 2D-подсистемы ведется с опорой на современные принципы проектирования. Особое внимание уделяется устойчивости к ошибкам, модульности и расширяемости. Это позволяет оперативно адаптировать систему под новые требования и задачи, а также обеспечивать совместимость с другими компонентами платформы КОМПАС-3D. В последние годы активно развивается поддержка новых стандартов оформления, совершенствуется интерфейс и повышается производительность. Все изменения проходят обязательное внутреннее тестирование и согласование с техническими экспертами, чтобы гарантировать стабильность работы даже на крупных и насыщенных документах. Одним из приоритетов остается интеграция с другими модулями платформы, включая 3D-редактор, системы управления данными и внешние расчетные приложения. Это позволяет выстраивать сквозные процессы проектирования, в которых 2D-документы играют ключевую роль — как средство фиксации, утверждения и передачи проектных решений.

Таким образом, развитие 2D-направления КОМПАС-3D направлено на повышение эффективности инженерной работы и обеспечение высокого качества конечной документации.

Применение паттернов в задачах создания параметрических массивов геометрии, фото 1 Применение паттернов в задачах создания параметрических массивов геометрии, фото 2
Рис. 1 Линейный и угловой паттерны

Массивы в 2D-документах КОМПАС-3D реализованы на основе новой концепции — паттернов C3D Solver (от англ. pattern — узор). Паттерн представляет собой сущность, определяющую множество соответствий между образцом и его экземплярами в соответствии с заданной схемой. В решателе предусмотрено несколько типов паттернов: с угловым смещением, с линейным смещением и симметричный (рис. 1).

API C3D Solver предоставляет два подхода к созданию паттернов. Первый — типизированный: использует специализированные методы, такие как addLinearPattern или addAngularPattern. Второй — универсальный: один метод обрабатывает различные типы геометрических объектов и в зависимости от переданного дескриптора создает соответствующий паттерн. Например, при передаче точки она интерпретируется как центр углового паттерна, а прямолинейный объект — как направление линейного паттерна.

После создания паттерна необходимо добавить в него объекты. Это также можно сделать двумя способами: с помощью метода addInstance, создающего новую геометрию, подчиненную паттерну, либо методом addPattern, который связывает с паттерном уже существующий объект. Архитектурно был выбран второй способ, поскольку он обеспечивал большую гибкость и лучше вписывался в концепцию параметрических массивов.

Несмотря на внешнюю простоту, реализация параметрических массивов в 2D-документах оказалась нетривиальной. Эта функциональность не имеет аналогов в предыдущих версиях, что сделало ее разработку особенно сложной. Отдельного внимания заслуживают нюансы, связанные с параметризацией. Каждый из них повлиял на архитектуру решения и стал важной частью итоговой реализации.

Первая проблема проявилась уже на этапе прототипа. Прототипы, как правило, создаются с максимально прямолинейными решениями, чтобы быстро проверить гипотезу или протестировать новую функциональность. В нашем случае линейный массив должен был поддерживать два направления. Самое очевидное решение — для второго направления использовать копии объектов из первого, создав для каждого отдельный паттерн. Однако такой подход сразу наложил ограничения: объекты невозможно было корректно удалять. Если пользователь удалял экземпляр из массива, то он терялся как источник для второго направления и соответствующий паттерн терял исходный объект.

Применение паттернов в задачах создания параметрических массивов геометрии, фото 3
Рис. 2. Составной паттерн

Для решения этой проблемы мы обратились к разработчикам C3D Solver, и они оперативно предложили подход, который устранил ограничение (рис. 2). Решением стал Composition Pattern — композиция двух любых паттернов, позволяющая объединять их в один и добавлять элементы с двойной индексацией. Это дало возможность работать с одним честным источником в массиве без лишних связей и дублирующих объектов. Дополнительно это упростило параметрическую модель: если, например, речь идет о линейном массиве, то достаточно всего двух паттернов по направлениям. Если раньше удаление объекта в нижнем ряду приводило к потере целого столбца, то теперь все связи сохраняются и модель остается целостной.

Следующая проблема была связана с переопределенностью параметрической модели. Речь идет о составных объектах — например, прямоугольнике, который в решателе представлен как набор примитивов и ограничений между ними. Такие объекты необходимо уметь включать в массив, но сам решатель не знает, что такое прямоугольник как модельный тип. Поэтому в массив добавляются отдельные примитивы — в данном случае отрезки, но при этом копия должна продолжать восприниматься как прямоугольник.

Применение паттернов в задачах создания параметрических массивов геометрии, фото 4
Рис. 3. Частичная формулировка

Каждая такая копия содержит внутренние ограничения между примитивами, и одновременно каждый примитив определяется паттерном, управляющим массивом. Эта ситуация приводит к переопределенности. Проблему удалось решить через частичную формулировку — так называется процесс регистрации объекта в решателе (рис. 3). Мы отслеживаем, является ли объект копией в массиве, и в этом случае добавляем только примитивы, исключая внутренние ограничения. Если же объект впоследствии исключается из массива, он добавляется в решатель полностью, с сохранением всей внутренней структуры.

Применение паттернов в задачах создания параметрических массивов геометрии, фото 5
Рис. 4. Задание шага

Одним из ключевых параметров массивов в двумерных документах является шаг. Пользователю доступны два режима задания шага: между соседними и между крайними экземплярами. В случае выбора шага между крайними элементами управление осуществляется через переменную, связанную с линейным уравнением. При этом коэффициентом уравнения выступает собственная переменная массива (GCE_step), а результирующее значение переменной рассчитывается как произведение этой переменной на коэффициент, равный n–1, где n — количество экземпляров.

Существует также третий режим, неявно проявляющийся при построении массивов по концентрической сетке. Он активируется, если задан шаг между крайними элементами и угол в 360° (рис. 4). Несмотря на то что при таких параметрах последний экземпляр накладывается на исходный, этот режим сохраняется для обеспечения преемственности с массивами в трехмерных документах. В этом случае копии равномерно распределяются по окружности. Переход между режимами осуществляется автоматически: контроллер отслеживает параметры массива и при необходимости обновляет ограничения в решателе.

Применение паттернов в задачах создания параметрических массивов геометрии, фото 6
Рис. 5. Массив кривых пересечения

Одной из технических проблем, возникших при реализации массива, стала поддержка определенных типов кривых. В частности, речь идет о проекционных кривых и кривых пересечения, применяемых в эскизах — 2D-документах, в которых поддерживаются массивы (рис. 5). Проекционная кривая относится к нетрансформируемым типам: она не поддерживает перемещение, отражение и другие преобразования. Единственная доступная для нее операция —обновление по новой проекции. Однако для корректной работы массива необходимо обеспечить поддержку всех типов кривых.

Дополнительная сложность связана с тем, что добавление подобных кривых в C3D Solver возможно только в виде объекта Parametric Curve, который не поддерживаются паттернами. Для обхода этого ограничения было найдено изящное решение — использование параметрической подложки в виде сплайна по полюсам. Таким образом, исходная кривая остается в виде объекта Parametric Curve, но дополнительно в решатель добавляется копируемый и редактируемый сплайн по полюсам, что позволяет обеспечить поддержку преобразований и интеграцию с механизмом паттернов.

В завершение важно отметить, что новая реализация параметрических массивов полностью закрывает текущие потребности пользователей, предоставляя им больше гибкости в работе с 3D-документами. Пользователь сам выбирает, где задать массив — в эскизе или в модели. При этом сохраняется единообразие с 3D-массивами. Уже поставлены задачи по дальнейшему развитию функционала. Среди приоритетов — поддержка изменения весов сплайнов, реализация направляющего ассоциативного объекта и новых вариантов размещения экземпляров в линейном массиве. Планируются и доработки, связанные с корректной обработкой усечений, чтобы предотвратить нежелательные изменения типа кривой и потерю ограничений.

Алексей Строков, Инженер-программист отдела разработки КОМПАС-3D, АСКОН
Алексей Строков
Инженер-программист отдела разработки КОМПАС-3D
АСКОН
Поделиться материалом
Вверх