21.10.2024 • C3D PolyShaper

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D

Антон Сидякин, инженер-программист, АСКОН, знакомит читателей с опытом использования инструментов полигонального моделирования C3D Toolkit в своей работе, экспериментами разработчиков и планами на будущее.

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

Импорт полигональных объектов до включения в функционал КОМПАС-3D полигонального моделирования происходил следующим образом.

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 1
Рис. 1

Все поддерживаемые форматы, которые содержат полигональные модели, автоматически преобразовывались в твердые тела. То есть для каждого треугольника создавались плоские грани с набором ребер и вершин, которые в конечном итоге сшивались в результирующее твердое тело.

Некоторые оптимизации все же выполнялись. К примеру, смежные треугольники с одинаковыми нормалями сшивались в одну грань. Этот процесс отображен на иллюстрации — в той области, где заливка стала сплошной. Помимо этого, для отображения вновь получившегося твердого полигонального тела использовалась вновь рассчитанная триангуляция.

Следствием этого было продолжительное время импорта, объясняемое тем, что необходимо было создавать твердое тело на старте.

Моделирование с данным твердым телом было затруднено из-за значительного количества имеющихся примитивов. Соответственно, ассоциативная связь с этим телом являлась проблематичной. Естественно, хранение топологии полигонального объекта в виде топологии твердого тела вызывало существенный перерасход ресурсов как в процессе моделирования, так и после сохранения этой модели на диск.

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

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 2
Рис. 2

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

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 3
Рис. 3

Сравнение двух версий КОМПАС-3D — 20-й и 21-й (в 21-й появился полигональный объект) — на примере двух полигональных объектов (для тяжелого скана [мотоцикла] и для скана средней сложности) демонстрирует, что все показатели улучшились.

Что можно делать с этим полигональным объектом? Как минимум на него можно просто смотреть.

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

Какие же инструменты для этого у нас есть?

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 4
Рис. 4

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

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

Для того чтобы вписать аналитическую поверхность, нужно разграничить область, которая бы ассоциировалась с будущей аналитической поверхностью.

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 5
Рис. 5

Этот процесс называется сегментацией. Нас интересовала автоматическая сегментация и подгонка аналитических поверхностей, которая выполняется классом MbMeshProcessor. На слайде продемонстрирована твердотельная деталь, полученная в результате работы классом MbMeshProcessor с полигональной сетки практически без участия пользователя. Аналогично это работает и в отношении CAD-сеток. Однако, по результатам внутреннего тестирования, для сканов изделий это работает чуть менее эффективно, и поэтому мы решили двигаться в сторону с большим контролем процесса сегментации и вписывания. Ведь это тоже возможно.

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 6
Рис. 6

Речь идет о функции FitSurfaceToGrid, которая по типу поверхности и некоторому набору параметров наилучшим образом «подгоняет» аналитическую поверхность под выбранные треугольники полигональной сетки. На иллюстрации продемонстрировано, что в данном случае поверхность конуса наилучшим образом соответствует треугольникам.

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

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 7
Рис. 7

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

Поскольку от автоматической сегментации мы отказались, надо было подумать о ручной. Так появился инструмент «Кисть».

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 8
Рис. 8

Он позволяет выбрать конкретные треугольники сетки, которые будут переданы в функцию FitSurfaceToGrid для вписывания. Это особенно удобно, если необходимо выделить единичные треугольники функцией LineGridIntersect. Если необходимо выделить треугольники, которые попали внутрь трубки, используется функция FindIntersectingElements. Если возможности оборудования позволяют, это легко выполнить на видеокарте, рисуя в дополнительный буфер.

Также функция FitSurfaceToGrid позволяет работать с ограничениями.

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 9
Рис. 9

Например, на иллюстрации слева демонстрируется ситуация, в которой стоит задача сделать так, чтобы вписываемая поверхность цилиндра была перпендикулярна его торцу. Для этого необходимо вызвать функцию параметров AddAxisConstraint и передать туда ось. Тогда вписываемая поверхность будет перпендикулярна этой оси. Кроме того, в данном случае есть ограничения на значения цилиндрической поверхности. Если значение радиуса получается не номинальным, как в данном случае, то можно вручную задать его значение функцией AddCylinderRadiusConstraint. В таком случае произойдет вписывание аналитической поверхности с данным радиусом.

Возникает вопрос — каким же образом определить, что реверс-инжиниринг выполнен хорошо или модель изготовлена качественно? Это возможно.

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 10
Рис. 10

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

На текущий момент это все возможности КОМПАС-3D по полигональному моделированию, но с развитием полигонального API C3D использование полигональных объектов в КОМПАС-3D будет расширяться и дорабатываться.

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

Возможность автоматического определения типа вписываемой поверхности была у FitSurfaceToGrid и раньше, но она занимала довольно много времени.

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 11
Рис. 11

Мы определили это по результатам тестирования. Коллеги из C3D Labs выполнили доработки и использовали для автоопределения не всю поверхность, а некоторое репрезентативное множество ее точек. Теперь, даже в сравнении с программным обеспечением других производителей, автоопределение работает быстро.

Другое направление — совмещение, направленное на то, чтобы определить качество реверс-инжиниринга.

Применение полигональных инструментов для реверс-инжиниринга в КОМПАС-3D, фото 12
Рис. 12

Для этого существует функция AlignObjects, которая позволяет получить матрицу преобразования для одного из объектов на основании заданных параметров или исходя из подсказок. Этот инструмент находится в разработке, и его конечный вид может измениться.

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