Класс RailCar является фундаментальным классом, представляющим все виды железнодорожных вагонов и локомотивов.
С точки зрения Железнодорожной библиотеки нет разницы между вагоном и локомотивом или между грузовым и пассажирским вагоном (все они могут двигаться в составе поезда и сами по себе, могут сцепляться, расцепляться и т.д.), но Вы можете сами ввести различия между разлиынми типами вагонов в Ваши модели, как графически, так и логически, например, задав для них различные размерности, присвоив им различные фигуры анимации или же создав для них различные подклассы класса RailCar с различными свойствами и методами.
Начиная с версии AnyLogic 6.5.1 вагоны создаются объектом TrainSource (в составе поездов) и во время всего своего пребывания на ж/д узле полностью управляются поездами. Но при этом поддерживается и использовавшийся ранее низкоуровневый интерфейс для создания вагонов, управления их движением, сцеплением/отцеплением, в основном для совместимости библиотеки с ранее разработанными моделями.
У вагона есть размерности (длина и ширина) и два торца (передний и задний). Длина вагона может быть задана только в момент создания вагона (например, в параметре Длина вагона или в коде параметра Инициализация вагона объекта TrainSource) и не может быть изменена впоследствии.
Вы можете получить информацию о местоположении (пути, направлении на этом пути и смещении от его начала) для любого торца вагона. Вы можете сделать так, что при достижении вагоном определенной точки заданного пути будет вызываться заданный Вами код. В этом коде Вы можете оперировать различной информацией. Эта возможность может быть использована как для остановки, замедления, ускорения вагона, так и для управления определенной частью железнодорожного узла.

Объяснение терминологии на примере заданной по умолчанию 2D анимации вагона
Вагоны могут отображаться как на 2D, так и на 3D анимации.
Заданная по умолчанию 2D фигура анимации вагона представляет собой скругленный прямоугольник заданного цвета (см. рисунок выше); его передняя сторона помечается черной точкой. Если вагон сцеплен, то рисуется и сцепка с другим вагоном. Вы можете выделить вагон на анимации, в этом случае вокруг него будет нарисован круг.
Заданная по умолчанию фигура 3D анимации - параллелепипед. Вы можете изменить цвет этой фигуры с помощью метода setColor(). Вы также можете задать любую другую трехмерную фигуру в качестве фигуры анимации вагона. Готовые к использованию 3D изображения локомотивов и вагонов различных типов Вы можете найти в палитре 3D Объекты.
Обратите внимание, что размер выбранной Вами фигуры анимации вагона не будет автоматически подгоняться под длину вагона в Вашей модели, поэтому Вам может понадобиться выбрать подходящий масштаб в свойствах этой фигуры, чтобы обеспечить отсутствие зазоров между вагонами поезда и предотвратить их наложение друг на друга на анимации.


Заданная по умолчанию (слева) и
определенная пользователем 3D анимация вагонов
Конструкторы и инициализация
RailCar() - Создает новый вагон длиной 10 метров, шириной 4 метра, со скоростью 10 м/с и случайно выбранным цветом.
RailCar( double length
) - Создает новый вагон заданной длины,
шириной 4 метра, со скоростью 10 м/с и случайно
выбранным цветом.
Параметр: length
- длина вагона, в метрах.
RailCar( double
length, double
width
) - Создает новый вагон заданной длины и
ширины, со скоростью 10 м/с и случайно выбранным
цветом.
Параметры: length
- длина вагона, в метрах
width -
ширина вагона, в метрах
void setLength(double
length) - Задает длину вагона.
Может выполняться только до добавления вагона на жезнодорожный узел.
Параметр: length
- длина вагона, в метрах
double getLength() - Возвращает длину вагона, в метрах.
void setWidth( double
width ) - Задает ширину вагона.
Параметр: width
- новая ширина вагона, в метрах
double getWidth() - Возвращает ширину вагона, в метрах.
void setColor( Color
color
) - Задает цвет вагона. Хотя цвет всегда хранится в
объекте RailCar, он
применяется только к заданной по умолчанию анимации.
Параметр: color
- новый цвет
Color getColor() - Возвращает цвет вагона.
void setShape( Shape shape ) - Задает 2D или 3D фигуру, которая будет использоваться для анимации этого вагона.
Shape getShape() - Возвращает фигуру, используемую для анимации этого вагона, или null.
void highlight(
boolean
yes ) - Выделяет вагон на анимации, либо снимает
выделение (в зависимости от значения аргумента).
Параметр: yes
- если true, то вагон
следует выделить, если false
- то снять выделение
boolean isHighlighted()
- Возвращает true,
если вагон выделен на анимации, и false
- если нет.
RailCar getCoupledCar(
boolean infront ) - Возвращает вагон, сцепленный
с этим вагоном с заданного параметром infront
торца. Если с заданной стороны вагон не сцеплен, то
возвращает null.
Параметр: infront
- если true, то
передний
торец, иначе - задний
boolean getDirection() - Возвращает направление движения вагона в данный момент (или его последнего движения). Возвращает true, если направление прямое (передняя сторона движется впереди задней), false - если обратное.
Train getTrain() - Возвращает поезд, которому принадлежит вагон. Если вагон не принадлежит никакому поезду, то функция возвращает null.
boolean isFirst() - Проверяет, является ли данный вагон первым вагоном в последовательности сцепленных вагонов (которые могут и не образовывать объект Train), т.e. не движутся ли перед ним прицепленные вагоны. Если вагон не движется, то результат неопределен. Возвращает true, если это первый вагон состава (или отдельный вагон), false - в противном случае.
boolean isLast() - Проверяет, является ли данный вагон последним вагоном в последовательности сцепленных вагонов (которые могут и не образовывать объект Train), т.e. не движутся ли за ним прицепленные вагоны. Если вагон не движется, то результат неопределен. Возвращает true, если это последний вагон состава (или отдельный вагон), false - в противном случае.
double getVelocity() - Возвращает скорость вагона (в метрах в секунду). Положительное значение скорости не обязательно означает, что вагон движется – если вагон стоит, то это значение скорости, с которой вагон поедет, когда его запустят.
Track getTrack(
boolean
infront ) - Возвращает путь, на котором
находится заданный параметром infront
торец вагона.
Параметр: infront
- если true, то
передний
торец, иначе - задний
double getOffset(
boolean
infront ) - Возвращает смещение заданного
параметром infront торца
вагона относительно начала пути (в метрах). Значение 0
соответствует началу пути.
Параметр: infront
- если true, то
передний
торец, иначе - задний
boolean
getOrientation(
boolean infront ) - Проверяет, соответствует ли
направление
вагона направлению пути, на котором находится заданный
параметром infront
торец вагона. Возвращает true, eсли
направление “от конца к началу вагона”
соответствует
направлению “от начала к концу
пути”.
Параметр: infront
- если true, то
передний
торец, иначе - задний
boolean
isForwardOnTrack(
boolean infront ) - Возвращает направление движения вагона
относительно пути, на котором находится заданный параметром infront торец вагона.
Возвращает true, если
направление движения вагона соответствует направлению пути.
Параметр: infront
- если true, то
передний
торец, иначе - задний
boolean isMoving() - Возвращает true, если в текущий момент вагон движется, и false - если нет.
double getX( boolean
infront ) - Возвращает x-координату заданного торца вагона
относительно группы фигур железнодорожного узла, в пикселах.
Параметр: infront
- если true, то
возвращает координату переднего торца, если false
- то заднего
double getY( boolean
infront ) - Возвращает y-координату заданного
торца вагона относительно группы фигур железнодорожного узла, в
пикселах.
Параметр: infront
- если true, то
возвращает координату переднего торца, если false
- то заднего
double getDistanceDriven() - Возвращает расстояние (в метрах), которое проехал вагон с момента своего создания (или последнего вызова метода resetDistanceDriven(), если такой был).
void resetDistanceDriven() - Устанавливает расстояние, пройденное вагоном, равным нулю.
RailYard getRailYard()
- Возвращает железнодорожный узел, на котором в текущий момент
находится вагон.
void callbackAt( Track
track, double offset, Object info ) - Задает для
вагона особую точку, при достижении которой (а именно, когда этой точки
достигнет
движущийся первым торец вагона) будет послан запрос на
выполнение кода, заданный в параметре Действие при
достижении особой точки объекта
RailYard.
Точка задается путем указания пути track
и точки смещения от его начала offset.
Прямо перед выполнением кода
запрос удаляется (хотя в этом коде пользователь может послать еще один
запрос). Каждый новый запрос удаляет сделанный ранее. Вы можете
передать в код любую информацию (Object)
для идентификации типа произошедшего события.
Параметры: track -
путь, для которого следует выполнить код
offset
- смещение (в метрах) от начала пути, при достижении которого
будет выполнен код
info
- произвольный объект с информацией, который будет передан в контекст
выполняемого кода
void callbackAt( Track
track, double offset ) - Аналогична функции callbackAt(
track, null, offset ).
Параметры: track -
путь, для которого следует выполнить код
offset
- смещение (в метрах) от начала пути, при достижении которого
будет выполнен код
void callbackAt( Track
track, ShapeLine line, Object info ) - Аналогична
функции callbackAt( track, offset,
info ), с той разницей, что смещение задается пересечением
пути и заданной линии.
Параметры: track -
путь, для которого следует выполнить код
line
- линия, которая должна пересекать путь в какой-то точке
info
- произвольный объект с информацией, который будет передан в контекст
выполняемого кода
void callbackAt( Track
track, ShapeLine line ) - Аналогична функции callbackAt( track, line, null ).
Параметры: track -
путь, для которого следует выполнить код
line
- линия, которая должна пересекать путь в какой-то точке
Уничтожение
void dispose()- Полностью уничтожает вагон, то есть удаляет его из железнодорожного узла вне зависимости от того, где он находился. Вагон должен не двигаться и не принадлежать поезду Train. Этот метод также вызывается объектом TrainDispose.
Движение
void stop() - Останавливает вагон. Если на момент вызова функции он не двигался, то функция не делает ничего. Вагон должен не принадлежать поезду Train.
void go( boolean
forward )
- Начинает движение вагона (или изменяет его направление).
Значение скорости должно быть положительным.
Параметр: forward
- если true,
то вагон будет двигаться вперед (впереди будет двигаться передний торец
вагона), иначе - в обратном направлении
void couple( boolean
infront ) - Сцепляет вагон с другим вагоном, находящимся
рядом с его торцом, заданным аргументом infront. Вагон должен
не принадлежать поезду Train.
Параметр: если true,
то сцеплять
с передним торцом вагона, иначе - с задним
void decouple( boolean
infront ) - Отцепляет вагон от другого вагона,
находящегося рядом с его торцом, заданным аргументом infront. Если с заданной
стороны вагона он не соединен ни с одним другим вагоном, то будет
выдано сообщение об ошибке. Вагон должен не принадлежать
поезду Train.
Параметр: если true,
то отцеплять
от переднего торца вагона, иначе - от заднего
void setVelocity(
double v
) - Задает новую скорость для вагона. Применяется
мгновенно, даже если на момент вызова функции вагон двигался. Если
скорость задается равной нулю, то вагон останавливается. Вагон
должен не принадлежать поезду Train.
Параметр: v
- новая скорость