Приветствую!
Используем ГИС Конструктор для Qt Designer x64 (версия 12.6.1), ОС Astra Linux
Появилась необходимость объединить несколько sxf-файлов в один sitx. Однако, если сначала импортировать карту с помощью [B][I]ImportFromAnySxfEx[/I][/B], а затем добавить ее с помощью [I][B]UpdateFromAnySxf, [/B][/I]то импортированные знаки не совпадают.
[IMG WIDTH=220 HEIGHT=112]https://drive.google.com/thumbnail?id=1Wl9jzQZ2F8pHswW51fklmzJjCFtuHRpX[/IMG] [IMG WIDTH=220 HEIGHT=112]https://drive.google.com/thumbnail?id=1lHARVC8N4gR51P39R0W-yyg-PRVRQB8a[/IMG]
Код для воспроизведения:[CODE]#include <QString>
#include <QDebug>
#include <QImage>
#include "mapapi.h"
#include "sitapi.h"
#include "rscapi.h"
#include "mapcreat.h"
#include "maptype.h"
#include "vecexapi.h"
long int msgHangler(long int hwnd, long int code, long int p1, long int p2,
long int typemsg){
return 0;
}
void saveMap(HMAP hsite, QString filename) {
XIMAGEDESC desc;
DFRAME frame;
mapGetTotalBorder(hsite, &frame, PP_PICTURE);
RECT rect;
rect.left = frame.X1 + 1300 ;
rect.right = frame.X2/10;
rect.top = frame.Y1 + 2000;
rect.bottom = frame.Y2/10;
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(hsite, &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 2 save error";
}
free(desc.Point);
}
int main() {
QString sxfName("/tmp/sxf/G-44-12.SXF");
QString mapName("/tmp/sxf/G-44-12.sitx");
QString rscName("/tmp/sxf/200t05g.rsc");
long rc = ImportFromAnySxfEx(0, sxfName.toLatin1().constData(), rscName.toLatin1().constData(),
mapName.toLatin1().data(), mapName.length()-2,&msgHangler,0, 0);
if(rc == 0) {
qDebug() << " ==== Import Error";
return 0;
}
HSITE hsite = mapOpenAnyData((const WCHAR*) mapName.constData());
mapSetRealShowScale(hsite, 10000);
saveMap(hsite, "1.png");
rc = UpdateFromAnySxf(hsite, sxfName.toLatin1().constData(), mapName.toLatin1().data(), mapName.length(), &msgHangler, 0,2);
if(rc == 0 ) {
qDebug() << " ==== Update Sxf Error";
return 0;
}
saveMap(hsite, "2.png");
mapCloseData(hsite);
}
[/CODE]
С уважением,
Александр Попов
Используем ГИС Конструктор для Qt Designer x64 (версия 12.6.1), ОС Astra Linux
Появилась необходимость объединить несколько sxf-файлов в один sitx. Однако, если сначала импортировать карту с помощью [B][I]ImportFromAnySxfEx[/I][/B], а затем добавить ее с помощью [I][B]UpdateFromAnySxf, [/B][/I]то импортированные знаки не совпадают.
[IMG WIDTH=220 HEIGHT=112]https://drive.google.com/thumbnail?id=1Wl9jzQZ2F8pHswW51fklmzJjCFtuHRpX[/IMG] [IMG WIDTH=220 HEIGHT=112]https://drive.google.com/thumbnail?id=1lHARVC8N4gR51P39R0W-yyg-PRVRQB8a[/IMG]
Код для воспроизведения:[CODE]#include <QString>
#include <QDebug>
#include <QImage>
#include "mapapi.h"
#include "sitapi.h"
#include "rscapi.h"
#include "mapcreat.h"
#include "maptype.h"
#include "vecexapi.h"
long int msgHangler(long int hwnd, long int code, long int p1, long int p2,
long int typemsg){
return 0;
}
void saveMap(HMAP hsite, QString filename) {
XIMAGEDESC desc;
DFRAME frame;
mapGetTotalBorder(hsite, &frame, PP_PICTURE);
RECT rect;
rect.left = frame.X1 + 1300 ;
rect.right = frame.X2/10;
rect.top = frame.Y1 + 2000;
rect.bottom = frame.Y2/10;
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(hsite, &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 2 save error";
}
free(desc.Point);
}
int main() {
QString sxfName("/tmp/sxf/G-44-12.SXF");
QString mapName("/tmp/sxf/G-44-12.sitx");
QString rscName("/tmp/sxf/200t05g.rsc");
long rc = ImportFromAnySxfEx(0, sxfName.toLatin1().constData(), rscName.toLatin1().constData(),
mapName.toLatin1().data(), mapName.length()-2,&msgHangler,0, 0);
if(rc == 0) {
qDebug() << " ==== Import Error";
return 0;
}
HSITE hsite = mapOpenAnyData((const WCHAR*) mapName.constData());
mapSetRealShowScale(hsite, 10000);
saveMap(hsite, "1.png");
rc = UpdateFromAnySxf(hsite, sxfName.toLatin1().constData(), mapName.toLatin1().data(), mapName.length(), &msgHangler, 0,2);
if(rc == 0 ) {
qDebug() << " ==== Update Sxf Error";
return 0;
}
saveMap(hsite, "2.png");
mapCloseData(hsite);
}
[/CODE]
С уважением,
Александр Попов