Quest3D - Русскоязычное сообщество

Quest3D => База исходников (cgr/igr) => Тема начата: Sqwer от 26 Марта 2011, 08:52:22



Название: [NME_TextWrap канал] (перенос слов)
Отправлено: Sqwer от 26 Марта 2011, 08:52:22
Представляю вашему вниманию канал NME_TextWrap,
задачей которого является  автоматический перенос слов на следующую строку, если они не влезают в определённый диапозон.


Часто подобная проблема возникает при отображении произвольного текста на элементах ГУИ. Без переноса они выходят за рамки элемента, что ,безусловно, не красиво и не приемлемо.

Кратко о сути канала:
на вход канала подаётся текст
на выходе получается текст с автоматическим форматированием переноса слов, кроме того  можно установить максимальное кол-во строк в выходном тексте и задать смещение от первой строки.

Описание:

NME_TextWrap ([in]Text SourceString, [out]Text WrapString, [in]Float maxStringSize, [in]Float oneSimbolWide, [in]Float firstLineOffset, [out]Float WrapStringCount)

SourceString -  исходный текст  ()
WrapString   -  полученный текст с установленными переносами на след строку
maxStringSize - максимальная длина  строки в Юнитах
oneSimbolWide - ширина одного символа в Юнитах
maxVisibleLines - максимальное кол-во строк выходного текста
firstLineOffset - смещение строк выходого текста  (0-  смещения нет, 1 - смещение на одну строчку)
WrapStringCount - количество строк в преобразованном тексте

Не заменим при создании элемента ГУИ  для просмотра текста с возможностью скролирования.

Исправление багов:
- отсутствие  чилд каналов не провоцирует вылет
- отсутствие строки в канале SourceString не провозирует вылет
- оптимизация скорости работы
- канал отслеживает  всевозможные изменения в входных параметрах, и если таковые произошли  - канал перестраивает текст. Если изменений нет ,  то не вызывается обратотка текста, тем самым экономя время обработки.
- добавлен выходной параметр  - WrapStringCount - количество строк в преобразованном тексте

Ниже  представлены:
схема подключения
пример  (стрелками вверх/вниз - скролирование текста)
канал (Релиз  для Q.4.3.2)


Название: Re: [NME_TextWrap канал] (перенос слов)
Отправлено: Corpic от 26 Марта 2011, 11:32:00
Канал действительно полезный, но я бы еще добавил в качестве выходного аргумента количество строк, получаемых при форматировании текста (порой требуется при вертикальном выравнивании относительно центра).

А еще можно добавить функцию выравнивания текста по ширине, по центру и т.д.


Название: Re: [NME_TextWrap канал] (перенос слов)
Отправлено: Sqwer от 26 Марта 2011, 12:46:32
А еще можно добавить функцию выравнивания текста по ширине, по центру и т.д.

это уже вопросы отображения, а не редактирования текста.

В Квесте предусмотрено отображение 4 мя каналами:
1)текстурный текст
2)3Д текст
3) 2Д экранный текст
4) 2Д экранный текст (дэбаг textout)

последний поддерживает  центрирование и выравнивание.


Название: Re: [NME_TextWrap канал] (перенос слов)
Отправлено: Corpic от 26 Марта 2011, 21:06:06
По вопросу отображения полностью согласен - снимаю вопрос с повестки дня -:). Просто  я привык пользоваться примитивами: сам преобразую - сам отображаю.
А что косается количества преобразованных строк - это порой важно. К примеру: выходной текст составляет две строки или три? Как его позиционировать по dY? (если нужно выровнять по центру)



Название: Re: [NME_TextWrap канал] (перенос слов)
Отправлено: Corpic от 26 Марта 2011, 21:48:45
P.S.: Может быть я плохо искал но до сих пор не нашел способа стандартными  каналами квеста отобразить текст с выравниванием по ширине.


Название: Re: [NME_TextWrap канал] (перенос слов)
Отправлено: Sqwer от 27 Марта 2011, 00:21:02
Цитировать
P.S.: Может быть я плохо искал но до сих пор не нашел способа стандартными  каналами квеста отобразить текст с выравниванием по ширине.
я тоже  :-\


Название: Re: [NME_TextWrap канал] (перенос слов)
Отправлено: Sqwer от 25 Апреля 2011, 21:54:58
В канал внесены изменения.