Ж/д путь

Элемент Ж/д путь является графическим элементом разметки пространства, непрерывный железнодорожный путь (т.e. такой путь, который не содержит стрелок) произвольной формы. Ж/д путь может содержать множество прямых и дуговых сегментов. При создании ж/д пути, AnyLogic автоматически размещает его в ж/д узле. В дальнейшем ж/д узел можно расширить, добавляя другие ж/д пути.

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

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


Находящиеся на пути вагоны

Блокировка и резервирование путей

Функции ж/д пути позволяют динамически блокировать пути, т.е. делать их недоступными для всех поездов в ж/д сети, а также резервировать пути для определенных поездов. Поведение поезда зависит от настроек движения поезда и его состояния в момент, когда путь становится недоступным:

Примечание: Если путь, по которому в данный момент двигается поезд, резервируется для другого поезда, возникает ошибка.

Примечание: Ж/д путь нельзя зарезервировать дважды. При повторном резервировании уже зарезервированного пути возникает ошибка.

Путь остается заблокированным до вызова функции unblock(). Резервирование пути снимается после того, как все указанные при резервировании поезда завершают движение по этому пути. Вы также можете отменить резервирование с помощью вызова функции cancelReservation().

Демонстрационная модель: Railway Track Reservation


Демонстрационная модель: Blocking Railway Tracks


Демонстрационная модель: Level Junction

Чтобы нарисовать ж/д путь

  1. Дважды щелкните элементЖ/д путь в секции Железные дороги палитры Разметка пространства.
  2. Значок элемента палитры поменяется на . Это означает, что активирован режим рисования и теперь вы можете рисовать ж/д путь в графическом редакторе точка за точкой.
  3. Щелкните мышью по графическому редактору, чтобы поставить первую точку пути. Щелкайте мышью, чтобы добавлять точки поворотов.
  4. Чтобы нарисовать дуговой сегмент, не отпускайте кнопку мыши после щелчка и двигайте курсором. Отпустите кнопку мыши, когда этот сегмент готов и можно добавить следующий.

  5. Чтобы завершить рисование, добавьте последнюю точку пути двойным щелчком мыши.

  6. Вы можете редактировать ж/д путь после того, как он завершен. Выделите путь в графическом редакторе, щелкнув по нему мышью, затем щелкните точку изгиба и, удерживая кнопку мыши, перетащите ее. Соединяющиеся с этой точкой сегменты пути буду изменяться, пока вы перетаскиваете точку. Отпустите кнопку мыши, когда путь примет требуемую форму.

  7. Точки редактирования могут быть добавлены и удалены двойным щелчком мыши в любом месте на элементе Ж/д путь. Если вы сделаете двойной щелчок по начальной или конечной точке пути, то этот сегмент, в начале или в конце элемента, будет удален.
  8. Вы можете так же редактировать ж/д путь, делая сегменты прямыми или дуговыми, на любой стадии рисования.

Чтобы добавить дополнительный сегмент к пути

  1. Вы можете продолжить рисовать ж/д путь даже после того, как завершили процесс рисования двойным щелчком мыши.
  2. Щелкните правой кнопкой мыши нарисованный в графическом редакторе путь и выберите опцию Добавить линию из контекстного меню. Вы можете добавить линию в любой крайней точке пути. Щелкните одну из них мышью.

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

Вы можете сделать прямой сегмент пути - дуговым, и наоборот, на любом этапе рисования.

Чтобы сделать дуговую линию прямой
  1. Щелкните мышью ж/д путь в графическом редакторе, чтобы выделить его.
  2. Зажмите клавишу Ctrl на клавиатуре, не отпуская ее, щелкните мышью точку изгиба дугового сегмента и перетащите ее.
  3. Отпустите клавишу Ctrl и кнопку мыши, когда сегмент стал прямым и принял требуемую форму.

Чтобы сделать прямую линию дуговой
  1. Щелкните путь правой кнопкой мыши и выберите опцию Редактировать направляющие из контекстного меню. Направляющие линии появятся для каждой точки изгиба пути. Щелкните мышью по точке направляющей линии и перетаскивайте ее, не отпуская кнопку мыши.

  2. Щелкните путь правой кнопкой мыши и отключите опцию Редактировать направляющие из контекстного меню, чтобы выйти из этого режима редактирования.

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

