AnyLogic
Развернуть
Размер шрифта

Холст

Холст представляет собой прямоугольную область, в которой можно рисовать посредством вызова соответствующих функций. Отображаемые на холсте фигуры могут образовывать статичные или динамичные изображения (если фигуры рисуются во время выполнения модели). Это позволяет использовать холст для создания тепловых карт интенсивности (подобных карте плотности пешеходов AnyLogic). Другим типичным случаем использования холста AnyLogic является анимация пространственного распределения (к примеру, эпидемии, загрязнения, жилищного строительства).

Холст представляет собой растровое изображение, которое передается напрямую на холст HTML5. В отличие от векторной графики, фигуры, нарисованные на холсте, являются частью растрового изображения, и поэтому доступ к ним невозможен. Изначально созданный холст прозрачен.

Холст отображается только в двумерной анимации.

Типичные случаи использования

Чтобы более детально разобрать применение холста, посмотрите на модель, представленную ниже.

Демо-модель: Wandering Elephants Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

В указанной модели холст используется для двух целей:

  • Создание карты высот — холст рисуется однократно и представляет собой статичное изображение.
  • Создание карты растительности — изображение на холсте постоянно обновляется путем изменения цвета избранных фигур. Код, обновляющий изображение, находится в свойстве Действие при отрисовке группы canvasDrawGroup (в разделе свойств Специфические).

Так как со стандартными фигурами презентации работать значительно проще (в виду возможности индивидуального доступа к каждой фигуре), мы рекомендуем использовать холст только в случае плохой производительности анимации вашей модели.

Чтобы добавить холст на презентацию

  1. Перетащите элемент Холст из палитры Презентация в графический редактор.
  2. Появится прямоугольная фигура с сеткой внутри.
    Сетка используется исключительно для отображения области холста. Количество ячеек не имеет значения.

  3. Добавив холст в графический редактор, задайте, что именно должно быть на нем нарисовано, с помощью функций (см. секции Рисуем на холсте и Очистка холста).

Свойства

Основные

Имя — Имя фигуры. Имя используется для идентификации и обращения к фигуре из кода.

Исключить — Если опция выбрана, то фигура будет исключена из модели.

Отображается на верхнем агенте — Если опция выбрана, то фигура будет видна на презентации типа агента, в который вложен данный агент.

Значок — Если опция выбрана, то фигура будет считаться частью значка типа агента.

Блокировать — Если опция выбрана, то фигура будет считаться заблокированной и не будет реагировать на щелчки мыши. Таким образом, вы не сможете выбрать заблокированную фигуру в графическом редакторе до тех пор, пока вы не снимете с нее блокировку.
Обычно это требуется, когда у вас есть какой-то фоновый рисунок, используемый как подложка для анимации, и вы хотите исключить возможность случайного редактирования этого фонового рисунка при рисовании фигур поверх него.

Видимость — Здесь указывается, будет ли фигура отображаться на анимации во время исполнения модели. Выберите да или нет, используя элемент управления. Если вам нужно, чтобы видимость динамически изменялась или зависела от каких-либо условий, вы можете указать здесь выражение, задающее видимость фигуры. Это выражение будет динамически вычисляться во время исполнения модели. Оно должно возвращать логическое (булевское) значение. Фигура отображается в том случае, когда указанное выражение возвращает истинное значение, в противном случае фигура не видна.

Местоположение и размер

Уровень — Уровень, на котором расположен этот элемент.

X — x-координата верхнего левого угла фигуры.

Y — y-координата верхнего левого угла фигуры.

Ширина — Ширина фигуры (в пикселях).

Высота — Высота фигуры (в пикселях).

Поворот — Угол поворота фигуры в плоскости XY (в пикселях).

Специфические

Отображать в — Выбрана опция Только в 2D, при этом редактирование параметра недоступно, так как холст не может отображаться в трехмерной анимации.

Отображать имя — Если опция выбрана, то имя фигуры будет отображаться в графическом редакторе.

Действие по щелчку — Код, который будет выполняться при каждом щелчке пользователя мышью по фигуре во время выполнения модели. Если в точке щелчка несколько фигур наслаиваются друг на друга, действие должно быть задано для той фигуры, которая находится на самом верху.

Локальные переменные:
self — сам элемент
clickx — x-координата щелчка относительно координат фигуры
clicky — y-координата щелчка относительно координат фигуры

Функции

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

Рисуем на холсте
Функция Описание
fillRectangle(double x, double y, double width, double height, Paint color) Заполняет прямоугольник на холсте заданным цветом, сохраняя прозрачность.

x — x-координата верхнего левого угла прямоугольника
y — y-координата верхнего левого угла прямоугольника
width — ширина прямоугольника
height — высота прямоугольника
color — цвет (или текстура), который необходимо применить
fillCircle(double cx, double cy, double radius, Paint color) Заполняет круг на холсте заданным цветом, сохраняя прозрачность.

cx — x координата центра круга
cy — y координата центра круга
radius — радиус круга
color — цвет (или текстура), который необходимо применить
void setGlobalCompositeOperation(String type) Задает способ (type типа String) вывода новой фигуры на холст и комбинирования ее с уже существующими фигурами.

type — тип комбинирования, который будет применяться ко всем новым фигурам. Допустимые типы:
"source-over" — Используется по умолчанию, создает новые фигуры поверх существующих.
"source-in" — Отображается часть фигуры, только в том месте, где новая и старая фигуры накладываются друг на друга. Остальные части фигур невидимы.
"source-out" — Отображается та часть новой фигуры, которая не пересекается с уже существующими фигурами.
"source-atop" — Отображается та часть новой фигуры, которая пересекается с уже существующими фигурами.
"destination-over" — Новые фигуры создаются позади уже существующих фигур.
"destination-in" — Отображается та часть существующей фигуры, которая пересекается с новой. Остальные части фигур невидимы.
"destination-out" — Отображается часть существующей фигуры в месте, где она не пересекается с новой.
"destination-atop" — Отображается часть существующей фигуры в месте пересечения с новой. Новая фигура рисуется за существующей.
"lighter" — Цвет в месте пересечения фигур смешивается, образуя новый оттенок путем сложения значений цветов.
"copy" — Отображается только новая фигура.
"xor" — Фигуры отображаются прозрачными в месте пересечения. Остальные части отображаются нормально.
"multiply" — Значения цветов в месте пересечения фигур перемножаются. В результате изображение затемнено.
"screen" — Значения цветов в месте пересечения фигур инвертируются, перемножаются и инвертируются снова. В результате изображение становится светлей (эффект, обратный типу "multiply").
"overlay" — Комбинация типов "multiply" и "screen". Темные области на основном слое становятся темней, светлые области становятся светлей.
"darken" — Оставляет самые темные пиксели обоих слоев.
"lighten" — Оставляет самые светлые пиксели обоих слоев.
"color-dodge" — Делит значение цвета нижнего слоя на значение инвертированного цвета верхнего слоя.
"color-burn" — Делит значение инвертированного цвета нижнего слоя на значение цвета верхнего слоя, после чего инвертирует результат.
"hard-light" — Комбинация типов "multiply" и "screen" (как "overlay"), но при этом верхний и нижний слой меняются местами.
"soft-light" — Смягченная версия типа "hard-light". Полностью черный или полностью белый не преобразуется в черный или белый.
"difference" — Вычитает нижний слой из верхнего, или наоборот, чтобы всегда получать положительное значение.
"exclusion" — Такой же тип, как и "difference", но с меньшим контрастом.
"hue" — Оставляет яркость и насыщенность нижнего слоя, принимая цвет верхнего слоя.
"saturation" — Оставляет яркость и цвет нижнего слоя, принимая насыщенность верхнего слоя.
"color" — Оставляет насыщенность нижнего слоя, принимая цвет и яркость верхнего слоя.
"luminosity" — Оставляет цвет и насыщенность нижнего слоя, принимая яркость верхнего слоя.
Очистка холста
Функция Описание
void clear() Очищает весь холст (холст станет полностью прозрачным).
void clearRectangle(double x, double y, double width, double height) Очищает прямоугольник на холсте (прямоугольник станет полностью прозрачным).

x — x-координата верхнего левого угла прямоугольника
y — y-координата верхнего левого угла прямоугольника
width — ширина прямоугольника
height — высота прямоугольника

Местоположение
Функция Описание
double getX() Возвращает X координату холста (а именно, координату его верхнего левого угла).
double getY() Возвращает Y координату холста (а именно, координату его верхнего левого угла).
void setX(double x) Задает X координату холста (а именно, координату его верхнего левого угла).

x — новое значение координаты X
void setY(double y) Задает Y координату холста (а именно, координату его верхнего левого угла).

y — новое значение координаты Y
void setPos(double x, double y) Задает новое местоположение холста (а именно, координаты его верхнего левого угла).

x — новое значение координаты X верхнего левого угла холста
y — новое значение координаты Y верхнего левого угла холста
void setPos(Point p) Задает новое местоположение холста.

p — объект Point содержит новые значения координат верхнего левого угла холста
Размер, масштаб
Функция Описание
double getWidth() Возвращает ширину холста.
double getHeight() Возвращает высоту холста.
void setWidth(double width) Задает новое значение ширины холста.

width — новое значение ширины
void setHeight(double height) Задает новое значение высоты холста.

height — новое значение высоты
double getScaleX()
double getScaleY()
Возвращает масштаб холста по оси координат X (Y).
void setScaleX(double sx)
void setScaleY(double sy)
Задает масштаб холста по оси координат X (Y).

sx — новое значение масштаба по оси X
sy — новое значение масштаба по оси Y

Если параметр равен 1, то холст сохраняет изначальный размер по соответствующей оси.

void setScale(double sx, double sy) Устанавливает одинаковый масштаб холста по обеим осям координат, X и Y.

sx — новое значение масштаба по оси X
sy — новое значение масштаба по оси Y

Если параметр равен 1, то холст сохраняет изначальный размер по соответствующей оси.

void setScale(double s) Устанавливает одинаковый масштаб холста по обеим осям координат, X и Y.

s — новое значение масштаба по обеим осям координат.

Если параметр равен 1, то холст сохраняет изначальный размер.

Поворот
Функция Описание
double getRotation() Возвращает угол поворота холста в радианах по часовой стрелке.
void setRotation(double r) Задает новый угол поворота холста.

r — новое значение угла поворота холста в радианах
Видимость
Функция Описание
boolean isVisible() Проверяет видимость холста. Если фигура видна, то возвращает true; если нет — то false.
void setVisible(boolean v) Устанавливает видимость холста.

v — видимость: если true, то холст виден; если false, то не виден
Режим отображения (2D / 3D)
Функция Описание
ShapeDrawMode getDrawMode() Возвращает режим отображения фигуры (где ее рисовать: в 2D, 3D или 2D+3D анимации). Поскольку холст может отображаться только в 2D анимации, возвращает SHAPE_DRAW_2D.
Группа
Функция Описание
ShapeGroup getGroup() Возвращает группу, содержащую эту фигуру.
Уровень
Функция Описание
Level getLevel() Возвращает уровень, на котором находится эта фигура.
Точки внутри фигуры
Функция Описание
boolean contains(double px, double py) Возвращает true, если холст содержит точку с заданными координатами (относительно верхнего левого угла).

px — координата x относительно содержимого холста
py — координата y относительно содержимого холста
Point randomPointInside() Возвращает произвольно выбранную точку внутри холста. Эта функция использует генератор случайных чисел объекта, содержащего эту фигуру. (Сгенерирует исключение, если фигура была создана из кода и не включена ни в какую из групп, в таком случае используйте функцию randomPointInside(Random rng)).
Point randomPointInside(java.util.Random rng) Возвращает произвольно выбранную точку на холсте. Эта функция использует не стандартный, а заданный пользователем генератор случайных чисел.

rng — генератор случайных чисел
Как мы можем улучшить эту статью?