Графические объекты ядра CityMap

В графическом ядре Lks CityMap поддерживается четыре типа картографических объектов и два типа коммуникационных объектов.

Типы картографических объектов:

1. Растровый монохромный объект
Объект этого типа состоит из произвольного набора прозрачных и непрозрачных точек. Непрозрачные точки могут быть любого цвета, но одинакового для всех точек в пределах объекта. Этот тип в основном используется для заполнения векторных площадных объектов (полигонов), а также в качестве немасштабируемых значков. Использование большого количества масштабируемых объектов этого типа приводит к резкому снижению скорости отрисовки карты.

2. Простой векторный объект (полигон или полилиния)
Объект этого типа состоит из неограниченного числа отрезков прямых линий произвольной длины. Таким образом такой объект может отображать фигуры произвольной формы. Существует два подтипа для этих объектов: полилиния (отображает линию произвольной конфигурации и толщиной от 0 до 255 точек) и полигон (отображает плоскую фигуру произвольной конфигурации). Любая полилиния становится полигоном, если ее толщина равна нулю.
Полигон может бать произвольного цвета и произвольной штриховки. Для штриховки полигона используется любой значок типа 1 помещенный в коллекцию картографических значков карты. Цвет значков штриховки также может быть произвольный.
Полилиния может бать произвольного цвета и произвольной отрисовки. Для отрисовки полилинии используется любой значок типа 4 помещенный в коллекцию картографических значков карты.

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

4. Составной векторный объект с несколькими состояниями
Для объекта этого типа задается таблица вариантов отображения (от 1 до 255). Текущий вариант отображения задается старшим байтом четырехбайтного значения цвета. Каждый вариант отображения строится из набора примитивных фигур произвольного цвета контура и заполнения (цвет со значением FFFFFF в шестнадцатирочном исчислении считается прозрачным). В версии выше 1.02 доступны следующие примитивные фигуры: прямая, прямоугольник, четырехугольник, треугольник, эллипс, дуга.
Объект этого типа удобно использовать для привязки к коммуникационной модели карты. При этом отрисовка объекта будет автоматически изменяться в зависимости от состояния привязанного к нему узла коммуникационной линии.


Типы коммуникационных объектов:

1. Коммуникационная линия.
Это базовый тип для построения коммуникационной модели. Объект этого типа представляет собой полилинию, состоящую из отрезков прямых и узлов. Посредством узлов линии можно стыковать между собой и с объектами типа 2. При построении коммуникационной модели принято, что произвольная среда (электроэнергия, вода, газ и т.д.), попавшая в линию с любого узла, передается по линии ко всем ее остальным узлам. Если к определенному узлу подключена другая линия или объект, то в зависимости от состояния связанных узлов (включен или отключен), среда передается в связанный объект. С точки зрения графического ядра среда обладает двумя свойствами: цвет и числовое значение от 0 до 255. Каждое из этих свойств имеет два значения: для активного состояния (среда присутствует в узле) и пассивного (среда отсутствует в узле). Значения этих свойств передаются в свойство цвет связанного с узлом объекта карты.
Укрупненная структура коммуникационной линии следующая:

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

2. Коммуникационный объект
Этот тип объектов является производным от коммуникационной линии. Это по сути та же линия, но с предопределенной таблицей состояний её узлов. Каждому состоянию объекта назначается определенный значок из коллекции коммуникационных значков карты, которым она и отрисовывается на карте. Таким образом можно создавать объекты с произвольным набором состояний.

Свойства и параметры объектов.
У объекта любого типа есть набор свойств и параметров. Набор свойств определяется типом объекта, а их значения влияют на его отрисовку.
Доступные свойства картографических объектов:
СвойствоОписаниеТип 1Тип 2Тип 3Тип 4
ЦветОпределяет цвет объекта (для типа 4 старший байт - номер состояния)++++
Цвет подписиОпределяет цвет подписи объекта++++
Ориентация подписиОпределяет угол наклона подписи++++
Размер подписиОпределяет размер шрифта подписи++++
ЗаливкаОпределяет символ из коллекции картографических значков для штриховки полигонов или прорисовки полилиний-+--
Цвет символовОпределяет цвет символ штриховки полигонов-+--
Толщина линииОпределяет толщину полилинии (если 0, то линия становится полигоном)-+--
Постоянный размерОпределяет должен ли объект масштабироваться при изменении масштаба карты--++
ЗначокОпределяет значок из коллекции картографических значков, используемый для отрисовки объекта---+

Доступные свойства коммуникационных объектов:
СвойствоОписаниеТип 1Тип 2
Цвет линииОпределяет цвет коммуникационной линии++
Толщина линииОпределяет толщину коммуникационного объекта++
Цвет подписиОпределяет цвет подписи коммуникационного объекта++
Размер подписиОпределяет размер шрифта подписи++
Номер узла подписиОпределяет узел линии относительно которого размещается подпись++
Выравнивание горизонтальноеОпределяет горизонтальную позицию подписи относительно коммуникационного объекта++
Выравнивание вертикальноеОпределяет вертикальную позицию подписи относительно коммуникационного объекта++
ПроводимостьОпределяет направление передачи среды от узла по линии при построении коммуникационной модели (односторонняя - только в сторону увеличения номера узлов или двухсторонняя - по всей линии)++
ЗаливкаОпределяет символ из коллекции коммуникационных значков для прорисовки линий+-

Параметры делятся на зарезервированные (ObjectKey, ObjectName, Caption, Owner) и пользовательские. Зарезервированные параметры используются для работы графического ядра: Caption - определяет содержание видимой подписи объекта, ObjectName - определяет уникальное имя объекта (по нему производится поиск), Owner - определяет объект - владелец (владельцем объекта является объект у которого параметр ObjectName совпадает с параметром Owner дочернего объекта).
Набор пользовательских параметров определяется сразу для всех объектов слоя, а их значения задаются для каждого объекта отдельно. Начиная с версии 1.03 доступны следующие типы параметров: целое число, цвет, строка, изображение в формате BMP. Добавить или удалить параметр для слоя можно из инспектора свойств.

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