Blenderの簡単なアドオンを作成してみた
Blender2.8以降のバージョンの簡単なアドオンを作成してみました。
作成したアドオンは以下の2つ。
- skipframeアドオン
- set_start&endアドオン
ソースコード
skipframeアドオン
概要
現在のフレームから+2、+3、+4飛ばしすることができるアドオン。ボタンまたはショートカットで操作可能。ドープシートまたはタイムライン上でボタンを表示。
経緯
2コマベタ打ちや3コマベタ打ちする際に毎回現在のフレームを1つずつ変更するのが面倒だった
コード説明
2フレーム前に進む処理の場合は小難しいことはせずに、現在のフレームに対して2を追加
# 2フレーム前に進む処理をするクラス
class AddonTranslationFrameNum2_Forward(Operator):
# 省略----
def execute(self,context):
bpy.context.scene.frame_current+=2
return {'FINISHED'}
ショートカットを適用するエディタの設定。アニメーションに関するエディタに対してショートカットキーを有効にしています。
def registershortcut():
editor_l = [
('Dopesheet', 'DOPESHEET_EDITOR'),
('Graph Editor', 'GRAPH_EDITOR'),
("NLA Editor", "NLA_EDITOR"),
("Sequencer", "SEQUENCE_EDITOR")
]
ボタンを配置するエディタの設定。タイムラインとドープシートでボタンを配置しています
def register():
# 省略
bpy.types.TIME_MT_editor_menus.append(draw_menu)
bpy.types.DOPESHEET_MT_editor_menus.append(draw_menu)
Blenderのドキュメント読んだところエディタのクラス名等が不明だったため、実際のコードを見に行った方が理解が速かったです。例えば、以下はspace_time.pyの最終行付近のコードでクラス名が明記されています。このクラス名を手掛かりにボタンの配置のコードを書いています。
classes = (
TIME_MT_editor_menus,
TIME_MT_marker,
TIME_MT_view,
TIME_MT_cache,
TIME_PT_playback,
TIME_PT_keyframing_settings,
TIME_PT_auto_keyframing,
)
set_start&endアドオン
概要
コンテクストメニューから開始フレーム・終了フレームを現在のフレームにするアドオン。
経緯
シミュレーションの開始時間がデフォルトで1フレームからで、毎回ちょうど良い状態で開始時間になるように設定することが面倒だった
コード説明
開始フレームを現在のフレーム数にする処理は、開始フレームの変数に現在のフレームに関する変数の値を渡しているだけです。
# 現在のフレームを開始時間にするクラス
class AddonStartTimeNow(Operator):
# 省略----
def execute(self,context):
bpy.context.scene.frame_start=bpy.context.scene.frame_current
return {'FINISHED'}
コンテクストメニューに要素を追加するために、context_menuに対してメニューを描画する関数を渡しています。
def draw_menu(self, context):
layout = self.layout
layout.separator()
layout.operator(AddonStartTimeNow.bl_idname, text="現在のフレームを開始フレームにする")
layout.operator(AddonEndTimeNow.bl_idname, text="現在のフレームを終了フレームにする")
def register():
# 省略
bpy.types.DOPESHEET_MT_context_menu.append(draw_menu)
参考
Author And Source
この問題について(Blenderの簡単なアドオンを作成してみた), 我々は、より多くの情報をここで見つけました https://zenn.dev/textcunma/articles/8e5fba1f6312b9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol