ぬっち氏の「Blenderプラグインの作り方」 (1) 注釈テスト(文中) の出来が良すぎて、これの2.8対応版 (2) 注釈テスト(文中) 時代は3.0だよ・・・ があればそれで十分な感じはある (3) 注釈テスト(文末・長文) ぬっち氏の「Blenderプラグインの作り方」の出来が良すぎて、これの2.8対応版があればそれで十分な感じはある
USERPREF
) はオペレーター関連 (_OT_
) だけ PREFERENCE
に分離されているappend・prepend・remove
は、scripts/modules/bpy_types.py
で定義されているので、(たぶん)変更可能
append
はこんな感じ
1 @classmethod 2 def append(cls, draw_func): 3 """ 4 Append a draw function to this menu, 5 takes the same arguments as the menus draw function 6 """ 7 draw_funcs = cls._dyn_ui_initialize() 8 cls._dyn_owner_apply(draw_func) 9 draw_funcs.append(draw_func)
context.copy()
もこのファイルで定義されていたbpy.types.SubsurfModifier
のboundary_smooth
のPRESERVE_CORNERS
の説明文や、bpy.ops.object.data_transfer
のvert_mapping
のEDGEINTERP_NEAREST
の説明文を流用したいが、いちいち API Document をコピペするのはちょっと... というとき
◇ types.Hoge
がある場合
1 struct = bpy.types.SubsurfModifier.bl_rna #.bl_rna で bpy_struct を取得 2 prop = struct.properties['boundary_smooth'] # properties["名前"] でプロパティを取得 3 text = prop.enum_items['PRESERVE_CORNERS'].description #Enum の場合はこんな感じ
◇ types.Hoge
がない場合(オペレーター)
1 struct = bpy.ops.object.data_transfer.get_rna_type() #.get_rna_type() で bpy_struct を取得 2 prop = struct.properties['vert_mapping'] # あとは types.Hoge と同じ 3 text = prop.enum_items['EDGEINTERP_NEAREST'].description
参考:How can I access view3d.select_circle radius value?
同様にしてstruct.functions
でメソッドが取れた はず
コピペでは駄目な理由:「同じテキスト(のはず)なのに、なぜか違う訳になる」という現象
例(2.91で発生、2.92は未確認) ```python: 適当なアドオンの中 class AddonPreferences(bpy.types.AddonPreferences): bl_idname = name
1 def draw(self, context): 2 txt_solid=bpy.types.UILayout.enum_item_name(context.active_object, 'display_type', 'SOLID') 3 self.layout.label(text=txt_solid) #これは「ソリッド」と翻訳される 4 self.layout.label(text="Solid") #これも「ソリッド」と翻訳される 5 self.layout.operator("何かのオペレーター", text=txt_solid) #これは「ソリッド」と翻訳される 6 self.layout.operator("何かのオペレーター", text="Solid") #これは「立体」と翻訳される
``` 翻訳 context のパラメータ設定が違うのかな?
Blender のスクリーンショット作成機能では、UIは映らないっぽい 勘違いだった
Calling operator "bpy.ops.screen.screenshot" error, can't modify blend data in this state (drawing/rendering)
これに限らず、「invoke でポップアップ出す → 処理を自動で実行する」のはどうすればいいんだろ