文档章节

Blender的插件开发-Panel面板

openthings
 openthings
发布于 2015/01/27 09:58
字数 802
阅读 1117
收藏 5

工具栏面板

先创建一个简单的面板。

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




© 著作权归作者所有

openthings
粉丝 301
博文 1110
码字总数 636345
作品 1
东城
架构师
私信 提问
Blender的插件开发-对象体系探索

按照python的说法一切皆对象,Blender中亦然。 Blender的根对象是bpy,因此任何模块都需要: import bpy 注意: Blender的脚本print("hello")函数是输出信息到启动的控制台的,直接运行的时候...

openthings
2015/01/27
0
3
Blender的插件开发-快速入门

使用Blender创建精彩非凡的作品,你可以是三维图形、创意设计的专家,但不必要成为软件开发的专家。 Blender具有强大的插件扩展功能,不仅可以加载大量的各种功能、效率增强插件,而且稍微懂...

openthings
2015/01/27
0
5
MMD导入Blender后贴图丢失 2019-04-23

问题 导入mmd模型之后,先进行Shading转换操作,如下图: 点击GLSL(mmd用的自定义的shader光照模型),如果此时贴图依然丢失,就查看下模型的Matirial是否正常 不正常: 查看了下材质属性面板...

qingliangcn
昨天
0
0
Verge3D 2.10 for Blender 发布,WebGL 应用构建框架

Verge3D 2.10 Blender/3ds Max 发布 经过潜心月余持续对预发行版的改进,现在我们正式为大家发布Verge3D 2.10 for Blender/3ds Max!这个版本中,我们增加了许多新特性:试验性VR支持,自动更...

Verge3D
02/20
0
0
【图】Blender在科研上的演示应用

原载: Blenderget / 作者:@congcong009 (罗聪翼,“中国Blender第一人”),转载较原文有所改动。 Blender是一款开源3D动画制作软件。最初,Blender是荷兰的一个视频工作组NeoGeo与Not a...

openthings
2015/01/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
2
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
2
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
3
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部