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

Проблема отрисовки знаков с семантиками в unicode

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

ГИС Конструктор для Qt Designer x64 (версия 12.3.0), ОС Astra Linux проблема актуальна.

Для ПУ такт. соед. батальонн. сост. (009991001013) установил семантику "Произвольная надпись внутри знака" "12 абвгдеёж" при помощи mapAppendSemanticUnicode, mapSetSemanticValueUnicode, подпись вылезает за границы знака.

С уважением,
Матвеев П.В.
 
Для исправления этого в принтерном виде добавлена новая функция обратного вызова для запроса ширины строки.
Эта ошибка у Вас проявляется при типе отображения VT_SCREEN или VT_PRINTRST?
 
Приветствую!

Если это про вид, который устанавливается при помощи mapSetViewType, то я его не устанавливаю явно. По умолчанию вроде VT_SCREEN используется.

С уважением,
Матвеев П.В.
 
У меня данный знак в VT_SCREEN без проблем рисуется. Попробую сделать скриншот, чтобы сравнить.
 
Приветствую!

Тест:
Код
#include <QString>
#include <QTextCodec>
#include <QDebug>
#include <QImage>

#include "mapapi.h"
#include "sitapi.h"
#include "rscapi.h"
#include "mapcreat.h"
#include "maptype.h"

void saveMap(HMAP hmap, QString filename) {
    XIMAGEDESC desc;
    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;

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

    mapPaintToXImage(hmap, &desc, 0,0, &rect);
    QImage im2((const uchar*) desc.Point, desc.Width,
               desc.Height, desc.RowSize,
               QImage::Format_RGB32);
    if (!im2.save("/tmp/" + filename, "PNG")) {
        qDebug() << "file save error";
    }
    free(desc.Point);
}

// тест рисования флага
int main(int argc, char ** argv) {
   QString* siteName = new QString("/home/user/temp/testFlagPaint.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;

   HMAP hmap = mapCreateSiteUn((const WCHAR*) siteName->constData(),
         (const WCHAR*) rscName->constData(), &cs);
   if (hmap != 0) {
      long int siteIndex = mapGetSiteCount(hmap);
      HOBJ hobj = mapCreateObject(hmap);
      if (hobj != 0) {
         //создадим объект
         if (mapRegisterObjectByKey(hobj, "009991001001") != 0) {
            double x = 500.;
            double y = 500.;
            mapAppendPointPlane(hobj, x, y, 0);
            mapAppendPointPlane(hobj, x, y, 0);

            QTextCodec* codec = QTextCodec::codecForName("UTF-8");
            QTextCodec::setCodecForCStrings(codec);
            QString value("12 абвгдеёж");
            mapAppendSemanticUnicode(hobj, 5400, (const WCHAR*)(value.constData()), value.size());
            long rc = mapCommitObject(hobj);
            if (rc == 0) {
               qDebug() << "mapCommitObject error";
            }
            mapSetRealShowScale(hmap, 100000);

            saveMap(hmap, "1.png");
         } else {
            qDebug() << "mapRegisterObjectByKey error";
         }
         //освобождаем объект
         mapFreeObject(hobj);
      } else {
         qDebug() << "mapCreateObject error";
      }
      mapCloseMap(hmap);
   }

}

Результат:


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

В ГИС Конструктор FREE для Qt Designer x64 (версия 12.3.0) от 18.04.2018, ОС Astra Linux проблема актуальна


С уважением,
Матвеев П.В.
 
Код
QString* siteName = new QString("/home/user/temp/testFlagPaint.sitx");
   QString* rscName = new QString("/home/user/temp/operator.rsc");

Спасибо за пример.

а где можно взять эти файлы. В папках к Панораме есть какие то файлы rsc  а вот sitx нету. Как его можно создать или откуда взять.

 
sitx - это один из форматов карты, как и map и sit. Это любая Ваша карта.

А что хотелось бы с флажком получить?
Подпись имеет крупный шрифт и большую длину.
Можно уменьшить шрифт, сократить текст, сделать подпись масштабируемой, чтобы автоматически вмещалась в заданные рамки (но стала мельче).
Можно поместить подпись ниже флажка.


Тут нет стандартного решения.
 
Приветствую!

Проблема с флажком следующая: при отрисовке флажка неправильно позиционируется текст, в случае если семантика 5400 устанавливается в Unicode.
В случае если семантика устанавливается в koi8-r проблемы нет - подпись полностью помещается внутри полотнища флага и, в случае необходимости, флаг растягивается так, что бы подпись была внутри.
Данная проблема проявляется не во всех режимах отрисовки. В VT_PRINTRST проблема не проявляется, но я не могу его использовать, т.к. рисую не в основном потоке.

С уважением,
Матвеев П.В.
Страницы: Пред. 1 2
Читают тему (гостей: 1)



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

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