2017-04-07 32 views
1

我正在尝试使用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 [ '03_Root'],联吡啶。 data.objects ['00_Root']]

我的目标是将这些对象移动到它们相应的名称部分。所以'00_Root'不必移动,但'01_Root'必须移动15个搅拌器单元和'02_Root'30搅拌器单元。

如何提取姓名的numberpart并将其用作翻译值。

我是一个非常漂亮的python新手,所以我将不胜感激所有的帮助。

回答

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]) 

使用split还允许在名称中使用多个值。

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