原文:https://docs.blender.org/api/blender_python_api_current/info_quickstart.html#native-types


1 前言

  可以做的:

    ~可以编辑所有数据

    ~可以修改用户设置,快捷键和主题

    ~可以使用自己定义的工具

    ~可以创建用户接口,例如,菜单,标题,面板

    ~。。。

  不可以做的:

    ~创建新的空间类型

    ~

2 开始之前

  运行脚本

    1、使用内建的文本编辑器

    2、使用Pyhton控制台

    这两者都是区域的一种类型,都可以在标题栏中进行切换

3 关键概念

  3.1 使用数据

    使用数据块

        Python使用数据的方式与动画系统与用户界面使用数据的方式一样,也就是说你可以通过按钮更改的设置,同时也可以使用Python来更改。

      使用bpy.data模块来操作当前打开的blend文件。

    关于集合

        您会注意到,索引和字符串都可以用来访问集合的成员。

>>> bpy.data.objects['Cube']
bpy.data.objects["Cube"]
>>> bpy.data.objects[0]
bpy.data.objects["Cube"]

    获取属性

        当获取一个数据块后,就可以通过访问它的属性来进行操作,就像在图形界面中一样。事实上,每个工具提示框中都显示了你在Python中如何访问到这个属性

      可以使用“控制台”来测试你要访问哪些数据,这是它自己的空间类型。这个支持自动完成,给你一个快速的方法,在你的文件中挖掘不同的数据。

    新建数据和移除

        新的数据块不能通过调用它的类来创建,这对熟悉其他Python API的人来说或许有些诧异。这在API设计中是有意义的,Blender/Python API不能

      在主要的Blender数据库之外创建Blender数据(通过bpy.data访问),因为这个数据是由Blender(save /load/undo/ append)管理的。等等)。通过

      bpy. Data中的集合的方法来添加和删除数据。

>>> mesh = bpy.data.meshes.new(name="MyMesh")
>>> print(mesh)
<bpy_struct, Mesh("MyMesh.001")>
>>> bpy.data.meshes.remove(mesh)

    自定义属性

        如果数据块有自己的ID,那么Python就能访问它的属性。当指定一个新的属性时,它将被创建或是重写原来的同名属性。这些数据将会随着blend文件

      一起保存,随着对象一起被复制。

      注意:这些属性只能被指定为基础Python数据类型:

        · int, float, string

        · array of ints/floats

        · dictionary (only string keys are supported, values must be basic types too)

      这些属性在Python之外是有效的。它们可以通过曲线或在驱动路径中使用。

  3.2 上下文

      虽然直接通过名称或列表访问数据非常有用,但在用户的选择上进行具体操作更为常见。上下文始终可以从bpy获得。上下文,可用于获取活动对象、

    场景、工具设置以及其他许多属性。

      注意,上下文是只读的。这些值不能直接修改,尽管它们可以通过运行API函数或使用bpy.data API来改变。

      上下文属性根据被访问的位置而变化。3D视图的上下文成员与控制台不同,因此在访问用户状态所知道的上下文属性时要小心。

      参见bpy.context

  3.3 运算符(工具)

      操作符是用户通过按钮、菜单项或快捷键访问的工具。从用户的角度来看,它们是一个工具,但Python可以通过  bpy.ops  模块来运行这些设置。

    poll()

      通过提前调用poll(),可以避免使用try/catch语句,从而可以检查是否在合适的上下文中执行ops操作

4 结合

  Python脚本可以通过下面的方式来与Blender结合:

    · 定义一个渲染引擎

    · 定义一系列操作

    · 定义菜单,标题栏和面板

    · 向已有的菜单,标题栏和面板中插入新的按钮

  这可以通过定义一个已经存在类型的子类来完成。

  4.1 自定义运算操作脚本

import bpy

def main(context):
for ob in context.scene.objects:
print(ob) class SimpleOperator(bpy.types.Operator):
"""Tooltip"""
bl_idname = "object.simple_operator"
bl_label = "Simple Object Operator" @classmethod
def poll(cls, context):
return context.active_object is not None def execute(self, context):
main(context)
return {'FINISHED'} def register():
bpy.utils.register_class(SimpleOperator) def unregister():
bpy.utils.unregister_class(SimpleOperator) if __name__ == "__main__":
register() # test call
bpy.ops.object.simple_operator()

  4.2 面板例

     bpy.types.Panel

    注意,额外的bl_变量用于设置它们所显示的上下文。

import bpy

class HelloWorldPanel(bpy.types.Panel):
"""Creates a Panel in the Object properties window"""
bl_label = "Hello World Panel"
bl_idname = "OBJECT_PT_hello"
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "object" def draw(self, context):
layout = self.layout obj = context.object row = layout.row()
row.label(text="Hello world!", icon='WORLD_DATA') row = layout.row()
row.label(text="Active object is: " + obj.name)
row = layout.row()
row.prop(obj, "name") row = layout.row()
row.operator("mesh.primitive_cube_add") def register():
bpy.utils.register_class(HelloWorldPanel) def unregister():
bpy.utils.unregister_class(HelloWorldPanel) if __name__ == "__main__":
register()

5 类型

  5.1 原生类型   

    1)Blender float/int/boolean -> float/int/boolean

    2)Blender enumerator -> string

      >>> C.object.rotation_mode = 'AXIS_ANGLE'

    3)Blender enumerator (multiple) -> set of strings

      # setting multiple camera overlay guides

      bpy.context.scene.camera.data.show_guide = {'GOLDEN', 'CENTER'}

      # passing as an operator argument for report types

      self.report({'WARNING', 'INFO'}, "Some message!")

  5.2 内部类型

      bpy.types.bpy_struct

      数据包含自己的属性组/网格/骨头/场景……等等

  5.3 Mathutils类型(数学工具)

      用于矢量,四元数,欧拉,矩阵和颜色类型  mathutils

