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/

0 件のコメント:

コメントを投稿