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原生系统支持的面板样式。

时间: 2024-10-10 04:32:06

Blender的插件开发-Panel面板的相关文章

jQuery Easy UI Panel(面板)组件

panel(面板)组件,跟前面的组件用法几乎都差不多,也是从设置一些面板属性.操作面板触发的事件.我们可针对面板对象的操作方法这三个点去学习. 后面有一些组件要依赖于这个组件. 还有一点跟前面不同的就是面板内容可以请求远程数据. 示例: <!DOCTYPE html> <html> <head> <title>jQuery Easy UI</title> <meta charset="UTF-8" /> <s

Blender的插件开发-对象体系探索

按照python的说法一切皆对象,Blender中亦然. Blender的根对象是bpy,因此任何模块都需要: import bpy bpy.data 然后,任何对象其实都是数据,因此访问blender的第一个关键对象是bpy.data.现在,我们打开python的命令行窗口: 拖动3D视图的右上角,向左下,扩展出一个窗口. 选择左下角的立方体,选择Python控制台,然后就可以输入Python脚本了. 在其中输入: >>bpy.data.objects <bpy_collection[

EasyUI - Panel 面板控件

效果: html代码: <div id="p" style="padding: 10px;"> <p>panel content.</p> <p>panel content.</p> </div> JS代码: 其中有些属性,之间的使用有冲突. tools属性,与href属性,与extractor属性,与loadingMessage属性,最为有用. $(function () { $('#p').

Panel(面板)数据结构

Pandas库中除了Series, DataFrame这两种常用数据结构外,还有一种Panel数据结构,通常可以用一个由DataFrame对象组成的字典或者一个三维数组来创建Panel对象. 1 # -*- coding: utf-8 -*- 2 """ 3 Created on Sat Mar 26 18:01:05 2016 4 5 @author: Jeremy 6 """ 7 import numpy as np 8 from panda

ExtJs4 笔记(9) Ext.Panel 面板控件、 Ext.window.Window 窗口控件、 Ext.container.Viewport 布局控件 (转 )出处:[Lipan] (http://www.cnblogs.com/lipan/)

本篇讲解三个容器类控件. 一.面板控件 Ext.Panel 一个面板控件包括几个部分,有标题栏.工具栏.正文.按钮区.标题栏位于最上面,工具栏可以在四个位置放置,围绕中间部分正文,按钮区位于最小方.下面介绍几个基本配置项: 1.title:设置面板标题文本. 2.tbar,lbar,rbar,bbar:分别设置上.左.右.下四个部位的工具栏. 3.html,items:前者用来设置正文部分的html,后者设置正文部分的ext控件. 4.buttons:设置按钮区的按钮. 下面看看面板生成代码:

Ext. Panel()面板组件

<script type="text/javascript"> function a(){ new Ext.Panel(config ); } var config ={ title: "这是标题栏", width: 300,//设置宽度从标题栏左上角开始 height: 80,//设置高度从标题栏左上角开始 header:true,//false表示:这是标题栏 隐藏 true表示出来 renderTo: Ext.getBody() //加载jsp b

Pandas | 04 Panel 面板

面板(Panel)是3D容器的数据.面板数据一词来源于计量经济学,部分源于名称:Pandas - pan(el)-da(ta)-s. 3轴(axis)这个名称旨在给出描述涉及面板数据的操作的一些语义.它们是 - items - axis 0,每个项目对应于内部包含的数据帧(DataFrame). major_axis - axis 1,它是每个数据帧(DataFrame)的索引(行). minor_axis - axis 2,它是每个数据帧(DataFrame)的列. 1. pandas.Pan

触发按钮改变panel面板上的小圆圈颜色

import javax.swing.*; import java.awt.event.*; import java.awt.*; public class TouChaCol implements ActionListener{ JFrame frame; public static void main(String [] args){ TouChaCol game = new TouChaCol(); game.go(); } public void go(){ frame = new JF

Blender的插件开发-Operator操作器(算子)

毫无疑问,Operator是Blender中最为核心的一个对象,而且里面包罗万象(不仅可以操作几何对象,所有的菜单都可以控制,因为Blender其实就是一个三维图形的超级命令解释器嘛!). 我们先定义一个简单的Operator.把下面的代码复制到文本编辑中,点击"执行脚本". import bpy class SimpleOperator(bpy.types.Operator):     bl_idname = "object.simple_operator"