6 动画

    在Python中有两种方法来添加关键帧,一种是直接通过key属性来添加,就像通过界面中按钮添加一样。还可以手动创建曲线和关键帧数据,

  然后设置该属性的路径。

#Simple example:

obj = bpy.context.object
obj.location[2] = 0.0
obj.keyframe_insert(data_path="location", frame=10.0, index=2)
obj.location[2] = 1.0
obj.keyframe_insert(data_path="location", frame=20.0, index=2)

 #Using Low-Level Functions:

obj = bpy.context.object
obj.animation_data_create()
obj.animation_data.action = bpy.data.actions.new(name="MyAction")
fcu_z = obj.animation_data.action.fcurves.new(data_path="location", index=2)
fcu_z.keyframe_points.add(2)
fcu_z.keyframe_points[0].co = 10.0, 0.0
fcu_z.keyframe_points[1].co = 20.0, 1.0

一、Blender/Python 快速入门的更多相关文章

  1. Python快速入门

    Python快速入门 一.基础概要 命名:h.py Linux命令行运行:python h.py 注释.数字.字符串: 基本类型只有数字与字符串 #python注释是这样写的 ''' 当然也可以这样 ...

  2. python快速入门及进阶

    python快速入门及进阶 by 小强

  3. Python快速入门PDF高清完整版免费下载|百度云盘

    百度云盘:Python快速入门PDF高清完整版免费下载 提取码:w5y8 内容简介 这是一本Python快速入门书,基于Python 3.6编写.本书分为4部分,第一部分讲解Python的基础知识,对 ...

  4. Python快速入门之与C语言异同

    代码较长,建议使用电脑阅读本文. 10分钟入门Python 本文中使用的是Python3如果你曾经学过C语言,阅读此文,相信你能迅速发现这两种语言的异同,达到快速入门的目的.下面将开始介绍它们的异同. ...

  5. 1、Python快速入门(0529)

    学习来自马哥教育的视频,感谢马哥 编程语言: 用户: 问题空间 计算机:解决问题 解空间 抽象: 机器代码-->微码编程-->高级语言 (语言的高下级的是根据语言是否被人类容易理解或者更接 ...

  6. python快速入门——进入数据挖掘你该有的基础知识

    这篇文章是用来总结python中重要的语法,通过这些了解你可以快速了解一段python代码的含义 Python 的基础语法来带你快速入门 Python 语言.如果你想对 Python 有全面的了解请关 ...

  7. Python与C语言基础对比(Python快速入门)

    代码较长,建议使用电脑阅读本文. 10分钟入门Python 本文中使用的是Python3 如果你曾经学过C语言,阅读此文,相信你能迅速发现这两种语言的异同,达到快速入门的目的.下面将开始介绍它们的异同 ...

  8. 第02章 Python快速入门

    007.快速入门,边学边用 008.变量类型 print(type(变量))    查看变量的了类型     现在常用的变量的类型有整型.浮点型.字符型 009.List基础模块 类型转换:str(8 ...

  9. 「数据挖掘入门系列」Python快速入门

    Python环境搭建 本次入门系列将使用Python作为开发语言.要使用Python语言,我们先来搭建Python开发平台.我们将基于Python 2.7版本.以及Python的开发发行版本Anaco ...

随机推荐

  1. 3.div+css 的布局较 table 布局有什么优点

    改版的时候更方便,只需改css文件. 页面加载速度更快.结构化清晰.页面显示简介. 表现与结构相分离. 已于优化搜索引擎更友好,排名更容易靠前.

  2. 《算法》第五章部分程序 part 5

    ▶ 书中第五章部分程序,包括在加上自己补充的代码,Knuth-Morris-Pratt 无回溯匹配,Boyer - Moore 无回溯匹配,Rabin - Karp 指纹匹配 ● Knuth-Morr ...

  3. apt-get 使用指南

    # apt-get update——在修改/etc/apt/sources.list或者/etc/apt/preferences之後运行该命令.此外您需要定期运行这一命令以确保您的软件包列表是最新的. ...

  4. 关于IK 分词器

    准备: 1 创建索引: PUT my_index PUT my_index2 2 先做好映射: PUT /my_index/*/_mapping { "properties": { ...

  5. Mybatis九( mybatis插件的原理及使用)

    1.插件执行原理 一.demo 1.测试类 @Test public void test1() { String resource = "mybatis-config.xml"; ...

  6. 关于 build tools

    1.build tools是什么 Build Tools 即构建工具是一个把源代码生成可执行应用程序的过程自动化的程序(例如Android app生成apk).构建包括编译.连接跟把代码打包成可用的或 ...

  7. 02.photoshop制作透明图片步骤

    1.首先打开PS软件和图片如下.文件-新建. 2.如下图背景内容选择-透明.在确定. 3.出现了白底这就是透明的. 4.将图片背景都去除 5.在选择文件-存储为 6.格式选择.GIF的文件.其它不是透 ...

  8. linux MYSQL大小写问题处理

    1)window下默认大小写不敏感,所以在window下.创建表 test后再想创建表TEST会报错.而linux下默认可以.认为是不同的两张表 2)linux创建数据库,安装完毕后 首要任务是在li ...

  9. UI5-学习篇-16-云端SCP-Destination配置

    1.登录路径: https://account.ap1.hana.ondemand.com/#/home/welcome 2.查看云连接器 如下图所示,虚拟主机都已连接且资源可用: 若虚拟主机连接存在 ...

  10. for循环实例2

    九九乘法表: //九九乘法表 ; x < ; x++) { ; y <=x;y++ ) { Console.Write(y.ToString()+"*"+x.ToStr ...