Приветствую!
ГИС Конструктор для Qt Designer x64 (версия 12.6.0), ОС Astra Linux
В новой версии "сломалось" рисование флагов и ряда других знаков: подписи, рисуемые для флагов по умолчанию стали нечитаемы.
[CODE]#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);
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/testDrawFlags.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";
}
}
[/CODE]
[URL=https://drive.google.com/open?id=1vVwDmpypQxzBDf7w-XUD4-aqUAOOkiE_]Результат для 12.6.0[/URL]
[URL=https://drive.google.com/open?id=1JuU88QfsMIOTc5_w7C1F1XY_lfORRxLg]Результат для 12.5.0[/URL]
С уважением,
Матвеев П.В.
ГИС Конструктор для Qt Designer x64 (версия 12.6.0), ОС Astra Linux
В новой версии "сломалось" рисование флагов и ряда других знаков: подписи, рисуемые для флагов по умолчанию стали нечитаемы.
[CODE]#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);
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/testDrawFlags.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";
}
}
[/CODE]
[URL=https://drive.google.com/open?id=1vVwDmpypQxzBDf7w-XUD4-aqUAOOkiE_]Результат для 12.6.0[/URL]
[URL=https://drive.google.com/open?id=1JuU88QfsMIOTc5_w7C1F1XY_lfORRxLg]Результат для 12.5.0[/URL]
С уважением,
Матвеев П.В.