Поехали.
Код |
---|
//maptype.h
// ЗАРЕЗЕРВИРОВАННЫЕ КОДЫ СЕМАНТИЧЕСКИХ ХАРАКТЕРИСТИК,
// ВЛИЯЮЩИЕ НА ВИД ЗНАКА
// ---------------------------------------------------
#define EXTSEMANTIC 31001 // НАЧАЛО ДИАПАЗОНА СЕРВИСНЫХ СЕМАНТИК
#define SEMIMAGESCALE 31001 // МАСШТАБ ОТОБРАЖЕНИЯ ЗНАКА В ПРОЦЕНТАХ
#define SEMIMAGECOLOR 31002 // ЦВЕТ ОТОБРАЖЕНИЯ ЗНАКА RGB
#define SEMIMAGEHIGHT 31003 // ВЫСОТА ШРИФТА
#define SEMIMAGEFONT 31004 // НАЗВАНИЕ ШРИФТА
#define SEMIMAGETHICK 31005 // ТОЛЩИНА ЛИНИИ В ММ
#define SEMIMAGETHICK2 31006 // ТОЛЩИНА ОКОНЧАНИЯ ЛИНИИ В ММ
#define SEMCOLORWEIGHT 31007 // ВЕС ЦВЕТА ОБЪЕКТА В ПРОЦЕНТАХ
#define SEMLINETHICK 31008 // ТОЛЩИНА ЛИНИИ В ПУНКТАХ
#define SEMLINECOLOR 31009 // ЦВЕТ ЛИНИИ
// ЧИСЛОВОЕ ЗНАЧЕНИЕ ЦВЕТА RGB
#define SEMLINEPATTERN 31010 // НОМЕР СИМВОЛА ЗАЛИВКИ ЛИНИИ В MAPINFOW.PEN
// (1-255)
#define SEMMARKSIZE 31011 // РАЗМЕР СИМВОЛА ЗНАКА В ПУНКТАХ (1-48)
#define SEMMARKCOLOR 31012 // ЦВЕТ ЗНАКА, ПЛОЩАДИ
// ЧИСЛОВОЕ ЗНАЧЕНИЕ ЦВЕТА RGB
#define SEMFONCOLOR 31013 // ЦВЕТ ФОНА
#define SEMBACKCOLOR 31013 // ЧИСЛОВОЕ ЗНАЧЕНИЕ ЦВЕТА RGB
#define SEMMARKSHAPE 31014 // НОМЕР СИМВОЛА ЗНАКА В СООТВЕТСТВУЮЩЕМ
// TRUETYPE ШРИФТЕ (БОЛЬШЕ 31),
// УКАЗАННОМ В СЕМАНТИКЕ SEMIMAGEFONT
#define SEMSQUAREPATTERN 31015 // НОМЕР СИМВОЛА ЗАЛИВКИ ПЛОЩАДИ В MAPINFOW.PEN
// (1-255)
#define SEMFONTSTYLE 31016 // СТИЛЬ ШРИФТА (СУММА ПРИЗНАКОВ:
// 0 - ОБЫЧНЫЙ, 1 - TОЛСТЫЙ, 16 - В РАМКЕ,
// 32 - С ТЕНЬЮ, 256 - БЕЛАЯ РАМКА)
#define SEMMARKANGLE 31017 // УГОЛ ПОВОРОТА ТОЧЕЧНОГО ОРИЕНТИРОВАННОГО ЗНАКА // 17/07/17
#define EXTSEMANTICEND 31017 // КОНЕЦ ДИАПАЗОНА
|
Семантики бывают разные:
Код |
---|
//maptype.h
enum SEMTYPE // ТИПЫ ЗНАЧЕНИЯ СЕМАНТИКИ
{
TUNDEFINED = -1, // Значение не установлено
TSTRING = 0, // Символьная строка
TNUMBER = 1, // Числовое значение
TANYFILE = 9, // Имя файла зарегистрированного типа
TBMPFILE = 10, // Имя файла BMP
TOLEFILE = 11, // Имя файла,обрабатываемого OLE-сервером
TREFER = 12, // Ссылка на произвольный объект карты
// (уникальный номер объекта)
TMAPFILE = 13, // Имя файла-паспорта района
TTXTFILE = 14, // Имя текстового файла
TPCXFILE = 15, // Имя файла PCX
TCODE = 16, // Значение в виде числового кода
// из классификатора значений
TDATE = 17, // Значение даты в числовом виде (ГГГГММДД)
TANGLE = 18, // Угловая величина в радианах
TTIME = 19, // Значение времени в числовом виде (ЧЧММСС)
TFONT = 20, // Имя шрифта ("Arial", "Courier"...)
TCOLOR = 21, // Числовое значение цвета в RGB
TFDIGITAL = 22, // Семантика типа формула числовая (с вычисляемыми значениями)
TFSTRING = 23, // Семантика типа формула символьная (с вычисляемыми значениями)
TLAST = 23, // ВЕРХНЯЯ ГРАНИЦА СПИСКА КОДОВ
TDOCREFMIN = 9, // НИЖНЯЯ ГРАНИЦА ТИПА СЕМАНТИКИ - ССЫЛКА НА ДОКУМЕНТ (ГРАФИЧЕСКИЙ ФАЙЛ, КАРТА)
TDOCREFMAX = 15, // НИЖНЯЯ ГРАНИЦА ТИПА СЕМАНТИКИ - ССЫЛКА НА ДОКУМЕНТ (ГРАФИЧЕСКИЙ ФАЙЛ, КАРТА)
};
|
В зависимости от их типа - целое число, число с плавающей точкой, строка, формула числовая, формула символьная.
Вам нужна вот эта - от 0.0 до 500.0 % меняются её значения:
Код |
---|
#define SEMIMAGESCALE 31001 // МАСШТАБ ОТОБРАЖЕНИЯ ЗНАКА В ПРОЦЕНТАХ |
Это из моих наработок:
Код |
---|
bool VMapObject::appendSemantic(long exCode, const QString &value)
{
QByteArray koi8r = gis::common::convertStringToKOI8_R(value);
long rc = mapAppendSemantic(m_obj, exCode, koi8r.constData(),
koi8r.size() + 1);
return rc != 0;
}
bool VMapObject::appendSemantic(long exCode, long value)
{
long rc = mapAppendSemanticLong(m_obj, exCode, value);
return rc != 0;
}
bool VMapObject::appendSemantic(long exCode, double value)
{
long rc = mapAppendSemanticDouble(m_obj, exCode, value);
return rc != 0;
}
|
То есть вызвав для объекта hobj
Код |
---|
long rc = mapAppendSemanticDouble(hobj, SEMIMAGESCALE, 200.0);
|
Вы установите масштаб отображения в 200%.
Едем дальше - вызвав mapAppendSemantic вы добавите к объекту в список семантик новую семантику. Смотрим доки:
Код |
---|
//mapapi.h
// Добавить новую характеристику в семантику объекта,
// info - идентификатор объекта карты в памяти
// code - внешний код характеристики
// value - значение в виде числа двойной точности
// При ошибке возвращает ноль,
// при успешном выполнении - последовательный номер
// созданной характеристики
_MAPIMP long int _MAPAPI mapAppendSemanticDouble(HOBJ info, long int code,
double value);
// Удалить семантическую характеристику объекта
// info - идентификатор объекта карты в памяти
// number - последовательный номер характеристики,
// если номер равен "-1", удаляются все характеристики
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapDeleteSemantic(HOBJ info, long int number);
// Изменить значение семантической характеристики объекта
// info - идентификатор объекта карты в памяти
// number - последовательный номер характеристики,
// place - адрес строки, содержащей новое значение
// в символьном виде; Для семантики типа "классификатор"
// передается код значения в виде числа в символьном виде,
// то же - для типа "ссылка на объект".
// maxsize - длина передаваемой строки (для контроля)
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapSetSemanticValue(HOBJ info, long int number,
const char *place, long int maxsize);
|
У Вас есть возможность добавить семантику (и по коду возврата вы получите её порядковый номер в списке семантик), удалить семантику по её номеру, и изменить значение.
Я не знаю можно ли изменить значение семантики , если она число, то есть можно ли вызвать
_MAPIMP long int _MAPAPI mapSetSemanticValue(HOBJ info, long int number, const char *place, long int maxsize);
, передав в place, например, "175.0" для масштаба отображения, поэтому у себя я обычно сначала удаляю семантику, а потом заново её добавляю уже с другим значением.