На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Программное изменение точки привязки объекта

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Программное изменение точки привязки объекта
 
В примере mapobj в функции MapWidget::CreateObjects вместо создания четырех групп объектов написал следующий код:
Код
{
    HOBJ hobj = mapCreateSiteObject(hMap, hSite);
    mapRegisterObject(hobj, 53330000, LOCAL_POINT);
    mapAppendPointPlane(hobj, x, y);
    mapCommitObject(hobj);
    mapFreeObject(hobj);
}

{
    HOBJ hobj = mapCreateSiteObject(hMap, hSite, IDDOUBLE2, 1);
    mapRegisterDrawObject(hobj, 0, LOCAL_TITLE);
    mapAppendPointPlane(hobj, x, y);
    IMGTEXT parm;    parm.Color = RGB(0, 0, 255);
    parm.BkgndColor = IMGC_TRANSPARENT;
    parm.ShadowColor = IMGC_TRANSPARENT;
    parm.Height = PIX2MKM(30);
    parm.Weight = FW_NORMAL;
    parm.Outline = 0;
    parm.Interval = 50;
    parm.Align = FA_LEFT|FA_BASELINE;
    parm.Service = 0;
    parm.Wide = UNIW_NORMAL;
    parm.Horizontal = 0;
    parm.Italic = 0;
    parm.Underline = 0;
    parm.StrikeOut = 0;
    parm.Type = 0;
    parm.CharSet = RUSSIAN_CHARSET;
    parm.Flag = 0;
    mapAppendDraw(hobj, IMG_TEXT, (char*)&parm);
    mapPutText(hobj, "111", 0);
    mapCommitObject(hobj);
    mapFreeObject(hobj);
}
В результате при запуске приложения и выборе "Объекты/Создать объекты на пользовательской карте" на карте размещается телевизионная башня и подпись сверху справа от нее. Как можно программно изменить точку привязки подписи, чтобы она разместилась, например, снизу от телевизионной башни?

Заранее спасибо.
 
Здравствуйте!

Для изменения положения подписи Вы можете воспользоваться одним из следующих вариантов:
- изменить выравнивание подписи с помощью функции mapPutTextHorizontalAlign() и mapPutTextVerticalAlign() (mapapi.h):
Код
  // Установить способ выравнивания текста по горизонтали
  // (FA_LEFT,FA_RIGHT,FA_CENTER)
  // info    - идентификатор объекта карты в памяти
  // subject - номер подобъекта (-1 - установить всем)
  // По умолчанию имеет значение FA_LEFT
  // При успешном выполнении возвращает установленное значение
_MAPIMP long int _MAPAPI mapPutTextHorizontalAlign(HOBJ info, long int align, long int subject);

  // Установить способ выравнивания текста по вертикали
  // (FA_BOTTOM,FA_TOP,FA_BASELINE,FA_MIDDLE)
  // info    - идентификатор объекта карты в памяти
  // subject - номер подобъекта (-1 - установить всем)
  // По умолчанию имеет значение FA_BASELINE
  // При успешном выполнении возвращает установленное значение
_MAPIMP long int _MAPAPI mapPutTextVerticalAlign(HOBJ info, long int align, long int subject);
- добавить в объект подобъект, состоящий из одной точки, с помощью функции mapCreateSubject() (mapapi.h). С помощью изменения координат данной точки в дальнейшем будет изменяться положение подписи. Для добавления подписи в новый подобъект необходимо в функции mapPutText в аргументе subject указать номер нового подобъекта.
Код
 // Создать дескриптор подобъекта в записи метрики
 // В конец записи добавляется дескриптор подобъекта с нулевым числом точек
 // Если предыдущий подобъект не содержит ни одной точки, то новый подобъект не
 // будет создан
 // info    - идентификатор объекта карты в памяти
 // Возвращает номер созданного подобъекта (с 1)
 // При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapCreateSubject(HOBJ info);
 
Спасибо. А чем отличается вызов функций mapPutTextHorizontalAlign, mapPutTextVerticalAlign от присвоение значения полю Align структуры IMGTEXT? Вызов функций дает результат, а присвоение разных значений полю у меня почему-то ни на что не влияет.
 
В данном случае выравнивание подписи необходимо выполнять с помощью вызовов функций mapPutTextHorizontalAlign и mapPutTextVerticalAlign для объекта.
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности