- •Часть 1
- •Окно maxScript Listener
- •Окно maxScript Editor
- •Простейшие математические операторы и выражения
- •Пропуск проходов и принудительный выход из циклов
- •Часть 2 Функции
- •Объекты и классы в объектно-ориентированном программировании
- •Определения
- •Операции со строками
- •Операции с массивами
- •Команды 3ds max в maxScript
- •Часть 3 Создание свитков
- •События
- •Элементы интерфейса
- •Часть 4 Сплайны
- •Класс SplineShape
- •Часть 5 Простейшие диалоговые окна
- •If queryBox “Хотите продолжить?” beep:false then ... Некоторые из методов работы с объектами
- •Характерные точки объектов
- •Системы координат
- •Координатные сетки
- •Определение угла между двумя векторами
- •Представление ориентации при помощи кватернионов (quaternions)
- •Создание вспомогательных объектов-пустышек Dummy
- •Изменение общих параметров анимации
- •Анимация вершин сплайнов
- •Примеры контроллеров анимации path constraint и link constraint
- •Методы print и format
Часть 4 Сплайны
Сплайн – это объект, представляющий собой одну или несколько линий в пространстве или на плоскости. Все сплайны, а также NURBS-кривые относятся к категории Shapes (формы). Команда showclass “*:shape” выводит в окно Listener все существующие классы сплайнов. Некоторые свойства этих классов повторяются, как общие свойства всех сплайнов. Описывать все классы нет необходимости, рассмотрим класс Arc (дуга):
Свойство Описание
<Arc>.radius Радиус дуги (тип значения – float, по умолчанию 25.0)
<Arc>.from Положение начальной точки, как угол, отмеряемый от
положительного направления локальной оси X. (float, 45.0)
<Arc>.to Положение конечной точки, как угол, отмеряемый от положительного направления локальной оси X. (float, 135.0)
<Arc>.pie Достраивает дугу до замкнутого сплайна, соединяя концы с центром прямыми сегментами. (Boolean, false)
<Arc>.reverse Инвертирует сплайн дуги, т.е. меняет порядок вершин на противоположный. (Boolean, false)
<Arc>.steps Число разбиений сегмента между вершинами. (Integer, 6)
<Arc>.optimize Удаляет разбиение прямых сегментов сплайна. (Boolean, true)
<Arc>.adaptive Автоматически определяет и устанавливает разбиение для сплайнов. У прямых сегментов всегда 0. (Boolean, false)
<Arc>.angle Угол поворота сечения визуализируемого сплайна. (float, 0.0)
<Arc>.thickness Диаметр (толщина) визуализируемого сплайна. (float, 1.0)
<Arc>.sides Число сторон в сетке визуализируемого сплайна. Например, значение 4 дает квадратное сечение. (Integer, 12)
<Arc>.renderable Включает показ сплайна при визуализации. (Boolean, false)
<Arc>.mapCoords Включает проекционные координаты. (Boolean, false)
Пример: duga = arc radius: 100 from: 0 to: 180 pos: [0, 0, 0]
Класс SplineShape
Методы этого класса работают с любыми сплайнами и позволяют всячески их редактировать. Чтобы конвертировать сплайны стандартных классов в класс SplineShape, необходимо использовать функцию convertToSplineShape <node>, где <node> – любой объект-сплайн. Если в качестве <node> задать объект, который нельзя конвертировать, функция возвратит значение undefined.
Методы, работающие с целым объектом Shape
updateShape <shape> – обновляет объект, этот метод необходимо запускать после редактирования формы методами SplineShape и до работы с объектом любыми другими операциями.
resetShape <shape> – стирает все сплайны объекта.
numSplines <shape> – возвращает количество всех сплайнов в объекте как значение типа Integer. Эквивалент <shape>.numSplines.
setFirstSpline <shape> <spline_index_integer> – меняет порядок сплайнов таким образом, что указанный сплайн становится первым.
addAndWeld <to_shape> <from_shape> <weldthreshold_float> – добавляет сплайны одного объекта к другому. Конечные точки сплайнов будут объединяться, если расстояние между ними не превысит значения <weldthreshold_float>.
bindKnot <shape> <isEnd_boolean> <splineId_integer>
<segIndex_integer> <splineSegId_integer> – связывает первую или последнюю вершину сплайна с серединой указанного сегмента. Если значение параметра <isEnd_boolean> - true, связывается последняя вершина, иначе первая. Параметр <splineId_integer> задает номер сплайна, которому принадлежат связываемые вершины, <segIndex_integer> определяет номер сегмента, к середине которого будет привязана вершина, <splineSegId_integer> – номер сплайна, которому принадлежит этот сегмент.
unBindKnot <shape> <spline_index_integer> <isEnd_boolean> – разрывает связь конечной или начальной вершины указанного сплайна.
updateBindList <shape> – обновляет список связей. Метод вызывается, когда меняется топология, например, стираются вершины.
materialID <shape> <spline_index_integer> <segment_index_integer> – возвращает идентификатор материала для указанного сегмента сплайна заданного объекта.
Методы, работающие со сплайнами объекта Shape
addNewSpline <shape> – добавляет новый пустой сплайн к объекту и возвращает его номер (будет последним в списке всех сплайнов этого объекта)
getSplineSelection <shape> – возвращает номера выделенных сплайнов объекта как массив целых чисел.
setSplineSelection <shape> <spline_index_array> [keep:<boolean>] – выделяет сплайны, определенные массивом <spline_index_array>. Со сплайнов, уже выделенных к данному моменту, выделение снимается, если только не установлен параметр keep:true.
deleteSpline <shape> <spline_index_integer> – удаляет заданный сплайн из объекта. Оставшиеся сплайны перенумеровываются.
numSegments <shape> <spline_index_integer> – возвращает количество сегментов указанного сплайна. Это целое число, равное числу вершин для замкнутых сплайнов и на единицу меньше числа вершин для открытых.
numKnots <shape> [<spline_index_integer>] – возвращает число вершин в указанном сплайне (значение типа Integer). Если номер сплайна не указан, возвращается число вершин во всем объекте.
isClosed <shape> <spline_index_integer> – возвращает true, если указанный сплайн замкнут, и false, если открыт.
close <shape> <spline_index_integer> – замыкает указанный сплайн. Этот метод всегда создает новый сегмент от первой до последней вершины, даже если их координаты совпадают.
open <shape> <spline_index_integer> – открывает указанный сплайн, удаляя сегмент между первой и последней вершиной.
reverse <shape> <spline_index_integer> – инвертирует порядок вершин в указанном сплайне.
setFirstKnot <shape> <spline_index_integer> <knot_index_integer> – устанавливает новый порядок вершин в указанном сплайне так, что заданная вершина становится первой.
getSegLengths <splineShape> <spline_index> [cum:<boolean>]
[byVertex:<boolean>] [numArcSteps:<integer>] – возвращает массив длин сегментов или расстояний между вершинами сплайна и общую длину сплайна. Вычисления повышенной точности. Если значение cum:true – результаты складываются, иначе отсчитываются для каждого сегмента (по умолчанию false). Если значение byVertex:true – результаты для вершин, иначе для сегментов (по умолчанию false). Параметр numArcSteps:<integer> по умолчанию равен 100.
subdivideSegment <splineShape> <spline_index>
<seg_index> <divisions> – разделяет сегмент на заданное количество частей. Вычисления двойной точности.
interpCurve3D <splineShape> <spline_index> <param_float>
[pathParam:<boolean>] – возвращает <point3>-координату указанной кривой. Если pathParam:false – значение <param_float> является частью длины сплайна, иначе частью длины сегмента. По умолчанию pathParam:false.
tangentCurve3D <splineShape> <spline_index> <param_float>
[pathParam:<boolean>] – возвращает <point3>-касательную к указанной кривой. Если pathParam:false – значение <param_float> является частью длины сплайна, иначе частью длины сегмента. По умолчанию pathParam:false.
Методы, работающие с сегментами сплайнов объекта Shape
getSegmentType <shape> <spline_index_integer> <seg_index_integer> – возвращает тип указанного сегмента заданного сплайна.
setSegmentType <shape> <spline_index_integer> <seg_index_integer>
(#curve | #line) – устанавливает тип указанного сегмента заданного сплайна.
refineSegment <shape> <spline_index_integer> <seg_index_integer>
<seg_interp_param_float> – добавляет новую вершину к указанному сегменту заданного сплайна. Конкретное положение вершины, определяется значением <seg_interp_param_float>. Это число от 0.0 до 1.0 пропорционально длине сегмента. Координаты и касательные на входе и выходе из вершины устанавливаются автоматически, чтобы сохранить исходную кривизну сегмента. Функция refineSegment() возвращает номер новой добавленной вершины.
getSegSelection <shape> <spline_index_integer> – возвращает номера выделенных сегментов заданного сплайна как массив целых чисел.
setSegSelection <shape> <spline_index_integer> <seg_index_array>
[keep:<boolean>] – выделяет сегменты, определенные массивом номеров <seg_index_array>. С сегментов, уже выделенных к данному моменту, выделение снимается, если только не установлен параметр keep:true.
setMaterialID <splineShape> <spline_index> <seg_index> <matID> – устанавливает идентификатор материала для заданного сегмента сплайна.
getMaterialID <splineShape> <spline_index> <seg_index> – возвращает идентификатор материала для заданного сегмента сплайна.
Методы, работающие с вершинами сплайнов объекта Shape
addKnot <shape> <spline_index_integer>
(#smooth | #corner | #bezier | #bezierCorner)
(#curve | #line) <position_point3> [invec_point3 outvec_point3]
[where_integer] – добавляет к указанному сплайну новую вершину и возвращает ее номер. Третий аргумент определяет тип вершины, четвертый – тип сегмента на выходе из вершины, пятый – координаты новой точки в текущей системе координат. Если тип вершины bezier или bezierCorner, необходимо задать векторы входящей и исходящей касательной (6-ой и 7-ой аргументы). Дополнительный последний аргумент устанавливает номер новой вершины в массиве вершин сплайна, если его не задать, она будет последней.
deleteKnot <shape> <spline_index_integer> <knot_index_integer> – удаляет указанную вершину с заданного сплайна. Оставшиеся вершины перенумеровываются.
getKnotType <shape> <spline_index_integer> <knot_index_integer> – возвращает тип указанной вершины с заданного сплайна. Значения (тип name) бывают следующими: #smooth, #corner, #bezier, #bezierCorner.
setKnotType <shape> <spline_index_integer> <knot_index_integer>
(#smooth | #corner | #bezier | #bezierCorner) – задает тип указанной вершины заданного сплайна.
getKnotPoint <shape> <spline_index_integer> <knot_index_integer> – возвращает координаты (тип point3) в текущей системе координат указанной вершины заданного сплайна.
setKnotPoint <shape> <spline_index_integer> <knot_index_integer> <point3> – устанавливает координаты (point3) указанной вершины заданного сплайна в текущей системе координат.
getInVec <shape> <spline_index_integer> <knot_index_integer> – возвращает вектор (point3) входящей касательной для указанной вершины в текущей системе координат.
setInVec <shape> <spline_index_integer> <knot_index_integer> <point3> – задает вектор (point3) входящей касательной для указанной вершины в текущей системе координат.
getOutVec <shape> <spline_index_integer> <knot_index_integer> – возвращает вектор (point3) выходящей касательной для указанной вершины в текущей системе координат.
setOutVec <shape> <spline_index_integer> <knot_index_integer> <point3> – задает вектор (point3) выходящей касательной для указанной вершины в текущей системе координат.
getKnotSelection <shape> <spline_index_integer> – возвращает номера выделенных вершин заданного сплайна как массив целых чисел.
setKnotSelection <shape> <spline_index_integer> <knot_index_array>
[keep: <boolean>] – выделяет вершины, определенные в массиве <knot_index_array>, представляющем собой набор целых чисел – номеров вершин. С вершин, уже выделенных к данному моменту, выделение снимается, если только не установлен параметр keep:true.
