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

Отрисовка временных пользовательских объектов

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Отрисовка временных пользовательских объектов, Отрисовка пользовательских объектов в прикладных задачах со смещением и без
 
Здравствуйте! Тема много раз поднималась, хотелось бы все-таки обобщить как правильно отрисовывать пользовательские объекты в прикладных задачах написанных на PanApi используя mapapi функции ? Универсально, с возможностью использовать на Windows и Linux.
Исходные данные: имеется приложение с mdi окнами, карта в них рисуется по аналоргии с Вашим  классом(буфер выводиться в  XImage), интересует вопрос как правильно на событие paintEvent отрисовать в прикладной задачи произвольный объект. PaintEvent Mdi окна привожу ниже, здесь XCONTEXT context - глобальная переменная, в саму задачу он приходит но        
Код
int res = mapPaintOffsetMapObject95(HMap, dc.operator HDC(), &rect, &ObjectImage, Info,  &delta, PP_PLANE);
        qDebug()<<res; всегда 0;
При перемщение мышки объект рисуется через  
Код
mapViewOffsetMapObject(HMap, GetMapWindowHandle(),
                       &MapLeftTop, &ObjectImage, Info, &delta, PP_PLANE);
тоже с подмигиваниями.
Пробывал в задачу передовать QImage ScreenImageBuffer и отрисовывать с помощью                  

Код
int res = mapPaintUserObjectToXImage(HMap, &ximage, 0, 0, &rect, &ObjectImage,                                             &data, PP_PLANE); 

Здесь возращается 1, но в метрику добавляю delta на смещение, на mousemove все рисуется со смещением, на Paint не рисует, как быть?

Код
void MdiChild::paintEvent(QPaintEvent *event){
    RECT rect =qrectToRect(event->rect());
    //qDebug() << event->rect();
    LONGPOINT pos;
    pos.x = horizontalScrollBar()->value();
    pos.y = verticalScrollBar()->value();
    VarHorzPos = pos.x;
    VarVertPos = pos.y;
#ifdef __linux
    memset(&context,0,sizeof(XCONTEXT));
    context.xcDisplay = QX11Info::display();
    context.xcWindow = this->viewport()->winId();
    context.xcContext = XCreateGC(context.xcDisplay, context.xcWindow, 0, NULL);
    context.xcPoint.X = 0;
    context.xcPoint.Y = 0;
    mdicontext = (HDC)&context;

#else
    mdicontext = this->viewport()->winId();
#endif
    mapWindowLink.OnPaintEx(mdicontext, 0, &pos, rect); // в linux HDC == HWND
    
} 
 
Здравствуйте.

Рекомендуется выполнять отрисовку пользовательских объектов с помощью функций, рисующих в память, например, mapPaintUserObjectToXImage. Отрисовка пользовательских объектов должна происходить сразу после каждой отрисовки карты.
Страницы: 1
Читают тему (гостей: 1)



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

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