外部からのテキストオブジェクト操作

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2007/1/11 23:48
まんだ  長老 居住地: むかしは本州の西端  投稿数: 570
皆さんこんばんは。

Blenderのテキストオブジェクトって
・UNICODEに対応した(?)TTFフォント
・UTF-8エンコードされたテキストファイル
があれば
1.フォントファイルを指定する
2.UTF-8エンコードしたテキストファイルからテキストを流し込む
という手順で漢字かな混じりの日本語を表示することが出来るのですが、少なくともWindows上ではBlender上で直接漢字変換して…ということが出来ない状態です。

そこで、直接とはいかないまでも、それに近いことが出来ないか、と考えてみました。Pythonに付いてくることのあるTkウィジェット、"PyTkinter"で小窓を出してそこでテキストを編集できれば他のWindowsアプリケーションからもコピー&ペースト出来るので便利になりはしないかと。

ところが、作って動かしてみた(ええ、ちゃんと小窓も出てます )ものの、そう上手くいくわけではなくて…。半角英字(ASCII)ではエラーにならないのに、全角を入力してみると

AttributeError: expected string argument

と表示されます。テキストオブジェクト(データブロック?)にテキストを設定する際に想定していない文字コ―ドがあるために、テキストとして扱ってくれないようです。

8bitのバイト列を「透過扱い」にしてテキストオブジェクトのテキストを設定するなどということは出来ないんでしょうか?

疑問解決のために是非お知恵をお貸ししていただきたい次第です。よろしくお願いします。

以下、作ってみたスクリプトです。使い方は
1.Blenderのテキストウィンドウにロード(スクリプトメニューからもOK)
2.テキストオブジェクトを1個選択状態にしておき、(全く選択しない状態で「新規作成」)
3.Alt+Pで小窓が開きます。
4.テキストを書き換え、「変更」ボタンを押します
5.(そのあとTabを数回…)

実行にはBlenderとPythonはもちろん、そして"PyTkinter"なるものが必要です(保存文字コードはUTF-8です)。

関連ページ
http://www.rock.sannet.ne.jp/lab1092/bl2unitxt3d.html
bl2unitxt3d.py をダウンロードしてください。

[EDIT]このスクリプトを適用する際、表示用フォントを各自でロードする必要があります。また、sitecustomize.pyをPythonがインストールしてあるディレクトリの下、特定の場所にコピーする必要があります。
投票数:4 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/12 0:13
morita  常連   投稿数: 42
試しに「日本語表示」と入力したらちゃんと変更できました。
(フォントは手動でロードする必要がありましたけど。)
環境はWindowsXP、Python 2.4.3です。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2007/1/12 1:22
まんだ  長老 居住地: むかしは本州の西端  投稿数: 570
morita さん、こんばんは
早速のレスありがとうございます

>試しに「日本語表示」と入力したらちゃんと変更できました

なるほど…、と思ってよく考えたら自身の環境でデフォルトエンコードの設定をしてませんでした。基本ですね、失礼しました。
で、"C:/Python24/Lib/site-packages/sitecustomize.py"に
import sys
sys.setdefaultencoding("utf-8")
と指定してから実行させたところ、上手くいきました。ありがとうございます

>(フォントは手動でロードする必要がありましたけど。)

そうですね。これをはじめに書いておくべきですね。ご指摘ありがとうございます。

なお、テキストオブジェクトはオブジェクトモードで選択されていないと変更後の文字が化けるようです。あと、いくつか変なところも…。

で、結局こういうのって役に立ちそうですか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - | 投稿日時 2007/1/12 12:07
yamyam  管理人 居住地: そうや、うちはおおさかやー  投稿数: 4403
こんにちは。素晴らしいスクリプトをありがとうございます。
将来性があるので、あえて辛口で。
  • "Pyinter"ではなく、"Tinker" です。幸運なことに、フルパッケージには標準で入っている模様です。


  • "C:\Python24\Lib\site-packages\" などに、sitecustomize.py を作る必要があります。と明記しておいたほうがいいと思います。多分これを書かないと、探したり、途方に暮れる人が続出ではないかと。
    件のファイルを同梱しておいて、コピーさせたりするのが簡単だと思います。インストーラを書かれるのもいいかもしれませんが、少しおおげさかも知れませんね。


  • TextObject を指定していなかった時は、自動生成させるか、指定する旨ダイアログを出した方がいいと思います。


  • フォントの問題は…文章入力ダイアログに明記するぐらいしかなさそうですね。Text3d Object の filename にはアクセスできないみたいなのが残念です。


  • やはり Scripts メニュー対応で。分類は Object が一番便利だと思います。

こんなところでしょうか。多分他国の言語でも使用できると思いますので、BlenderArtists に投稿されて実験してもらうのもいいと思います。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/12 19:36
morita  常連   投稿数: 42
フォントの変更方法が分かりました。
import Blender
from Blender import Text3d
fontpath = r'C:\WINDOWS\Fonts\msgothic.ttc'
font = Text3d.LoadFont(fontpath)
#font= Text3d.Font.New(fontpath) # どっちでもいいみたい
text = Text3d.Get()[0]
text.setFont(font)
dir関数でモジュールやオブジェクトの属性の一覧を見れば
ドキュメントに載っていないことが分かるので便利です。
import Blender
from Blender import Text3d
print dir(Text3d)
text = Text3d.Get()[0]
print dir(text)
実際に使う機会があるかは分かりませんが、便利そうだと思いました。
テキスト入力欄はもっと広いほうが直接編集できてよさそうです。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/13 4:41
まんだ  長老 居住地: むかしは本州の西端  投稿数: 570
morita さん、yamyam さん、おはようございます。
貴重な情報及びご意見ありがとうございます。

とりあえず…blenderartists.orgに投下してきました。スクリプトの内容はほぼ同じなんですが。「英語っぽいPDFドキュメント」を付けときましたけど、大丈夫かな?

Text object input helper script with Tkinter
http://blenderartists.org/forum/showthread.php?t=86545

もう少し使いやすいようにしてみようかな、と思います。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/13 8:51
yamyam  管理人 居住地: そうや、うちはおおさかやー  投稿数: 4403
> sitecustomize.py
今考えたら、どうせ二行ぐらいなんだから
for path in sys.path:
	if find(path,'site-packages')>0:
		# Check "sitecustomize.py" is there
みたいな感じで調べて、なかったら自動生成しちゃってもいいかもしれませんね。

> LoadFont
おおー。さすがはmoritaさん。
というか、filename みてすでに読み込み済みかどうかチェックすることしか考えてませんでした。(笑)

> まんださん
pdfでなくても、そのまま記事として投稿された方がよかったような気も。あと、説明があくまでTkinter を使用したヘルパーとしかかかれておらず大人しめに思えましたので、これを使えばこれだけ便利になるんだよーみたいなアピールをされると多少食いつきがよくなるかもしれません…多分。

2.43リリースノート翻訳が終わって時間ができたら、BlenderNation に前の続きとして投稿させていただきますね。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/14 10:32
まんだ  長老 居住地: むかしは本州の西端  投稿数: 570
yamyam さん、morita さんおはようございます。

とりあえずいくつか修正しましたので、報告を。

1.複数行の編集画面で広々と。
2.一丁前にログ吐くようになりました。
3.ドキュメントを更新しました

とりあえず安全策、ということで今回は(も?)極力「何もしない」プログラムにしました。sys.pathもLoadfontも魅力的だったんですが。基本的な設計がまずかったのと変に拡張してしまって「わや」になってしまってこれ以上は「面倒くさい」と思ってしまったのが実際のところです。

>yamyamさん

BlenderArtistsのページを少し派手にしてみました
まあ、私に限って言えば、わけのわからないのは日本語でも英語でも同じなのでいいとして、多分マルチバイト圏の人じゃなくてもこれは少し役に立ちそうかなと思ったんですが…。"DTP blender"っていうのもあったくらいだし。

>moritaさん

引用:
テキスト入力欄はもっと広いほうが直接編集できてよさそうです。
やっと複数行にすることが出来ました 単に部品を変えただけなんですけどね。調子に乗って沢山の文字をコピーしてテキスト設定したらblenderから反応がなくなってしまったときには少しびっくりしましたけど。
dir(hoge)、便利ですね。これでマニュアル要らず…にはならないけど、「何があるか」が分かるっていうのはいいですね。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/28 17:34
まんだ  長老 居住地: むかしは本州の西端  投稿数: 570
プログラムを少し変えてみました。テストをほとんど行っていないのでこれを書いているそばから修正箇所が見つかってます。
しかもかなり危険な香りのするものになってしまいました。スクリプト適用前にはファイルへのセーブをお忘れなく

http://www.rock.sannet.ne.jp/lab1092/data/bl2unitxt3d.py

http://blog.livedoor.jp/lab1092/archives/50893122.html

あと、このスクリプトで入力したサンプル画像も。



投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2007/11/25 1:46
まんだ  長老 居住地: むかしは本州の西端  投稿数: 570
皆様こんばんは。

ずーっとほったらかしにしていたbl2unitxt3d.pyですが、このたび紹介用?の動画を作ってみました(今更感たっぷりですが)。

今回は、WindowsVistaを使って、手書き認識させた文字を入力する、ってことを

ただ、ちょっと(?)悲しいお知らせ。Vistaでは手書き認識パッドからの入力はTkinterのテキストボックスに入力できるのに、IMEが反応しないんです。とはいえ、なんとか「動く姿」をお見せすることが出来るわけです。

下記ページから動画ファイル(wmv)にアクセス。
bl2unitxt3d.pyの使い方_blenderpython:
http://maglog.jp/lab1092/Article220512.html
投票数:0 平均点:0.00

  条件検索へ


ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

●テストビルド
Buildbot(自動生成)


●開発関連
公式開発サイト
Blender開発blog
Blender Wiki