原文: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. uva-10716-贪心

    题意:输入长度在100内的小写字母的字符串,求把它变成回文字符串的最少交换次数.如果不能变成回文串,输入,Impossible. 解法: 要变成回文字符串,必须满足一个性质,所有的字符出现次数都是偶数 ...

  2. 8.2.1-优化SELECT语句

    8.2.1.优化 SELECT 语句 由SELECT 语句组成的查询,在数据中执行所有的查询.对这类语句的调优排在首位,无论是调优动态web网页的二级响应时间,还是减少生成巨大隔夜报告的时间. 而且, ...

  3. java.net.BindException: 地址已在使用 (Bind failed)

    java.net.BindException: 地址已在使用,是因为端口被占用,出现在启动服务的时候 报错如截图 报错显示 10062端口被占用冲突 执行netstat -alnp | grep 10 ...

  4. 31.网站数据监控-2(scrapy文件下载)

    温州数据采集 这里采集网站数据是下载pdf:http://wzszjw.wenzhou.gov.cn/col/col1357901/index.html(涉及的问题就是scrapy 文件的下载设置,之 ...

  5. 31.用 CSS 的动画原理,创作一个乒乓球对打动画

    原文地址:https://segmentfault.com/a/1190000015002553 感想:纯属动画 HTML代码: <div class="court"> ...

  6. spark基础知识介绍(包含foreachPartition写入mysql)

    数据本地性 数据计算尽可能在数据所在的节点上运行,这样可以减少数据在网络上的传输,毕竟移动计算比移动数据代价小很多.进一步看,数据如果在运行节点的内存中,就能够进一步减少磁盘的I/O的传输.在spar ...

  7. zabbix模块注意

    1,每个监控组使用一个模版,对模版操作时会对监控组的每个模版进行修改操作.

  8. Dubbo的学习

    Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. Dubbo是一款高性能.轻量级的开源Java RP ...

  9. os sys 模块

    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.chdi ...

  10. delphi query阻塞执行 长时间执行sql的解决办法

    delphi query 执行sql一直是阻塞执行,执行长时间的sql语句,程序没响应了,这时候只能用线程技术解决. 如今FDQuery有了CmdExecMode属性,可以设置amCancelDial ...