2016-01-13 248 views
1

我使用了Python API在攪拌機一「散點圖」改變了我對象的名稱。 數據是一個將名稱映射到3D點列表的字典,因此有名稱的點雲。攪拌機

我需要在每個雲看單獨或隱藏其他人,這是我的設置:

  • 在字典每個名字,我創建一個空的對象
  • 屬於此每個3D點名字,我創建了一個小立方體,將它放置並重新放置到空物體上。現在

我可以隱藏在3D視圖中的父對象。 程序工作正常,但有一個奇怪的問題:名字很重要,我需要能夠找到他們在sceneview。但攪拌機更改名稱。像「TopDown」這樣的名稱變成「TopDown.001」。儘管事實上沒有這個名字的其他對象,但這種情況發生了。

這裏是我的代碼:

for plotname, positions in points.items(): 

    bpy.ops.object.add(type='EMPTY') 
    bpy.context.active_object.name = plotname 
    bpy.context.active_object.location=(0,0,0) 
    print(plotname)    #<---------------here the name is still correct 

    for position in positions: 
     me = bpy.data.meshes.new(plotname + 'Mesh') 
     ob = bpy.data.objects.new(plotname+"Mesh", me) 
     ob.location = (position[0], position[1], position[2]) 
     ob.show_name = True 

     bpy.context.scene.objects.link(ob) 

     me.from_pydata(verts_loc, [], faces) 

     me.update(calc_edges=True) 
     ob.parent=bpy.context.active_object 

實際的程序是長一點,verts_locfaces該段之前已經建立。他們代表一個立方體。

如何確保plotname保持plotname而不會變成plotname.001

UPDATE

澄清:不要緊,該地塊內的點被重新命名。像「plotnameMesh.001」和「plotnameMesh.002」是沒有問題的。但父對象被重命名爲。 實際上,將「網格」附加到對象名稱的唯一目的是保持頂層曲線名唯一。

回答

1

for position in positions:意味着要創建在每個plotname不同位置的多個對象。其中一個將保留劇情名,而其他劇組將獲得數字擴展名。

for position in positions: 
    me = bpy.data.meshes.new(plotname + 'Mesh') 
    ob = bpy.data.objects.new(plotname+"Mesh", me) 

是否每個位置都是唯一的,還是在每個位置添加多個對象?

你也想確保你重新運行腳本之前先刪除以前的作品。

當您有許多具有相似名稱的對象時,可以使用選擇 - >選擇圖案來選擇它們。在Python中你可以這樣做

[setattr(obj, 'select', True) for obj in bpy.data.objects if obj.name.startswith(plotname)] 
+0

職位通常會有所不同,但不能保證。感謝您提供關於如何刪除給定名稱的對象的提示。這可能非常有用。但它不能解決我的具體問題,即攪拌器更改對象的名稱。 – lhk

+1

但這個循環就是你所得到的重複 - 在位置每個位置要創建一個名爲'plotname +「網格」的對象' - 第一個將獲得該名稱和其他人將獲得數字擴展添加。 – sambler

+0

哦對不起。我的問題不夠確切。循環中的名稱更改是可以接受的。問題在於頂級對象。他們也改變了。帶「mesh」的對象是否重命名並不重要。我只需要確保plotnames輸入網格的對象不會改變 – lhk