На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Отображение объектов HOBJ на QPixmap в QT4

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Отображение объектов HOBJ на QPixmap в QT4
 

Здравствуйте.
ГИС Конструктор для Qt Designer x64 (версия 13.1.0, Qt4, Qt5, ОС Astra Linux SE, релиз Смоленск)

Необходимо отобразить объекты HOBJ info на QPixmap* cshPxm с помощью функции mapPaintMapObject95 (cshPxm затем отображается на Q3ScrollView->viewport()).

При отображении объектов на cshPxm возникают проблемы: непонятно, что вносить в xCont.xcDisplay и xCont.xcWindow (XCONTEXT xCont).

Подскажите пожалуйста.

Изменено: and_iva - 20.05.2022 09:58:18
 
Здравствуйте!

Для рисования объекта на виджете можно использовать следующий алгоритм действий:
- выполнить отображение изображения объекта в память с помощью функции mapPaintMapObjectToDib (mapapi.h):
Код
// Вывести изображение объекта в DIB 
//  hmap      - идентификатор открытых данных 
//  lpDibBits - адрес первого байта буфера изображения (32 бита) 
//  width     - ширина изображения (кратно 32), 
//  height    - высота изображения, 
//  rect      - координаты фрагмента карты (Draw) 
//              в изображении (Picture). 
//  image     - описание вида объекта (см. MAPGDI.H), если объект 
//              должен рисоваться своим условным знаком - значение параметра 
//              можно установить в ноль, 
//  info      - идентификатор объекта карты в памяти 
//  erase     - признак предварительной очистки фона изображения 
//              (0 - фон не стирать, 1 - очистить фрагмент цветом фона) 
// При ошибке в параметрах возвращает ноль
_MAPIMP long int _MAPAPI mapPaintMapObjectToDib(HMAP hmap, char *lpImage, int width, int heigth, RECT *rect,
                                                PAINTPARM *image, HOBJ object);
_MAPIMP long int _MAPAPI mapPaintMapObjectToDibEx(HMAP hmap, char *lpImage, int width, int heigth, RECT *rect,
                                                  PAINTPARM *image, HOBJ object, int erase);
- перенести изображение из памяти на виджет с помощью QPainter.

Пример кода:
Код
// Отобразить объект в память
QImage tempImage(this->width(), this->height(), QImage::Format_RGB32);
tempImage.fill(backgroundColor);
mapPaintMapObjectToDib(HMap, (char*)tempImage.bits(), tempImage.width(), tempImage.height(), &rect, 0, HObj);

// Отрисовать на виджет
painter->drawImage(0, 0, tempImage);
 
Большое спасибо! Помогло!

Появился второй вопрос.
Создаю объект HOBJ и отрисовываю его на карте:

HOBJ info = mapCreateSiteObject(hMap, site, IDDOBLE2, 0);
info = mapReadObjectByNumber(hMap, site, 1, 1);
mapPaintMapObjectToDib(hMap, (char*)image.bits(), dw, dh, &mapRect, 0, info);

Вопрос: как отображать этот объект другого размера, скажем, в 1.5 раза меньше или больше?
Изменено: and_iva - 15.06.2022 10:19:48
 

Здравствуйте!

Для изменения размера объекта можно выполнить следующие действия:

- изменить масштаб отображения карты с помощью метода SetViewScale компонента QDMapView или функции mapSetViewScale (разделы 3.6.16  и 3.8.4 Руководства программиста по ГИС Конструктор для Qt Designer);

- вывести изображение способом, описанным выше.

Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2022

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности