Приветствую!
ГИС Конструктор для Qt Designer x64 (версия 12.6.0), ОС Astra Linux
В новой версии "сломалось" рисование текста внутри полотнища.
Результат для 12.6.0
Результат для 12.5.0
С уважением,
Матвеев П.В.
ГИС Конструктор для 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"; } } |
С уважением,
Матвеев П.В.