Render.ru

Неправильно считает количество вертексов в объектах

Рейтинг
75
#1
День добрый. Впереди букв много поэтому если лень читать переходите в абзац"ЗЫ"
Пишу скрипт. Хочу узнать для выделенных объектов кто из них тяжелее, для этого ищу в цикле количство вершин (фейсов) следующим способом:

for obj in selection do (
polymax=80
meshobj= getPolygonCount obj
if polymax<meshobj[1] do polymax=meshobj[1]
)

проблема в том что при каждом новом выделении тех же объектов(!) максимальное число вершин не правильное.. .То есть не закрывая утилиты я еще раз выделяю те же самые объекты, не перекомпелируя саму утилиту, нажимаю подсчитать, он мне другое уже число выводит..polymax меняю только в этом куске кода. числа которые он путает берет от объектов, реально существующие. похоже на то как будто в цикле пропускат более тяжелые чем 80 вертексов. хотя если выделить один объект на 180 верт. и другой на 230 иногда не ошибется, выведет 230. для единственного объекта выводит его правильное количество.
Еще пробовал писать через snapshotAsMesh. но там тоже ошибка в подсчете((
Другая проблема в том что этот способ не подходит для объектов таких как tube. Пишет что Mesh operation on non-mesh: Tube . А конвертить в едитполи мне нельзя.


ЗЫ: В ИДЕАЛЕ было бы для меня достать до цифр у Vertices и Faces, которые у каждого объекта в Object Properties.. Может кто знает как туда залезть. (для трубы там тоже все прекрасно показывается).

буду благодарен любым советам =)
 

Protactinium

Пользователь сайта
Рейтинг
2
#2
Для любого объекта с сеткой можно получить его сетку и взять оттуда количество вершин и граней:

m = obj.mesh -- получение сетки объекта (TriMesh)
nv = m.verts.count -- количество вершин сетки
nf = m.faces.count -- количество граней сетки

Kruil, если ты хочешь чтоб твой скрипт что-то делал, то убери строчку polymax=80 за пределы цикла. Сейчас ты в каждом проходе цикла сбрасываешь это значение в 80. Это во-первых. А во-вторых функция getPolygonCount 1ым значением выдает количество граней, а не вершин, а количество вершин идет вторым элементом массива. То есть количество вершин у тебя хранится в meshobj[2], а не meshobj[1].
 
Рейтинг
75
#3
Выкрутился создав копию объекта и конвертировав его в меш, потом подсчитал сколько чего и удалил объект. Способ выше тоже пригодился, спасибо!
 
Сверху