Blender 更改了我的对象的名称
Posted
技术标签:
【中文标题】Blender 更改了我的对象的名称【英文标题】:Blender changes the names of my objects 【发布时间】:2016-04-18 16:15:46 【问题描述】:我正在使用 python API 在搅拌机中绘制“散点图”。 数据是一个字典,将名称映射到 3D 点列表,因此有命名的点云。
我需要单独查看每个云并隐藏其他云,这是我的设置:
对于字典中的每个名称,我创建一个空对象 对于属于该名称的每个 3D 点,我创建一个小立方体,定位它并将其重新设置为空对象。现在我可以在 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
在这个sn-p之前已经设置好了。它们代表一个立方体。
我如何确保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)]
【讨论】:
位置通常会有所不同,但这并不能保证。感谢您提供有关如何删除具有给定名称的对象的提示。这可能非常有用。但它并没有解决我的搅拌器更改对象名称的具体问题。 但是该循环是您获取重复项的地方-对于您正在创建名称为plotname+"mesh"
的对象的位置中的每个位置-第一个将获得该名称,其他将获得数字扩展名已添加。
抱歉。我的问题不够精确。循环中的名称更改是可以接受的。问题在于顶层对象。他们也改变了。是否重命名具有“网格”的对象并不重要。我只需要确保带有带有网格的绘图名称的对象不会更改以上是关于Blender 更改了我的对象的名称的主要内容,如果未能解决你的问题,请参考以下文章
无法将从 Blender 导出的对象加载到 three.js 中?