Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Массив параметров

Читайте также:
  1. I. Передача параметров запроса методом GET.
  2. Битовые массивы
  3. Будем считать, что объявили массив из 10 элементов.
  4. Вводные замечания и классификация массивов
  5. Выбор некоторых параметров первой ступени компрессора на среднем диаметре
  6. Выбор оптимальных режимных параметров
  7. Вычисление суммы элементов массива

Многие объекты 3ds max хранят свои свойства в массивах специального класса, называемого массивом параметров (ArrayParameter). Главное отличие его от обычного массива MAXScript, состоит в том, что его элементы должны быть значениями одного и того же типа.

 

Конструкторы

Массив параметров можно получить только для конкретного объекта. Например, известно, что для стандартного материала в массиве параметров хранятся текстуры. Чтобы получить массив текстур для материала M, нужно записать такое выражение

M.maps

Его результатом будет массив параметров, содержащий текстуры. Узнать, какие свойства имеет конкретный объект, и какие из них содержатся в массиве можно с помощью функции showProperties. Возьмем для примера тот же стандартный материал.

M = standard ()

showProperties M

В результате работы второй строки приведенного скрипта в окне интерпретатора появится длинный список свойств стандартного материала, в котором, в числе прочих, будут и такие

.UserParam1 (Optional_Param1): float

.mapEnables (Map_Enables): bool array

.maps: texmap array

.mapAmounts (Map_Amounts): percent array

.adTextureLock (Ambient_Diffuse_Texture_Lock): Boolean

вторая, третья и четвертая из приведенных строк как раз означают разнообразные свойства текстур материала, размещенные в массивах. На это указывает слово array в конце описания.

 

Свойства

Массив параметров имеет только одно свойство

Массив_параметров. count

оно возвращает количество параметров, содержащихся в данном массиве

 

Операторы

Для массивов параметров определена операция индексирования

Массив_параметров [ Целое_число ]

с помощью этой операции можно получить или наоборот установить любой параметр из массива. Например для того же материала M, можно записать

M.mapEnables[1] = true

 

Методы

Методов для массива параметров не определено.


Множества

В MAXScript можно выполнить некоторые функции для каждого элемента множества, написав лишь один вызов такой функции. Эти функции называются картированными. Например, скрипт

hide selections

скроет все выбранные объекты сцены, сколько бы их не было. Существенным ограничением для картированных функций является тот факт, что множество должно быть первым аргументом этой функции.

Кроме этого одним оператором можно присвоить значение какому-нибудь свойству всех объектов, входящих во множество. Например, скрипт

$Sphere*.position = [0, 0, 0]

переместит все сферы в сцене в начало координат. Если свойство само является составным объектом и в свою очередь имеет свойства, то попытка присвоить значение “свойству второго уровня” для всех элементов множества за раз, может и не работать. Безопасно можно присваивать значения следующим свойства элементов множества

.angle

.b

.blue

.axis

.controller

.g

.green

.isAnimated

.keys

.r

.red

.track

.x

.x_rotation

.y

.y_rotation

.z

.z_rotation

Все определенные в MAXScript картированные функции, такие как copy, delete или move имеют необязательный параметр #noMap. Если применить картированную функцию к множеству, указав этот параметр, то функция будет вызвана один раз для множества в целом. Если же его не указывать, то функция вызовется столько раз, сколько элементов во множестве, и для каждого из них.

Вы можете написать собственную картированную функцию, указав в ее определении ключевое слово mapped. Например, функция

mapped fn SetRandomColor x = (x.wireColor = random black white)

может быть вызвана как для отдельного объекта, так и для целого множества. Например

SetRandomColor $Sphere01

установит случайный цвет для одной только сферы, а

SetRandomColor objects

для всех объектов сцены. Параметр #noMap для определенных пользователем картированных функций не работает.

Перебор всех элементов множества можно организовать с помощью цикла for. Например, скрипт

h = 0

for obj in $Box* do h = h +obj.height

подсчитывает сумму высот всех элементов сцены, чьи имена начинаются с Box. При этом следует иметь в виду, что для успешной работы цикла состав множеств не должен меняться во время его выполнения. Например, нам надо преобразовать все выбранные сплайны в NURBS-кривые. Такой скрипт

for s in selection do (convertToNURBSCurve s)

не выполнит этой задачи. Дело в том, что функция convertToNURBSCurve переводит все выделенные объекты в обычное состояние, и тем самым изменяет состав множества selection, а, попросту говоря, делает его пустым.

 

Массивы

Массив (array) является упорядоченным множеством и может содержать любое количество элементов различного типа. К массиву можно применять картированные функции.

 

Литералы

Литералы для массива описаны в главе о литералах. Вспомним только, что массивы могут записываться как список разделенных запятой элементов в круглых скобках. Перед открывающей скобкой должен стоять знак #. Например

# (1, 2, 3, 4, 5)

# ($Sphere01, $Box01, $Cilinder01)

 

