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

Максим Казаровец (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Максим Казаровец
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 13 След.
mapPaintMapObjectToDib не рисует в буфер, При отрисовки объекта карты не рисуется в память
 
[QUOTE]Максим Казаровец написал:
При чем здесь GTK FREE и QImage, XIMAGEDESC? Он с такими объектами не работает.[/QUOTE]
Извиняюсь, версию gtk указал только для того, чтобы было понятно какие библиотеки ядра используются(версия). Использую функцию mapapi для отрисовки объекта, разработка ведётся в qt5 с подключением библиотек из состава gtk указанной версии. XIMAGEDESC осталась от эксперимента с функциями отрисовки, буфер то всё равно передаётся и он пустой.
Изменено: Максим Казаровец - 03.03.2021 22:59:40
mapPaintMapObjectToDib не рисует в буфер, При отрисовки объекта карты не рисуется в память
 
Здравствуйте, при разработке под Linux использую такой код для отрисовки иконок объектов в точке на карте. На linux все нормально отрабатывает, на Windows буфер пустой, где может быть ошибка? Версия GTK FREE 13.2.1.1.

[CODE]QIcon ListObjectDialog::getObjectIcon(HOBJ obj)
{
   RECT ClientRect;

   int ClientHeight = 64;
   int ClientWidth = 64;
    MAPDFRAME frame;
    mapObjectFrame(obj, &frame);
    mapPlaneToPicture(map, &frame.X1, &frame.Y1);
    mapPlaneToPicture(map, &frame.X2, &frame.Y2);
    double scale = ClientWidth/(abs(frame.X2 - frame.X1)*1.000000);
    double scale2 = ClientHeight/(abs(frame.Y2 - frame.Y1)*1.000000);
    if(scale2 < scale) scale = scale2;
    double oldscale = mapGetRealShowScale(map);
    long x = 0;
    long y = 0;
    if(mapObjectLocal(obj) == LOCAL_SQUARE) {
        scale = scale/2;
    }
    mapChangeViewScale(map, &x, &y, scale);



     mapObjectFrame(obj, &frame);
     DOUBLEPOINT _Center;
     _Center.X = 0.5*(frame.X1+frame.X2);
     _Center.Y = 0.5*(frame.Y1+frame.Y2);

     mapPlaneToPicture(map, &_Center.X, &_Center.Y);

     RECT rect;
    rect.LT = _Center.X - ClientWidth/2 ;
    rect.UP = _Center.Y - ClientHeight/2 ;
    rect.RT = rect.LT + ClientWidth;
    rect.DN = rect.UP + ClientHeight;

   XIMAGEDESC desc;
   memset((void*) &desc, 0, sizeof(desc));
   desc.Width = rect.right - rect.left;
   desc.Height = rect.bottom - rect.top;
   desc.Depth = 32;
   desc.CellSize = desc.Depth / 8;
   desc.RowSize = desc.Width * desc.CellSize;
   desc.Point = (char*) malloc(desc.Height * desc.RowSize);

   memset((void*) desc.Point, 0, desc.Height * desc.RowSize);
   mapPaintMapObjectToDib(map, desc.Point, desc.Width, desc.Height,
                          &rect, nullptr, obj);
   QImage im((const uchar*) desc.Point, desc.Width, desc.Height, desc.RowSize,
             QImage::Format_ARGB32);
   im = im.scaled(48, 48);

   mapSetRealShowScale(map, oldscale);
   free(desc.Point);

   return QPixmap::fromImage(im);

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

[CODE]int res = mapPaintUserObjectToXImage(HMap, &ximage, 0, 0, &rect, &ObjectImage, &data, PP_PLANE); [/CODE]
Здесь возращается 1, но в метрику добавляю delta на смещение, на mousemove все рисуется со смещением, на Paint не рисует, как быть?

[CODE]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
   
} [/CODE]
Использование аналога GetCurrentModuleName, При создании кнопок предусмотрена передача в структуре TASKBUTTONINFO параметра HINSTANCE, как в linux по нему получить путь библиотеки?
 
[QUOTE]Константин Ганюшин написал:
Здравствуйте.Пример добавления кнопок с помощью PANAPI можно найти в  примерах разработки приложений в ГИС "Оператор" SE .[/QUOTE]
Спасибо, посмотрел, не понятно как в дальнейшем из qrc файла по id кнопки идет загрузка изображений?
Изменено: Максим Казаровец - 10.12.2020 12:09:41
Использование аналога GetCurrentModuleName, При создании кнопок предусмотрена передача в структуре TASKBUTTONINFO параметра HINSTANCE, как в linux по нему получить путь библиотеки?
 
Поясните еще почему в Pantask в функции InsertButton bmpFace стал int? хотя в maptype HBITMAP unsigned long int?
 typedef unsigned long int HANDLE;
 typedef HANDLE HBITMAP;
Использование аналога GetCurrentModuleName, При создании кнопок предусмотрена передача в структуре TASKBUTTONINFO параметра HINSTANCE, как в linux по нему получить путь библиотеки?
 
Да, извеняюсь, не передавал HINSTANCE при создании панели. Еще вопрос, как в Linux осуществляется подгрузка иконок на кнопки что передается в качестве hBitmap в структуре TASKBUTTONINFO, и как использовать InsertButtonPNG? Пока думаю написать отдельную exern функцию по запросу QIcon из библиотеки. Есть ли варианты в Qt под Linux аналоги ::FindResource(hInst,  MAKEINTRESOURCE(commandId), RT_BITMAP)?
Использование аналога GetCurrentModuleName, При создании кнопок предусмотрена передача в структуре TASKBUTTONINFO параметра HINSTANCE, как в linux по нему получить путь библиотеки?
 
При создании кнопок предусмотрена передача в структуре TASKBUTTONINFO параметра HINSTANCE, как в linux по нему получить путь библиотеки? Пока писал так, после обновления на крайний ГИС Конструктор перестало работать? Какие есть варианты получения пути? Под Windows пока не тестил код, так накидал.
[CODE] QString path = "";
       WCHAR Text[MAX_PATH_LONG] = {0};
#ifdef _WIN32
       ::GetModuleFileName((char*)but.hTask, Text, sizeof(Text));
       path = QString::fromUtf16(Text);
#elif __linux__
   link_map* map;
   dlinfo((void*)but.hTask,RTLD_DI_LINKMAP, &map);
   if(!map)
       return 0;
   path.append(*map->l_name);

   delete map;
#endif[/CODE]
Изменено: Максим Казаровец - 07.12.2020 15:42:11
Редактирование классификатора
 
Не совсем понятно, посчему сразу не завести нормальную работу со структурой MAPLISTPARM в диалоге "Список данных"? С инициализацией вкладок и выбранных в карт?
Редактирование классификатора
 
[QUOTE]Елена Кузнецова написал:
В прикладных программах "Редактор классификатора" не доступен.Только настольных программах ГИС Панорама (ГИС Карта) или ГИС Оператор.[/QUOTE]
Здравствуйте, планируется ли добавление диалогов под linux, доступных в GTK под windows?(Диалоги: паспорт карты, настройка цветовой палитры, поиск по имени, редактор классификатора и т.д.) Под windows они есть, в api у Вас описаны, а по факту...
Сборка прикладных задач под linux, Итересует кто как собирает прикладные задачи под Linux
 
[QUOTE]Vladimir Letov написал:
Второй Ваш вопрос я не понял.[/QUOTE]
Более подробно, как правильно отрисовать перемещение объекта в прикладной задачи на PanApi? Интересует какие функции использовать, чтобы отрисовать под Linux и Windows? Если использовать функции с отрисовкай в XImage каким образом отобразить перемещенный объект без сохранения на карту? Можно пример?
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 13 След.



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

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