{'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関数内部も読んだ。
なんとなく想像はできるが、リファレンスが空っぽなんで、
コード追っかけないと動作詳細が分からないな。


なんか先は長い><

*1:python初心者なものでwww;

*2:まあクラスメソッドなんだろうけど

*3:http://wiki.blender.org/index.php/Dev:2.5/Py/API/Intro

*4:secelet_all