Blender меняет имена моих объектов

Я использую Python API для "scatterplot" в Blender. Данные представляют собой словарь, который отображает имена в списки трехмерных точек, поэтому существуют именованные облака точек.

Мне нужно посмотреть на каждое облако индивидуально и спрятать остальные, это мои настройки:

  • для каждого имени в dict я создаю пустой объект
  • для каждой трехмерной точки, принадлежащей этому имени, я создаю небольшой куб, размещаю его и перерисовываю для пустого объекта.

Теперь я могу скрыть родительские объекты в 3D-виде. Программа работает нормально, но есть одна странная проблема: имена важны, мне нужно, чтобы их можно было найти в виде сцены. Но блендер меняет имена. Такое имя, как "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" не проблема. Но родительские объекты переименовываются в. Фактически единственная цель добавления "Mesh" к именам объектов - сохранить уникальное имя графика верхнего уровня.

1 ответ

for position in positions: подразумевает, что вы создаете несколько объектов в разных местах для каждого сюжета. Один из них сохранит заговор, а другие получат числовые расширения.

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

Каждая позиция уникальна или вы добавляете несколько объектов в каждую позицию?

Вы также захотите убедиться, что удалили предыдущие создания, прежде чем снова запускать свой скрипт.

Если у вас есть много объектов с похожими именами, вы можете использовать Select->Select Pattern, чтобы выбрать их. В Python вы можете сделать это с

[setattr(obj, 'select', True) for obj in bpy.data.objects if obj.name.startswith(plotname)]
Другие вопросы по тегам