ГИС Конструктор для Qt Designer x64 (версия 11.10.5), ОС Astra Linux ГИС "Оператор" для силовых структур (версия 11.13.7), ОС Astra Linux
При попытке реализовать функционал формирования флагштоков, аналогично Редактирование\Нанесение КП из ГИС Оператор, столкнулся с проблемой: После заполнения метрики для знаков ПУ из классификатора operator.rsc, их габариты (mapObjectViewFrameEx и подобные), в ряде случаев, не пересекаются с изображением. В результате этого их трудно (невозможно) выбрать мышкой.
// Определяет габариты объектов (точечных, векторных и подписей) с учетом текущих // 17/11/17
// условий отображения (см. функции mapGetRealShowScale/mapSetRealShowScale и
// mapGetScaleMethod/mapSetScaleMethod)
// Для каждого подобъекта подписи создается прямоугольный подобъект,
// ограничивающий текст подписи
// info - исходный объект
// contour - объект, в который заносятся габариты исходного объекта
// hPaint - идентификатор контекста отображения для многопоточного вызова функции
// отображения (может быть ноль)
// При ошибке возвращает 0
_MAPIMP long int _MAPAPI mapGetObjectContour(HOBJ info, HOBJ contour, HPAINT hPaint);
// Запросить размеры в микронах и свойства экранного вида объекта
// hRsc - идентификатор классификатора карты
// incode - порядковый номер объекта (с 1)
// IMAGESIZE - структура входных данных (см. maptype.h)
// Строка string длиной length задается для
// определения горизонтального размера подписи
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapGetRscImageSize(HRSC hRsc, long int incode, IMAGESIZE * imagesize,
long int length = 0,char * string = 0);
// Запросить размеры в микронах и свойства принтерного вида объекта
// hRsc - идентификатор классификатора карты
// incode - порядковый номер объекта (с 1)
// IMAGESIZE - структура входных данных (см. maptype.h)
// Строка string длиной length задается для
// определения горизонтального размера подписи
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapGetRscPrnImageSize(HRSC hRsc, long int incode, IMAGESIZE * imagesize,
long int length = 0,char * string = 0);
// Запросить габаритную рамку изображения объекта (точечный, векторный)
// с учетом поворота объекта (IMAGEFRAME - см. maptype.h)
// Все размеры в микронах на "бумажном" изображении (в базовом масштабе)
// относительно первой точки метрики объекта в картографической системе
// Для пересчета полученных координат в метры на местности нужно
// их поделить на 1 000 000, умножить на базовый масштаб карты
// и добавить координаты первой точки метрики
// number - номер функции отображения (mapgdi.h)
// param - параметры отображения (mapgdi.h)
// angle - угол поворота объекта в радианах по часовой стрелке
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapGetRscMarkFrame(HRSC hRsc, long int number, const char * param, double angle, IMAGEFRAME * imageframe);
А каким образом эти методы помогут в поиске объектов в точке, в случае если точка находится в пределах полотнища верхнего флага? При поиске, как Вы уже неоднократно говорили происходит проверка пересечения области поиска с областью габаритов знака. В данном случае, как на картинке, пересечение пустое, и этот флаг никогда не находится!