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)]