2017-04-07 62 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]) 
相關問題