Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MAXScript help rus.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.24 Mб
Скачать

Определение структур

Вы можете создать свой собственный тип данных, используя оператор определения структур. Записывается он так. Сначала пишется слово struct, затем название, которое Вы даете структуре. Потом в круглых скобках, через запятую перечисляются элементы структуры. Представим себе, что нам надо создать небольшой видео ролик, иллюстрирующий атомарную теорию строения вещества. В нем должен быть отражен тот факт, что атом состоит из ядра и вращающихся вокруг него электронов. Поскольку по сценарию атомов должно быть очень много, создадим структуру, описывающую изображение атомов.

struct atom

( nuclear, -- ядро

electrons = #( )

)

Данная структура содержит элемент nuclear, который призван изображать ядро атома и элемент electrons – массив, который будет содержать один или несколько электронов. В качестве моделей ядра и электронов будем применять сферы. Например, создать атом A с двумя электронами можно так

A = atom (sphere( )) (#(sphere( ),sphere( )))

Круглые скобки вокруг параметра обязательны только в данном, конкретном случае. Дело в том, что пустые скобки после слова sphere – это тоже выражение, имеющее значение undefined, и если не поставить круглых скобок вокруг параметра, то не ясно, к чему это выражение относится. То ли к вызову функции sphere, то ли к созданию объекта структуры atom. При создании объекта нужно указывать элементы структуры в том порядке, в каком они перечислены в определении. Именно так и сделано в приведенном выше скрипте. Для такой простой структуры это легко, ну а если она включает десяток элементов? В этом случае можно указывать их так же как именованные параметры функции. Например, тот же атом A можно создать и так

A = atom nuclear:(sphere( )) electrons:(#(sphere( ),sphere( )))

что несколько нагляднее. К тому же в этом случае соблюдать порядок следования параметров необязательно.

При определении структуры можно определить значение элемента по умолчанию. В нашем примере элемент electrons определен по умолчанию как пустой массив. Если написать

P = atom nuclear:(sphere( ))

или просто

P = atom (sphere( ))

то получится атом без электронов (положительно заряженный ион), а свободный электрон можно создать так

E = atom electrons:(#(sphere( )))

В этом случае ядро будет иметь значение undefined, поскольку значение по умолчанию для него не определено. Пока что наша структура не очень удобна для использования, и вскоре мы улучшим ее. Пока же можно воспользоваться только одним преимуществом структуры – наглядным доступом к ее элементам, или, как принято говорить в MAXScript, свойствам объекта.

Например, установить цвет сферы, имитирующей ядро атома A, можно так

A.nuclear.wireColor = red

а установить радиус сферы, имитирующей второй электрон того же атома, так

A.electrons[2].radius = 0.1

Создание функций, локальных внутри структуры

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

struct atom

( nuclear,

electrons = #(),

fn CreateSpheres ElectronsCounter:1 =

( nuclear = sphere radius:1.0

for i = 1 to ElectronsCounter do

( electrons[i] = sphere radius:0.1

electrons[i].position.x = nuclear.position.x + 2.0;

)

)

)

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

He = atom ( )

He.CreateSpheres ElectronCounters:2

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]