Когда мы присваиваем или изменяем имя объекта в Blender, мы работаем на уровне объекта. Однако у любого объекта есть еще и так называемый дата-блок – указатель на собственно данные объекта, у которого тоже есть имя. Имя дата-блока можно увидеть, кликнув на угловую стрелочку слева от имени объекта в аутлайнере.
Изначально, при создании нового объекта (добавлении его в сцену), имя дата-блока такое же, как и имя самого объекта.
1 2 3 4 5 6 7 |
bpy.ops.mesh.primitive_cube_add() print(bpy.context.object.name) print(bpy.context.object.data.name) # Cube # Cube |
Однако имя дата-блока соответствует имени объекта не всегда.
Самый очевидный вариант – когда мы переименовываем объект, имя его дата-блока при этом не изменяется.
Имя дата-блока может разойтись с именем объекта даже просто при удалении-добавлении идентичных объектов. Добавим в сцену куб и удалим его несколько раз. После чего, снова выполним вышеприведенный код.
1 2 3 4 5 6 7 |
bpy.ops.mesh.primitive_cube_add() print(bpy.context.object.name) print(bpy.context.object.data.name) # Cube # Cube.005 |
Имя дата-блока уже не равно имени объекта так как счетчик у имени объекта сбрасывается, а счетчик дата-блоков – нет.
В целом, в большинстве случаев в рабочей сцене большинство имен дата-блоков не соответствует именам объектов, ссылающихся на них. Однако это очень просто исправить.
Так как имя дата-блока может быть изменено, напишем простейший код, который пройдет по всем выделенным объектам сцены, для которых мы хотим привести имена объектов и дата-блоков в соответствие, и поменяет имя дата-блока на имя объекта.
1 2 |
for obj in bpy.context.selected_objects: obj.data.name = obj.name |
Выполнив этот код мы разом приведем в соответствие имена дата-блоков и объектов сцены для всего выделения.
а зачем?
“Человеко-понятная” организация бывает очень важна, особенно в больших проектах.