Blender插件开发-自定义侧栏

目录

01 代码框架

01.01 定义一个 Panel 类

01.02 指定面板位置

01.03 注册 Panel 类

01.04 在面板中添加元素

01.05 效果展示

02 面板位置


本节课程带你了解,如何在下方的侧栏中添加自定义命令。

如果你想要免费的blender插件、模型等可以看看这个blender资源库

还有免费的Blender入门教程

【频道】Blender插件开发 - 乐述云享

01 代码框架

修改 __init__.py 代码,除 bl_info 参数不变,其余的更新为以下代码:

  1. import bpy
  2. class View3DPanel:
  3. bl_space_type = 'VIEW_3D'
  4. bl_region_type = 'UI'
  5. bl_category = "ALESHU"
  6. @classmethod
  7. def poll(cls, context):
  8. return True
  9. class PANEL_PT_ONE(View3DPanel, bpy.types.Panel):
  10. bl_label = "测试面板标签"
  11. def draw(self, context):
  12. layout = self.layout
  13. layout.label(text="测试标签:")
  14. row = layout.row()
  15. row.operator(test_button.bl_idname, text="测试按钮")
  16. class test_button(bpy.types.Operator):
  17. bl_idname = "aleshu.test_button"
  18. bl_label = "测试按钮"
  19. bl_description = "测试按钮-描述"
  20. @classmethod
  21. def poll(cls, context):
  22. return (context.object is not None)
  23. def invoke(self, context, event):
  24. print('测试按钮_点击')
  25. return {"FINISHED"}
  26. classes = (
  27. PANEL_PT_ONE,
  28. test_button
  29. )
  30. def register():
  31. for cls in classes:
  32. bpy.utils.register_class(cls)
  33. def unregister():
  34. for cls in classes:
  35. bpy.utils.unregister_class(cls)
  36. if __name__ == "__main__":
  37. register()

想要在菜单中加入一个自定义命令,你必须要满足几个要求:

  • 注册一个Panel类(bpy.types.Panel);

  • 指定面板的位置;

  • 在面板中添加元素,案例中我们添加了一个标签以及一个按钮。

01.01 定义一个 Panel 类

根据以上步骤,我们需要先定义一个 Panel 类,其中 bl_label 是面板名称。

  1. class PANEL_PT_ONE(View3DPanel, bpy.types.Panel):
  2. bl_label = "测试面板标签"
  3. def draw(self, context):
  4. pass

这个Panel类的类名中需要包含 _PT_ 的标识,否则Blender会在控制台窗口生成警告。

01.02 指定面板位置

View3DPanel 是一个自定义类,用于指定面板位置。

  1. class View3DPanel:
  2. bl_space_type = 'VIEW_3D'
  3. bl_region_type = 'UI'
  4. bl_category = "ALESHU"
  5. @classmethod
  6. def poll(cls, context):
  7. return True
  • bl_space_type:面板位置

  • bl_region_type:UI

  • bl_category:面板分类名称,将软件语言调为英文,如果面板位置里有重名分类名称,就会合并,若名称唯一,则单独生成一个侧栏。

  • poll():返回True表示显示当前面板,返回False表示隐藏当前面板。

01.03 注册 Panel 类

定义完成后,需要在Blender正式启用前注册类:

  1. bpy.utils.register_class(cls)

在案例代码中,我们采用了for循环,去遍历所有类名。

当然有注册,就有卸载,在 unregister() 函数中,必须使用 bpy.utils.unregister_class(cls) 完成卸载动作。

01.04 在面板中添加元素

生成用于显示的标签:

  1. layout = self.layout
  2. layout.label(text="测试标签:")

添加一个占用一整行的按钮元素:

  1. row = layout.row()
  2. row.operator(test_button.bl_idname, text="测试按钮")

test_button 是自定义按钮组件:

  1. class test_button(bpy.types.Operator):
  2. bl_idname = "aleshu.test_button"
  3. bl_label = "测试按钮"
  4. bl_description = "测试按钮-描述"
  5. @classmethod
  6. def poll(cls, context):
  7. return (context.object is not None)
  8. def invoke(self, context, event):
  9. print('测试按钮_点击')
  10. return {"FINISHED"}

bl_idname 名称格式必须为 xx.xx 否则会抛出异常。

poll() 函数和 View3DPanel 中的 poll() 函数含义相同,返回 True 代表按钮可用,返回 False 代表按钮禁用。

invoke() 函数用于执行按钮被按下之后需要执行的指令,需要有返回值。

01.05 效果展示

02 面板位置

若我们想要在不同的编辑器的侧栏中添加自定义面板,就需要了解每一个面板对应的参数。

将上述框出来的代码替换成下面的参数即可更换面板的位置。

  • VIEW_3D:3D 视图

IMAGE_EDITOR:UV/图像编辑器

NODE_EDITOR:纹理/几何节点编辑器

SEQUENCE_EDITOR:视频序列编辑器

CLIP_EDITOR:影片剪辑编辑器

DOPESHEET_EDITOR:动画摄影表、时间线

GRAPH_EDITOR:曲线编辑器、驱动器

NLA_EDITOR:影片剪辑编辑器

TEXT_EDITOR:文本编辑器

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

one行feng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值