0

Blender2.62を使用しています。

タイル化された 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()

そのため、いつでもこれを使用して、すべてのモデル タイルを反復処理し、代わりに複製が配置されている場所を調べることができます。それでも、私は上記の方法でこれを行うことを好むので、この質問はしばらくそのままにしておきます。

4

2 に答える 2

1

わかりました、私は正式に愚かです。

あなたはただすることができます

object.data

複製されたオブジェクトのソースに到達します。

于 2012-11-10T23:31:20.240 に答える
1

あなたの答えに続いて、私はそれを発見しました

object.data.users

そのメッシュを使用するオブジェクトの数を示します。私にとっては、リンクされた重複オブジェクトがあるかどうかを確認するのに役立ちました。

于 2013-03-28T12:27:27.160 に答える