Приветствую!
ГИС Конструктор для Qt Designer x64 (версия 12.3.0), ОС Astra Linux
Знак создается и отображается нормально.
Код |
---|
#include <QString>
#include <QTextCodec>
#include <QDebug>
#include <QImage>
#include "qdmcmp.h"
#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/testCreateCustomObject.sitx");
QString* rscName = new QString("/home/user/temp/Topo100t.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);
mapSetViewType(hmap, 1);
if (hmap != 0) {
long int siteIndex = mapGetSiteCount(hmap);
HOBJ hobj = mapCreateObject(hmap);
if (hobj != 0) {
//создадим объект
if (mapDescribeObject(hobj, 1215) != 0) {
double x = 500.;
double y = 500.;
mapAppendPointPlane(hobj, x, y, 0);
if (mapCommitObject(hobj) != 0) {
mapSetRealShowScale(hmap, 100000);
saveMap(hmap, "1.png");
} else {
qDebug() << "mapCommitObject error";
}
} else {
qDebug() << "mapDescribeObject error";
}
//освобождаем объект
mapFreeObject(hobj);
} else {
qDebug() << "mapCreateObject error";
}
mapCloseMap(hmap);
}
}
|
Для знака с внутренним кодом 1216 тоже все хорошо. Создание по внешнему коду тоже успешно работает. Даже функцию поворота на всякий случай вызывал (ну мало ли..) все работает нормально.
Проверить есть ли знак в классификаторе с указанным внешним кодом и локализацией можно при помощи: mapGetRscObjectsCount(mapGetRscIdent(hmap,hsite), 14100000, LOCAL_POINT)
С уважением,
Матвеев П.В.