[wiki]元記事:[[Release Notes/Text:http://mediawiki.blender.org/index.php/Release_Notes/Text]]
----
*3D Text の改良

**Unicodeフォントのサポート
主な機能一覧:

-Font3DでUnicode(国際文字セット)をサポート。
-Unicode文字一覧から文字を選ぶためのUI。
-Unicode table areaを選ぶためのUI。
-文字の読み込みの最適化(フォントオブジェクトで使う文字のみを読み込みます)。

#ref(http://blender.jp/uploads/photos0/630.jpg)

詳細はこちらにあります:

http://wiki.blender.org/bin/view.pl/Blenderdev/UnicodeFont3D

(yamyam注: 選択できる Unicode Tableの各文字セットについての詳細は[[こちら:http://blender.jp/modules/news/article.php?storyid=1414&com_id=386&com_rootid=386&com_mode=thread&#comment386]]を参照してみて下さい)


**字体と書式
-Plain(標準)/Bold(太字)/Italic(斜体)/Bold-Italic(太字斜体)の字体をサポートし、文字ごとに設定できます。字体の組合せごとに、異なるフォントファイルを読み込むことができます。トグルボタンの"B"ボタンと"i"ボタンは、それぞれBold(太字)とItalic(斜体)を切り替えます。組合せごとにフォントを指定するために、望みの組合せにセットしてから、'''適切なフォントファイルを読み込んで下さい'''(面倒ですが手作業でフォントファイルを選んでください)。全4種のフォントファイルを指定するまで、字体の組合せを変えて一つずつ設定してください。

-エディットモードでは、"B"ボタンや"i"ボタンを押すと、1) 選択中のテキストブロックか、何も選択していないときは、2) 新しく入力する文字のモードが切り替わります。

- ショートカット: CTRL-B / CTRL-I
-テキストオブジェクトの下線。説明することはほとんどありません。editbuttonsにある"U"ボタンまたはCTRL-Uで、新しく入力する文字または選択中の文字の下線を切り替えられます。下線の高さ(太さ)と位置(垂直)はeditbuttonsで設定できます。(訳注:それぞれ"UL position"と"UL height"です。)

#ref(http://blender.jp/uploads/photos0/631.png)


**マテリアル
-文字ごとにマテリアルを設定できます。通常のeditbuttonsで望みのマテリアル番号に切り替えてから文字を入力すると、そのマテリアルが使われます。ブロック全体で切り替えるには、ブロックを選んでから、望みのマテリアル番号に切り替えて、"Assign"ボタンを押してください。

#ref(http://blender.jp/uploads/photos0/632.png)


**テキストの配置
- "Flush"と"Justify"。"Flush"は、入力中の行を含め、あらゆる行の両端を揃えます。これは行を埋めるのに文字間隔(カーニング)を用います。"Justify"は、ワードラップまたはEnterで終わった行のみ両端を揃えます。これは文字間隔の代わりに空白を用います。これらが機能するには少なくとも1つのテキストフレームが必要です。(訳注:"Flush"は今までのBlenderと同じ配置、"Justify"は一般的なワープロと同じ配置のようです。また、フレームの幅が初期値の0のままだと設定できません。)

- 単語間隔の調節。"Word spacing"ボタンで、空白の幅の倍率を設定できます。
- どのような文字の組合せでも、文字ごとに手動でカーニングを設定できます。ALT-Left / ALT-Rightを押すと、カーニングが(私の記憶が正しければ)0.1きざみで増減します。
- 文字が重なっても塗りつぶしがおかしくなりません。

#ref(http://blender.jp/uploads/photos0/633.png)
#ref(http://blender.jp/uploads/photos0/634.png)


**テキストフレーム
- テキストオブジェクトごとに、任意の位置と大きさを備えた複数のテキストフレームを設定できます。フレーム同士は連結していて、テキストが流し込まれます。
- フレームの端では自動的にワードラップが働きます。
- 新しく作ったテキストオブジェクトには、位置、幅、高さが0のフレームが初期設定されています。
- 幅が0のフレームは完全に無視されます(ワードラップが起こらない)。高さが0のフレームは、次のフレームへの流し込みが起こらず、テキストが最後まで表示されます。
- フレームの作成、削除、選択は、マテリアル・インデックスと同じ操作方法です。
- フレームを作るには"Insert"ボタンを押してください。現在のフレームの後に、同じ位置と大きさを持った新しいフレームが挿入されます。新しいフレームを見るには"X:"/"Y:"ボタンで移動する必要があるでしょう。
- アクティブなフレーム("1 TextFrame: 1"ボタンで選択)は、アクティブ・テーマ・カラーで描画されます。
- テキストは小さい番号のフレームから大きい番号のフレームに流し込まれます。
- "Delete"ボタンは現在のフレームを削除し、流し込み対象から外します(テキスト自体は削除しません)。

#ref(http://blender.jp/uploads/photos0/635.png)


**テキストの編集
***選択
ふつうのワープロのように文字を選択できます。

SHIFTを押しながら(Left/Right/Up/Down/PageUp/PageDown/CTRL-Left/Rightで)カーソルを動かすと、テキストを選択できます(いずれマウスでも出来るようになるでしょう)。

SHIFTを押さずにカーソルを動かすと、選択が解除されます。テキストを選択した状態で、文字を入力したり他の操作を実行すると、選択していたテキストは削除されます。

CTRL-Cはテキストをバッファにコピーします。CTRL-Vはバッファの内容(書式設定を含む)をカーソル位置に貼り付けます。CTRL-Xは切り取ってバッファにコピーします。

選択状態はエディットモードを抜けても覚えています。

CTRL-Backspaceは編集中の全テキストを削除します。

***テキストの挿入
大きなテキストを読み込んでテキストオブジェクトに挿入する方法をいろいろ試した末、シンプルな"Insert Text"ボタンを作りました。このボタンを押すとファイル選択画面が表示され、ファイルを選択するとファイルの内容が%%カーソル位置に%%挿入されます。これ以上シンプルにはできません。(訳注:実際はカーソル位置に関係なく末尾に追加されるようです。)

***カーソル移動
- CTRL-Left/Rightは、前/後の単語に移動します。
- HOME/ENDは、現在行の行頭/行末に移動します(以前はShift-Left/Rightでした)。
- PageUp/PageDownは、上/下に10行移動します。

**Misc
- "Lorem"ボタンはカーソル位置にダミー文章(Lorem Ipsumのランダムな一節)を挿入します。
-最大テキスト量が1000文字から50000文字に増えました。
-カーブの塗りつぶしスピードが増し、小さなテキストなら約10倍、大きいテキストなら約100倍以上の速さになりました。そのため、テキストオブジェクトがエディットモードでも常に塗りつぶしをするようになりました。%%エディットモードでないときに%%"Fast Edit"ボタンを押すと、エディットモードでの塗りつぶしを無効にできます。(訳注:エディットモードでも有効・無効を切り替えられます。)
-複雑なフォントファイルのサポート。これまではBlenderをクラッシュさせていました。


**ノート
古いテキストオブジェクトとの互換性は完全には取り戻せていないので%%(word spacingが0.0になるので手作業で1.0にする必要があります)%%、バージョンを238に上げるかハックする必要があるでしょう。後でチェックするつもりです。(訳注:word spacingは、自動的に1.0に修正されます。)

**コーダー向けノート
カーブとマテリアルの重複したインデックスの問題が、手に負えなくなりました。

テキストオブジェクトの「重なり合った文字の問題」の回避を目的に、Nurbsの塗りつぶしのためにソートを行うコードを書き換えて、nu->mat_nr(2D Curve内のマテリアル・インデックスのために使われてたもの)の代わりに、nu->charidx(文字を追加するごとにインクリメントされる変数)を使うようにしました。

これは通常の2D Curvesのマテリアル・インデックスを壊す結果となりました。

今ではnu->charidxは、塗りつぶし処理でテキストオブジェクトの文字を分けるために使うのみではなく、通常の2Dカーブがマテリアル・インデックスを含むときにも使うようになりました。実際は、charidxにマテリアル・インデックスをセットするだけです。

readfile.cには互換性のために、テキストオブジェクトでないカーブをファイルから読み込むときにnu->charidxにnu->mat_nrをセットするコードが存在します。

というわけで、まとめ:「塗りつぶしグループ」の作成にマテリアル・インデックスを使う代わりに、filldisplist()はnu->charidxを使うようになりました。nu->charidxは、古いファイルを読み込んでカーブのマテリアル・インデックスを割り当て/削除するときに、適切にセットされます。

以上の内容は、少し分かりにくくて説明しにくい事ばかりです。不明確な点があれば、ご質問ください。

以前はマテリアル・インデックスが初期化されないというバグがあったため、不正なマテリアル・インデックスによってレンダラがクラッシュしていました。

このバグは修正済みだと思いますが、チェックを加えました。文字のマテリアル・インデックスが不正(ob->totcolより大きい)なら、これに0をセットし、stderr(標準エラー出力)に警告を吐きます。

もしこの警告が出たら、.blendファイルへのリンクを添えて報告してください。お願いします。

もしこれが何かを壊したら、文句をどうぞ!

Text3Dオブジェクトを正しく作成できるようにPython APIを修正しました。これは一時的な修正に過ぎません(コードを再び複製しています)。本当に修正するには、すべてのテキストオブジェクトを作成・初期化する中心的な関数を作らなければならないと思います。


**リグレッションテスト
テキストオブジェクトのリグレッションテスト用のファイルを用意しました。

http://blender.instinctive.de/downloads/release/demo/text-regression.blend.gz
[/wiki]