Вывод массивов на печать

До версии 3dsMax 7 попытка вывести массив на печать или преобразовать его в строковый тип (т.е. выполнить так называемое приведение типов данных) при­водила к тому, что распечатывались лишь 20 первых элементов массива. Теперь в MAXScript появилась новая глобальная переменная, позволяющая выводить все элементы массива на печать или выполнять приведение их типов. Эта глобальная переменная следующая: options.PrintAllElements

Если установлено логическое значение true данной переменной, все элементы массива выводятся на печать или преобразуются в строку (более подробно типы дан­ных и их приведение рассматриваются в оперативном руководстве по MAXScript). Если же установлено логическое значение false данной переменной, то на печать выводятся только 20 первых элементов массива.

Примечание. Дополнительные сведения о синтаксисе переменной PrintAllElements приведены в руководстве по MAXScript.

Для того чтобы воспользоваться переменной PrintAllElements, выполните следующее упражнение.

1. Введите в окне приемника команд следующий фрагмент кода:

options.PrintAllElements = false

h = for i = 1 to 30 collect i

2. Обратите внимание на то, что на печать выведены лишь 20 первых элементов массива:

#(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,...)

3. Введите в окне приемника команд следующий фрагмент кода:

options.PrintAllElements = true

h

4. Как видите, теперь на печать выведены все элементы массива:

#(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)


Глава 1

Многомерные массивы (дополнительный материал)

Многомерным называется такой массив, каждый элемент которого содержит другой массив, т.е. это массив массивов. Такой массив бывает не только двухмерным; он может иметь размерность более высокого порядка. Двухмерный массив выглядит следующим образом: #(#(1,2),#(3,4))

Его можно присвоить любой переменной следующим образом: h = #(#(1,2),#(3,4))

В следующем упражнении вам предстоит создать двухмерный массив.

1. Установите 3dsMax в исходное состояние.

2. Откройте окно редактора MAXScript Editor по команде MAXScript ⇨ NewScript из меню данного окна. Введите в окне редактора MAXScript Editor следующий фрагмент кода и выполните его, нажав комбинацию клавиш <Ctrl+E>:

function array2D row column =

(

local data = #()

for i = 1 to column do

(

data [i] = #(0)

for j = 1 to row do

(

data[i][j] = random 1 10

)

)

return data

)

myArray = array2D 2 4

-- row-строка

-- column-столбец

3. В ответ в окне приемника команд появится новый двухмерный массив, заполненный произвольными числами в пределах от 1 до 10:

array2D()

#(#(10, 1), #(10, 9), #(4, 5), #(9, 4))

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

1. Введите в редакторе MAXScript Editor все операторы сценария так. как они показаны в этом упражнении. Сценарий будет выполнен в конце данного упражнения.

2. Создайте два массива в новом окне редактора MAXScript Editor: это будут массивы описания цилиндров:

cylobj1 = #()

cylobj2 = #()

3. Создайте ряд модификаторов для последующего применения:

tap = taper amount:-1.0

bnd = bend angle:3


Основы MAXScript

4. Заполните элементы обоих массивов описанием свойств цилиндрических объектов. Первый элемент каждого массива должен содержать высоту цилиндра, второй — его положение по оси X, третий — наименование цилиндра и четвертый — применяемый к цилиндру модификатор:

cylobj1[1] = 30.0

cylobj1[2] = 0.0

cylobj1[3] = "first cylinder"

cylobj1[4] = tap

cylobj2[1] = 60.0

cylobj2[2] = 40.0

cylobj2[3] = "second cylinder"

cylobj2[4] = bnd

5. Создайте массив из массивов описания цилиндров:

cylinders = #(cylobj1, cylobj2)

Для доступа к элементу двухмерного массива cylinders используется выражение cylinders[i][j], где первый индекс массива [i] обозначает конкретный массив описания цилиндров, а второй индекс [j] служит для индексации этого массива.

6. Постройте два цилиндра:

for i = 1 to cylinders.count do

(

c = cylinder height: cylinders[i][1]\

pos:[cylinders[i][2], 0.0, 0.0]\

name: cylinders[i][3]\

heightsegs: 10

addmodifier c cylinders[i][4]

)

Версию этого сценария можно найти в файле \chapter1\2_D_Arrays.ms на прилагаемом к этой книге CD-ROM. А на приведенном ниже рисунке показан результат выполнения данного сценария.


Глава 1