2012-11-10 60 views
0

我使用Blender 2.62。從攪拌器api中的重複對象訪問源對象

我想用攪拌機作爲平鋪3d世界的編輯器。我有不同的瓷磚模型,我將這些模型的鏈接重複放置在另一個層中來構建地圖。

現在我想以某種可理解的格式導出這張地圖(像[[x,y,z,tileNo],[x,y,z,tileNo],...])。我可以使用下面的代碼遍歷給定圖層中的所有對象,但我無法找到獲取重複對象源的方法。這可能嗎?

def layerNos(o): 
    return [ln for (ln, l) in enumerate(o.layers) if l] 

def exportObjectsFromLayer(choosenLayerNo): 
    for o in bpy.data.objects: 
    if choosenLayerNo in layerNos(o): 
     yield exportTile(o) 

def exportTile(o): 
    return ("[%d,%d,%d]" % (
    round(x.location.x), 
    round(x.location.z), 
    round(x.location.y), 
    getTileNumber(x))) 

def getTileNumber(x): 
    return None # this is where I'd like to access 
    # the source of the duplicated object 
    # and get its name to lookup its number 
    # and return it as a tile number 

編輯:我已經找到一種方法做相反 - 從複製的源我可以找到所有的複製對象使用:

bpy.data.objects['Cube.121'].dupli_list_create(bpy.context.scene) 
for dupliObj in bpy.data.objects['Cube.121'].dupli_list: 
    #do sth with duplicated object 
bpy.data.objects['Cube.121'].dupli_list_clear() 

所以我總是可以用這個和迭代通過我所有的模型瓷磚,找出他們的重複放置位置。儘管如此,我還是喜歡按照上面描述的方式來做這件事,所以我暫時擱置了這個問題。

回答

1

好的,我是愚蠢的。

你可以做

object.data 

去複製的對象的源。

1

按照你的答案,我發現

object.data.users 

給出了使用網格對象的數量。對我來說很有用,看看是否有鏈接重複的對象。