Руководство пользователя

динамической программной среды «Математический конструктор»

Руководство пользователя > Скриптовый язык

Объекты

Каждый из объектов, располагающихся на листе, имеет уникальный идентификатор (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) Инициирует один шаг работы плеера.

© ООО «1С-Паблишинг», 2007-2021
© ООО «Виртуальная лаборатория», 2009-2021