Евгений Кондратюк, руководитель группы прямого моделирования, C3D Labs, рассказывает об изменениях, которые произошли за прошедший год в функциях прямого моделирования, и новых возможностях, которые открылись пользователям.
Рассмотрим расширение функционала прямого моделирования и недавние обновления в этой сфере.
Новая опция, которая была внедрена, касается замены граней. Основной сценарий применения этой функции — замена поверхности одной грани на другую с сохранением топологии тела. Еще один вариант — когда несколько граней заменяются на одну. Кроме того, предоставляется возможность заменить грань на другую грань сразу с эквидистантным смещением. При этом при наличии нескольких вариантов замены также имеется возможность соответствующего выбора.
Второе обновление коснулось функционала изменения радиуса скругления. Помимо уже существовавшей опции изменения радиуса на заданную величину, появилась возможность установить новый радиус выбранной цепочке гладко стыкующихся скруглений.
Примеры использования этих функций в различных случаях представлены на иллюстрациях.
Первый пример демонстрирует, как используется функция замены граней. Предположим, что имеется некий короб с креплением и пользователя не устраивает форма оранжевых граней. Он хочет сделать более гладкой форму этого крепления. В таком случае он может выбрать сиреневую заменяющую поверхность и заменить часть этой детали на сиреневую грань. Важно отметить, что эта модель — без истории, однако выделенные синим скругления адаптируются. С одной стороны происходит подрезка, с другой — удлинение. Общая топология модели сохраняется, как и во всех прочих операциях прямого моделирования.
Рассмотрим еще один пример на той же самой модели. Если пользователя не устраивают зеленые грани, а форма крепления поменялась, он может взять другую форму, которая на иллюстрации представлена в виде зеленой трапеции, и заменить верхние грани на эту форму. Показательно, что простые поверхности типа элементарных поверхностей, линейчатых поверхностей продляются на необходимую величину, чтобы закрыть будущую грань. Однако для сложных поверхностей, например сплайновых, поверхностей по сети кривых и т. п., требуется полное перекрытие поверхности будущей грани. Это объясняется тем, что при продлении до необходимой величины такие поверхности могут давать пользователю некоторые неожиданные результаты в виде петель, закруглений и т. д. К тому же зачастую это приводит к значительным замедлениям при обработке такой модели.
Рассмотрим еще один возможный вариант использования этой функции, например в качестве аналога подрезки. В верхней части иллюстрации изображена шестеренка, которую условно нужно подрезать до некоторой величины. В этом случае необязательно строить дополнительную плоскость: можно взять уже имеющуюся сиреневую плоскость, передать в качестве входных параметров параметры эквидистантного смещения вверх, и деталь будет подрезана. В то же время скругления, которые выделены синим на картинке, будут адаптированы.
В нижней части иллюстрации представлен аналог выдавливания до поверхности. Оранжевые грани заменяются на сиреневую поверхность с адаптацией скруглений, происходит выдавливание естественным способом, с сохранением формы всех боковых ребер. На иллюстрации видно, что модель была с уклоном и эта форма сохраняется.
В отдельных сценариях замены граней возможно изменение топологии модели. Появилась возможность заменить несколько поверхностей на одну. На иллюстрации представлена замена двух граней кристалла на одну плоскость. Разумеется, при этой операции происходит, во-первых, потеря центрального ребра, которое соединяет оранжевую и желтую грани, и, во-вторых, потеря одного из ребер, представленных спереди, которое также исчезает. Атрибуты новой грани, которая получена после операции, берутся от первой грани из переданных. На иллюстрации видно, что первой была передана оранжевая грань. Соответственно, все атрибуты и наименования были взяты из нее. Если бы первой была передана желтая, все атрибуты были бы взяты из нее. По аналогии, в случае слияния ребер, по возможности, атрибуты берутся от ребер первой грани. В этом случае нет 100%-ной гарантии, так как не всегда бывает понятно, какие элементы слились друг с другом и какие ребра соединились.
Еще одна особенность этого функционала — возможность выбора варианта замены. Если поверхность периодическая, например цилиндрическая или еще более сложной формы, включающей петли или многократные перекрытия, то для таких случаев ядро C3D предоставляет пользователю возможность выбора варианта замены. На иллюстрации представлены два варианта — верхняя часть цилиндра и нижняя. Этот параметр мы запрашиваем у пользователя в качестве входных данных.
В результатах операции выдается оценка максимально возможного числа этих вариантов, именно «оценка», потому что узнать точное количество возможных вариантов замены можно только после прохождения всех алгоритмов. Это достаточно долго и обычно не требуется. Что касается оценки, ее можно сделать сравнительно быстро. Нужно учесть, что не все эти варианты могут в итоге завершиться успехом, потому что это зависит и от модели, и от переданных параметров. Например, для определённых параметров смещения какой-то из вариантов не сработает. Тем не менее на основе этого результата пользователю проще выбрать, какой вариант ему передавать.
Обновления коснулись и изменения радиусов скруглений.
Иллюстрация объясняет проделанную работу. Основное обновление заключается в появлении возможности изменять скругления, на основе которых были построены другие скругления. К примеру, зеленое скругление было построено на основе внутренних синих, и вместе с тем, этим внутренним синим скруглениям можно задать новый радиус.
Также был доработан алгоритм сборки цепочек гладко стыкующихся скруглений. В частности, были усовершенствованы прохождения через углы. Благодаря этому наружная синяя цепочка на иллюстрации может быть изменена путем простого выбора любого из этих скруглений, а все остальные будут «подцеплены» автоматически.
Было улучшено распознавание сплайновых поверхностей в качестве скруглений в импортированных моделях. Это улучшило адаптацию таких скруглений во всех операциях по модификации граней.
Помимо этого, есть и другие внутренние доработки.
Команда C3D Labs создала новый API, потому что старый API уже не мог вместить расширяющийся функционал. В соответствии с общей концепцией функций ядра у прямого редактирования появилась новая функция ModifiedSolid с классом параметров MbModifiedSolidParams. Тип операции теперь регулируется одним новым enum-параметром — MbeModifyingMode. Один enum — одно поведение. Согласно нашим планам общая концепция создания этих параметров должна стать более интуитивно понятной для пользователя. Если речь идет о модификации граней, то пользователь передает в конструктор MbModifiedSolidParams список граней и параметры, которые нужны для этой операции. Если это изменение размеров скруглений, то новый радиус, если это смещение по нормали, то величину смещения, если это замена, то список смещений, список новых граней и т. д.
Помимо этого, был добавлен расчет хот-точек на стороне ядра для новых операций, в частности для замены, для изменения размеров скруглений и для перемещения по нормали. Это было сделано для того, чтобы можно было эти характерные точки отдать пользователю, чтобы он мог их использовать для реализации управления параметрами операции . На иллюстрации видно, что они рассчитываются даже для тех случаев, когда операция не выполнена. Это и была основная задача — сделать так, чтобы они считались во всех случаях и чтобы при малом изменении входных параметров, даже при неудачном выполнении операции, эти точки не покидали пределы экрана, а оставались в области видимости, в той зоне, где работает пользователь. Для всех операций эти объекты различаются — точки и вектора — но глобально при успешном выполнении операции выдается центр модифицированной грани, а при неудачном — некое оценочное положение этой грани. Для изменения размеров скруглений также есть ось будущего скругления.
Планы на следующий период включают несколько пунктов. Тестирование замены граней показало, что пользовательских сценариев гораздо больше, чем предполагалось изначально. Поэтому продолжится их обработка, в функцию замены граней будут добавляться всё новые и новые сценарии. Большой пласт этой работы — добавление возможности замены одной группы граней на группу других граней. Ожидаются доработки по объединению гладко стыкующихся граней в одну поверхность. Планируется улучша ть адаптацию скруглений во всех операциях. В частности, будет улучшаться распознавание сплайновых поверхностей с учетом множества возможных сценариев. Возможно, для этого будет введена отдельная точность. Наконец, планируется обновление документации в связи с растущим функционалом и улучшение информативности в выдаче кодов ошибок операций.
Евгений Кондратюк,
руководитель группы прямого моделирования,
C3D Labs