Анимация объектов Основной библиотеки

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

Есть несколько типов анимации или так называемых «аниматоров» – способов отображения заявок, которыми владеют активные объекты. Некоторые аниматоры могут быть применены почти ко всем активным объектам; некоторые – специально разработаны для конкретных классов, таких как Conveyor. Объекты, которые могут владеть заявкой только в течение нулевого времени (например, SelectOutput, Dropoff, Release, Split, и т.д.) не имеют аниматоров. Если возможно использование нескольких аниматоров, то тип аниматора, как и фигура анимации объекта, должен быть указан в специальном параметре объекта.

Есть пять типов анимации (они заданы константами класса Animator):

Одиночная

Применим к: Batch, Combine, Delay, Match, Service, Queue, ResourcePool, Seize.
Тип фигуры: Shape – любая фигура.
Константа: Animator.SINGLE.
Анимация заявки отображается в базовой точке фигуры. Если с помощью этого аниматора будут отображаться анимации сразу нескольких заявок, все они будут отображены в одном и том же месте.

Набор

Применим к: Batch, Delay, Match, Service, Queue, ResourcePool, Seize.
Тип фигуры: ShapePolyLine – ломаная.
Константа: Animator.SET.
Заявки отображаются в точках заданной ломаной линии. Число одновременно отображаемых заявок ограничивается числом точек ломаной линии. Новая заявка будет отображена в первой свободной точке ломаной линии.

Мешок

Применим к: Batch, Delay, Match, Service, Queue, ResourcePool, Seize.
Тип фигуры: ShapeRectangle – прямоугольник.
Константа: Animator.BAG.
Заявки отображаются в случайных позициях внутри заданного прямоугольника (безотносительно других заявок). Этот аниматор может одновременно отображать неограниченное количество заявок.

Упорядоченная

Применим к: Batch, Delay, Match, Service, Queue, ResourcePool, Seize.
Тип фигуры: ShapeRectangle – прямоугольник.
Константа: Animator.ARRANGED.
Анимации заявок упорядоченно отображаются в двумерном массиве внутри заданного прямоугольника. Максимальное количество анимаций заявок (размер массива) задается при инициализации активного объекта (обычно он равен вместимости объекта capacity) и не может быть изменен впоследствии. Новая заявка отображается в первой свободной позиции массива.

Путь

Применим к: Batch, Match, Service(Queue), Queue, Seize, Conveyor, Delay, Service(Delay).
Тип фигуры: ShapePolyLine – ломаная.
Константа: Animator.PATH.
Этот аниматор может одновременно отображать неограниченное количество заявок. Заявки отображаются движущимися вдоль ломаной линии в том же порядке, в каком они располагаются в объеке. При этом заявки могут двигаться на анимации как от начала линии к концу, так и наоборот, в зависимости от выбранного Направления анимации объекта. Анимации заявок будут повернуты на угол поворота первого сегмента ломаной линии.
Обратите Ваше внимание, что различные объекты управляют движением анимаций заявок по-разному:
Batch, Match, Service(Queue), Queue, Seize
Заявка, находящаяся в очереди в нулевой позиции, отображается в конечной точке ломаной. Расстояние между анимациями двух соседних заявок выбирается равным длине ломаной линии, поделенной на вместимость объекта Queue (известной на момент инициализации) capacity - 1. Таким образом, первая заявка удалена на это расстояние от конечной точки линии, вторая заявка – от первой и т.д. Если новая заявка добавляется куда-нибудь в середину очереди, то анимации заявок сдвигаются в соответствии с этим правилом. В случае динамического изменения значения capacity расстояние не пересчитывается. Начало очереди может отображаться как в начале, так и в конце ломаной линии, в зависимости от выбранного Направления анимации объекта.
Delay, Service(Delay)
Заявки двигаются вдоль линии с постоянной скоростью, так что ко времени их выхода из объекта Delay, они покрывают все расстояние от начальной точки линии до конечной. Поскольку времена задержек заявок могут быть разными, то заявки могут иметь различные скорости. Если ширина ломаной линии больше единицы, то заявки могут быть случайно смещены в сторону от ее оси.
Conveyor
Заявки отображаются вдоль ломаной линии в тех же позициях и с теми же скоростями, с которыми они движутся по конвейеру, длина конвейера length при этом проецируется на всю длину ломаной линии.