从blender api中的重复对象访问源对象

时间:2012-11-10 22:16:04

标签: python api blender duplication

我使用Blender 2.62。

我想使用blender作为平铺3d世界的编辑器。我有不同瓷砖的模型,我将这些模型的链接副本放在另一层中以构建地图。

现在我想以一些可理解的格式导出这个地图(如[[x,y,z,tileNo],[x,y,z,tileNo],...])。我可以使用下面的代码迭代给定图层中的所有对象,但我找不到获取复制对象源的方法。这可能吗?

def layerNos(o):
  return [ln for (ln, l) in enumerate(o.layers) if l]

def exportObjectsFromLayer(choosenLayerNo):
  for o in bpy.data.objects:
    if choosenLayerNo in layerNos(o):
      yield exportTile(o)

def exportTile(o):
  return ("[%d,%d,%d]" % (
    round(x.location.x),
    round(x.location.z),
    round(x.location.y),
    getTileNumber(x)))

def getTileNumber(x):
  return None # this is where I'd like to access
  # the source of the duplicated object
  # and get its name to lookup its number
  # and return it as a tile number
编辑:我找到了相反的方法 - 从复制源我可以通过使用找到所有重复的对象:

bpy.data.objects['Cube.121'].dupli_list_create(bpy.context.scene)
for dupliObj in bpy.data.objects['Cube.121'].dupli_list:
  #do sth with duplicated object
bpy.data.objects['Cube.121'].dupli_list_clear()

所以我总是可以使用它并遍历我的所有模型图块,查找放置重复项的位置。我仍然倾向于按照上面描述的方式这样做,所以我暂时搁置这个问题。

2 个答案:

答案 0 :(得分:1)

好的,我是正式的傻瓜。

你可以做到

object.data

获取重复对象的来源。

答案 1 :(得分:1)

根据你的回答,我发现了

object.data.users

给出使用该网格的对象数。对我来说,查看是否存在链接的重复对象非常有用。