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

Выделение группы

Тема в разделе "MAXScript", создана пользователем Goryhater, 30 ноя 2012.

Модераторы: Savin Denis
  1. Goryhater

    Goryhater Активный участник

    С нами с:
    20.07.2008
    Сообщения:
    283
    Симпатии:
    0
    Баллы:
    14
    Может кто-то сталкивался с такой задачей, я циклом пробегаюсь по выделеным обьектам в сцене, и если среди этих обьектов мне попадается группа, то я её разгрупировую и на каждый обьект в ней применяю нужное действие, и потом группирую обратно. Если бы был какой-то специальный класс именно для групп (типо как Dummy для обьектов Dummy) то проблем бы не возникло, но я что-то ничего такого похожего не нашел. Вобщем был бы благодарен за подсказочку в этом направлении :)
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Node Common Properties, Operators, and Methods. Group-Related Methods
    Используйте функцию isGroupHead.
    Код:
    for obj in selection do
    if(isGroupHead obj)then
    (
    for chd in obj.children do
    (
    if not isGroupHead chd then
    --rotate chd (eulerAngles 0 0 10)
    )
    )
    или
    Код:
    for obj in selection do
    if(isGroupMember obj and not isGroupHead obj)then
    --rotate obj (eulerAngles 0 0 10)
    Какие действия вы хотите применить к каждому объекту?
    Почему вы хотите разгрупировать группу и группировать обратно?
    Группа может иметь в себе другие группы? К подгруппам тоже нужно применить действие?
     
  3. Goryhater

    Goryhater Активный участник

    С нами с:
    20.07.2008
    Сообщения:
    283
    Симпатии:
    0
    Баллы:
    14
    Вобщем задумка такая, у меня в цикле к каждому обьекту применяется функция которая назначает модификатор UnwrapUVW потом делает FlattenMap, и там увеличивает и если нужно разворачивает получившиеся куски развёртки. Соответсвенно если на пути цикла попадается группа обьектов (а все группы в 3д максе состоят из обьектов и одного Dummy) то на этом самом Dummy скрипт ломается, так как нельзя назначить UnwrapUVW на Dummy. Если я условием исключаю его из обьектов на которые применяется функция то всё равно, помимо того что функция применятся на каждый обьект в группе, как и должно быть, на саму группу эта функция навешивается ещё несколько раз, то есть, например, получается группа с 5 одинковыми модификаторами. Потому решил что легче и правильней будет разбирать группу, а потом собирать её заново)

    Сейчас попробую с isGroupHead что-то смастерить
     
  4. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Вы используете функцию addModToSelection или addModifier, чтобы добавить модификатор Unwrap_UVW?
    Если addModToSelection, тогда можно открыть (Open) все группы, а потом закрыть (Close).
    Код:
    objs=selection as array
    for obj in objs do
    if(isGroupHead obj)then setGroupOpen obj true
    -----------
    for obj in objs do
    if(isGroupMember obj and not isGroupHead obj)then
    (
    select obj
    modPanel.addModToSelection (Unwrap_UVW())
    )
    -----------
    for obj in objs do
    if(isGroupHead obj)then setGroupOpen obj false
    Если используете функцию addModifier, тогда не нужно открывать/закрывать группы.
    Код:
    for obj in selection do
    if(isGroupMember obj and not isGroupHead obj)then
    addModifier obj (Unwrap_UVW())
     
  5. Goryhater

    Goryhater Активный участник

    С нами с:
    20.07.2008
    Сообщения:
    283
    Симпатии:
    0
    Баллы:
    14
    Спасибо) вобщем пошел изначально по не очень правильному пути в моём случае :) до этого цеплял модификатор с помощью addModToSelection собственно потому каша с группами и получалась, сейчас переделал на addModifier, исключая обьект Dummy из функции, и проблема решилась)
     
Модераторы: Savin Denis

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