Для преобразования любого плоского меша в кривые Безье нужно выполнить несколько операций: сначала преобразовать меш в кривую, затем преобразовать ее точки в формат Безье (с “рычагами”) и, дополнительно, можно пересчитать количество управляющих точек, чтобы удалить точки, не влияющие на форму кривой. Все то же самое можно сделать в режиме “одной кнопки”, написав небольшой скрипт.
Пусть у нас текущий выделенный объект – это плоский меш, который мы хотим быстро преобразовать в кривую Безье.
Преобразовать меш в обычную кривую можно, использовав универсальный оператор преобразования объектов convert.
|
1 |
bpy.ops.object.convert(target='CURVE', keep_original=False) |
В параметре target мы указали в какой тип объектов – кривую, нам нужно преобразовать активный объект. Так же мы указали False в параметре keep_original, чтобы после преобразования исходный меш автоматически удалялся.
Теперь, чтобы из обычной кривой получить кривую Безье, нам нужно всем ее сплайнам (отдельным контурам) назначить тип “Bezier”.
Пройдем по сплайнам кривой в цикле и назначим каждому нужный нам тип.
|
1 2 |
for spline in bpy.context.object.data.splines: spline.type = 'BEZIER' |
Следующим этапом сократим количество точек, воспользовавшись оператором decimate().
Оператор decimate работает в режиме редактирования объекта, поэтому переключимся в режим редактирования перед его вызовом, и вернемся в объектный режим после.
|
1 2 3 |
bpy.ops.object.mode_set(mode='EDIT') bpy.ops.curve.decimate(ratio=0.5) bpy.ops.object.mode_set(mode='OBJECT') |
Здесь следует обратить внимание на значение параметра ratio в операторе decimate. Оно должно задаваться в диапазоне от 0 до 1, и чем меньше его значение, тем меньше точек останется на кривой. Значения в диапазоне 0.5 – 0.7 обычно являются неплохим балансом между точным соответствием формы кривой исходному контуру и количеством точек на кривой.
Если мы сейчас переключимся в режим редактирования, то увидим, что все управляющие “рычаги” на точках кривой Безье расположены под разными углами. Чтобы превратить их в обычные, прямые “рычаги”, нужно изменить их тип.
Пройдем в цикле по всем точкам и поставим тип “AUTO” для левого и правого управляющих рычагов.
|
1 2 3 4 |
for spline in bpy.context.object.data.splines: for point in spline.bezier_points: point.handle_left_type = 'AUTO' point.handle_right_type = 'AUTO' |
Теперь полученная нами кривая Безье имеет полностью привычный вид и управление.

.blend file on Patreon