我在混合器中使用python API作为“scatterplot”。 数据是一个字典,它将名称映射到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_loc
和faces
已在此代码段之前设置。它们代表一个立方体。
如何确保plotname
保持plotname
并且不会成为plotname.001
?
更新
澄清:图中的点被重命名并不重要。像“plotnameMesh.001”和“plotnameMesh.002”这样的东西没问题。但是父对象被重命名为。 实际上,将“网格”附加到对象名称的唯一目的是保持顶层plotname的唯一性。
答案 0 :(得分: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)]