Russian Qt Forum
Октябрь 01, 2024, 16:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Вывести текст вдоль кривой  (Прочитано 5114 раз)
MadKriS
Гость
« : Март 21, 2010, 00:41 »

Доброго времени суток всем!
Подскажите, как вывести текст вдоль кривой (как в Фотошопе)?
Мне самому на ум приходит выводить каждую букву текста с координатами и углом поворота в зависимости от оных у кривой в каждом конкретном участке, только как координаты с углом "понять", не знаю...
Или есть какое-то более изящное решение ?
« Последнее редактирование: Май 01, 2010, 23:53 от MadKriS » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Март 21, 2010, 01:02 »

я думаю, тут поможет QPainterPath

Ещё глянь Wiggly Example (%QTDIR%/examples/widgets/wiggly)
« Последнее редактирование: Март 21, 2010, 01:23 от lit-uriy » Записан

Юра.
Marat(Qt)
Гость
« Ответ #2 : Март 21, 2010, 12:12 »

А как на счет svg? В inkscape очень неплохо это получается.
Записан
ieroglif
Гость
« Ответ #3 : Март 21, 2010, 15:47 »

я бы (если бы не сильно ленивым был) всё же для каждой буквы высчитывал угол.
ширина буквы известна, а значит известно на каком участке графика эта буква будет расположена.
так что для каждой буквы имеем следующее:
1. координата начала буквы
2. координата конца буквы
из этого получаем уравнение прямой по которой надо рисовать букву, а значит вычисляем и угол на который эта линия "наклонена" (а значит и буква).
так что пишем две небольшие функции (одна для разбора "фразы" по буквам, а вторая - для рисования буквы) и всё.

но так как я ленив и уже прочитал ответ про QPainterPath - то сначала бы я про него покурил ман, а уж если там ничего бы не наковырялось, то писал бы функции =)
Записан
MadKriS
Гость
« Ответ #4 : Апрель 02, 2010, 15:22 »

"Нарезать" кривую на равные кусочки получилось.
Насчёт поворотов букв вопрос пока что остаётся открытым.
« Последнее редактирование: Апрель 05, 2010, 12:22 от MadKriS » Записан
MadKriS
Гость
« Ответ #5 : Май 01, 2010, 23:57 »

Всё, сделал сам.

Использовал функцию QPainterPath'a - angleAtPercent, вычисляющую угол перпендикуляра к касательной в точке пути.

UPD
точнее так
Код:
angle = textpath.angelAtPercent(one_part*i);
QTransform transform;
transform.translate(point.x(), point.y());
transform.rotate(angle);
transform.translate(-point.x(), -point.y());
painter.setWorldTransform(transform);
« Последнее редактирование: Май 05, 2010, 22:56 от MadKriS » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.164 секунд. Запросов: 23.