Обеспечение картами выполняют топографические службы соответствующих ведомств.
![]() |
22.03.2022 17:27:20
[QUOTE]Илья Аникин написал:
[QUOTE][URL=/forum/user/7/]Oleg Belenkov[/URL] написал: Примеры формирования есть в коде IMLAPI (см. sdk13.zip\imlapi)s57navy\imlmain.cpp Код_IMLIMP long int _IMLAPI imlPaintExampleEx(long int type, const IMGDRAW * parm, const IMGCONTEXT * context, HRSC hrsc, const char * semantic) ... POLYDATAEX data; // Ident Length Code Type Scale Value unsigned char Semantic[] = { 0xFF, 0x7F, 16, 0, 136, 0, 2, 0, 100, 0, 137, 0, 2, 0, 170, 0}; data.Semantic = (char*)semantic;[/QUOTE] Насколько я понял, в вашем пример берется конкретная семнатика { 0xFF, 0x7F, 16... }. Откуда мне взять все эти циферки для семантики, которая интересует меня "Гос. принадлежность" код 1300?[/QUOTE] Если нужно отрисовать в окошке отдельно реальный объект с учетом его семантик, то функции типа PaintExample не для этого. Если нужен пример знака, но с учетом некоторых семантик, то нужно задать запись семантики. Для ее формирования есть классы, описанные в sdk14.zip\include\semdef.h и mapsem.h. Реализация в sdk14.zip\mapacces\semdef.cpp и mapsem.cpp. В sdk14.zip\imlapi\shape\shapesq.cpp есть пример заполнения семантик для отрисовки примера знака (Круговая диаграмма), с учетом кодов семантик, заданных в описании знака: [CODE]// -------------------------------------------------------- // Заполнить запись семантики для отрисовки примера знака // -------------------------------------------------------- int GetPieChart10Semantic(TLongString& buffer, const IMGDRAW* draw) { buffer.Clear(); int semcount = 0; struct SEMRECORD { SEMANTIC head; struct SEMBLOCK { unsigned short int code; SEMLONG item; } block[10]; } semantic; memset(&semantic, 0, sizeof(semantic)); semantic.head.Clear(); int value[10] = { 10, 5, 7, 13, 8, 12, 6, 14, 4, 6 }; for (int i = 1; i <= 10; i++) { IMGLONG* parm = (IMGLONG*)imlDrawParm(draw, i * 2 + 2); if (parm) { int semcode = parm->Value; if (semcode) { semantic.block[i - 1].code = semcode; semantic.block[i - 1].item.Type = 4; semantic.block[i - 1].item.Value = value[i - 1]; semcount++; } else break; } } if (semcount == 0) return 0; semantic.head.SetLength(semantic.head.GetLength() + semcount * sizeof(semantic.block[0])); buffer.addValue((char*)&semantic, semantic.head.GetLength()); return 1; }[/CODE] В данном случае семантики типа Целое число (4 байта). Это не универсальный пример. Для универсальности можно применить класс TSemnEdit. Добавить туда нужные записи и передать в структуру POLYDATAEX адрес записи (TSemnEdit::Address()). Для исключения линковки методов класса из других библиотек нужно включать в код #include "mapmacro.h" [CODE]#include "mapmacro.h" #include "mapsem.h" POLYDATAEX data; TSemnEdit semedit; semedit.Append(1300, 3); // код - 1300 (признак цвета), 3 - зеленый ... data.Semantic = semedit.Address(); ... [/CODE] И включить в проект файлы mapsem.cpp, semdef.cpp. |
|
|
© КБ Панорама, 1991-2022 Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности |