RailYard

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

Начиная с версии AnyLogic 6.5.1 операционная логика ж/д узла, включая операции создания поездов, управления движением, сцеплением и расцеплением производится объектами диаграммы процесса TrainSource, TrainMoveTo и т.д. Объект RailYard больше не несет ответственность за создание вагонов и обработку событий вагонов, въезжающих на пути и покидающих их и т.д. Но объект RailYard по-прежнему предоставляет низкоуровневый интерфейс для управления железнодорожным узлом, основанный на функциях Java и механизме обратных вызовов. Это обеспечивает совместимость ранее разработанных моделей с новой версией библиотеки, но Вы можете использовать механизм обратных вызовов и для других целей, например, для сбора статистики по движению вагона по всему ж/д узлу.

Основным параметром объекта является параметр Группа фигур – здесь Вы задаете имя нарисованной Вами группы фигур, которая содержит ломаные и круги, задающие пути и стрелки Вашего ж/д узла. Объект RailYard анализирует эту группу и создает сеть соединенных объектов Track (путь) и Switch (стрелка). Если группа фигур содержит фигуры, отображающиеся на 3D сцене, то пути, стрелки и вагоны будут отображаться на 3D анимации (и в 2D тоже), в противном случае - только в 2D. Пожалуйста, обратите внимание, что когда Вы выбираете у группы фигур опцию Отображать на 3D сцене, у всех фигур этой группы Z-Высота автоматически устанавливается равной 10, что может быть нежелательно для фигур анимации ж/д путей. Простейший способ изменения Z-высоты: щелкните правой кнопкой мыши по группе, выберите Выделить содержимое группы из контекстного меню и введите нужное Вам значение в поле Z-Высота на странице свойств Дополнительные.

Обратите внимание, что объект RailYard не будет автоматически отслеживать пересечение нарисованных Вами путей  (т.e. мест, в которых пути пересекают друг друга без наличия стрелки), и предотвращать столкновения поездов в таких местах придется Вам самим. Столкновения же поездов на стрелках будут определяться автоматически, и в таких случаях будут показываться сообщения об ошибках.

Параметры класса

Класс вагона
Класс вагонов, создааемых этим объектом, должен быть подклассом класса RailCar. Если известно, что все вагоны будут являться объектами какого-то одного класса вагона, то имеет смысл указать этот класс здесь, чтобы все его поля и методы были напрямую доступны в параметрах Действие ... этого объекта RailYard.
Синтаксис:  RC extends RailCar
Значение по умолчанию: RailCar
[Обратите внимание, что в описаниях ниже RC будет означать класс, указанный пользователем в поле "Класс вагона". Если пользователь не изменит введенное там по умолчанию значение, то RC будет означать RailCar.]

Параметры

Группа фигур

Группа фигур, задающая конфигурацию ж/д узла. Группа должна содержать ломаные и круги, которые будут задавать пути и стрелки соответственно. Подробнее о задании топологии ж/д узла написано здесь. Если группа содержит отображающиеся на 3D сцене фигуры, то ж/д узел будет отображаться на 3D анимации (так же, как и на 2D), если нет - то только на 2D.

Группа может не быть задана (равна null), тогда инициализация ж/д узла откладывается. Чтобы изменить конфигурацию узла, Вы должны изменить этот параметр путем вызова метода set_railYardShapes( newGroup ). Чтобы удалить текущую конфигурацию, вызвать set_railYardShapes( null ). Чтобы обновить конфигурацию, заданную все той же группой фигур, нужно вначале установить эту группу равной null, а затем снова выбрать ту же группу. Изменение конфигурации возможно только в том случае, когда в ж/д узле нет вагонов.

Синтаксис: ShapeGroup railYardShapes

Масштаб, пикселей в метре
Масштаб графики. Начиная с версии AnyLogic 6.5.1 все расстояния, размерности вагонов, скорости и ускорения задаются в метрах, м/с и м/с2 соответственно. Этот параметр задает соответствие безразмерной графики AnyLogic с реальными единицами длины.
Синтаксис: double pixelsPerMeter
Значение по умолчанию: 1
Новый вагон [динамический]
[Устарел, начиная с версии AnyLogic 6.5.1. Создавайте поезда с помощью объекта TrainSource] Здесь Вы можете задать код, который будет выполняться методом addTrain для создания новых вагонов. Если Вы используете какой-то свой класс для задания вагонов, то введенный здесь код должен возвращать объект этого класса. По умолчанию производится вызов общего класса вагона RailCar.
Синтаксис: RC newCar
Значение по умолчанию: new RailCar()
Локальная переменная: int n - номер вагона в поезде, начиная с нуля
Действие при въезде на станцию [динамический]
Здесь Вы можете задать код, который будет выполняться каждый раз, когда вагон будет добавляться на железнодорожный узел.
Синтаксис: void onEnterYard
Локальные переменные: RC car - вагон
                          Track track - путь, по которому вагон въезжает на ж/д узел
             ShapePolyLine trackpolyline - ломаная, задающая этот путь
Действие при выезде со станции [динамический]
Здесь Вы можете задать код, который будет выполняться каждый раз, когда вагон будет покидать железнодорожный узел.
Синтаксис: void onExitYard
Локальные переменные: RC car - вагон
                          Track track - путь, по которому вагон покидает ж/д узел
             ShapePolyLine trackpolyline - ломаная, задающая этот путь
Вызывать onAtSwitch только для первого вагона
Если опция выбрана, то код Действия при приближении к стрелке будет выполняться только для первого вагона состава (или для движущегося отдельно вагона), иначе он будет выполняться для каждого вагона, приближающегося к стрелке (такое поведение принято по умолчанию).
Синтаксис: boolean callAtSwitchForFirstCarOnly
Значение по умолчанию: false
Действие при приближении к стрелке [динамический]
Здесь Вы можете задать код, который будет выполняться каждый раз, когда вагон приблизится к стрелке. В этом коде все еще можно переключать состояние стрелки.
Синтаксис: void onAtSwitch
Локальные переменные: RC car - вагон
                          Track track - путь, по которому вагон приближается к стрелке
             ShapePolyLine trackpolyline - ломаная, задающая этот путь
                          Switch sw - стрелка
                          ShapeOval switchoval - круг, задающий эту стрелку
Действие при въезде на путь [динамический]
Здесь Вы можете задать код, который будет выполняться каждый раз, когда вагон заедет на новый путь (и уже зарегистрирован на нем).
Синтаксис: void onEnterTrack
Локальные переменные: RC car - вагон
                          Track track - путь, на который заехал вагон
             ShapePolyLine trackpolyline - ломаная, задающая этот путь
                          Switch sw - стрелка, через которую вагон въезжает на путь
                          ShapeOval switchoval - круг, задающий эту стрелку
Действие при выезде с пути [динамический]
Здесь Вы можете задать код, который будет выполняться каждый раз, когда вагон полностью покинет путь.
Синтаксис: void onExitTrack
Локальные переменные: RC car - вагон
                          Track track - путь, который покинул вагон
             ShapePolyLine trackpolyline - ломаная, задающая этот путь
                          Switch sw - стрелка, через которую вагон покидает путь
                          ShapeOval switchoval - круг, задающий эту стрелку
Действие при столкновении вагонов [динамический]
Здесь Вы можете задать код, который будет выполняться каждый раз, когда один вагон столкнется с другим вагоном. Код не вызывается для того вагона, в который врезался другой вагон.
Синтаксис: void onHit
Локальные переменные: RC car - вагон
                          boolean frontside - true, если с другим вагоном столкнулась передняя сторона вагона
                          RC other - другой вагон
                          Track track - путь, на котором это произошло
             ShapePolyLine trackpolyline - ломаная, задающая этот путь
Действие при достижении особой точки [динамический]
Здесь Вы можете задать код, который будет выполняться каждый раз, когда вагон достигнет особой точки, заданной методом callbackAt для вагона RailCar.
Синтаксис: void onAtCallback
Локальные переменные: RC car - вагон
                          Track track - путь
             ShapePolyLine trackpolyline - ломаная, задающая этот путь
                          double offset - точка на пути
                         Object info - объект с информацией, который был передан в качестве аргумента метода callbackAt
