[Blender][スクリプト]サイドバーにオニオンスキン関連の機能追加
一つ目。
アクティブなグリースペンシルオブジェクトのオニオンスキン設定をサイドバーに追加。
一番下のボタンを押すと、シーン内の全グリースペンシルの内、今選択中のレイヤーだけがオン、それ以外がオフになります。つまり今描こうとしているレイヤーのオニオンスキンだけを表示します。
import bpy
class VIEW3D_PT_OnionSkinPanel(bpy.types.Panel):
bl_label = "Onion Skin Settings"
bl_idname = "VIEW3D_PT_onion_skin_panel"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = "Tool"
@classmethod
def poll(cls, context):
return context.active_object and context.active_object.type == 'GPENCIL'
def draw(self, context):
layout = self.layout
obj = context.active_object
gpd = obj.data
col = layout.column()
col.prop(gpd, "onion_factor", text="Opacity", slider=True)
col.prop(gpd, "ghost_before_range", text="Frames Before")
col.prop(gpd, "ghost_after_range", text="Frames After")
col.operator("gpencil.onion_skin_toggle", text="Off Inactive Onion Skin")
class GPENCIL_OT_OnionSkinToggle(bpy.types.Operator):
bl_idname = "gpencil.onion_skin_toggle"
bl_label = "Toggle Onion Skin"
@classmethod
def poll(cls, context):
return context.active_object and context.active_object.type == 'GPENCIL'
def execute(self, context):
active_layer = context.active_gpencil_layer
if active_layer is None:
self.report({'WARNING'}, "No active GPencil layer found.")
return {'CANCELLED'}
for obj in bpy.data.objects:
if obj.type == 'GPENCIL':
for layer in obj.data.layers:
if layer == active_layer:
layer.use_onion_skinning = True
else:
layer.use_onion_skinning = False
return {'FINISHED'}
def register():
bpy.utils.register_class(VIEW3D_PT_OnionSkinPanel)
bpy.utils.register_class(GPENCIL_OT_OnionSkinToggle)
def unregister():
bpy.utils.unregister_class(VIEW3D_PT_OnionSkinPanel)
bpy.utils.unregister_class(GPENCIL_OT_OnionSkinToggle)
if __name__ == "__main__":
register()
二つ目。
こっちはビュー毎の設定をサイドバーに表示したもの。
上から
・オニオンスキンのオンオフ
・非アクティブなレイヤーのフェード
・非アクティブなオブジェクトのフェード
import bpy
class VIEW3D_PT_grease_pencil_overlay_settings(bpy.types.Panel):
bl_label = "Grease Pencil Overlay Settings"
bl_idname = "VIEW3D_PT_grease_pencil_overlay_settings"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = 'View'
def draw(self, context):
layout = self.layout
overlay = context.space_data.overlay
# Onion Skin
layout.prop(overlay, "use_gpencil_onion_skin", text="Onion Skin")
# Fade Inactive Layers
row = layout.row(align=True)
row.prop(overlay, "use_gpencil_fade_layers", text="", icon='NONE')
row.label(text="Inactive Layers")
row.prop(overlay, "gpencil_fade_layer", text="", slider=True)
# Fade Inactive Objects
row = layout.row(align=True)
row.prop(overlay, "use_gpencil_fade_objects", text="", icon='NONE')
row.label(text="Inactive Objects")
row.prop(overlay, "gpencil_fade_objects", text="", slider=True)
def register():
bpy.utils.register_class(VIEW3D_PT_grease_pencil_overlay_settings)
def unregister():
bpy.utils.unregister_class(VIEW3D_PT_grease_pencil_overlay_settings)
if __name__ == "__main__":
register()
この記事が気に入ったらサポートをしてみませんか?