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

Применение mapPaintExampleObjectByFuncDataToXImage

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Применение mapPaintExampleObjectByFuncDataToXImage
 
Добрый день. Хотелось бы увидеть пример применения функции _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); в особенности интересует заполнение структуры POLYDATAEX.
 
Цитата
Nikita Sarychev написал:
Добрый день. Хотелось бы увидеть пример применения функции _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); в особенности интересует заполнение структуры POLYDATAEX.

Добрый день!

В ветке нашего форума обсуждалась похожая тема:
https://www.gisweb.ru/forum/messages/forum7/topic11087/message90105/11087-poluchenie-izobrazheniya-obekta-iz-klassifikatora-s-uchetom-semantik#message90105
Изменено: Елена Кузнецова - 16.01.2023 15:34:29
 
Код
void PanoramaUtility::printRscObjectToImage(long incode, QImage& img)
{
    QTextCodec *codec = QTextCodec::codecForName( "KOI8-R");
    QString rscName = getClassifierName();
    qDebug() << "getClassifierName() - " << rscName;
    HMAP tmpMap = mapCreateTempSite( codec->fromUnicode( rscName).data());
    HRSC rscIdent = mapGetRscIdent( tmpMap, tmpMap);
    long rscObjFunc = mapGetRscObjectFunction( rscIdent, incode);
    const char* rscObjPars = mapGetRscObjectParameters( rscIdent, incode);
    long local = mapGetRscObjectLocal( rscIdent, incode);
    img = QImage( 100, 100, QImage::Format_RGB32);
    XIMAGEDESC xImageDesc;
    xImageDesc.Point     = (char *)img.bits();                  // Адрес начала области пикселов
    xImageDesc.Width     = img.width();                     // Ширина строки в пикселах
    xImageDesc.Height    = img.height();                     // Число строк
    xImageDesc.Depth     = img.depth();                  // Размер элемента в битах (8,15,16,24,32)
    xImageDesc.CellSize  = img.depth() / 8;               // Размер элемента(пиксела) в байтах
    xImageDesc.RowSize   = img.width() * xImageDesc.CellSize;      // Ширина строки в байтах
    RECT rct{ 0, 0, img.width(), img.height()};


    DRAWPOINT metric[2];
    metric[0].X = 0;
    metric[0].Y = 0;
    metric[1].X = 100;
    metric[1].Y = 100;


    POLYDATAEX data;
    int polyCounts = 2;
    data.Points =&metric[0];
    data.Count = 1;
    data.PolyCounts = &polyCounts;
    data.Text  = 0;


    COLORREF mapColors[256];
    memset(mapColors, 0, sizeof(mapColors));
    long mapColorsCount = mapGetSiteColorsCount(tmpMap, static_cast<void*>(tmpMap));
    mapGetSiteColors(tmpMap, static_cast<void*>(tmpMap), mapColors, mapColorsCount);


//    mapPaintExampleObjectByFuncToXImage( tmpMap, &xImageDesc, &rct, rscObjFunc,rscObjPars,0,nullptr,nullptr,local);
    mapPaintExampleObjectByFuncDataToXImage(tmpMap, &xImageDesc, 0, 0, &rct, rscObjFunc, rscObjPars, &data, mapColorsCount, mapColors);
    mapCloseMap( tmpMap);
}

Изначально в проекте использовалась функция mapPaintExampleObjectByFuncToXImage и все работало пол Линуксом. При переносе проекта на Аврора ОС вместо условного знака выводится просто серый фон. Пробовали также функцию mapPaintExampleObjectByFuncDataToXImage, но результат тот же.
 

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

Проблема, предположительно, связана с отсутствием установленных функций рисования графических примитивов в принтерном виде.
Для корректной отрисовки необходимо выполнить одно из следующих действий:
  • выполнить установку функций рисования графических примитивов. Пример установки приведен в исходных текстах примера Qml-приложения из состава ГИС Конструктор для ОС Аврора (/usr/share/gisdesigner/examples/panorama-mini/app/mapqtdrawfunctions.cpp).
  • установить экранный вид (VT_SCREEN) отображения данных, не требующий наличие функций обратного вызова, c помощью метода mapSetViewType() (mapapi.h)
Дополнительно можно ознакомиться с особенностями использования фреймворка Qt в библиотеках ГИС-ядра в пункт 3.2.1 Руководства программиста.

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



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

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