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

Текст во "Флагах" рисуется не по центру

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Текст во "Флагах" рисуется не по центру
 
Приветствую!

ГИС Конструктор для Qt Designer x64 (версия 12.6.0), ОС Astra Linux

В новой версии "сломалось" рисование текста внутри полотнища.

Код
#include <QString>
#include <QDebug>
#include <QImage>
#include "mapapi.h"
#include "sitapi.h"
#include "rscapi.h"
#include "mapcreat.h"
#include "maptype.h"

HOBJ createObjectByKeyOnePoint(HMAP hmap, const char * key) {
   HOBJ hobj = mapCreateObject(hmap, IDDOUBLE2, 0);
   double x = 6166598.10;
   double y = 7412695.27;
   if (hobj != 0) {
      if (mapRegisterObjectByKey(hobj, key) != 0) {
         mapAppendPointPlane(hobj, x, y, 0);
         mapAppendSemantic(hobj, 5400L, "123 123 123", 11);
         mapCommitObject(hobj);
      } else {
         qDebug() << "mapRegisterObjectByKey error";
      }
   } else {
      qDebug() << "mapCreateObject error";
   }
   return hobj;
}


void paintMapObj(HMAP hmap, HOBJ hobj) {
   DFRAME frame;
   mapGetTotalBorder(hmap, &frame, PP_PICTURE);
   RECT rect;
   rect.left = frame.X1;
   rect.right = frame.X2;
   rect.top = frame.Y1;
   rect.bottom = frame.Y2;
   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);
   qDebug()
         << mapPaintMapObjectToDib(hmap, desc.Point, desc.Width, desc.Height,
               &rect, 0, hobj);
   QImage im((const uchar*) desc.Point, desc.Width, desc.Height, desc.RowSize,
         QImage::Format_RGB32);
   QString fileName("/tmp/obj");
   fileName += QString::number(mapGetObjectNumber(hobj));
   fileName += ".png";
   if (!im.save(fileName, "PNG")) {
      qDebug() << "image save error";
   }
   free((void*) desc.Point);

}

// тест рисования флагов
int main(int argc, char ** argv) {
   QString* siteName = new QString("/home/user/temp/testDrawFlagsText.sitx");
   QString* rscName = new QString("/home/user/temp/operator.rsc");
   CREATESITEUN cs;
   memset((void*) &cs, 0, sizeof(cs));
   cs.Length = sizeof(CREATESITEUN);
   cs.EllipsoideKind = 9;
   cs.MapType = 16;
   cs.Reserve = 0;
   cs.Scale = 100000;
   HMAP hmap = mapCreateSiteUn((const WCHAR*) siteName->constData(),
         (const WCHAR*) rscName->constData(), &cs);
   if (hmap != 0) {
      mapSetRealShowScale(hmap, 10000.);

      HOBJ hobj = createObjectByKeyOnePoint(hmap, "009991001001");
      if (hobj != 0) {
         //освобождаем объект
         mapFreeObject(hobj);
      } else {
         qDebug() << "createObjectByKeyOnePoint error";
      }
      mapCloseMap(hmap);
   } else {
      qDebug() << "mapCreateSiteUn error";
   }

   //переоткрываем карту
   hmap = mapOpenAnyData((const WCHAR*) siteName->constData());
   if (hmap != 0) {
      mapSetRealShowScale(hmap, 25000.);
      HOBJ hobj = mapCreateObject(hmap, IDDOUBLE2, 0);
      mapReadObjectByNumber(hmap, 0, hobj, 1, 1);
      paintMapObj(hmap, hobj);

      //освобождаем объект
      mapFreeObject(hobj);
      mapCloseMap(hmap);
   } else {
      qDebug() << "mapOpenAnyData error";
   }

}

Результат для 12.6.0
Результат для 12.5.0

С уважением,
Матвеев П.В.
 
Здравствуйте!

В ближайшее время уточним данный вопрос. Спасибо!
 
Здравствуйте!

Проблему со смещением подписи повторили. Исправление войдет в следующую версию ГИС Конструктор.
Спасибо за сообщение!
 
Здравствуйте, Павел!

На сайте доступна новая версия ГИС Конструктор для Astra Linux SE c внесенными исправлениями.

Спасибо!
 
Приветствую!

В 12.6.1 проблема решена, спасибо!

С уважением,
Матвеев П.В.
 
Приветствую!

Актуально для сертифицированной версии 12.5.2. Какие варианты решения проблемы возможны?

С уважением,
Матвеев П.В.
 

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

Решить данную проблему можно с помощью установки принтерного вида отображения.

 
Приветствую!

Этот способ по умолчанию работает только с использованием компонентов qt?

Меня не устраивает, по причине многопоточной отрисовки и отрисовки без UI
В данный момент пробую переопределить функции отрисовки, но не все получается пока.

С уважением,
Матвеев П.В.
 
Здравствуйте!

По умолчанию ГИС Конструктор использует компоненты Qt для отрисовки принтерно-растрового вида. В Вашем случае установка функций обратного вызова для определения собственного метода отрисовки должна решить проблему.
Ознакомиться с реализацией функций обратного вызова и способом их установки можно в исходных текстах библиотеки компонентов из состава инсталляции (/usr/share/gisdesigner/example/Sources/qdmwina.cpp).
Страницы: 1
Читают тему (гостей: 1)



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

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