Холст

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

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

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

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

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

Демо модель: Wandering Elephants

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

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

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

Свойства

Основные

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функции

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

Рисуем на холсте

Функция

Описание

fillRectangle
(double x, double y,
double width, double height, java.awt.Paint color) 

Заполняет прямоугольник на холсте заданным цветом, сохраняя прозрачность.

Параметры:
x - x-координата верхнего левого угла прямоугольника
y - y-координата верхнего левого угла прямоугольника
width - ширина прямоугольника
height - высота прямоугольника
color - цвет (или текстура), который необходимо применить

fillCircle
(double cx, double cy,
double radius,
java.awt.Paint color) 

Заполняет круг на холсте заданным цветом, сохраняя прозрачность.

Параметры:
cx - x координата центра круга
cy - y координата центра круга
radius - радиус круга
color - цвет (или текстура), который необходимо применить

void setGlobalCompositeOperation(String type)
Задает тип (type типа String) вывода новой фигуры на холст и комбинирования ее с уже существующими фигурами.

Допустимые типы:
  • “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” - оставляет цвет и насыщенность нижнего слоя, принимая яркость верхнего слоя.

Параметр:
type - тип комбинирования, который будет применяться ко всем новым фигурам.

Очистка холста

Функция

Описание

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, то не виден

Точки внутри фигуры

Функция

Описание

boolean contains(double px, double py)

Возвращает true, если холст содержит точку с заданными координатами (относительно верхнего левого угла).

Параметры:
px - координата x относительно содержимого холста
py - координата y относительно содержимого холста

Point randomPointInside()

Возвращает произвольно выбранную точку внутри холста.

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

Point randomPointInside
(java.util.Random rng)

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

Параметр: rngгенератор случайных чисел


См. также

 Перемещение фигуры

 Изменение размера фигуры

 Вращение фигуры

 Изменение уровня расположения фигуры при наложении фигур