{'reading add-ons':'Mesh: Relax', 'ver':2.58.0}
bpy手っ取り早く理解するには、addons読むべしってことで
2.58同梱の[Mesh: Relax]を読む。
http://wiki.blender.org/index.php/Extensions:2.5/Py/Scripts/Modeling/Relax
addons path
2.58/scripts/addons/mesh_relax.pyを読む。
100行程度だから、暇つぶしに読めます。
bl_info
bl_info辞書。addonsの情報が色々。
Usage
使い方は以下のとおり。ってことは
W-menu(Mesh->Vertices)に登録する方法が、記載されているはず。
Launch from "W-menu" or from "Mesh -> Vertices -> Relax"
register(), unregister()
で、内容すっ飛ばして、登録部分読む。
いきなり前回やった
- bpy.utils.[un]register_class
じゃなくて
- bpy.utils.[un]register_module
だよ><
尚且つ登録してるモジュールの[__name__]ってなんだよ><
っと、ググルと
- スクリプト実行時は、"__main__"
- importされた場合は、mesh_relax
との事。
で、pythonでモジュールってなんだよ><;
叫んでいても仕方ないので、
register_moduleについて調べるか。
Utilities (bpy.utils) — Blender v2.58.1 - API documentation
ん〜、blender本家のマニュアルヤル気がねえorz
気分変えて、moduleってなんだろうw;*1
http://www.python.jp/doc/2.5/tut/node8.html
ん〜、pythonはファイル単位をmoduleとして管理してるのかな。
で、"bpy.utils.[un]register_module"は結局良く解らん><;
まあemsh_relax[.py]のモジュール名渡してるんだから、
bpy.types.VIEW3D_MT_edit_mesh_specials, bpy.types.VIEW3D_MT_edit_mesh_vertices
え〜、ドキュメントに無いような><
Types (bpy.types) — Blender v2.58.1 - API documentation
ん〜、謎だ。まあ想像はできるけど。
def menu_func(self, context):
class Relax(bpy.types.Operator):の登録かな?
そういやpythonのメンバ変数は皆パブリックだっけ。
てか、インスタンス作らなくても直接"Relax.bl_idname"で指定するのか。
なんか気持ち悪いな
class Relax(bpy.types.Operator):
def poll(cls, context):
@classmethodって何だ*2って事でググる。
Python のクラスメソッド – デコレータ @classmethod, @staticmethod を使って | すぐに忘れる脳みそのためのメモ
クラスメソッドなのに、インスタンスからも呼び出せるのがpythonっぽい。
気持ち悪いけどな
で、pollって何してんのと調べる*3と
何かしらのチェック用の関数見たい。
@classmethod def poll(cls, context): obj = context.active_object return (obj and obj.type == 'MESH')
上記から、EditModeで選択部分があって、選択箇所がMESHの場合をチェックしているのかと
EditModeで、A*4で非選択で実行してみたけど、例外上がってない。
ん〜、じゃあcontext.active_objectって何返すんだと本家APIリファレンスみたけど
なんの説明も書いてないよ><
def execute(self, context):
で、W-menuで選択されたときに下記が実行されると。
def execute(self, context): for i in range(0,self.iterations): relax_mesh(context) return {'FINISHED'}
でrelax_mesh関数内部も読んだ。
なんとなく想像はできるが、リファレンスが空っぽなんで、
コード追っかけないと動作詳細が分からないな。
なんか先は長い><