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

Изменение параметров шрифта у объекта

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1 2 След.
RSS
Изменение параметров шрифта у объекта
 
Добрый день.

Подскажите пожалуйста, можно ли как-то изменить параметры шрифта у текстового объекта?

Объект создается на пользовательской карте следующим образом:
Код
HOBJ hObj = mapCreateSiteObject(m_baseMapHandler, m_userMapHandler, IDDOUBLE2, 1);

res = (mapRegisterDrawObject(hObj, 0, LOCAL_TITLE) != 0);


IMGTRUETEXT trueTextParam;
const QFont textFont = textParams->font();
memset(&trueTextParam, 0, sizeof(IMGTRUETEXT));

UnicodeToString(textFont.family().utf16(), trueTextParam.FontName, sizeof(trueTextParam.FontName));

            

IMGTEXT &textParm = trueTextParam.Text;
{
    const QColor textColor = textParams->textColor();
    textParm.Color = RGB(textColor.red(), textColor.green(), textColor.blue());
}
{
    const QColor bgColor = textParams->backgroundColor();
    if (bgColor == Qt::transparent)
        textParm.BkgndColor = IMGC_TRANSPARENT;
    else
        textParm.BkgndColor = RGB(bgColor.red(), bgColor.green(), bgColor.blue());
}

textParm.ShadowColor = IMGC_TRANSPARENT;//RGB(255, 255, 255);
textParm.Height =  4000;
textParm.Weight = FW_NORMAL;
textParm.Outline = 0;
textParm.Align = FA_MIDDLE;
textParm.Service = 0;
textParm.Wide = UNIW_NORMAL;
textParm.Horizontal = textParams->isHorizontal() ? 1 : 0;
textParm.Italic = textFont.italic() ? 1 : 0;
textParm.Underline = textFont.underline() ? 1 : 0;
textParm.StrikeOut = textFont.strikeOut() ? 1 : 0;
textParm.Type = 0;
textParm.CharSet = RUSSIAN_CHARSET;
if (textParams->isStretched()) {
    textParm.Flag = IMGTEXT_SCALE;
//                mapSetObjectScale(hObj, 1);
}

char textChar [2048];
UnicodeToString(textParams->text().utf16(), textChar, sizeof(textChar));

// так не работает на сертифицированной версии на астре
//            mapPutTextUnicode(hObj, PanoramaUtils::ushortToWChar(params->titile().utf16()), 0);
mapPutText(hObj, textChar, 0);
mapPutTextVerticalAlign(hObj, qtAlignmentToPanoramaVertical(textParams->textAlignment()), -1);
mapPutTextHorizontalAlign(hObj, qtAlignmentToPanoramaHorizontal(textParams->textAlignment()), -1);

//            mapAppendDraw(hObj, IMG_TEXT, reinterpret_cast<const char *>(&textParm));
mapAppendDraw(hObj, IMG_TRUETEXT, reinterpret_cast<const char *>(&trueTextParam));

// ниже идет установка метрики



Интересует вопрос, как например, изменить такие параметры этого созданного текстового объекта как: цвет текста, высоту шрифта, подчеркивание и т.п.?
Как изменить сам текст и выравнивание текста понятно, а вот с остальным - нет.

Заранее спасибо.
 
Можно удалить старые параметры и добавить новые.
Код
  // Добавить элемент графического описания объектов
  // info  - идентификатор объекта карты в памяти
  // image - номер функции типа IMG_XXXXXXX (см. MAPGDI.H)
  // parm  - адрес структуры типа IMGXXXXXX
  // При ошибке возвращает ноль,иначе - число элементов в записи

_MAPIMP long int _MAPAPI mapAppendDraw(HOBJ info, int image, const char *parm);

  // Удалить все элементы графического описания объекта
  // info  - идентификатор объекта карты в памяти

_MAPIMP long int _MAPAPI mapClearDraw(HOBJ info);

  // Удалить элемент графического описания объекта
  // info   - идентификатор объекта карты в памяти
  // number - номер элемента (начиная с 1)
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapDeleteDraw(HOBJ info, int number);
 
Цитата
Oleg Belenkov написал:
Можно удалить старые параметры и добавить новые.
Спасибо за ответ.

Может не совсем в этой ветке вопрос задаю, но подскажите пожалуйста, как создать надпись на примере кода из первого сообщения, чтобы при печати карты подпись была высотой 10 мм на базовом масштабе карты?

Заранее спасибо.
Изменено: Сергей - 04.03.2020 16:59:53 (уточнение по высоте)
 
Вы можете создать графический объект и указать требуемую высоту шрифта.
 
Цитата
Oleg Belenkov написал:
Вы можете создать графический объект и указать требуемую высоту шрифта.
Добрый день.

В примере, указанном выше, я вроде это и делаю, но при печати он не соответствует тому размеру, который указывал.
Поэтому хочу понять, что я, возможно, делаю не так?

Повторюсь еще раз, что хочется на выходе:
1. На базовом масштабе карты нанести текст, например высотой 40 мм; (на вышеуказанном примере я это вроде как пытаюсь сделать)
2. При масштабировании карты чтобы он масштабировался; (textParm.Flag = IMGTEXT_SCALE; насколько я понимаю, это все же не то)
3. Чтобы после печати карты на базовом масштабе он был высотой 40 мм. (Пока при тех настройках текст при печати получается очень маленький в отличие с видом на экране. Если я рисую тот же текст средствами Qt с учетом dpi устройства, то все рисуется в соответствии с тем, как указывал. Параметры dpi устройства в ядро передаю и все вроде корректно применяется).

Но вот с текстом какая-то беда и пока никак не могу разобраться.

Заранее спасибо.
 
40 мм - это 40 000 мкм

У Вас - 4 000
 
#define IMGTEXT_SCALE       1    // Признак растягивания по метрике (высота вычисляется)

Это означает, что значение высоты игнорируется. Метрика вписывается в габариты по координатам, что не совсем то, что Вы описываете.
 
Цитата
Oleg Belenkov написал:
#define IMGTEXT_SCALE       1    // Признак растягивания по метрике (высота вычисляется)

Это означает, что значение высоты игнорируется. Метрика вписывается в габариты по координатам, что не совсем то, что Вы описываете.
Олег, я правильно понимаю, что если этот флаг не выставлен, то высота текста должна быть равна значению, указанному в поле textParm.Height и при изменении масштаба текст должен масштабироваться?

Спасибо.
 
Правильно
 
Приветствую!

1. Высота будет равна указанной только на базовом масштабе
2. Объект будет масштабироваться если указаны признаки масштабируемости и сжимаемости для объекта

С уважением,
Матвеев П.В.
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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