Вагон (RailCar)

Вагоны создаются объектом TrainSource (в составе поездов) и во время всего своего пребывания на ж/д узле полностью управляются поездами. 

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

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


2D анимация вагонов

3D анимация вагонов

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

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

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

  4. Выберите тип анимации для вагонов этого типа. Если вы хотите, чтобы агенты отображались и в 2D, и в 3D, выберите 3D и выберите 3D фигуру анимации из списка ниже, в ином случае, выберите 2D и выберите фигуру из другого списка. Если ни одна фигура не подходит вам, выберите опцию Нет. Вы можете нарисовать фигуру анимации в типе агента позже в любое время. 

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

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

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

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

Функции

Основные (доступные всегда, независимо от того, является вагон частью поезда Train или нет)

Конструкторы и инициализация

Функция

Описание

RailCar()

Создает новый вагон длиной 10 метров, шириной 4 метра, со скоростью 10 м/с и случайно выбранным цветом.

RailCar(double length)

Создает новый вагон заданной длины, шириной 4 метра, со скоростью 10 м/с и случайно выбранным цветом.

Параметр:
length - длина вагона в метрах

RailCar(double length, double width)

Создает новый вагон заданной длины и ширины, со скоростью 10 м/с и случайно выбранным цветом.

Параметры:
length - длина вагона в метрах
width - ширина вагона в метрах


Внешний вид вагона

Функция

Описание

double getLength()

Возвращает длину вагона, в метрах.

double getLength(LengthUnits units)

Возвращает длину вагона в заданных единицах измерения длины.

Параметр:
units - константа, определяющая единицы длины

void setLength(double lengthInMeters)

Задает длину вагона. Может выполняться только до добавления вагона на жезнодорожный узел.

Параметр:
lengthInMeters - новая длина вагона в метрах

double getWidth()

Возвращает ширину вагона в метрах.

double getWidth(LengthUnits units)

Возвращает ширину вагона в заданных единицах измерения длины.

Параметр:
units - константа, определяющая единицы длины

void setWidth(double width)

Задает ширину вагона в метрах.

Параметр:
width - новая ширина вагона в метрах

void setWidth(double width, LengthUnits units)

Задает ширину вагона в заданных единицах измерения длины.

Параметры:
width - новая ширина вагона
units - константа, определяющая единицы длины

Shape getShape()

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

void setShape(Shape shape)

Задает 2D или 3D фигуру для анимации вагона.

Color getColor()

Возвращает цвет вагона.

void setColor(Color color)

Задает цвет вагона. Хотя цвет всегда хранится в объекте RailCar, он применяется только к заданной по умолчанию анимации.

Параметр:
color - новый цвет

boolean isHighlighted()

Возвращает true, если вагон выделен на анимации, и false - если нет.

void highlight(boolean yes)

Выделяет вагон на анимации, либо снимает выделение (в зависимости от значения аргумента).

Параметр:
yes - если true, то вагон выделен на анимации, если не выделен - false


Информация о вагоне

Функция

Описание

Agent getTrain()

Возвращает поезд, частью которого является данный вагон, или возвращает null.

Agent getCoupledCar(boolean infront)

Возвращает вагон, сцепленный с этим вагоном с заданного параметром infront торца. Если с заданной стороны вагон не сцеплен, то возвращает null.

Параметр:
infront - если true, то передний торец, если false - задний

boolean isFirst()

Проверяет, является ли данный вагон первым вагоном в последовательности сцепленных вагонов (которые могут и не образовывать объект Train), т.e. не движутся ли перед ним прицепленные вагоны. Если вагон не движется, то результат неопределен. Возвращает true, если это первый вагон состава (или отдельный вагон), false - в противном случае.

boolean isLast()

Проверяет, является ли данный вагон последним вагоном в последовательности сцепленных вагонов (которые могут и не образовывать объект Train), т.e. не движутся ли за ним прицепленные вагоны. Если вагон не движется, то результат неопределен. Возвращает true, если это последний вагон состава (или отдельный вагон), false - в противном случае.

RailwayTrack getTrack(boolean infront)

Возвращает путь, на котором находится заданный параметром infront торец вагона.

Параметр:
infront - если true, то передний торец, если false - задний

double getX( boolean infront )

Возвращает x-координату заданного торца вагона относительно группы фигур железнодорожного узла, в пикселях.

Параметр:
infront - если true, то возвращает координату переднего торца, если false - то заднего

double getY( boolean infront )

Возвращает y-координату заданного торца вагона относительно группы фигур железнодорожного узла, в пикселях.

Параметр:
infront - если true, то возвращает координату переднего торца, если false - то заднего


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

Функция

Описание

boolean isMoving()

Возвращает true, если в текущий момент вагон движется, и false - если нет.

boolean getDirection()

Возвращает направление движения вагона в данный момент (или его последнего движения). Возвращает true, если направление прямое (передняя сторона движется впереди задней), false - если обратное.

boolean getOrientation(boolean infront)

Проверяет, соответствует ли направление вагона направлению пути, на котором находится заданный параметром infront торец вагона. Возвращает  true, eсли направление "от конца к началу вагона" соответствует направлению "от начала к концу пути". 

Параметр:
infront - if true, this is front side, otherwise rear side

boolean isForwardOnTrack(boolean infront)

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

Параметр:
infront - если true, то передний торец, иначе - задний

double getOffset(boolean infront)

Возвращает смещение заданного параметром infront торца вагона относительно начала пути (в метрах). Значение 0 соответствует началу пути.

Параметр:
infront - если true, то передний торец, иначе - задний

double getDistanceDriven()

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

void resetDistanceDriven()

Устанавливает расстояние, пройденное вагоном, равным нулю.

double getSpeed()

Возвращает скорость вагона (в метрах в секунду). Положительное значение скорости не обязательно означает, что вагон движется – если вагон стоит, то это значение скорости, с которой вагон поедет, когда его запустят.

double getSpeed(SpeedUnits units)

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

Параметр:
units
- константа, определяющая единицы скорости


Разное

Функция

Описание

RailwayNetwork getRailYard()

Возвращает железнодорожный узел, где сейчас находится вагон.

RailSettings getSettings()

Возвращает настройки железнодорожного узла.


Действия в результате обратных вызовов

Function

Описание

void callbackAt(RailwayTrack track,
double offset, Object info)

Задает для вагона особую точку, при достижении которой (а именно, когда этой точки достигнет движущийся первым торец вагона) будет послан запрос на выполнение кода, заданного в параметре При достижении особой точки объекта RailSettings. Точка задается путем указания пути track и точки смещения от его начала offset. Прямо перед выполнением кода запрос удаляется (хотя в этом коде пользователь может послать еще один запрос). Каждый новый запрос удаляет сделанный ранее. Вы можете передать в код любую информацию (Object) для идентификации типа произошедшего события.

Параметры:
track
- путь, для которого следует выполнить код
offset - смещение (в метрах) от начала пути, при достижении которого будет выполнен код
info
- произвольный объект с информацией, который будет передан в контекст выполняемого кода

void callbackAt(RailwayTrack track, double offset)

Аналогична функции callbackAt(track, null, offset).

Параметры:
track
- путь, для которого следует выполнить код
offset - смещение (в метрах) от начала пути, при достижении которого будет выполнен код

void callbackAt(RailwayTrack track,
PositionOnTrack pointOnTrack,
Object info)

Аналогична функции callbackAt(track, offset, info) с той разницей, что смещение задается пересечением пути и заданного элемента Точка ж/д пути.

Параметры:
track
- путь, для которого следует выполнить код
pointOnTrack - точка ж/д пути, заданная на указанном пути
info
- произвольный объект с информацией, который будет передан в контекст выполняемого кода

void callbackAt(RailwayTrack track,
PositionOnTrack pointOnTrack
)

Аналогична функции callbackAt(track, pointOnTrack, null).

Параметры:
track
- путь, для которого следует выполнить код
pointOnTrack - точка ж/д пути, заданная на указанном пути

Низкоуровневые (функции недоступны, если вагон является частью поезда Train)

Уничтожение

Функция

Описание

void dispose()

Полностью уничтожает вагон, то есть удаляет его из железнодорожного узла вне зависимости от того, где он находился. Вагон должен не двигаться и не принадлежать поезду Train. Этот метод также вызывается объектом TrainDispose.


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

Функция

Описание

void stop()

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

void go(boolean forward)

Начинает движение вагона (или изменяет его направление). Значение скорости должно быть положительным.

Параметр:
forward - если true, то вагон будет двигаться вперед (впереди будет двигаться передний торец вагона), иначе - в обратном направлении

void couple(boolean infront)

Сцепляет вагон с другим вагоном, находящимся рядом с его торцом, заданным аргументом infront. Вагон должен не принадлежать поезду Train.

Параметр:
infront - если true, то сцеплять с передним торцом вагона, иначе - с задним

void decouple(boolean infront)

Отцепляет вагон от другого вагона, находящегося рядом с его торцом, заданным аргументом infront. Если с заданной стороны вагона он не соединен ни с одним другим вагоном, то будет выдано сообщение об ошибке. Вагон должен не принадлежать поезду Train.

Параметр:
infront - если true, то отцеплять от переднего торца вагона, иначе - от заднего

void setSpeed(double s)

Задает новую скорость для вагона. Применяется мгновенно, даже если на момент вызова функции вагон двигался. Если скорость задается равной нулю, то вагон останавливается. Вагон должен не принадлежать поезду Train.

Параметр:
s - новая скорость в м/с

void setSpeed(double s, SpeedUnits units)

Задает новую скорость вагона в указанных единицах измерения скорости. Применяется мгновенно, даже если на момент вызова функции вагон двигался. Если скорость задается равной нулю, то вагон останавливается. Вагон должен не принадлежать поезду Train.

Параметры:
s - новая скорость в указанных единицах измерения скорости
units - константа, определяющая единицы скорости