首页 > 代码库 > Blender的插件开发-Panel面板

Blender的插件开发-Panel面板

工具栏面板

先创建一个简单的面板。

import bpy

class View3DPanel():
    bl_space_type = ‘VIEW_3D‘
    bl_region_type = ‘TOOLS‘

    @classmethod
    def poll(cls, context):
        return (context.object is not None)

class PanelOne(View3DPanel, bpy.types.Panel):
    bl_idname = "VIEW3D_PT_test_1"
    bl_label = "Panel One"

    def draw(self, context):
        self.layout.label("Small Class")

class PanelTwo(View3DPanel, bpy.types.Panel):
    bl_idname = "VIEW3D_PT_test_2"
    bl_label = "Panel Two"

    def draw(self, context):
        self.layout.label("Also Small Class")

bpy.utils.register_class(PanelOne)
bpy.utils.register_class(PanelTwo)

到工具面板栏的"Misc",可以看见创建的面板。

对象属性面板

对象属性面板的一个简单的例子:

import bpy

class ObjectSelectPanel(bpy.types.Panel):
    bl_idname = "OBJECT_PT_select"
    bl_label = "Select"
    bl_space_type = ‘PROPERTIES‘
    bl_region_type = ‘WINDOW‘
    bl_context = "object"
    bl_options = {‘DEFAULT_CLOSED‘}

    @classmethod
    def poll(cls, context):
        return (context.object is not None)

    def draw_header(self, context):
        layout = self.layout
        obj = context.object
        layout.prop(obj, "select", text="")

    def draw(self, context):
        layout = self.layout

        obj = context.object
        row = layout.row()
        row.prop(obj, "hide_select")
        row.prop(obj, "hide_render")

        box = layout.box()
        box.label("Selection Tools")
        box.operator("object.select_all").action = ‘TOGGLE‘
        row = box.row()
        row.operator("object.select_all").action = ‘INVERT‘
        row.operator("object.select_random")

bpy.utils.register_class(ObjectSelectPanel)

面板对象的属性域   

对用到的各个域说明如下:

class bpy.types.Panel(bpy_struct)
Panel containing UI elements:

bl_category
    Type:string, default “”, (never None)
bl_context
    Type:string, default “”, (never None)   
    The context in which the panel belongs to. 
    (TODO: explain the possible combinations bl_context/bl_region_type/bl_space_type)   
bl_idname
    Type:string, default “”, (never None)  
    If this is set, the panel gets a custom ID, otherwise it takes 
    the name of the class used to define the panel. For example, if the 
    class name is “OBJECT_PT_hello”, and bl_idname is not set by the script,
    then bl_idname = “OBJECT_PT_hello”
bl_label
    Type:string, default “”, (never None) 
    The panel label, shows up in the panel header at the right of the triangle 
    used to collapse the panel。
bl_options
    Options for this panel type
    DEFAULT_CLOSED Default Closed, Defines if the panel has to be open or collapsed 
    at the time of its creation.
HIDE_HEADER
    Hide Header, If set to False, the panel shows a header, which contains a
     clickable arrow to collapse the panel and the label (see bl_label).
    Type:enum set in {‘DEFAULT_CLOSED’, ‘HIDE_HEADER’}, default {‘DEFAULT_CLOSED’}    
bl_region_type
    The region where the panel is going to be used in
    Type:enum in [‘WINDOW’, ‘HEADER’, ‘CHANNELS’, ‘TEMPORARY’, 
    ‘UI’, ‘TOOLS’, ‘TOOL_PROPS’, ‘PREVIEW’], default ‘WINDOW’    
bl_space_type
    Type:enum in [‘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’], default ‘EMPTY’  
    面板的space域是一枚举值,可用的属性值如下:
    EMPTY:空值。
    VIEW_3D:三维视口。
    TIMELINE:时间线和回放控制。
    GRAPH_EDITOR:Graph编辑器,关键帧编辑。
    DOPESHEET_EDITOR:Dope Sheet, 关键帧调节。
    NLA_EDITOR:NLA Editor, 合并和层操作。
    IMAGE_EDITOR:UV/Image Editor, UV Maps和图像编辑器。
    SEQUENCE_EDITOR:视频序列编辑工具。
    CLIP_EDITOR:电影剪辑编辑, 动作捕捉编辑。
    TEXT_EDITOR:文本编辑器。
    NODE_EDITOR:节点编辑器, node-based shading and compositing tools.
    LOGIC_EDITOR:逻辑编辑器, Game logic editing.
    PROPERTIES:属性编辑, Edit properties of active object and related datablocks.
    OUTLINER:Outliner, Overview of scene graph and all available datablocks.
    USER_PREFERENCES:用户偏好设置, Edit persistent configuration settings.
    INFO:信息显示窗口, Main menu bar and list of error messages (drag down to expand and display).
    FILE_BROWSER:文件浏览器, Browse for files and assets.
    CONSOLE Python控制台, 交互运行和脚本开发.
      
bl_translation_context
    Type:string, default “*”, (never None)
layout
    Defines the structure of the panel in the UI
    Type:UILayout, (readonly)    
text
    XXX todo
    Type:string, default “”, (never None)    
use_pin
    Type:boolean, default False    
classmethod poll(context)
    If this method returns a non-null output, then the panel can be drawn
    Return type:boolean    
draw(context)
    Draw UI elements into the panel UI layout
draw_header(context)
    Draw UI elements into the panel’s header UI layout

    通过上面这些参数的灵活运行,可以创建出任何Blender原生系统支持的面板样式。




Blender的插件开发-Panel面板