Вывод массивов на печать
До версии 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