Чтобы соединить два пути в один

  1. Когда вы соединяете два пути в их конечных точках, они объединяются в один путь. Например, на рисунке ниже была использована опция Добавить линию для присоединения пути railwayTrack1 к пути railwayTrack.

  2. Точка соединения, в которой два пути объединяются, выделена голубым цветом. Две фигуры теперь стали одним элементом, ж/д путем railwayTrack1. Сегменты, бывшие частью пути railwayTrack, унаследовали имя элемента и направление движения у пути railwayTrack1.

  3. Пока вы будете соединять пути только в их крайних точках, они будут сливаться в один ж/д путь.

Чтобы соединить два и более путей с помощью стрелки

  1. Вы можете соединять ж/д пути с помощью стрелок, если нарисуете присоединение сегмента одного пути к любой части пути другого, только не к его крайней точке. Например, на рисунке ниже элемент разметки ж/д путь railwayTrack был присоединен к пути railwayTrack1 в середине пути.
    Таким образом можно присоединить множество путей друг к другу.

  2. Стрелка появится на месте соединения автоматически. Она выделена голубым цветом. Теперь вы создали сеть с несколькими ж/д путями в ней. На рисунке вы можете видеть, что стрелка разделяет путь на части, railwayTrack1 и railwayTrack2, в то время как путь railwayTrack не сливается с другим, а остается отдельным путем.

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

Вы можете отсоединить ж/д путь от сети, отделить пути друг от друга, отделить сегмент от пути или разбить один путь на несколько.

Чтобы разъединить пути или сегменты

  1. Щелкните ж/д путь в графическом редакторе правой кнопкой мыши и выберите опцию Разделить на две фигуры из контекстного меню.
  2. Когда точки изгиба будут выделены, щелкните мышью по той из них, где нужно разделить путь на сегменты. Теперь каждый из сегментов, ранее соединенных этой точкой, стал отдельным путем, и вы можете редактировать каждый путь отдельно. Даже если сегменты выглядят, будто они еще соединены, она соединены только графически и не являются больше одним ж/д путем.

Свойства

Основные свойства

Имя – Имя фигуры.

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

Отображается на верхнем агенте – Если опция выбрана, то фигура будет видна на презентации типа агента, в который будет вложен данный агент.

Блокировать – Если опция выбрана, то фигура будет считаться заблокированной и не будет реагировать на щелчки мыши. Таким образом, вы не сможете выбрать заблокированную фигуру в графическом редакторе до тех пор, пока вы не снимете с нее блокировку.

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

Двунаправленный – Здесь вы можете задать движение по пути в обоих направлениях.

Внешний вид

Тип – Тип пути. По умолчанию выбран: Жел. дорога.

Цвет линии - Недоступен, когда Тип: Жел. дорога.

Ширина колеи - Расстояние между внутренними гранями головок рельсов.

Расположение

X – x-координата начальной точки пути.

Y – y-координата начальной точки пути.

Z – [Доступно, только если установлен флажок Отображать в: В 2D и в 3D или Только в 3D] z-координата начальной точки пути.

Точки

В секции свойств Точки расположена таблица относительных координат точек пути.

Первая точка всегда имеет координаты (0,0,0), и они не редактируются.

В остальных строках таблицы задаются координаты последующих точек. Координаты каждой точки представляют собой смещения этой точки от начальной по оси X, Y и Z соответственно.

И если координаты точек в двумерном пространстве XY вы можете изменить и в графическом редакторе, то расположение точек пути относительно оси Z можно изменить только в этой таблице.

Специфические

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

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

Направление движения

У ж/д пути есть начальная и конечная точка и поэтому у него есть направление движения. Направление движения не отображается графически на элементе пути, если путь двунаправленный.

Точная позиция на ж/д пути может быть задана элементом Точка ж/д пути.

Чтобы изменить направление движения по пути

  1. Щелкните ж/д путь в графическом редакторе правой кнопкой мыши и выберите опцию Изменить направление из контекстного меню. Вы увидите, что теперь путь изменил свое направление.

Функции

Вагоны и поезда

Функция

Описание

int nCars()

Возвращает количество вагонов на пути (включая частично находящиеся на этом пути вагоны).

Agent getFirstCar()

Возвращает вагон, ближайший к началу пути, или null, если путь пуст.

Agent getLastCar()

Возвращает вагон, ближайший к концу пути, или null, если путь пуст.

Agent getCar(int index)

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

Параметр:
index - индекс вагона

List<Agent> getCars()

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

List<Agent> getTrains()

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

boolean isEmpty()

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

double getFreeSpace(boolean fromstart)

Проверяет наличие свободного места на пути. Если на пути нет вагонов, то возвращает Double.POSITIVE_INFINITY. Если вагоны есть, то возвращает расстояние до ближайшего вагона от начала или конца пути (в зависимости от значения параметра fromstart). Если какой-то вагон лишь частично въехал или съехал с начала/конца пути, то возвращает отрицательное значение.

Параметр:
fromstart - если true, то расстояние проверяется от начальной точки пути, в противном случае - от конечной точки


Стрелки

Функция

Описание

RailwaySwitch getStartSwitch()

Возвращает стрелку (объект Стрелка) в начале ж/д пути.

RailwaySwitch getEndSwitch()

Возвращает стрелку в конце ж/д пути.

RailwaySwitch getSwitch(boolean atend)

Возвращает стрелку, находящуюся в начале или конце пути.

Параметр:
atend - если true, то возвращается стрелка, находящаяся в конце пути, в противном случае - в ее начале

RailwaySwitch getOtherSwitch(RailwaySwitch sw)

Если данная стрелка является "стартовой" стрелкой этого пути, функция возвращает "конечную" стрелку текущего пути, в противном случае стартовую'. Обратите внимание на то, что эта функция не проверяет стартовая стрелка или конечная, так как это является обязанностью пользователя, который вызывает функцию.

Параметр:
sw - стрелка (одного из концов пути)


Блокировка и резервирование

Функция

Описание

void block()

Блокирует ж/д путь. Поезда, которые находятся на пути в момент блокировки, могут покинуть путь, но не могут войти на него снова, пока он заблокирован.

void unblock()

Снимает блокировку ж/д пути.

boolean isBlocked()

Проверяет, заблокирован ли ж/д путь. Если функция возвращает значение true, путь заблокирован. Если false - путь не заблокирован.

void setBlocked(boolean blocked)

Меняет "заблокированное" состояние ж/д пути.

Параметр:
blocked - если значение true, путь будет заблокирован; если false - путь будет разблокирован.

void reserveFor(Agent... trains)

Резервирует ж/д путь для заданных поездов. Только эти поезда смогут перемещаться по пути.

Параметр:
trains - поезда, которые могут перемещаться по зарезервированному пути.

List<Agent> reservations()

Возвращает список поездов, для которых зарезервирован этот ж/д путь.

void cancelReservation()

Снимает резервирование с ж/д пути. Любой поезд сможет перемещаться по этому пути, если путь не заблокирован.

boolean isAvailableFor(Agent train)

Проверяет, сможет ли заданный поезд перемещаться по этому ж/д пути. Функция проверяет путь как на блокировку, так и на резервирование.

Параметр:
train - если значение true, заданный поезд может перемещаться по этому пути; если false - не может.


Местоположение

Функция

Описание

RailwayNetwork getRailYard()

Возвращает ж/д узел (ж/д сеть), которому принадлежит этот путь, или null если путь не является частью ж/д узла.


Размеры

Функция

Описание

double length()

Возвращает длину пути в пикселях

double length(LengthUnits units)

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

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

double getWidth()

Возвращает ширину пути в пикселях.

double getWidth(LengthUnits units)

Возвращает ширину пути в указанных единицах длины.

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

void setWidth(double width)

Задает ширину пути в пикселях; 0 - самый узкий путь.

Параметр:
width
- новая ширина пути в пикселях

void setWidth(double width, LengthUnits units)

Задает ширину пути в указанных единицах измерения длины; 0 - самый узкий путь.

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


Уровень

Функция

Описание

Level getLevel()

Возвращает уровень, на котором расположен этот путь.


Внешний вид

Функция

Описание

Texture getTexture()

Если у фигуры есть текстура, возвращает ее.

Color getColor()

Возвращает цвет фигуры, или null. если фигуре не задан цвет или задана текстура (в этом случае используйте getTexture()).

void setColor(Color color)

Задает цвет фигуры.

Параметр:
color - новый цвет, если задать null, путь не будет нарисован

void setColor(Paint color)

Задает текстуру фигуры.

Параметр:
color -
новая текстура, если задать null, путь не будет нарисован


Видимость

Функция

Описание

boolean isVisible()

Проверяет, виден ли путь. Если true, путь виден, если false - нет.

void setVisible(boolean v)

Задает видимость пути.

Параметр:
v - видимость пути. Если true - путь виден, если false - нет.


Удаление

Функция

Описание

void remove()

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


См. также

Ж/д узел

Стрелка

Точка ж/д пути

О Железнодорожной библиотеке

API Reference: RailwayTrack Class