Blender 界面设计直观,同时还提供复杂的功能。某些操作在逻辑上适用于单个对象,而其他操作可以在逻辑上同时用于一个或多个对象。

为了处理这些场景,Blender开发人员创建了三种访问对象及其数据的方法。

这三种方法分别是:选择,激活和规范

本文选介绍选择

可以同时选择一个、多个或零个对象。使用选定对象的操作可以同时对单个对象或多个对象执行该操作。

选择对象

在继续之前,建议读者在3D视口中创建一些不同的对象作为示例。

当我们在3D视口中单击鼠标左键选择物体时,对象会高亮显示和取消高亮显示。

当我们按住Shift键并四处单击时,我们可以一次高亮显示多个对象。3D视口中的这些高亮显示表示选定的对象。

要列出选定的对象,请在交互控制台中键入以下代码:

#获取选定对象的列表

# 枚举 bpy.data.objects 数据块

bpy.context.selected_objects

正如我们前面提到的,bpy.context 子模块非常适合根据在 Blender 中所处的状态来获取对象列表。“请注意:这种两种状态分为物体模式和编辑模式”

在这种情况下,我们获取了所有选定的对象。

系统会返回下边列表

bpy.data.objects['Sphere'], bpy.data.objects['Circle'],bpy.data.objects['Cube']

在本例中,在3D视口中选择了名为Sphere的球体、名为Circle的圆和名为Cube的立方体。我们收到了一个包含bpy.data.Objects数据块的Python列表。

如果知道此类型的所有数据块都有一个Name值,我们可以遍历代码的结果以访问所选对象的名称。

以下代码获取所选对象的名称和位置:

[k.name for k in bpy.context.selected_objects]

Return the locations of selected objects

# (location of origin assuming no pending transformations)

[k.location for k in bpy.context.selected_objects]

现在,我们已经知道如何手动选择对象,我们需要根据某些条件自动选择对象。

以下代码是创建一个函数,该函数将对象名称作为参数并选择它,默认情况下清除所有其他选择。如果用户指定additive = True,,则该函数不会预先清除其他选择。

#编程方式选择对象

import bpy

def mySelector(objName, additive=False):

# By default, clear other selections

if not additive:

bpy.ops.object.select_all(action='DESELECT')

# Set the 'select' property of the datablock to True

bpy.data.objects[objName].select = True

Select only 'Cube'

mySelector('Cube')

# Select 'Sphere', keeping other selections

mySelector('Sphere', additive=True)

#Translate selected objects 1 unit along the xaxis

bpy.ops.transform.translate(value=(1, 0, 0))

注意 若要在不编写Python脚本的情况下轻松查看对象的名称,请导航到“属性”窗口并选择橙色立方体图标。现在,活动对象将在该子窗口顶部附近显示其名称,如图2-1所示。

此外,3D视口的左下角将显示活动对象的名称。我们将在本章的下一小节中讨论激活。

激活:在任何给定时间,只有一个对象可以处于活动状态。对活动对象执行操作的操作通常更具体、更强烈,因此无法同时直观地对许多操作执行。

规范:(仅限 Python)Python 脚本可以通过对象的名称访问对象,并直接写入其数据块。

虽然操作选定对象的操作通常是一种差异操作,如平移、旋转或缩放,但将数据写入特定对象通常是一种声明性操作,如位置、方向或大小。