Конструкторы

Практически любое из описанных ниже множеств может быть преобразовано в массив с помощью оператора преобразования типа

Множество as array

Кроме того, можно, создав с помощью литерала пустой массив, например, так

A = # ()

заполнять его по мере необходимости, используя описанные далее методы.

 

Свойства

Для любого массива можно получить, но не записать, количество элементов в массиве

Массив. count

 

Операторы

Естественной для массивов является операция индексирования. С ее помощью можно прочитать или записать любой элемент массива

Массив [ Целое_число ]

Массивы индексируются только целым числом, начиная с единицы. Кроме того, массив может складываться с любым множеством

Массив + Множество

Результатом такой операции будет массив, который содержит элементы, входящие хотя бы в одно из слагаемых. Например, результатом сложения двух массивов

#(1, 2, 3, 4, 5, 6) + #(4, 5, 6, 7, 8)

будет массив

#(1, 2, 3, 4, 5, 6, 7, 8)

 

Методы

Добавить любой объект MAXScript к массиву можно с помощью с помощью функции

append Массив Value

Массив при этом расширяется. Для вставки элемента в произвольное место массива применяется функция

insertItem Value Массив Целое_число

После вызова этой функции значение, заданное первым параметром, окажется в массиве на месте, определенном третьим параметром. Элементы, начиная с того, который ранее стоял на этом месте, сдвинутся вправо, а размерность массива увеличится на единицу.

Чтобы получить копию массива используйте функцию

copy Массив #noMap

Второй параметр не обязателен. Если он указан, то объекты 3ds max, содержащиеся в массиве, не создаются, а результатом функции будет массив, содержащий те же самые объекты, что и исходный. Параметр #noMap описан выше.

Функция

deleteItem Массив Число

удаляет из массива элемент с индексом, заданным вторым параметром. Число элементов массива при этом, естественно, уменьшается на единицу.

Массив можно объединить с любым множеством с помощью функции

join Массив Множество

Данная функция делает то же самое, что и операция сложения. Разница только в том, что при сложении массивы-слагаемые остаются в своем первоначальном виде, а join добавляет элементы непосредственно к указанному массиву.

Для сортировки массива применяется функция

sort Масив

При этом все элементы массива должны иметь один и тот же тип, для которого определены операции больше, меньше и т.д. В массиве могут содержаться, например, контроллеры, числа и геометрические объекты. В этом случае об их сортировке говорить не приходится. То же касается и функции поиска

findItem Массив Value

Для поиска в массиве MAXScript применяет операцию сравнения = =. Следует позаботиться о том, чтобы значение, заданное вторым параметром, могло корректно сравниваться со всеми элементами массива. Функция возвращает индекс элемента в массив, если он найден и ноль в противном случае.

Функции поиска минимума и максимума

amin Массив

amax Массив

так же используют стандартную операцию сравнения и, следовательно, массивы, к которым они применяются, должны содержать однотипные значения. Функции возвращают соответственно минимальный и максимальный элементы массива. Для сортировки по произвольному алгоритму применяется функция

qsort Массив Функция start: Целое_число end: Целое_число

Пользовательские_параметры

Обязательны только первые два параметра. Например, такой скрипт сортирует объекты сцены по длине имен

fn comparename obj1 obj2 =

(if obj1.name.count > obj2.name.count then return 1

else (if obj1.name.count < obj2.name.count then return -1)

return 0

)

 

a = objects as array

qsort a comparename

Функция, которую Вы определяете для сравнения, должна иметь как минимум два параметра, для которых и проводится сравнение. Результатом функции должно быть отрицательное число, если первый параметр функции меньше второго, ноль, если они равны и положительное, если первый параметр больше. Корме этого, функции сравнения можно передать неограниченное число именованных параметров. Например, добавим в приведенный ранее пример возможность указать направление сортировки

fn comparename obj1 obj2 direction: =

(case direction of

(#Up: if obj1.name.count>obj2.name.count then return -1

else (if obj1.name.count<obj2.name.count then return 1)

#Down: if obj1.name.count>obj2.name.count then return 1

else (if obj1.name.count<obj2.name.count then return -1)

)

return 0

)

 

a=objects as array

qsort a comparename direction:#Down

Параметры start и end позволяют задать начальный и конечный элементы сортировки. Элементы массива, находящиеся вне указанного этими параметрами диапазона останутся на своих местах.

 


Дата добавления: 2015-10-31; просмотров: 122 | Нарушение авторских прав


Читайте в этой же книге: Символьные строки | Логические (Булевы) значения | Точка в трехмерном пространстве | Точка в двумерном пространстве | Произвольный поворот | Матрица произвольных размеров | Прямоугольник | Интервал времени | Методы для работы с g-буфером | Rotate T 180 z_axis -- и повернем чайник. |
<== предыдущая страница | следующая страница ==>
Строковый поток| Функции, работающие с наборами

mybiblioteka.su - 2015-2024 год. (0.013 сек.)