Находим центр полигона

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

Для примера возьмем простейший случай – плоскость (shift + a – Mesh – Plane), которая состоит из одного полигона. Пусть она будет активным объектом сцены.

Найдем координаты центра полигона плоскости.

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

Однако таким образом мы получаем не указатели на сами вертексы, а только их индексы. Чтобы перейти от индексов к самим вертексам обратимся к свойству vertices объекта. Координаты вертексов мы получаем через их свойство “co”.

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

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

В функции мы сначала суммируем все координаты отдельно по каждой из координатных осей, а затем делим на количество точек. Среднее значение по каждой из осей дает нам в целом центральную точку полигона, которую мы возвращаем в виде вектора.

Чтобы получить центральную точку нашего полигона, вызовем функцию и передадим в нее полученные ранее координаты вертексов.

Для проверки, поместим 3D-курсор в точку с полученными координатами.

Как мы видим, курсор переместился точно в центр плоскости.

Бонус: центр полигона в 2D пространстве

Если нам нужно определить центр полигона в двухмерном пространстве, например, при работе с UV-разверткой, мы можем элементарно модифицировать нашу функцию. Нужно просто убрать из расчетов координаты по оси Z.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии