Дорога


Элемент Дорога является графическим элементом разметки пространства, это непрерывная дорога (т.е. такая дорога, которая не содержит перекрестков). Используя дороги, перекрестки и другие элементы разметки пространства, вы создаете дорожные сети для моделей Библиотеки дорожного движения.

Дорога может содержать множество прямых и дуговых сегментов (дорога на рисунке выше состоит из двух прямых сегментов и одного дугового сегмента в центре).

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

Дорога может содержать произвольное количество полос. Дорога может быть как односторонняя, в этом случае все автомобили движутся в одном направлении, так и двусторонняя, в этом случае на дороге будет несколько полос основного движения и несколько полос встречного движения. Дорога на рисунке выше содержит две полосы основного движения (стрелка на дороге находится на полосе основного движения) и две полосы встречного движения (они находятся сверху, движение транспорта на них происходит справа налево). Библиотека дорожного движения не поддерживает полосы, по которым транспорт может совершать движение в обе стороны.

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

Дорога может содержать сегменты с уклоном. Форму дороги можно настроить, изменив Z-координаты концов дорожного сегмента в секции свойств дороги Местоположение и размер.

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

Создание дороги

Мы продемонстрируем как рисовать дорогу на примере небольшого участка улицы Бродвей у Мэдисон Сквер Парк и Флэтайрон-билдинг:

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

Чтобы нарисовать дорогу

  1. Прежде чем нарисовать дорогу, следует отключить сетку в графическом редакторе. Щелкните по кнопке панели инстурментов Включить/Отключить сетку  .
    Она должна принять вид не нажатой кнопки: .
  2. Сделайте двойной щелчок по элементу Дорога в секции Разметка пространства палитры Библиотека дорожного движения. Иконка элемента изменится на . Это означает, что активирован режим рисования, и теперь вы можете рисовать дорогу в графическом редакторе.

  3. Щелкните мышью в графическом редакторе, чтобы поставить первую точку дороги. 

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

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

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

  7. Если это первая дорога в вашей модели, вы увидите сообщение с предложением сменить масштаб модели на: 25,0 метров в 100 пикселях. Мы советуем согласиться, так как предлагаемый масштаб часто используется в типичных моделях дорожного движения. После этого вы увидите нарисованную дорогу. Она должна быть похожа на дорогу, которая изображена на рисунке ниже:

  8. Настройте атрибуты дороги в панели Свойства. По умолчанию дороги создаются с двусторонним движением, при этом каждое направление дороги (основное и встречное) содержит по две полосы движения. Бродвей - дорога с односторонним движением, поэтому необходимо установить флажок напротив опции Одностороннее движение. Количество полос автоматически уменьшится до двух. В результате дорога может немного сместиться, и вам потребуется настроить ее положение:

Стрелка на дороге указывает направление движения автомобилей. 

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

  1. Выделите дорожную сеть щелкнув по дороге. Первый щелчок мыши выделит саму дорогу. Следующий щелчок выделит дорожную сеть. После этого откройте секцию свойств дорожной сети Внешний вид. Щелкните по элементу управления Цвет дороги, выберите Другие цвета... из списка и задайте для свойства Прозрачность значение 150, к примеру.

  2. Теперь можно увидеть, как созданная дорога накладывается на дорогу на карте. Если она шире или уже, необходимо настроить масштаб модели. При необходимости можете перетащить холст немного ниже, чтобы на экране (над осью Х) появился элемент Масштаб, в свойствах которого можно будет указать масштаб. Ширина дороги будет соответствовать внесенным изменениям.

  3. В этом примере, линейке масштаба задано соответствие 25 метрам. В итоге у вас должна получиться дорога, подобная той, что на рисунке ниже:

Дальнейшее рисование дорожной сети (добавление перекрестков и создание других дорог) описано здесь.

Свойства

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

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

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

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

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

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

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

Кол-во полос основного движения – Указывает количество полос, по которым движение происходит вперед относительно начала дороги.

Кол-во полос встречного движения – [Параметр виден, если не выбрана опция Одностороннее движение] Определяет количество полос со встречным движением. 

Ширина разделительной полосы – [Параметр виден, если не выбрана опция Одностороннее движение] Определяет ширину полосы, разделяющей полосы встречного движения.

Цвет разделительной полосы – [Параметр виден, если не выбрана опция Одностороннее движение] Определяет цвет полосы, разделяющей полосы встречного движения.

Местоположение и размер

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

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

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

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

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

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

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

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

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

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

Изменение формы дороги

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

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

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

