原文档路径:https://docs.blender.org/manual/zh-hans/dev/editors/python_console.html?highlight=bpy
Python 控制台
Python的控制台是一个快速来执行命令的方法,以访问整个Python的API,命令历史记录和自动完成功能。
可以通过控制台来探索可能性,然后将命令粘贴到脚本。
简介
访问内置的Python控制台
通过按 Shift-F4 在任何Blender编辑器类型(3D视图,时间线等),你可以把它改成一个控制台编辑器。
…/_images/editors_python-console_default.png
命令提示符是典型的 Python 3.x,解释器已加载,并准备接受提示符 >>> 后的命令。
先看看控制台环境
若要检查什么加载到了解释器环境,请在提示符下键入 dir() 并执行。
…/_images/editors_python-console_dir.png
自动完成工作
现在,键入 bpy. ,然后按 Ctrl-Spacebar ,你会看到控制台自动完成功能在运行中。
…/_images/editors_python-console_completion.png
你会注意到出现在 bpy 子模块的列表。这些模块封装所有我们Blender Python API 能做的工作,是非常强大的工具。
让我们列出 bpy.app 模块的所有内容。
注意在启用自动完成的提示符之上的绿色输出。你看到的是自动完成列表的结果。在上面的列表中,所有的都是模块属性名称,但是如果你看到任何以(
结尾的名字,那么这是一个函数。
我们将利用这一点来帮助我们更快地学习API。现在你已经掌握了这一点,让我们继续研究 bpy 中的一些模块。
摆弄模块前
如果你在 3D 视图查看默认 Blender场景,你将注意到 三个物体: 立方体、 灯和摄像机。
所有对象的都存在上下文,可以有各种模式下对他们进行操作。
在任何情况下,只有一个物体处于活动状态,并且可以有多个选定的物体。
所有物体都是blend文件中的数据。
有创建和修改这些对象的运算符/函数。
对于上面列出的所有方案 (并非全部列出, 请注意…) “bpy” 模块提供了访问和修改数据的功能。
示例
bpy.context
Note
要使下面的命令显示正确的输出, 请确保在3D 视图中有选定的对象。
…/_images/editors_python-console_bpy-context.png
试试看!
bpy.context.mode
将打印当前 3D 视图模式 (物体、 编辑、 雕刻等.)。
bpy.context.object 或 bpy.context.active_object
将访问3D视图中的活动物体。
将X位置值更改为1:
bpy.context.object.location.x = 1
将前一个X位置的物体移动0.5个单位:
bpy.context.object.location.x += 0.5
修改X, Y, Z 位置值:
bpy.context.object.location = (1, 2, 3)
只更改X,Y组件:
bpy.context.object.location.xy = (1, 2)
物体的数据类型位置:
type(bpy.context.object.location)
现在,你可以有权访问许多数据:
dir(bpy.context.object.location)
bpy.context.selected_objects
访问到所有选定物体的列表。
然后按 Ctrl-Spacebar:
bpy.context.selected_objects
打印列表中第一个物体的名称:
bpy.context.selected_objects[0]
复杂的一个…但是这会打印一个不包含活动物体的物体列表:
[obj for obj in bpy.context.selected_objects if obj != bpy.context.object]
bpy.data
bpy.data 具有可以访问.blend文件中所有数据的函数和属性。
你可以访问当前.blend文件中的以下数据: 物体、 网格、 材质、 纹理、 场景、 屏幕、 声音、 脚本,等等。
这是大量的数据。
试试看!
…/_images/editors_python-console_bpy-data.png
练习
按 Return 两次后它将打印所有属于名称为“Scene”的Blender场景的物体:
for obj in bpy.data.scenes[‘Scene’].objects: print(obj.name)
将活动物体与名为“Scene”的Blender场景取消关联:
bpy.data.scenes[‘Scene’].objects.unlink(bpy.context.active_object)
bpy.data.materials[‘Material’].shadows
bpy.data.materials[‘Material’].shadows = False
bpy.ops
这个工具系统是围绕操作者的概念构建的。运算符通常从按钮或菜单执行, 但也可以直接从 Python 调用。
见 bpy.ops 所有的操作符 API documentation 列表。
让我们在3D视图中创建一组五个立方体。首先,选中它并按下 X 删除现有的立方体物体。
试试看!
下面的命令用于指定在1层中创建物体。首先, 我们定义一个数组变量以供以后参考:
mylayers = [False] * 20
mylayers[0] = True
我们创建一个用于创建立方体网格基础物体的操作符的引用:
add_cube = bpy.ops.mesh.primitive_cube_add
现在在一个 for循环 中,我们创建五个物体(在上面的屏幕截图中使用了另一种方法创建,)像这样: 在shell提示下输入命令后按两次 Return
for index in range(5):
add_cube(location=(index * 3, 0, 0), layers=mylayers)
…/_images/editors_python-console_bpy-ops.png
使用方法
别名管理
一些变量和模块可以方便使用:
C: 快速访问 'Bpy.context ’ 。
D: 快速访问 bpy.data。
bpy: 顶级Blender Python API模块。
键绑定
Up / Down – Cycle 命令历史。
Left / Right – 光标运动。
Ctrl-Left / Ctrl-Right – 光标运动,用文字。
Backspace / Delete – 擦除字符。
Tab --缩进。
Shift-Tab – 取消缩进。
Ctrl-Backspace / Ctrl-Delete – 擦除文字。
Ctrl-Spacebar --自动完成。
Return – 执行命令。
Shift-Return – 添加到命令历史记录而不执行。
Ctrl-C – 复制选择。
Ctrl-V – 粘贴到命令行。