Здравствуйте!
Прошу прощения за задержку с ответом.
Отрисовка образца условного знака, использующего iml, с точки зрения программирования ничем не отличается от отрисовки образца обычного знака.
ГИС-ядро само определяет все необходимые параметры отображения исходя из порядкового номера объекта в классификаторе.
Привожу исходный код примера отрисовки iml-знака "Разграничительная линия между батальонами" из классификатора operator.rsc (проверено на текущей версии ГИС Конструктор 12 для ОС Astra Linux SE). Данный пример может быть применен для отрисовки образца любого знака из классификатора.
[CODE]#include <assert.h>
#include <iostream>
#include <QImage>
#include "mapapi.h"
int main()
{
// Открыть карту
HMAP mapHandle = mapOpenData("/usr/share/gisdesigner/examples/Data/Специальные\ карты/Оперативная\ обстановка/RedExample/battalion\ red/BattalionRed.sitx");
assert(mapHandle);
// Создать объект в памяти
HOBJ objectHandle = mapCreateObject(mapHandle);
assert(objectHandle);
// Прочитать объект с карты
int listNumber = 1;
int objectNumber = 101; // разграничительная линия между батальонами
HOBJ readObject = mapReadObjectByKey(mapHandle, mapHandle, objectHandle, listNumber, objectNumber);
assert(readObject);
// Получить номер объекта в классификаторе
long rscObjectNumber = mapObjectCode(objectHandle);
assert(rscObjectNumber);
std::cerr << "rsc object number: " << rscObjectNumber << std::endl;
// Получить внешний код объекта в классификаторе
long objectCode = mapObjectExcode(objectHandle);
assert(objectCode);
std::cerr << "object code: " << objectCode << std::endl;
// Получить классификатор
HRSC rscHandle = mapGetRscIdent(mapHandle, mapHandle);
assert(rscHandle);
// Получить номер функции отображения и параметры из классификатора
long rscObjectFunctionNumber = mapGetRscObjectFunction(rscHandle, rscObjectNumber);
assert(rscObjectFunctionNumber);
std::cerr << "rsc object function number: " << rscObjectFunctionNumber << std::endl;
const char* rscObjectParameters = mapGetRscObjectParameters(rscHandle, rscObjectNumber);
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;
const char *objectText = NULL;
long objectLocal = mapObjectLocal(objectHandle);
long isPainted = mapPaintExampleObjectByFuncToXImage(mapHandle, &ximageDesc, &rectDraw, rscObjectFunctionNumber,
rscObjectParameters, colorCount, palette, objectText, objectLocal);
assert(isPainted);
// Вывести картинку в файл
QImage image((uchar*)(ximageDesc.Point), ximageDesc.Width, ximageDesc.Height, QImage::Format_ARGB32);
image.save("/tmp/out.png");
mapFreeObject(objectHandle);
mapCloseData(mapHandle);
mapCloseMapAccess();
return 0;
}[/CODE]