原文: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. 57.2拓展之纯 CSS 创作黑暗中会动的眼睛和嘴巴

    效果地址:https://scrimba.com/c/cbNkBnuV HTML code: <!-- 定义dom, .eyes容器中包含2个元素 --> <div class=&q ...

  2. MYeclipse 和 flex 环境配置

    1安卓JDK  运行 jdk-6u27-windows-i586 安装于 d:/programe/java,注意JRE和JDK安装在一起 测试是否安装成功,运行,CMD,javac 回车.或者java ...

  3. SqlDataSource.FilterExpression Property

    SqlDataSource.FilterExpression Property 定义 命名空间: System.Web.UI.WebControls Assembly: System.Web.dll ...

  4. Appium-We wanted {"required":["value"]} and you sent ["text","sessionId","id","value"]

    APK 链接:https://pan.baidu.com/s/17oeTM1qA0QjPBqLh6pS0Yg 提取码:s9ru # coding:utf-8from appium import web ...

  5. 机器学习进阶-目标跟踪-KCF目标跟踪方法 1.cv2.multiTracker_create(构造选框集合) 2. cv2.TrackerKCF_create(获得KCF追踪器) 3. cv2.resize(变化图像大小) 4.cv2.selectROI(在图像上框出选框)

    1. tracker = cv2.multiTracker_create() 获得追踪的初始化结果 2.cv2.TrackerKCF_create() 获得KCF追踪器 3.cv2.resize(fr ...

  6. 机器学习进阶-图像形态学操作-开运算与闭运算 1.cv2.morphologyEx(进行各类形态学变化) 2.op=cv2.MORPH_OPEN(先腐蚀后膨胀) 3.op=cv2.MORPH_CLOSE(先膨胀后腐蚀)

    1.cv2.morphologyEx(src, op, kernel) 进行各类形态学的变化 参数说明:src传入的图片,op进行变化的方式, kernel表示方框的大小 2.op =  cv2.MO ...

  7. datetime is not json serializable

    python, datetime is not json serializable import datetime def json_serial(obj): """JS ...

  8. pbft流程深层分析和解释(转)

    <1>pbft五阶段请求解释 Request  pre-prepare   prepare   commit  执行并reply (1)pre-prepare阶段: 主节点收到客户端请求, ...

  9. C#保留小数

    四舍五入保留 float a=0.188f; double b=System.Math.Round(a,2);//output: 0.19 直接截取: float f=0.188f; int i=(i ...

  10. mycat 多个逻辑库加读写分离

    上3篇笔记主要记录了,读写分离,单库分表,分库分表 这次改动了下,实现了分库分表以及读写分离,基于多个逻辑库,先看配置文件 server.xml <user name="root&qu ...