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

Отображение рамки вокруг подписи с помощью структуры IMGDRAW

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Отображение рамки вокруг подписи с помощью структуры IMGDRAW
 
Здравствуйте.

Стоит задача отобразить рамку вокруг подписи. С отображением подписи рядом с объектом разобрался. В примере mapobj в классе MapWidget объявил переменные HOBJ m_myObj и HOBJ m_myObjPodp, в функцию MapWidget::CreateObjects вместо создания четырех групп объектов добавил следующий код:
Код
{
    m_myObj = mapCreateSiteObject(hMap, hSite);
    mapRegisterObject(m_myObj, 53330000, LOCAL_POINT);
    mapAppendPointPlane(m_myObj, x, y);
    mapSetObjectScale(m_myObj, 0);
    mapCommitObject(m_myObj);
    int res = mapSetObjectScale(m_myObj, 0);
}
{
    m_myObjPodp = mapCreateSiteObject(hMap, hSite, IDDOUBLE2, 1);
    mapRegisterDrawObject(m_myObjPodp, 0, LOCAL_TITLE);
    mapAppendPointPlane(m_myObjPodp, x, y);
    IMGTEXT parm;
    parm.Color = RGB(255, 0, 0);
    parm.BkgndColor = IMGC_TRANSPARENT;
    parm.ShadowColor = IMGC_TRANSPARENT;
    parm.Height = PIX2MKM(9);
    parm.Weight = FW_NORMAL;
    parm.Outline = 0;
    parm.Interval = 50;
    parm.Align = FA_CENTER|FA_BOTTOM;
    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(m_myObjPodp, IMG_TEXT, (char*)&parm);
    mapPutText(m_myObjPodp, " \n111", 0);
    mapPutTextHorizontalAlign(m_myObjPodp, FA_LEFT, 0);
    mapPutTextVerticalAlign(m_myObjPodp, FA_TOP, 0);

    mapSetObjectScale(m_myObjPodp, 0);

    mapCommitObject(m_myObjPodp);
}
Появилась догадка, что для отображения рамки можно использовать функцию mapAppendDraw, во втором аргументе ей передать IMG_DRAW, в третьем - заполненную структуру IMGDRAW. Верна ли моя догадка? Если да, то как правильно заполнить структуру IMGDRAW в данном случае? Применительно к какому объекту вызывать mapAppendDraw - можно к объекту подписи m_myObjPodp или создать другой объект?

Заранее спасибо.
 
Цитата
Дмитрий написал:

Стоит задача отобразить рамку вокруг подписи.
Добрый день, Дмитрий!

Предлагаем Вам ознакомиться с готовыми примерами оформления подписей в настольном продукте.
В составе продукта есть карта "shape.sitx", на которой есть несколько вариантов оформления подписи.

Вы можете использовать готовые условные знаки из классификатора при создании объектов или создать свой условный знак и использовать его.
С уважением, Демиденко Р.А.
 
Добрый день, Роман.

Как в данном случае может помочь настольный продукт? Стоит задача запрограммировать функционал добавления на карту подписей с рамкой, а исходные тексты настольного продукта, как я понимаю, не предоставляется.
В проекте, для которого стоит задача, используется классификатор operator.rsc. В нем мне не удалось найти подходящий объект, и редактирование классификатора крайне не желательно.
Остается вариант создания объекта вне классификатора. В документации прочитал, что можно применительно к объекту, зарегистрированному функцией mapRegisterDrawObject, добавлять примитивы функцией mapAppendDraw и точки для них функцией mapAppendPointPlane. В функцию mapAppendPointPlane передаются координаты на карте, то есть получается, что добавленные функцией mapAppendDraw примитивы будут масштабироваться вместе с картой. Можно ли как-то программно создать условный знак, который сохранял бы свои размеры при изменении масштаба карты?
 
Цитата
Дмитрий написал:
Как в данном случае может помочь настольный продукт? Стоит задача запрограммировать функционал добавления на карту подписей с рамкой, а исходные тексты настольного продукта, как я понимаю, не предоставляется. В проекте, для которого стоит задача, используется классификатор operator.rsc. В нем мне не удалось найти подходящий объект, и редактирование классификатора крайне не желательно.
Добрый день, Дмитрий!

Настольный продукт предложили для ознакомления с готовыми условными знаками, с целью доработки Вашего классификатора. Теперь понятно, что этот вариант Вам не подходит.
Сейчас подключим коллег по функционалу средств разработки.
С уважением, Демиденко Р.А.
 
Добрый день!

При определении графического знака типа "Подпись" отобразить рамку вокруг текста можно с помощью одновременного задания в структуре IMGTEXT цвета фона (поле BkgndColor) и признака вывод тени в виде контура (поле Outline). Например, код установки может выглядеть следующим образом:
Код
parm.BkgndColor = RGB(0, 255, 0);
parm.Outline = 2;
 
Добрый день!

Требуется именно рамка, то есть незакрашенный прямоугольник, чтобы подпись с рамкой не полностью перекрывала карту.
 
Здравствуйте!

На текущий момент поддерживается отображение рамки вокруг графического объекта типа "Подпись" при закрашивании фона подписи непрозрачным цветом. Поддержку отображения рамки с прозрачным фоном подписи планируется реализовать в следующей версии ГИС Конструктор.
 

Здравствуйте!

На сайте доступна обновленная версия ГИС Конструктор, в которой добавлена поддержка отображения рамки с прозрачным фоном подписи. Приводим код для демонстрации нанесения данного объекта:
Код
  HMAP hMap = mapOpenAnyData(WTEXT("/tmp/Noginsk/Noginsk.sit"));
  assert(hMap);

  double x = 6198000;
  double y = 7448000;

  HOBJ hobj = mapCreateSiteObject(hMap, hMap, IDDOUBLE2, 1);
  mapRegisterDrawObject(hobj, 0, LOCAL_TITLE);
  mapAppendPointPlane(hobj, x, y);

  IMGTEXT parm;
  parm.Color = RGB(0, 0, 255);
  parm.BkgndColor = IMGC_TRANSPARENT2; // IMGC_TRANSPARENT2 - рисовать рамку без фона
  parm.Height = PIX2MKM(30);
  parm.Weight = FW_NORMAL;
  parm.Outline = 2;
  parm.Interval = 50;
  parm.Align = FA_RIGHT;
  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);
  mapPutTextUn(hobj, WTEXT("Sign text"), 0);
  mapCommitObject(hobj);
  mapFreeObject(hobj);

  mapCloseData(hMap);

Страницы: 1
Читают тему (гостей: 1)



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

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