Blender2.63で少しスクリプトをいじってみた。
Blenderには組み込みのテキストエディターがあり、そのまま実行もできるのだが、カーソルがエディタのウィンドウ上にある時だけ入力が可能というような使用なので、ちょっと使いづらかったりする。
それにどうやら入力補完には対応していないらしい。となれば外部エディタを使うという選択肢もあるだろう。
Blenderではスクリプトの書かれたテキストファイルも、内部データとして保存している。そのため外部のエディタから編集するためには「Save as」で保存する必要がある。このとき拡張子を付けなければテキストファイルになってしまう。使用する外部エディタにPython編集モードがあるのならば、この段階で「.py」を付加する方が便利だ。
(追記)それなりにスクリプトを記述したが、内部データに保存するなら組み込みのテキストエディターで我慢できるが、どうせ外部に保存するならVim等でいじりたい。微妙なラインである。
2012年12月5日水曜日
2012年11月21日水曜日
Blender Pythonスクリプト挑戦
Blenderに関しては極力C++でいじりたかったので、先にコードを丸ごとTortoiseSVNで落としてきたのだが、早急に作らなければならないモデルが出てきたので、急遽Pythonスクリプトを利用することになった。
色々なブログで入門編を見ていた限り、blender&pythonは夢のような世界だろうなと想像していたのだが、踏み込んでみて少々面食らうことになる。
良いのか悪いのか、まだそんな判断を下せるほど習熟していないので、詳しい言及は避けるが..
今回記しておきたいのは、再びPythonスクリプトを組む羽目になったときのための、アタック方法だ。
まず、いつのバージョンからかは定かではないが、少なくともBlender2.63以降にはPythonコンソールのReportボタンが無く、同様の情報はInfoウィンドウに羅列される。
bpy.ops以下のオペレーターはアクティブなオブジェクト、もしくは頂点に対して適用される。
bpy.contextはアクティブなオブジェクトやオペレーターを格納している。
ちなみにbpy.context.objectの書き換えは不可能。
スクリプトからアクティブなオブジェクトを切り替える方法は未だ不明。
選択に関してはオブジェクトのselect変数で切り替えられるが、新たに選択してもアクティブなオブジェクトにはならない。
@todo:vertex_group
@todo:モード切替
bpy.dataはデータ一般を格納している。
bpy.context.object.data.verticesとbpy.data.['該当名'].meshes.verticesは同一の模様
基本的には、まず3DViewで手動で操作し、Infoに現れたレポートをコピーすることで目的のコードを得られるが、特にbpy.context.transform内の操作についてはコンソール(Pythonコンソールではなく)に「convertViewVec: called in an invalid context」と表示される。意味は謎
bpy.context.transform.rotateによって回転をかけることができるが、OBJECTモードではオブジェクトの中心点、EDITモードでは頂点の中心(Pivot Point)周りでしか回転できない。
Pythonの変数はみんなポインタのようなものだ。という説明を見たが、容易にblender自体をクラッシュさせられることから考えても、Pythonの変数はみんなvoid*だと言ってしまっていいのだと思う。
結局目的の操作がcontribというものに含まれるmesh_extra_toolsで解決できてしまいそうなので、今回は挫折することになりそうだ。そのツールの中ではbpy.opsなどは使わずに頂点情報を直接いじっているような気がする。(ちらっと見ただけ)
ここから落とせる https://svn.blender.org/svnroot/bf-extensions/
色々なブログで入門編を見ていた限り、blender&pythonは夢のような世界だろうなと想像していたのだが、踏み込んでみて少々面食らうことになる。
良いのか悪いのか、まだそんな判断を下せるほど習熟していないので、詳しい言及は避けるが..
今回記しておきたいのは、再びPythonスクリプトを組む羽目になったときのための、アタック方法だ。
まず、いつのバージョンからかは定かではないが、少なくともBlender2.63以降にはPythonコンソールのReportボタンが無く、同様の情報はInfoウィンドウに羅列される。
bpy.ops以下のオペレーターはアクティブなオブジェクト、もしくは頂点に対して適用される。
bpy.contextはアクティブなオブジェクトやオペレーターを格納している。
ちなみにbpy.context.objectの書き換えは不可能。
スクリプトからアクティブなオブジェクトを切り替える方法は未だ不明。
選択に関してはオブジェクトのselect変数で切り替えられるが、新たに選択してもアクティブなオブジェクトにはならない。
@todo:vertex_group
@todo:モード切替
bpy.dataはデータ一般を格納している。
bpy.context.object.data.verticesとbpy.data.['該当名'].meshes.verticesは同一の模様
基本的には、まず3DViewで手動で操作し、Infoに現れたレポートをコピーすることで目的のコードを得られるが、特にbpy.context.transform内の操作についてはコンソール(Pythonコンソールではなく)に「convertViewVec: called in an invalid context」と表示される。意味は謎
bpy.context.transform.rotateによって回転をかけることができるが、OBJECTモードではオブジェクトの中心点、EDITモードでは頂点の中心(Pivot Point)周りでしか回転できない。
Pythonの変数はみんなポインタのようなものだ。という説明を見たが、容易にblender自体をクラッシュさせられることから考えても、Pythonの変数はみんなvoid*だと言ってしまっていいのだと思う。
結局目的の操作がcontribというものに含まれるmesh_extra_toolsで解決できてしまいそうなので、今回は挫折することになりそうだ。そのツールの中ではbpy.opsなどは使わずに頂点情報を直接いじっているような気がする。(ちらっと見ただけ)
ここから落とせる https://svn.blender.org/svnroot/bf-extensions/
登録:
投稿 (Atom)