Чтобы изменить форму дугового сегмента дороги
  1. Щелкните по дороге правой кнопкой мыши и выберите опцию Редактировать направляющие из контекстного меню. 
  2. Вы увидите множество маркеров. Если квадратные маркеры отображают конечные точки сегментов дороги, то прямые линии с круглыми маркерами на концах - это и есть направляющие линии. У каждой конечной точки сегмента есть своя направляющая линия. Направляющие линии появятся для каждой точки изгиба дороги. 
  1. Перетащите мышью конечную точку направляющей линии. Форма соответствующего дугового сегмента при этом будет меняться. Отпустите кнопку мыши, когда вы получите сегмент нужной вам формы. Возможно, для этого потребуется также изменить длину и/или положение другой направляющей линии этого сегмента дороги.
  1. Чтобы выйти из режима редактирования, щелкните по дороге правой кнопкой мыши и отключите опцию Редактировать направляющие из контекстного меню, или просто щелкните на пустом месте графической диаграммы.

Чтобы добавить сегмент дороги

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

Направление дороги

У каждой дороги есть направление основного движения, отображаемое стрелкой.

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

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

Функции

Автомобили

int nCars(boolean isOnForwardSide) - Возвращает количество автомобилей на полосе основного или встречного движения, в зависимости от значения аргумента.

Параметр: isOnForwardSide - передайте значение true, чтобы получить количество автомобилей на полосе основного движения, или false, чтобы получить количество автомобилей на полосе встречного движения

List<Agent> getCars(boolean isOnForwardSide) - Возвращает упорядоченный список автомобилей на полосе основного или встречного движения, в зависимости от значения аргумента. Первый автомобиль в списке является ближайшим к точке съезда с дороги (может первым съехать с дороги, если не будет ускорения).

ПараметрisOnForwardSide - передайте значение true, чтобы получить количество автомобилей на полосе основного движения, или false, чтобы получить количество автомобилей на полосе встречного движения
Скорость

double averageSpeed(boolean isOnForwardSide, double offset) - Возвращает среднюю скорость движения на полосе основного или встречного движения (в зависимости от значения аргумента), в заданной отступом точке.

Параметры:
isOnForwardSide -
 передайте значение true, чтобы узнать скорость на полосе основного направления, или false, чтобы узнать скорость на полосе встречного движения
offset -
заданная точка отступа

double averageSpeed(boolean isOnForwardSide, double offset, SpeedUnits units) - Возвращает среднюю скорость (в указанных единицах измерения скорости) движения на полосе основного или встречного движения (в зависимости от значения аргумента), в точке заданной отступом.

Параметры:
isOnForwardSide -
  передайте значение true, чтобы узнать скорость на полосе основного направления, или false, чтобы узнать скорость на полосе встречного движения
offset -
 заданная точка отступа
units -
 константа единиц измерения скорости
Полосы

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

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

void setForwardLanesCount(int forwardLanesCount) - Задает количество полос основного движения.

Параметр: forwardLanesCount - новое количество полос основного движения

void setBackwardLanesCount(int backwardLanesCount) - Задает количество полос встречного движения.

ПараметрbackwardLanesCount - новое количество полос встречного движения
Разделительная полоса

double getMedianStripWidth() - Возвращает ширину разделительной полосы в пикселях.

double getMedianStripWidth(LengthUnits units) - Возвращает ширину разделительной полосы в указанных единицах измерения длины.

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

void setMedianStripWidth(double medianStripWidthInPixels) - Задает ширину разделительной полосы в пикселях.

ПараметрmedianStripWidthInPixels - указанная ширина разделительной полосы в пикселях

void setMedianStripWidth(double medianStripWidth, LengthUnits units) - Задает ширину разделительной полосы в указанных единицах измерения длины.

Параметры:
medianStripWidth - новая ширина разделительной полосы
units - константа единиц измерения длины

void setMedianStripColor(Color color) - Задает цвет разделительной полосы.

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

void setMedianStripColor(Paint color) - Задает цвет (или текстуру) разделительной полосы.

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

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

Texture getMedianStripTexture() - Возвращает текстуру разделительной полосы, если она есть.

Видимость

void setVisible(boolean v) - Задает видимость дороги.

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

boolean isVisible() - Проверяет, видна ли дорога. Если true, дорога видна, если false - нет.

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

RoadNetwork getRoadNetwork() - Возвращает дорожную сеть, в которой находится дорога.

List<StopLine> getStopLines() - Возвращает все стоп-линии, которые содержит эта дорога.

List<ParkingLot> getParkingLots() - Возвращает все парковки, установленные у этой дороги.

List<BusStop> getBusStops() - Возвращает все автобусные остановки, установленные у этой дороги.

MarkupSegment getSegment(int index) - Возвращает сегмент с соответствующим индексом.

Параметр: index - индекс сегмента, [0 .. getSegmentCount() - 1]

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

double getWidth() - возвращает общую ширину дороги в пикселях, которая включает сумму ширин всех полос основного направления, встречного направления, а также ширину разделителя.

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


См. также

 Учебное пособие по Библиотеке дорожного движения

 Элементы разметки Библиотеки дорожного движения

 Блоки Библиотеки дорожного движения