原文: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. scala函数和方法的差别

    想知道什么差别,把代码复制下来运行看结果 // 1 1 2 3 5 8 13 def f(x:Int) :Int= { ) ) else f(x-)+f(x-) } println(f()) // v ...

  2. hive表命名规范 源码规则

    tablename 进来前已经把"`","."等过滤掉了,所以就是单词字符喽 \w搞定 \w包含_ 哈哈 规范就是 a-z A-Z 0-9 _ 也就是传说中的单 ...

  3. 关于 version control

    1.什么是 version control 版本控制(Vevision control)是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程.此外,版本控制也是一种软体工程技巧,借此能在软体 ...

  4. 机器学习实战之朴素贝叶斯进行文档分类(Python 代码版)

    贝叶斯是搞概率论的.学术圈上有个贝叶斯学派.看起来吊吊的.关于贝叶斯是个啥网上有很多资料.想必读者基本都明了.我这里只简单概括下:贝叶斯分类其实就是基于先验概率的基础上的一种分类法,核心公式就是条件概 ...

  5. hIve—timestamp时间戳问题

    先查看表 timestamp可以转换为标准的时间(精确到秒);https://tool.lu/timestamp/ 这个时间格式用处很多: 多个时间可以使用函数,来切换. 每个用户 产生行为的时候,用 ...

  6. Linux命令:ssh

    ssh介绍 ssh用法 ssh帮助 SSH() BSD General Commands Manual SSH() NAME ssh — OpenSSH SSH client (remote logi ...

  7. RESET MASTER和RESET SLAVE使用场景和说明,以及清除主从同步关系

    mysql主从复制中,需要将从库提升为主库,需要取消其从库角色,这可通过执行RESET SLAVE ALL清除从库的同步复制信息.包括连接信息和二进制文件名.位置.从库上执行这个命令后,使用show ...

  8. unity 4.6.1脚本解析出错,没有激活的勾,方法顺序出错

    检查方法声明上的注释:如/**xx*/或/*xx*/改为//形式 没有激活的勾: 1.如/**xx*/或/*xx*/改为//形式 2.必须保留Start函数

  9. 封装jQuery下载文件组件

    使用jQuery导出文档文件 jQuery添加download组件 jQuery.download = function(url, data, method){ if( url && ...

  10. angularjs 请求数据转换为Form Data传参

    在angularjs中配置好服务,有时传参会导致后台借不到值或者后台直接报错: 这就与后台框架有关,如果后台是以public ModelAndView接收接口传过来的参数,这种情况,前台传参的形式比较 ...