Render.ru

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

Goryhater

Активный участник
Рейтинг
17
#1
Может кто-то сталкивался с такой задачей, я циклом пробегаюсь по выделеным обьектам в сцене, и если среди этих обьектов мне попадается группа, то я её разгрупировую и на каждый обьект в ней применяю нужное действие, и потом группирую обратно. Если бы был какой-то специальный класс именно для групп (типо как Dummy для обьектов Dummy) то проблем бы не возникло, но я что-то ничего такого похожего не нашел. Вобщем был бы благодарен за подсказочку в этом направлении :)
 

igorznag

Мастер
Рейтинг
103
#2
если среди этих обьектов мне попадается группа
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)
то я её разгрупировую и на каждый обьект в ней применяю нужное действие, и потом группирую обратно.
Какие действия вы хотите применить к каждому объекту?
Почему вы хотите разгрупировать группу и группировать обратно?
Группа может иметь в себе другие группы? К подгруппам тоже нужно применить действие?
 

Goryhater

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

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

igorznag

Мастер
Рейтинг
103
#4
применяется функция которая назначает модификатор UnwrapUVW
Вы используете функцию 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())
 

Goryhater

Активный участник
Рейтинг
17
#5
Спасибо) вобщем пошел изначально по не очень правильному пути в моём случае :) до этого цеплял модификатор с помощью addModToSelection собственно потому каша с группами и получалась, сейчас переделал на addModifier, исключая обьект Dummy из функции, и проблема решилась)
 
Сверху