根据对象名的一部分设置位置

时间:2017-04-07 15:11:51

标签: python-3.x blender

我试图使用python在blender3D中编写脚本。 我的场景中有一堆对象,想要使用对象名的数字部分来翻译它们。

首先,我通过匹配他们名字的一部分从场景中收集对象。

root_obj = [obj for obj in scene.objects if fnmatch.fnmatchcase(obj.name, "*_Root")]

这给了我一个列表:[bpy.data.objects [' 01_Root'],bpy.data.objects [' 02_Root'],bpy.data.objects [& #39; 03_Root&#39],bpy.data.objects [' 00_Root']]

我的目标是将这些对象移动15x名称的相应部分。所以' #Root'不必搬家,但是' 01_Root'必须移动15个搅拌机和' 02_Root' 30台搅拌机。

如何提取名称的数字部分并将其用作翻译值。

我是一个非常棒的python,所以我很感激能得到的所有帮助。

1 个答案:

答案 0 :(得分:0)

字符串是一个字符列表,每个字符都可以通过索引从0开始访问,第一个字符使用name[0],第二个字符使用name[1]。与任何列表一样,您可以使用slicing来获取列表的一部分。如果值始终是前两个字符,则可以使用name[:2]获取值,您可以将其转换为int()的整数或带float()的浮点数。结合起来,

val = int(name[:2])

然后你有一个数字,你可以用。计算新的位置。

obj.location.x = val * 15

如果名称中的位数可能不同,您可以使用split()来破坏特定分隔字符上的字符串。这将返回指定字符之间的项目列表,因此如果您希望第一个项目变为整数。

name = '02_item'
val = int(name.split('_')[0])

使用拆分还允许名称中包含多个值。

name = '2_12_item'
val1 = int(name.split('_')[0])
val2 = int(name.split('_')[1])