Один объект на пользовательской карте нужно рисовать поверх остальных. Как этого добиться., Один объект на пользовательской карте нужно рисовать поверх остальных. Как этого добиться.
Я на пользовательской карте ничего не рисую. Я могу создать на пользовательской карте некий объект (по ключу или коду+локализации) из классификатора (относящийся к некоторому слою классификатора), и он будет отрисован при вызове mapPainToXImage. Объект создаётся последовательностью вызовов mapCreateSiteObject/mapRegisterObject/mapCommitObject (в точности названия функций сейчас не напишу)
Если же речь идёт о каком-то другом способе именно отрисовки объекта, да ещё и с указанием слоя классификатора, то я так не умею и в таком методе не разбираюсь.
Один объект на пользовательской карте нужно рисовать поверх остальных. Как этого добиться., Один объект на пользовательской карте нужно рисовать поверх остальных. Как этого добиться.
[QUOTE]Елена написал: Или нужно было еще одну пользовательскую карту создавать на основе region.rsc , добавлять ее к основной последней и рисовать в нее этот объект?[/QUOTE] Так точно сработает.
[QUOTE]Елена написал: Выбираю слой пользовательской карты с наибольшим порядком вывода , т е в слой 8 Дорожная сеть (mapGetRscSegmentOrder=8) и рисую на нем этот объект, остальные рисую в слой 6 Административный район (mapGetRscSegmentOrder=6)[/QUOTE] А это разве не относится к слоям классификатора и к объектам, входящим в эти слои. Ну в смысле а как у вас получается рисовать произвольные объекты в слои классификатора? Мне кажется mapGetRscSegmentOrder есть смысл использовать только чтобы понять, в каком порядке объекты из одного слоя классификатора отрисуются по отношению к объектам из другого слоя классификатора в рамках одного пользовательского слоя (sit)
Для просто объектов на пользовательском слое можно добавить семантику "Вес цвета объекта в процентах" со значением 100 - и получим объект с прозрачным фоном вместо условного белого.
На версии 12.5.0 это работает (фон прозрачный), на версии 12.3.1 (и, возможно, более ранних) - фон остаётся белым, и становится более прозрачным в зависимости от значения семантики.
И надеюсь что так оно и останется (как в 12.5.0).
P.S. для некоторых объектов цвет фона становился прозрачным не при значении 100, а при значении 95, к примеру.
К вопросу не относится, но. Зачем вы копируете данные из QImage в XImageDesc ?? Вы же можете напрямую в QImage писать. То есть заставить вызов mapPaint* писать сразу в QImage.
В данном конкретном случае вы можете просто поле ximagedesc.Point выставить в bufferImage.constBits с const_cast-ом. Ну и поля в ximagedesc все правильно назначить, как в QImage
[MAPAPI] Получение семантик, относящихся к конкретному объекту, Как получить список семантик объекта идентичный списку из редактора классификатора с помощью mapapi
Когда Вы используете функцию : [CODE] // Заполнить структуру описания семантической характеристики // по коду семантики // hRsc - идентификатор классификатора карты // code - внешний код семантики // структура RSCSEMANTICEX описана в maptype.h // При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapGetRscSemanticExByCode(HRSC hRsc,RSCSEMANTICEX * semtype, long int code);[/CODE]то получаете общее описание семантики, без привязки к объекту (в параметрах же объект классификатора не указан).
То есть если Вам надо получить список семантик конкретного объекта и для каждой семантики знать, является ли она обязательной, влияет ли она на внешний вид объекта, или является возможной (поле [B]Enabled [/B]структуры [I]RSCSEMANTICEX)[/I], то нужно дополнительно вызвать функцию: [CODE] // Запросить использование семантики для данного объекта - // incode - внутренний код (порядковый номер)объекта // semanticcode - код семантики // hRsc - идентификатор классификатора карты // Возвращает значимость семантики см. maptype.h (SEMANTIC_FOR_OBJECT )
_MAPIMP long int _MAPAPI mapGetRscSemanticObjectUsed(HRSC hRsc,long int incode, long int semanticcode); [/CODE] В итоге для конкретного объекта получается связка mapGetRscSemanticObjectCount(ALL_SEMANTICS) -> mapGetRscSemanticObjectCodeList -> mapGetRscSemanticExByCode(для каждой семантики из списка) и mapGetRscSemanticObjectUsed (чтобы вычислить поле [B]Enabled[/B] у структуры RSCSEMANTICEX). С фильтрацией всех служебных семантик (у которых код > SEMHIDEFIRST, смотри предыдующие посты) получится почти как в ГИС Операторе в просмотрщике классификаторов.
[MAPAPI] Получение семантик, относящихся к конкретному объекту, Как получить список семантик объекта идентичный списку из редактора классификатора с помощью mapapi
Там правда диапазоны указаны: [CODE]// СЛУЖЕБНЫЕ СЕМАНТИКИ НЕ РЕДАКТИРУЮТСЯ ! #define SEMHIDEFIRST 32798 // НАЧАЛО ДИАПАЗОНА СЛУЖЕБНЫХ СЕМАНТИК #define SEMHIDELAST 32800 // КОНЕЦ ДИАПАЗОНА СЛУЖЕБНЫХ СЕМАНТИК [/CODE]
[CODE]// СЛУЖЕБНЫЕ СЕМАНТИКИ НЕ РЕДАКТИРУЮТСЯ ! #define SEMHIDEFIRST2 32850 // НАЧАЛО ДИАПАЗОНА СЛУЖЕБНЫХ СЕМАНТИК #define SEMHIDELAST2 32855 // КОНЕЦ ДИАПАЗОНА СЛУЖЕБНЫХ СЕМАНТИК[/CODE] По крайней мере эти диапазоны я могу с чистой совестью не показывать, ещё раз спасибо.
[MAPAPI] Получение семантик, относящихся к конкретному объекту, Как получить список семантик объекта идентичный списку из редактора классификатора с помощью mapapi
Спасибо. [QUOTE]код начала диапазона служебных семантик[/QUOTE]
А где его взять, не подскажете? Он где-то задефайнен или описан в документации ?
А то я нашёл кучу макросов в maptype.h, Вы про EXTSEMANTIC ?? [CODE]#define EXTSEMANTIC 31001 // НАЧАЛО ДИАПАЗОНА СЕРВИСНЫХ СЕМАНТИК [/CODE]Или всё что больше 32800 ? [CODE]#define OBJEXCODEINSEMANTIC 32800 // КЛАССИФИКАЦИОННЫЙ КОД ОБЪЕКТА #define SEMOBJEXCODE 32800 // КЛАССИФИКАЦИОННЫЙ КОД ОБЪЕКТА [/CODE]
[MAPAPI] Получение семантик, относящихся к конкретному объекту, Как получить список семантик объекта идентичный списку из редактора классификатора с помощью mapapi
Я сейчас пишу редактор обстановок. Для редактирования объекта мне необходимо из классификатора получить список семантик, которые можно (или обязательно) добавлять к создаваемому/редактируемому объекту.
Я использую следующие функции из rscapi.h:
[CODE]_MAPIMP long int _MAPAPI mapGetRscSemanticObjectCount( HRSC hRsc,long int incode, long int importance);
_MAPIMP long int _MAPAPI mapGetRscSemanticObjectCode(HRSC hRsc,long int incode, long int number,long int importance); [/CODE] Для примера открываю классификатор в Гис Оператор, выбираю один объект и сравниваю список семантик в ГИС Оператор с списком семантик, получаемый с помощью выше указанных функций из rscapi (для ALL_SEMANTIC или POSSIBLE + MUST). И эти списки не идентичны. Двух семантик, показываемых в ГИС Оператор не хватает в списке из rscapi (32798 32799) 17 (!) семантик есть в списке из rscapi но отсутствуют в ГИС Оператор: [CODE] 32801, 32802, 32803, 32804, 32805, 32809, 32810, 32811, 32812, 32850, 32851, 32852, 32853, 32854, 32855, 32856, 32857 [/CODE]Нашёл упоминание зарезервированных семантик (в документации формата RSC) -часть из 17 семантик являются зарезервированными, а часть - нет. [URL=http://gistoolkit.ru/download/classifiers/formatrsc.pdf]13-14 страница[/URL]. Или в документации не полный список зарезервированных семантик?
Каким образом ГИС Оператор получает информацию о том, какие семантики относятся к объекту, а какие нет?