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

SelectionSet

Тема в разделе "MAXScript", создана пользователем Sasquatch, 13 мар 2003.

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

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

    С нами с:
    05.12.2001
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    5
    Необходимо добавляеть и удалять объекты из именованных наборов (Selection Set).

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

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

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

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

    С нами с:
    05.12.2001
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    5
    Увы, простого и понятного решения не нашлось.
    Но есть один способ:

    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

    Вот так.
     
  3. Dmytro Golub

    Dmytro Golub Знаток

    С нами с:
    27.02.2003
    Сообщения:
    1.101
    Симпатии:
    0
    Баллы:
    64
    You can change, add and delete Named Selection Sets by using the standard array methods on the selectionSets array. See SelectionSetArray Values
    - может это оно? сорри сейчас проверить нет времени, покопаюсь - скажу, ну и ты скажи
     
  4. Sasquatch

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

    С нами с:
    05.12.2001
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    5
    >Dmitro_Golub

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

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

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

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

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