Render.ru

SelectionSet

Sasquatch

Активный участник
Рейтинг
5
#1
Необходимо добавляеть и удалять объекты из именованных наборов (Selection Set).

Добраться до любого SelectionSet-а несложно:
ss = selectionSets["My set"] или ss = selectionSets[4].

В результате получаем объект типа selectionSet.
Из свойств у него только .count, .min и .max
Никаких возможностей для добавления (или удаления) элемента.
Есть только доступ к элементам через ss[<индекс_элемента>].

А как же с изменением состава элементов, входящих в ss? Каким образом это можно сделать? Ведь стандартными средствами интерфейса Max-а это делается.
 

Sasquatch

Активный участник
Рейтинг
5
#2
Увы, простого и понятного решения не нашлось.
Но есть один способ:

selectionSets - это массив (array). Его элементы - коллекции (collections).
В отличии от массивов, для которых сущетствуют способы добавления (append()) и удаления (deleteItem()) элементов, у коллекций есть только доступ к его элементам (через [ ] ). Но вот способ преобразования коллекции в массив есть: <array> = <array> + <collection>.
Поэтому используем конструкцию MyArray = #() + MyCollection.
Теперь уже добавляем (удаляем) элементы из массива. А после заносим его обратно в selectionSets. Только обращаться нужно не по номеру, а по имени именованного набора.

MySelectionSet = selectionSets["MySetName"]
MyArray = #() + MySelectionSet
--
-- операции над массивом MyArray
--
selectionSets["MySetName"] = MyArray

Если же обращение происходит по индексу (i) в selectionSets, то добавляется использование getNamedSelSetName()

MySelectionSet = selectionSets[(getNamedSelSetName i)]
MyArray = #() + MySelectionSet
--
-- операции над массивом MyArray
--
selectionSets[(getNamedSelSetName i)] = MyArray

Вот так.
 
Рейтинг
64
#3
You can change, add and delete Named Selection Sets by using the standard array methods on the selectionSets array. See SelectionSetArray Values
- может это оно? сорри сейчас проверить нет времени, покопаюсь - скажу, ну и ты скажи
 

Sasquatch

Активный участник
Рейтинг
5
#4
>Dmitro_Golub

Не совсем то. Named Selection Sets - это элементы массива selectionSets.
Да, с этим selectionSets, как и с любым другим массивом можно выполнять операции добавление и удаления элементов. Но вот элементами этого массива является коллекции (collections), для которых операции добавления и удаления элементов не определены.

Т.е. создавать новые именованные выделения просто:
1. Веделили некоторые объекты на сцене.
2. Ввели имя в combobox-е Named Selection Sets на toolbar-е.
3. Нажали Enter.
И вот уже в выпадающем списке именованных выделений появился новый элемент.

Тоже самое с помощью MaxScript:
selectionSets["MySetName"] = selection

Но вот только редактировать список элементов, входящих в это именованное выделение несколько сложнее. Я пока пользуюсь способом, о котором написал выше.
 
Сверху