• 締切済み

blenderオブジェクトを任意の場所に複数コピー

次のような操作をしたいと思っています。スクリプト等で行う方法をご存じありませんか? 【状況】 オブジェクト名「1」~「10」まで10個のオブジェクトをそれぞれ別の座標に配置。それらとは別にオブジェクト「A」を用意。 【操作】 オブジェクト「A」をオブジェクト「1」~「10」のある各座標に一括でコピーして配置。 (つまり、操作後にはコピー元のオブジェクト「A」が1つと、「1」~「10」の位置に移動しコピーしたオブジェクト「A」が計10個あり、編集しているblenderプロジェクト上にはオブジェクト「A」が11個存在することになる。) 一つ一つならば当然できます。オブジェクト「1」を選択してカーソルを選択物へ移動。オブジェクト「A」を選び複製してそれをカーソルの場所へ移動。これを10回繰り返せばできます。 これを一括で操作したいです。「1」~「10」までをすべて選択し、その状態で最後に「A」も追加で選択。コピー先の「1」~「10」のオブジェクトは橙色の選択状態で、コピーしたいオブジェクトが黄色で選択されている状態。ここで何かしらの操作をすればできそうな気がしますが、プログラミング等の知識がないため、スクリプトを自分で書くことができません。

みんなの回答

回答No.1

このタスクを自動化するには、BlenderのPython APIを使用することができます。Blender内にある「テキストエディタ」を開き、以下のようなPythonスクリプトを作成して実行することができます。 import bpy # オブジェクト名リスト object_names = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] # コピー元のオブジェクト src_obj = bpy.data.objects['A'] # コピー先の座標リスト dst_coords = [(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5), (6, 6, 6), (7, 7, 7), (8, 8, 8), (9, 9, 9), (10, 10, 10)] for i, coord in enumerate(dst_coords): # コピー元から新しいオブジェクトを作成 new_obj = src_obj.copy() new_obj.location = coord new_obj.name = object_names[i] bpy.context.collection.objects.link(new_obj) このスクリプトは、「A」オブジェクトを10回複製し、各複製オブジェクトに「1」~「10」といった名前を付けて、「dst_coords」リストに記載された座標に配置します。

okwave7722taro
質問者

お礼

お礼の返事が遅くなりました。 元のオブジェクトを複製するところまではできたのですが、複製したあとで配置する座標は結局手動で入力しなくてはいけないようで、「複製した複数のオブジェクトを複数選択したオブジェクトの各座標と同じ場所へ移動」というまた別の操作が追加で必要ありそうです。

関連するQ&A