Здравствуйте!
Привожу пример отображения образцов объектов из классификатора перебором:
Привожу пример отображения образцов объектов из классификатора перебором:
Код |
---|
#include <assert.h> #include <iostream> #include <QImage> #include "mapapi.h" #include "rscapi.h" void PaintObject(HMAP mapHandle, HRSC rscHandle, long rscIncode) { // Получить информацию по объекту из классификатора RSCOBJECT rscObject; mapGetRscObject(rscHandle, rscIncode, &rscObject); // Получить номер функции отображения и параметры из классификатора long rscObjectFunctionNumber = mapGetRscObjectFunction(rscHandle, rscIncode); assert(rscObjectFunctionNumber); const char *rscObjectParameters = mapGetRscObjectParameters(rscHandle, rscIncode); assert(rscObjectParameters); // Запросить параметры палитры карты (для отображения объекта) COLORREF palette[256]; long colorCount = mapGetSiteColorsCount(mapHandle, mapHandle); mapGetSitePalette(mapHandle, mapHandle, palette, colorCount); // Выделить память для отрисовки объекта const int ICON_SIZE = 32; XIMAGEDESC ximageDesc; ximageDesc.Width = ICON_SIZE; ximageDesc.Height = ICON_SIZE; ximageDesc.Depth = 32; ximageDesc.CellSize = ximageDesc.Depth / 8; ximageDesc.RowSize = ximageDesc.Width * ximageDesc.CellSize; char *paintMemory = new char[ximageDesc.Width * ximageDesc.Height * ximageDesc.CellSize]; ximageDesc.Point = paintMemory; assert(paintMemory); // Отрисовать образец объекта RECT rectDraw; rectDraw.left = 0; rectDraw.top = 0; rectDraw.right = ICON_SIZE; rectDraw.bottom = ICON_SIZE; char *objectText = NULL; long isPainted = mapPaintExampleObjectByFuncToXImage(mapHandle, &ximageDesc, &rectDraw, rscObjectFunctionNumber, (char *) rscObjectParameters, colorCount, palette, objectText, rscObject.Local); assert(isPainted); // Вывести картинку в файл QImage image((uchar *) (ximageDesc.Point), ximageDesc.Width, ximageDesc.Height, QImage::Format_ARGB32); image.save("/tmp/rsc-images/" + QString::number(rscIncode) + ".png"); } int main() { // Открыть карту WCHAR mapPath[MAX_PATH_LONG]; mapPath[0] = 0; WcsCopy(mapPath, L"/usr/share/gisdesigner/examples/Data/Специальные\ карты/Оперативная\ обстановка/RedExample/battalion\ red/BattalionRed.sitx", sizeof(mapPath)); HMAP mapHandle = mapOpenDataUn(mapPath); assert(mapHandle); // Открыть классификатор WCHAR rscPath[MAX_PATH_LONG]; rscPath[0] = 0; WcsCopy(rscPath, L"/usr/share/gisdesigner/examples/Data/Специальные\ карты/Оперативная\ обстановка/RedExample/battalion\ red/operator.rsc", sizeof(rscPath)); HRSC rscHandle = mapOpenRscUn(rscPath); assert(rscHandle); // Отрисовать образцы всех объектов в классификаторе for (int objectNumber = 1; objectNumber <= mapGetRscObjectCount(rscHandle); objectNumber++) PaintObject(mapHandle, rscHandle, objectNumber); mapCloseData(mapHandle); mapCloseMapAccess(); return 0; } |