2016-01-13 106 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