Поезд (Train)

Поезд (или состав) представляет собой последовательность нескольких сцепленных друг с другом железнодорожных вагонов, которые могут двигаться по железнодорожному узлу и управляться диаграммами процессов, собранными из объектов Железнодорожной библиотеки и Библиотеки моделирования процессов. Основными агентами, с которыми вы будете иметь дело при создании железнодорожных моделей, будут не вагоны (агента типа RailCar), а поезда (агенты типа Train). Если вагон является частью Train, то он полностью управляется этим поездом, и не будет управляться большинством низкоуровневых команд, таких, как setSpeed() или couple().

Поезда создаются объектами TrainSource, а уничтожаться из модели должны объектами TrainDispose. Поезд может быть разделен на два поезда объектом  TrainDecouple, а два поезда, в свою очередь, могут быть сцеплены в один поезд, с помощью объекта TrainCouple. Управление перемещением поездов по железнодорожному узлу производится объектами TrainMoveTo. Поезда могут проходить через любые объекты Библиотеки моделирования процессов, такие, как Delay, Seize, Release и т.д.

Вагоны в составе упорядочены, и у состава всегда есть первый и последний вагоны (если в составе всего один вагон, то он является одновременно и первым и последним). На момент создания поезда все вагоны направлены в соответствии с тем, как направлен поезд, но позднее направление вагонов может измениться в результате сцепления/расцепления. Длина поезда (длина части пути, занимаемой этим поездом) равняется сумме длин всех его вагонов.

В Железнодорожной библиотеке нет понятия локомотива, или каких-то других типов вагонов: все железнодорожные вагоны рассматриваются как одинаковые. Любой поезд может двигаться с любой скоростью, сцепляться и расцепляться с любой своей стороны.

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


Поезд в 3D анимации

Чтобы создать нестандартный тип поезда

  1. Перетащите элемент Тип поезда из палитры Железнодорожной Библиотеки в графический редактор. 

  2. Появится диалоговое окно Создание агентов
  3. На первой странице Мастера, укажите Имя нового типа поездов. Нажмите Далее.

  4. Укажите параметры для этого типа поезда. Щелкните мышью кнопку < добавить... > в списке параметров, чтобы добавить новый параметр. Выделив этот параметр в списке, вы можете настроить его имя, тип и значение по умолчанию в настройках на панели справа. Чтобы удалить параметр, щелкните кнопку .

  5. Щелкните Готово.

Откроется графическая диаграмма только что созданного типа поезда с заданными вами в Мастере создания нового типа агента  параметрами.


Вы можете использовать этот тип поезда в блоках диаграммы, например, в параметрах TrainSource:


Функции

Содержимое и размерности поезда

int size() - Возвращает количество вагонов в поезде.

double getLength() - Возвращает длину поезда (сумму длин всех вагонов), в метрах.

boolean isEmpty() - Проверяет, не пуст ли поезд, т.e. содержит ли он вагоны. Возвращает true, если он пуст; false, если нет.

Agent getFirst() - Возвращает первый вагон поезда (если поезд пустой, то возвращает null).

Agent getLast() - Возвращает последний вагон поезда (если поезд пустой, то возвращает null).

Agent getCar( int i ) - Возвращает вагон с заданным индексом i. Индекс первого вагона равен 0, последнего: size()-1.
        Параметр: i - номер вагона

Скорость и ускорение

void setCruiseSpeed( double speed ) - Задает крейсерскую скорость поезда (значение должно быть больше 0).
        Параметр: speed - новая крейсерская скорость поезда, в м/с.

double getCruiseSpeed() - Возвращает крейсерскую скорость поезда, в м/с.

void setAcceleration( double acceleration ) - Задает ускорение поезда (значение должно быть больше 0).
        Параметр: acceleration - новое ускорение поезда, в м/с2.

double getAcceleration() - Возвращает ускорение поезда, в м/с2.

void setDeceleration( double deceleration ) - Задает торможение поезда (значение должно быть больше 0).
        Параметр: deceleration - новое торможение поезда, в м/с2.

double getDeceleration() - Возвращает торможение поезда, в м/с2.

Управление движением

Route getRoute() - Возвращает маршрут, по которому в данный момент движется поезд (если такой есть). Маршрут существует только до тех пор, пока поезд управляется объектом TrainMoveTo

boolean isMoving() - Проверяет, движется ли поезд в текущий момент времени. Пустой поезд понимается как недвигающийся. Возвращает true, если поезд движется; false, если нет.

Agent getHeadCar() - Возвращает вагон, находящийся в голове движущегося поезда (это может быть как первый, так и последний вагон состава), или null, если поезд не движется. 

Agent getTailCar() - Возвращает вагон, находящийся в хвосте движущегося поезда (это может быть как первый, так и последний вагон состава), или null, если поезд не движется. 

void setSpeed( double v ) - Задает новую скорость поезда, в м/с. Если поезд движется, то новая скорость применяется мгновенно. Если поезд не движется, то значение скорости просто запоминается, но движение при этом не начинается. Во время движения поезда нельзя задать скорость равной нулю.  Отменяет все ускорения/торможения, за исключением конечного торможения при подъезде поезда к точке назначения.
        Параметр: v - новая скорость поезда, в м/с.

double getSpeed() - Возвращает скорость поезда, в м/с. Если поезд пустой, то возвращает 0.

void accelerateTo( double speed ) - Ускоряет или тормозит поезд до достижения заданной скорости. Функция может быть вызвана только во время движения поезда. Не изменяет крейсерскую скорость. Использует текущие настройки для ускорения/торможения. С помощью этого метода нельзя осуществлять торможение до нуля, поскольку управление остановкой поезда осуществляется объектом TrainMoveTo (используйте опцию торможение при окончании движения). Отменяет все ускорения/торможения, за исключением конечного торможения при подъезде поезда к точке назначения.
        Параметр: speed - новая желаемая скорость, в м/с.

boolean getDirection() - Проверяет, движется ли в голове поезда первый вагон этого состава. Возвращает true, если первый вагон движется в голове;  false - если нет

RailwayTrack getTrack( boolean front ) - Возвращает путь (ломаную), где в текущий момент находится заданная граница поезда.
        Параметр: front - если true, то под границей понимается несцепленный торец первого вагона, если false - то последнего

double getOffset( boolean front ) - Возвращает смещение заданной границы поезда (см. параметр front) относительно начальной точки пути, в метрах. 0 соответствует началу пути.
        Параметр: front - если true, то проверяется несцепленный торец первого вагона, если false - то последнего

boolean getOrientation( boolean front ) - Проверяет, соответствует ли направление поезда направлению пути, на котором находится заданная граница поезда (см. параметр front), т.e. соответствует ли направление “от конца к началу поезда” направлению “от начала к концу пути”. Возвращает true, если направления совпадают, false - если нет.
        Параметр: front - если true, то проверяется несцепленный торец первого вагона, если false - то последнего

boolean isForwardOnTrack( boolean front ) - Проверяет, движется ли поезд по направлению к концу того пути, на котором находится заданная граница (см. параметр front) этого поезда.
        Параметр: front - если true, то проверяется несцепленный торец первого вагона, если false - то последнего

RailwayTrack getTargetTrack() - Возвращает путь назначения движущегося поезда (если цель не задана, то возвращает null).

double getTargetOffset() - Возвращает смещение от начала пути назначения до цели движения на нем (при условии, что цель задана) для движущегося поезда, в метрах.

double getDistanceToTarget() - Возвращает расстояние от текущего местоположения до точки назначения, в метрах. Подразумевается, что поезд движется вдоль маршрута (заданного пользователем или вычисленного автоматически), и цель движения задана.

double getDistanceDriven() -  Возвращает расстояние (в метрах), которое проехал поезд с момента своего создания (или последнего вызова метода resetDistanceDriven(), если такой был).

void resetDistanceDriven() - Устанавливает расстояние, пройденное поездом, равным нулю.

Разное

RailwayNetwork getRailYard() - Возвращает железнодорожный узел, на котором в данный момент находится поезд. Если поезд пустой, то возвращает null.

void highlight( boolean yes ) - Выделяет или снимает выделение с фигуры поезда на анимации.
        Параметр: yes - если true, то поезд будет выделен, если false, то выделение будет снято