Blender 3D:菜鸟到专业/高级教程/Blender 脚本/为您的插件添加用户界面
适用的 Blender 版本:2.68。 |
因此您已经在插件中定义了一个新的运算符。现在,为该插件提供一个合适的界面会很不错,这样用户就不必在空格菜单中查找该运算符了。
执行此操作的最佳方法是定义一个面板,该面板显示在某个窗口中,其中包含用户可以单击以操作您的插件的控件。您可以将面板放置在各种位置,但在这里我们将其插入工具架(可以通过按 T 来隐藏或显示在 3D 视图的左侧)。
面板是通过对bpy.types.Panel类进行子类化来定义的。您设置各种属性的值(bl_space_type, bl_region_type, bl_category和bl_context)以确定面板将显示的上下文,并为面板提供标题(bl_label):
class TetrahedronMakerPanel(bpy.types.Panel):
bl_space_type = "VIEW_3D"
bl_region_type = "TOOLS"
bl_context = "objectmode"
bl_category = "Create"
bl_label = "Add Tetrahedron"
这三个属性会使面板显示在工具架中,但仅在 3D 视图处于对象模式时才会显示。bl_category 行确定插件所在的工具栏选项卡,并且仅适用于带有选项卡的工具栏(2.7 版本添加)。指定任何现有的选项卡,或定义一个新的选项卡。
您的类还需要定义一个draw方法,该方法定义面板中的项目。此示例为面板创建一个新的 UI 元素列,并插入一个 UI 元素,该元素是一个按钮,单击该按钮将调用您之前在定义时定义的运算符。
def draw(self, context):
TheCol = self.layout.column(align=True)
TheCol.operator("mesh.make_tetrahedron", text="Add Tetrahedron")
#end draw
趁此机会,返回并向运算符定义添加以下行
bl_options = {"UNDO"}
这允许用户以通常的方式使用 CTRL + Z 撤销四面体的添加,并使用 CTRL + SHIFT + Z 重新执行该操作。
以下是插件的完整脚本,它现在处于运行状态
import math
import bpy
import mathutils
class TetrahedronMakerPanel(bpy.types.Panel):
bl_space_type = "VIEW_3D"
bl_region_type = "TOOLS"
bl_context = "objectmode"
bl_category = "Create"
bl_label = "Add Tetrahedron"
def draw(self, context):
TheCol = self.layout.column(align=True)
TheCol.operator("mesh.make_tetrahedron", text="Add Tetrahedron")
#end draw
#end TetrahedronMakerPanel
class MakeTetrahedron(bpy.types.Operator):
bl_idname = "mesh.make_tetrahedron"
bl_label = "Add Tetrahedron"
bl_options = {"UNDO"}
def invoke(self, context, event):
Vertices = \
[
mathutils.Vector((0, -1 / math.sqrt(3),0)),
mathutils.Vector((0.5, 1 / (2 * math.sqrt(3)), 0)),
mathutils.Vector((-0.5, 1 / (2 * math.sqrt(3)), 0)),
mathutils.Vector((0, 0, math.sqrt(2 / 3))),
]
NewMesh = bpy.data.meshes.new("Tetrahedron")
NewMesh.from_pydata \
(
Vertices,
[],
[[0, 2, 1], [0, 1, 3], [1, 2, 3], [2, 0, 3]]
)
NewMesh.update()
NewObj = bpy.data.objects.new("Tetrahedron", NewMesh)
context.scene.objects.link(NewObj)
return {"FINISHED"}
#end invoke
#end MakeTetrahedron
bpy.utils.register_class(MakeTetrahedron)
bpy.utils.register_class(TetrahedronMakerPanel)
请注意为我们的自定义面板添加了另一个 register_class
调用。
如前所述,按 ALT + P 执行它。似乎什么也没发生;Blender 会处理您的子类定义,并根据请求将它们注册到相应的位置。
但现在,返回到 3D 视图。确保您处于对象模式。通过按 T 显示工具架(如果它不可见)。在底部,您指定的选项卡中,您应该看到您的新面板出现
请注意标题旁边的三角形,Blender 会自动为您提供它,以在不进行任何额外操作的情况下折叠或展开面板。删除上一页教程中可能创建的任何四面体对象;现在单击新的“添加四面体”按钮,然后观察对象再次被创建!
这些值bl_space_type, bl_region_type和bl_context在 此处 的 Blender API 文档中(部分)列出,但没有完全解释。以下是我通过查看源代码找到的每个属性的允许值列表
属性 | 允许的值 | 源引用 |
---|---|---|
bl_space_type | "EMPTY", "VIEW_3D", "TIMELINE", "GRAPH_EDITOR", "DOPESHEET_EDITOR", "NLA_EDITOR", "IMAGE_EDITOR", "SEQUENCE_EDITOR", "CLIP_EDITOR", "TEXT_EDITOR", "NODE_EDITOR", "LOGIC_EDITOR", "PROPERTIES", "OUTLINER", "USER_PREFERENCES", "INFO", "FILE_BROWSER", "CONSOLE" | space_type_items在rna_space.c |
bl_region_type | "WINDOW", "HEADER", "CHANNELS", "TEMPORARY", "UI", "TOOLS", "TOOL_PROPS", "PREVIEW" | region_type_items在rna_screen.c |
bl_context | "mesh_edit", "curve_edit", "surface_edit", "text_edit", "armature_edit", "mball_edit", "lattice_edit", "posemode", "sculpt_mode", "weightpaint", "vertexpaint", "imagepaint", "particlemode", "objectmode" | data_mode_strings在context.c |
可以推测,并非所有组合都有意义。