Руководство пользователя > Скриптовый язык
Объекты
Каждый из объектов, располагающихся на листе, имеет уникальный идентификатор (ID), который выводится в окне свойств объекта и может быть получен в редакторе скриптов простым щелчком по объекту.
Типы данных
При работе с объектами листа используются следующие основные типы данных:
Название типа |
Описание типа |
int |
Целое число. |
double |
Вещественное число. |
boolean |
Логическое значение (true или false). |
Vector2D |
Вектор с двумя вещественными координатами. Получить новый вектор можно с помощью функции Vector2D(x,y) . Вектор V сам является объектом и имеет много интересных свойств и методов:
V.x – абсцисса радиус-вектора V;
V.y – ордината радиус-вектора V;
V.add(w) – сумма векторов V и w;
V.diff(w) – разность векторов V и w;
V.dotprod(w) – скалярное произведение векторов V и w;
V.norm() – длина вектора V;
V.mul(k) – произведение вектора V на число k;
V.project(w) – ортогональная проекция вектора V на направление вектора w; и др.
|
Point2D |
Пара чисел, задающих точку P на координатной плоскости:
P.x – абсцисса точки P;
P.y – ордината точки P.
|
Rectangle2D |
Четыре числа, задающих расположение и размеры прямоугольной области R:
R.width – ширина области;
R.height – высота области;
R.x – абсцисса верхнего левого угла;
R.y – ордината верхнего левого угла.
|
Color |
Структура, задающая цвет через три его составляющие red, green, blue и степень непрозрачности alpha. Для получения нужного цвета достаточно вызвать функцию Color(red,green,blue,alpha) , в которой все аргументы необходимо задать числами из интервала (0; 1). Например, красный цвет можно получить как Color(1,0,0,1) . |
Помимо перечисленных могут использоваться и более сложные типы, о которых достаточно иметь общее представление:
List |
Список объектов. |
IStyle |
Стиль объекта (совокупность данных, отвечающих за внешний вид объекта на экране – цвет, размер и т.д.). |
RichText |
Форматированный текст (к этому типу относятся, например, подписи к объектам). |
ICanvasObject |
Объект листа (точка, линия, кнопка, параметр и т.д.). |
IGlue |
Связь (определяет степень свободы объекта). |
IWorkbook |
Книга (документ, состоящий из листов). |
ISheet |
Лист. |
IFrameObject |
Фрейм (окно внутри листа со своей системой координат). |
ISpace |
Система координат (своя для каждого фрейма). |
Теперь рассмотрим некоторые наиболее важные типы объектов, использующихся в чертежах, вместе с их свойствами и методами.
Точка
Точка – это самый элементарный геометрический объект, который характеризуется своим местоположением, степенью свободы (свободная точка на плоскости, точка на линии, точка на пересечении линий, результат геометрического преобразования и т.д.) и внешним видом (размер, цвет).
За расположение точки P на плоскости отвечает свойство vector , имеющее тип Vector2D . Чтобы переместить свободную точку P, достаточно присвоить этому свойству новое значение. Для связанных точек (например, для точки на кривой) такое присвоение не работает. В этом случае следует использовать метод move :
Название свойства или метода |
Описание |
Vector2D vector |
Радиус-вектор точки P (изменять свойство vector можно только у свободных точек) |
Vector2D move(Vector2D) |
Перемещает точку P на заданный вектор (действует на свободные точки и точки на линиях) |
Например:
P.vector = Vector2D(0,0) – перемещает свободную точку P в начало координат;
P.vector = Q.vector – совмещает точку P с точкой Q;
P.move(Vector2D(1,0)) – перемещает свободную точку P на 1 по оси абсцисс.
Любой лист представляет собой «слоёный пирог»: каждый объект хранится в своём слое; слои пронумерованы целыми числами; чем больше номер слоя, тем он ближе к наблюдателю. Узнать, в каком слое находится точка, и переместить её в другой слой можно с помощью свойства ZOrder:
int ZOrder |
Номер слоя, в котором находится точка P. |
Пусть, например, все точки находятся в слое 10 (так оно и есть по умолчанию). Тогда:
P.ZOrder = 9 – отодвигает точку P на задний план;
P.ZOrder = 11 – выдвигает точку P на передний план.
Подпись точки хранится в свойстве label , которое имеет тип RichText :
RichText label |
Подпись к точке P. |
Например:
P.label = Q.label – делает у точки P такую же подпись, как и у точки Q.
Один из наиболее сложных приёмов программирования в скрипте, позволяющий изменить поведение точки, – изменение свойств связи, в которой она участвует. Для этого используется свойство glue :
IGlue glue |
Связь, в которой участвует точка P и которая делает её несвободной (например, заставляет оставаться на линии или пересечении линий; являться результатом геометрического преобразования и т.д.). |
Набор свойств самой связи зависит от её типа:
ICanvasObject glue.owner |
Для любого типа связи её владелец, т.е. непосредственно тот объект, который ею «связан». |
IParametricCurveObject glue.curve |
Для связи типа «точка на линии» – ссылка на кривую, на которой расположена точка P. |
double glue.parameter |
Для связи типа «точка на линии» – значение параметра точки P на кривой (параметр задаёт положение точки на кривой). |
Пусть, например, нам нужно переместить точку P с одного отрезка на другой – c S1 на S2:
P.glue.curve = S2 – перемещает точку P на отрезок S2;
P.glue.curve = S1 – возвращает точку P на отрезок S1.
Совокупность свойств, задающих внешний вид точки (и любого другого объекта), называется её стилем. Хранится стиль в свойстве style :
IStyle style |
Стиль точки P. |
Работать с внешним видом точки позволяют следующие свойства стиля:
Color style.fillingColor |
Цвет заполнения точки P. |
Color style.color |
Цвет контура точки P. |
int style.size |
Размер точки P в пикселях. |
Например:
P.style.fillingColor = Color(1,0,0,1) – окрашивает точку в красный цвет;
P.style.size = P.style.size +1 – увеличивает размер точки на 1 пиксель.
Линия
Любая линия (прямая, отрезок, вектор, луч, окружность, дуга, коника, траектория, график функции) – одномерный объект, поэтому положение точки на линии задаётся одним числовым параметром. С другой стороны, все линии располагаются на плоскости, где положение точки задаётся двумя числовыми координатами. Связь между «одномерной» координатой на линии и «двумерными» координатами на плоскости осуществляют два метода:
double toParametric(Vector2D) |
Преобразует координаты радиус-вектора в параметр на линии (если радиус-вектор не лежит на линии, то находится ближайшая к нему точка). |
Vector2D toCoordinate(double) |
Преобразует числовой параметр на линии в координаты радиус-вектора. |
Стилевыми характеристиками линии являются её цвет и тип отрисовки (сплошная, пунктирная и т.д.). За это отвечают следующие свойства стиля:
Color style.color |
Цвет линии. |
LineType style.lineType |
Тип линии. Возможны следующие типы:
LineType.NORMAL – обычная;
LineType.THICK – жирная;
LineType.DASHED – штриховая;
LineType.DOTTED – пунктирная;
LineType.THICK_DOTTED – жирная пунктирная;
LineType.DASHDOTTED – штрих-пунктирная;
LineType.THICKER – утолщенная;
LineType.THICKER_DOTTED – утолщенная пунктирная.
|
Внутренность многоугольника
Положение внутренности многоугольника полностью определяется набором вершин (в порядке обхода), поэтому основные свойства внутренности многоугольника связаны с вершинами:
List points |
Возвращает список из элементов Vector2D – координат вершин многоугольника. |
List glue.points |
Возвращает список из элементов Point – точек (как объектов чертежа), являющихся вершинами (обратите внимание, что мы обращаемся сначала к свойству glue , а потом у него вызываем points ) |
Vector2D center |
Возвращает координаты центра тяжести многоугольника. |
Пусть M – многоугольник. Тогда:
var P = M.glue.points;
P.vector = Vector2D(0,0) – перемещает первую вершину многоугольника в начало координат;
for(i=0;i<P.length;i++) {P[i].move(Vector2D(1,1))} – переносит весь многоугольник на вектор (1, 1).
Внешний вид внутренности многоугольника определяется цветом границы и цветом заливки области:
Color style.borderColor |
Цвет границы. |
Color style.color |
Цвет заливки. |
boolean style.drawBorder |
Рисуется или нет граница. |
boolean style.fill |
Рисуется или нет заливка. |
Параметр
Главными характеристиками параметра является его текущее значение, а также диапазон, в котором это значение может изменяться. За это отвечает следующий набор методов:
double getValue() |
Возвращает текущее значение параметра. |
void setValue(double) |
Задаёт текущее значение параметра. |
double getMaxValue() |
Возвращает максимальное значение параметра. |
void setMaxValue(double) |
Задаёт максимальное значение параметра. |
double getMinValue() |
Возвращает минимальное значение параметра. |
void setMinValue(double) |
Задаёт минимальное значение параметра. |
Например:
P.setValue(13) – задает значение параметра P равным 13;
P.setValue(P.getValue()+1) – увеличивает значение параметра P на 1.
Кнопка
Главное назначение любой кнопки – инициировать выполнение каких-то действий, которые чаще всего задаются скриптом, т.е. небольшой программой, написанной на языке JavaScript. Скрипт хранится в свойстве script строкового типа. Интересно, что сам этот скрипт можно изменять в другом скрипте с помощью метода setJavaScript:
String script |
Текст скрипта, выполняемого кнопкой. |
void setJavaScript(String) |
Задаёт текст скрипта, выполняемого кнопкой. |
Пусть, например, у нас есть кнопка B, в скрипте которой всего одна команда:
alert("Спасибо!");
Каждый раз при нажатии на B выскакивает окно «Спасибо!» Добавим к тексту скрипта ещё одну строчку:
B.setJavaScript("");
Теперь только первое нажатие вызовет появление окна. После этого скрипт очистится, и больше окно вызываться не будет.
Кнопку, как и все другие объекты чертежа, можно двигать и получать информацию о её расположении:
Vector2D location |
Координаты кнопки (точнее, её верхнего левого угла). |
void move(Vector2D) |
Перемещает кнопку на заданный вектор. |
Также можно изменять внешний вид кнопки, обращаясь к соответствующим свойствам стиля:
Color style.color |
Цвет шрифта. |
Color style.borderColor |
Цвет границы. |
Color style.backgroundColor |
Цвет заливки. |
int style.height |
Высота кнопки. |
int style.width |
Ширина кнопки. |
Книга (workbook)
Книга – это открытый в данный момент документ, содержащий один или несколько листов с чертежами. В любой момент один из листов книги является активным (нумерация листов начинается с 0).
ISheet activeSheet |
Ссылка на активный лист. |
ISheet removeSheet(int); |
Удаляет лист с указанным номером из книги. |
void clear(); |
Удаляет из книги все листы и создаёт после этого один чистый лист. |
Например:
workbook.аctiveSheet = 0 – переходит к первому листу.
Лист (sheet)
Книга состоит из листов, на каждом из которых можно строить свой независимый чертёж. Как правило, все, что нужно знать о листе, – это его размеры. Для этого можно воспользоваться свойствами:
IFrameObject rootFrame |
Корневой фрейм (см. ниже) листа. |
Vector2D viewTopLeftCorner |
Координаты верхнего левого угла листа. |
Rectangle2D logicalCanvasBounds |
Границы видимой области листа |
Фрейм (frame)
Фрейм – окно внутри листа, имеющее свою собственную систему координат и хранящее все построенные в этой системе объекты. Каждый лист имеет по крайней мере один корневой фрейм, внутри которого по умолчанию и происходят все построения.
Rectangle2D frameBounds |
Границы фрейма в виде прямоугольника. |
Vector2D location |
Местоположение фрейма. |
ISpace space |
Система координат фрейма. |
List objects |
Список всех объектов (точек, линий, кнопок и т.д.), содержащихся во фрейме. |
Система координат (space)
Каждый фрейм имеет свою систему координат со своим началом, осями, масштабом и т.д. Методы системы координат позволяют легко переходить от экранных координат к координатам внутри фрейма и обратно:
Vector2D toLogical(Point2D) |
Преобразует соответствующий аргумент (точку, прямоугольник и т.д.) из экранных координат в координаты фрейма. |
Vector2D toLogical(double,double) |
Rectangle2D toLogical(Rectangle2D rect) |
Point2D toScreen(Vector2D) |
Преобразует соответствующий аргумент (точку, прямоугольник и т.д.) из координат внутри фрейма в экранные координаты. |
Point2D toScreen(double,double) |
Rectangle2D toScreen(Rectangle2D); |
Случайное испытание (randomsample)
Случайное испытание управляется обычно
плеером испытаний,
но можно получить доступ к его методам и из скрипта.
void randomize() |
Проводит очередное случайное испытание. |
float value(int) |
Возвращает значение элемента случайного испытания с указанным номером. |
Например:
Пусть R - случайное испытание, состоящее в подбрасывании двух кубиков. Тогда:
R.randomize() – производит очередное "подбрасывание" кубиков;
n0 = R.value(0) – возвращает число очков, выпавшее на первом кубике;
n1 = R.value(1) – возвращает число очков, выпавшее на втором кубике.
Плеер случайных испытаний (randomplayer)
Плеер случайных испытаний управляет поведением
случайных испытаний и других объектов.
Включать и выключать плеер можно из скрипта.
void play(true) |
Запускает серию испытаний до момента остановки плеера. |
void refresh() |
Останавливает плеер и сбрасывает все результаты. |
void stop() |
Приостанавливает плеер. |
void step(1) |
Инициирует один шаг работы плеера. |
|