|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Автоматическое уменьшение шрифта мультитекста
Регистрация: 05.11.2009
Сообщений: 4,360
|
||
Просмотров: 4464
|
|
||||
Метод GetBoudingBox, немного, точнее совсем не корректно, определяет диагональные точки для прямоугольника, описанного вокруг объекта(примитива) mtext.
Только в том случаи, данные будут верны, если пользовательская ширина (dxf пара код 41) и высота (dxf пара код 46) либо соответствуют действительным ширине (dxf пара код 42) и высоте (dxf пара код 43), либо равны 0, т.к. почему-то габариты определяются по ним (пользовательским размерам), по ним же отображаются и ручки при выделении mtext. Поэтому проще и точнее, будет брать высоту созданного текста, сразу из 43 кода.
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Регистрация: 05.11.2009
Сообщений: 4,360
|
Disney
Возможно вы где-то и правы, но в одном месте ошиблись. На вашем рисунке, в том мультитексте, где красной диагональю перечеркнут текст "первая строка" (второй ряд сверху, первый мультитекст слева), эта самая диагональ проведена неверно, потому что в этом случае высота мультитекста определяется полностью, с учетом второй строки. Именно этот случай работает в моей программе. Мне нужно чтобы текст помещался в одну строку и в этом случае он имеет определенную высоту. А как только текст перелазит на вторую строку, то я, пользуясь методом GetBoundingBox, определяю что высота мультитекста стала больше, что означает что в мультитексте появилась вторая строка. И в этом случае начинаю програмно увеличивать степень сжатия, до получения нужной мне высоты текста. |
|||
![]() |
|
||||
Подсмотрел как-то у Кулик Алексея aka kpblc такое решение: длина текста проверяется функцией textbox - без vla, просто и быстро. Причем примитива может и не существовать (что меня, собственно, и удивило
![]() |
||||
![]() |
|
||||
Я не ошибался, я же не в рукопашную их рисовал
Код:
Цитата:
Просто зачем лишние манипуляции с GetBoudingBox, берём значение dxf пары под кодом 40 (высота текста <этим значением, мы как правило задаём размер самого текста>)и значение dxf пары под кодом 43 (действительное значение высоты текста <т.е как бы сумма высот всех строк + межстрочный интервал>)
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Регистрация: 05.11.2009
Сообщений: 4,360
|
Цитата:
Цитата:
Единственное что у меня в программе идет цикл - определяю высоту мультитекста, сравниваю с определенным значением, если сравнение не удовлетворяет моим нуждам, то увеличиваю степень сжатия текста на 0.01. И так до тех пор, пока текст не поместится в одну строку. Может быть есть какой-то альтернативный метод отрисовки такого мультитекста? Хотелось бы уйти от цикла, чтобы степень сжатия регулировалась автоматически при указании ширины. |
|||
![]() |
|
||||
Используем textbox для вычисления получающейся длины текста, потом делим желаемую длину текста на это значение и получаем к-т сжатия
![]() Например, так: Код:
Последний раз редактировалось Do$, 10.11.2009 в 14:38. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Do$, для textbox и многострочного текста подобная конструкция может и не сработать: во-первых, при наличии в тексте принудительных переводов строк у меня в 2008 вываливает ошибку; во-вторых, в многострочнике текст может содержаться не только в группе 1. Хотя для коротких (до 255 символов) текстов подобное работает "на ура"
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Нитонисе, пожалуйста!
![]() Кулик Алексея aka kpblc как я себе представляю: применять эту функцию следует до создания мультитекста! То есть, иными словами, функция служит для выяснения: какой коэффициент сжатия нужно задать тексту текущего стиля, чтобы заданная строка уместилась в заданной длине. А вот корректно ли будет извлечена строка из мтекста и загнана в функцию - это уже не моя головная боль ![]() |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обсуждение моего шрифта | Никита В. | Разное | 36 | 29.05.2008 16:53 |
Вопрос о стандарте на высоту шрифта | Илья V. | Поиск литературы, чертежей, моделей и прочих материалов | 5 | 05.05.2008 20:25 |