1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "MAXScript", создана пользователем Ilya Крупко, 23 янв 2009.

Модераторы: Savin Denis
  1. Ilya Крупко

    Ilya Крупко Знаток

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

    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.. Может кто знает как туда залезть. (для трубы там тоже все прекрасно показывается).

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

    Protactinium Пользователь сайта

    С нами с:
    03.03.2006
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    2
    Для любого объекта с сеткой можно получить его сетку и взять оттуда количество вершин и граней:

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

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

    Ilya Крупко Знаток

    С нами с:
    03.12.2005
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    65
    Выкрутился создав копию объекта и конвертировав его в меш, потом подсчитал сколько чего и удалил объект. Способ выше тоже пригодился, спасибо!
     
Модераторы: Savin Denis

Поделиться этой страницей