その中で登壇された方のモデリング作業で
モデファイアを活用して組み上げたモデルを1つのオブジェクトにまとめる作業を
一つ一つ変換かけた後に結合していたようだったので
自分が今使ってるスクリプトをアップしておきます
(理解が違ったら恥ずかしい限りですが)
オブジェクトモードで選択しているもののモデファイアを適応した状態のものを
一つのメッシュオブジェクトにまとめるという動作になります
自分の用途では細分化のモデファイアだけは適応していない状態で結合してほしいので実行しない処理になっています
import bpy bl_info = { "name": "duplicate modified mesh objects", "author": "Y", "version": (3, 0), "blender": (2, 60, 0), "location": "3Dビュー > オブジェクト", "description": "apply modifier on selected objects and join objects", "warning": "", "support": "TESTING", "wiki_url": "", "tracker_url": "", "category": "Object" } # 翻訳用辞書 translation_dict = { "en_US" : {("*", 'duplicate modified mesh') : 'duplicate modified mesh'}, "ja_JP" : {("*", 'duplicate modified mesh') : '結合したメッシュを作成'} } #モデファイアを適応した複製を作成 def duplicate_modified(obj): bpy.ops.object.select_all(action = 'DESELECT') bpy.context.scene.objects.active = obj obj.select = True bpy.ops.object.duplicate() for mod in obj.modifiers: if "Subsurf" in mod.name:continue try: bpy.ops.object.modifier_apply(modifier = mod.name) except: pass if obj.type == "CURVE": bpy.ops.object.convert(target='MESH') return(bpy.context.active_object) #結合オブジェクトの作成 def joined_obj(): serected_objects = bpy.context.selected_objects duplicate_objects = [] #モデファイアの適応 for obj in serected_objects: if obj.type in ["MESH","CURVE"]: duplicate_objects.append( duplicate_modified(obj)) #複製を選択 for obj in duplicate_objects: obj.select = True #結合 bpy.ops.object.join() #モデファイアを適応して結合 class y_join_modified(bpy.types.Operator): bl_idname = "object.join_modified" bl_label = bpy.app.translations.pgettext('duplicate modified mesh') def execute(self, context): joined_obj() return {'FINISHED'} def menu_funk(self, context): self.layout.operator(y_join_modified.bl_idname) # 有効化時の処理 def register(): bpy.app.translations.register(__name__, translation_dict) # 翻訳辞書の登録 bpy.utils.register_module(__name__) #オブジェクト>適応にメニュー項目を追加 bpy.types.VIEW3D_MT_object_apply.append(menu_funk) # 無効化時の処理 def unregister(): bpy.app.translations.unregister(__name__) # 辞書の削除 bpy.utils.unregister_module(__name__) bpy.types.VIEW3D_MT_snap.remove(menu_funk) ################################################ # メイン処理 if __name__ == "__main__": register() #joined_obj()スクリプトエディッタで実行するか アドオンとして読み込むと オブジェクト>適応 の中に duplicate modified mesh という項目が追加されます
0 件のコメント:
コメントを投稿