Действие при щелчке по вагону [динамический]
Здесь Вы можете задать код, который будет выполняться каждый раз, когда пользователь будет щелкать мышью по вагону.
Синтаксис: void onClickCar
Локальная переменная: RC car - вагон
Ширина линии пути
Ширина ломаной линии, отображающей путь, в метрах. Используется только для анимациооных целей.
Синтаксис: double trackLineWidth
Значение по умолчанию: 2
Цвет линии свободного пути
Цвет линии пути, когда на пути нет вагонов.
Синтаксис: Color trackColorEmpty
Значение по умолчанию: slateGray
Цвет линии занятого пути
Цвет линии пути, когда на пути есть вагоны.
Синтаксис: Color trackColorNonEmpty
Значение по умолчанию: lightSteelBlue
Цвет кружка свободной стрелки
Цвет кружка, отображаемого вокруг стрелки, когда на стрелке нет вагона.
Синтаксис: Color switchCircleColorIdle
Значение по умолчанию: lavender
Цвет кружка занятой стрелки
Цвет кружка, отображаемого вокруг стрелки, когда на стрелке есть вагон.
Синтаксис: Color switchCircleColorBusy
Значение по умолчанию: mediumSlateBlue
Цвет линии стрелки
Цвет ломаной, отображающей стрелку.
Синтаксис: Color switchLineColor
Значение по умолчанию: black

Функции

int getNCars() - Возвращает количество вагонов, находящихся на этом железнодорожном узле.

RC getCar( int index ) - Возвращает вагон, находящийся на этом железнодорожном узле и имеющий заданный индекс index. Если такого вагона нет, то возвращает null.

Switch getSwitch( ShapeOval oval ) - Возвращает объект Switch (стрелку) этого железнодорожного узла, соответствующий заданной фигуре (oval). Если такой стрелки нет, то возвращает null.

Track getTrack( ShapePolyLine polyline ) - Возвращает объект Track (путь) этого железнодорожного узла, соответствующий заданной фигуре (polyline). Если такого пути нет, то возвращает null.

void addCar( RC car, Track track, double frontoffset, boolean orientation ) - [Устарела, начиная с версии AnyLogic 6.5.1. Создавайте поезда и вагоны с помощью объекта TrainSource] Добавляет (ранее созданный) вагон в ж/д модель и помещает его на заданный путь (в заданную точку, с заданным направлением). Обе стороны вагона должны находиться на одном и том же пути. Если вагон пересекает другой вагон, находящийся на пути, то выдается сообщение об ошибке.

        Параметры: car - добавляемый вагон
                             track - путь, на который помещается вагон
                             frontoffset - смещение переднего торца вагона от начала пути
                             orientation - если true, то направление вагона (от конца к началу) будет соответствовать направлению пути (от начала к концу)

void addTrain( int n, Track track, double frontoffset, boolean orientation) - [Устарела, начиная с версии AnyLogic 6.5.1. Создавайте поезда и вагоны с помощью объекта TrainSource] Создает состав с заданным количеством вагонов и помещает его на заданный путь в заданную точку с заданным направлением. Для создания вагонов используется модифицированный метод newCar. Все вагоны должны полностью находиться на одном и том же пути. Если поезд пересекает другие вагоны, находящиеся на пути, то выдается сообщение об ошибке.

Параметры: n - количество вагонов в поезде
         track - путь, на который помещается поезд
         frontoffset - смещение переднего торца первого вагона от начала пути
         orientation - если true, то направление поезда (от хвоста к голове) будет соответствовать направлению пути (от начала к концу)

boolean isTrackEmpty( ShapePolyLine trackpoly ) – Проверяет, является ли путь, заданный ломаной trackpoly, пустым (то есть, отсутствуют ли на нем вагоны). Если да, то возвращает true.

int getNCarsOnTrack( ShapePolyLine trackpoly ) –  Возвращает количество вагонов, находящихся на пути, соответствующем заданной ломаной trackpoly.

RailCar getCarOnTrack( ShapePolyLine trackpoly, int index ) –  Возвращает вагон, находящийся на пути, заданном ломаной trackpoly, и имеющий заданный индекс index.

void setSelectedTrack( ShapeOval switchoval, ShapePolyLine trackpoly ) – Выбирает у заданной кругом switchoval стрелки путь, заданный ломаной trackpoly. Путь должен быть путем 1, либо путем 2 этой стрелки.

ShapePolyLine getSelectedTrack( ShapeOval switchoval ) –  Возвращает ломаную, задающую путь, выбранный в текущий момент у стрелки, заданной кругом switchoval.

double pxToMeters( double value ) – Преобразовывает расстояние в пикселах в метры, в соответствии с масштабом ж/д узла.

double metersToPx( double value ) – Преобразовывает расстояние в метрах в пикселы, в соответствии с масштабом ж/д узла.