Получение изображения объекта из классификатора с учетом семантик, Получение изображения объекта из классификатора с учетом семантик, которые могут влиять на его отображение
Получаем изображения из классификатора, как разбиралось в теме. Имеющийся код возвращает изображения в виде "по-умолчанию".
У знака есть семантики, которые влияют на его отображение, например, семантика "Государственная принадлежность" код 1300 (operator.rsc), которая изменяет цвет знака. Как можно получить изображение объекта с учетом такой семантики?
// Вывести изображение карты в XImage (массив)
// hmap - идентификатор открытых данных
// imagedesc - параметры области для размещения изображения
// Описание структуры XIMAGEDESC в maptype.h
// erase - признак очистки области изображения (если равен -2, то изображение рисуется
// поверх имеющегося рисунка без очистки)
// x,y - координаты левого верхнего угла внутри
// битовой области XImage для размещения изображения
// rect - фрагмент для вывода отображения
// func - функция отображения объекта
// parm - параметры изображения
// data - метрика для отображения
// colors - количество цветов
// palette - палитра
// При ошибке в параметрах возвращает ноль
_MAPIMP long int _MAPAPI mapPaintExampleObjectByFuncDataToXImage(HMAP hMap, XIMAGEDESC *imagedesc, long int x, long int y, RECT *rect, long int func,
const char *parm, POLYDATAEX* data, long int colors, COLORREF *palette);
_MAPIMP long int _MAPAPI mapPaintExampleObjectByFuncDataToXImageEx(HMAP hMap, XIMAGEDESC * imagedesc, long int erase, long int x, long int y,RECT * rect,
long int func, const char* parm, POLYDATAEX* data);
У структуры POLYDATAEX есть поле Semantic -
Код
char * Semantic; // Указатель на семантику объекта (SEMANTIC *) или 0
Это указатель на запись семантики объекта, которая может влиять на его вид.
Примеры формирования есть в коде IMLAPI (см. sdk13.zip\imlapi)
Oleg Belenkov написал: Примеры формирования есть в коде IMLAPI (см. sdk13.zip\imlapi)s57navy\imlmain.cpp Код_IMLIMP long int _IMLAPI imlPaintExampleEx(long int type, const IMGDRAW * parm, const IMGCONTEXT * context, HRSC hrsc, const char * semantic) ... POLYDATAEX data;
Насколько я понял, в вашем пример берется конкретная семнатика { 0xFF, 0x7F, 16... }. Откуда мне взять все эти циферки для семантики, которая интересует меня "Гос. принадлежность" код 1300?
Илья Аникин написал: Откуда мне взять все эти циферки для семантики, которая интересует меня "Гос. принадлежность" код 1300?
Каждому объекту карты могут быть приписаны характеристики. Например, собственное название или высота объекта. Все эти характеристики описываются в классификаторе. Для кaждой хapaктеpистики может быть создaн клaссификaтоp знaчений. Пpи этом для числовых хapaктеpистик одному коду обычно соответствует диaпaзон знaчений (нaпpимеp, шиpинa pеки: до 5м - 1, от 5 до 10 - 2 и т.д.), для символьных хapaктеpистик одному коду соответствует одно знaчение (мaтеpиaл стpоения: деpево - 1, киpпич - 2 и т.д.). Помимо пользовательских характеристик, в составе классификатора есть специальные семантики, которые могут влиять на внешний вид (МАСШТАБ ОТОБР.ЗНАКА В ПРОЦЕНТАХ, ЦВЕТ ОТОБРАЖЕНИЯ ЗНАКА RGB, ВЫСОТА ШРИФТА, ТОЛЩИНА ЛИНИИ В ММ и так далее). В каждом классификаторе для семантики присваивается её КОД и КЛЮЧ. По этим полям Вы можете осуществлять запросы информации. На странице Классификаторы представлено описание каждого классификатора карты в виде бумажного документа. Самостоятельно ознакомится со структурой классификатора можно в настольных приложениях через задачу "Редактор классификатора" Более подробно о классификаторе описано в документе ГИС "Панорама" ПАРБ.00046-06 Прикладные задачи. Редактор классификатора
Сергей Гамов написал: Не каждого. Про чрезвычайно нужный классификатор operator.rsc на этой странице как раз нет ничего. Можете дополнить страницу?
Добрый день! Классификатор operator.rscz входит в инсталляцию программы ГИС Оператор. На страничке Классификаторы его нет и дополнять не планируем.
ГИС Оператор содержит средства редактирования оперативной обстановки, разнообразные классификаторы и библиотеки условных знаков оперативной обстановки, принятые в РФ. Для создания электронных карт обстановки о чрезвычайных ситуациях поддерживается классификатор, созданный в соответствии с требованиями ГОСТ Р 22.0.10-96.
Прошу извинить, Вы не могли бы опубликовать рабочий пример с использованием этих функций? А то я попробовал mapPaintExampleObjectByFuncDataToXImage, так у меня почему-то в XImage вувелся кусочек карты, а не условный знак классификатора, как функцией mapPaintExampleObjectByFuncToXImage. Видимо, структуру POLYDATAEX надо заполнять полностью, понимая, что делаешь. Но примеров использования mapPaintExampleObjectByFuncDataToXImage в /usr/share/gisdesigner/examples не обнаружилось. Я для начала вызвал её с пустой data, установив в ней только data.MapRsc, рассчитывая на то, что получу изображение значка по умолчанию, как после функции mapPaintExampleObjectByFuncToXImage, чтобы потом уже колдовать с семантиками. Но не взлетело. Рабочий пример сильно помог бы.