From 47773be8d4e69100ae00d07e3efd63289cca7456 Mon Sep 17 00:00:00 2001 From: brothermechanic Date: Sun, 18 Jun 2023 15:30:44 +0000 Subject: [PATCH] .obj additional exporters/importers --- cg/blender/export/obj.py | 14 ++++++++------ cg/blender/import_mesh/README.md | 1 + cg/blender/import_mesh/__init__.py | 7 +++++++ cg/blender/import_mesh/obj.py | 29 +++++++++++++++++++++++++++++ cg/pipeline/README.md | 4 ++++ 5 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 cg/blender/import_mesh/README.md create mode 100644 cg/blender/import_mesh/__init__.py create mode 100644 cg/blender/import_mesh/obj.py diff --git a/cg/blender/export/obj.py b/cg/blender/export/obj.py index c5f12ff..90bf2cd 100644 --- a/cg/blender/export/obj.py +++ b/cg/blender/export/obj.py @@ -5,10 +5,9 @@ OBJ mesh exporter. Exports all objects in scene. You can set export path and subdir. """ -__version__ = "0.1" +__version__ = "0.2" import logging -import sys import bpy import os @@ -16,19 +15,22 @@ logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) -def export_obj(path, subdir=""): +def export_obj(path, subdir="", filename=None): """ OBJ mesh exporter. Exports all objects in scene. """ for ob in bpy.context.scene.objects: # deselect all but just one object and make it active bpy.ops.object.select_all(action='DESELECT') ob.select_set(state=True) bpy.context.view_layer.objects.active = ob - filename = bpy.context.active_object.name + if not filename: + filename = bpy.context.active_object.name + if not filename.endswith('.obj'): + filename = (filename + '.obj') # export obj obj_path = os.path.join(path, subdir).replace('\\', '/') if not os.path.isdir(obj_path): os.makedirs(obj_path) outpath = os.path.join(obj_path, filename) - logger.debug('vizual:', outpath) + logger.debug('Exporting to %s', outpath) - bpy.ops.wm.obj_export(filepath=outpath, forward_axis='Y', up_axis='Z', global_scale=1000, apply_modifiers=True, export_selected_objects=True, export_uv=True, export_normals=True, export_colors=False, export_materials=True, export_pbr_extensions=False, path_mode='AUTO', export_triangulated_mesh=True) + return bpy.ops.wm.obj_export(filepath=outpath, forward_axis='Y', up_axis='Z', global_scale=1000, apply_modifiers=True, export_selected_objects=True, export_uv=True, export_normals=True, export_colors=False, export_materials=True, export_pbr_extensions=False, path_mode='AUTO', export_triangulated_mesh=True) diff --git a/cg/blender/import_mesh/README.md b/cg/blender/import_mesh/README.md new file mode 100644 index 0000000..a56223a --- /dev/null +++ b/cg/blender/import_mesh/README.md @@ -0,0 +1 @@ +## Модули импорта для Blender diff --git a/cg/blender/import_mesh/__init__.py b/cg/blender/import_mesh/__init__.py new file mode 100644 index 0000000..a3bda60 --- /dev/null +++ b/cg/blender/import_mesh/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +""" +DESCRIPTION. +Blender export modules. +Modules exports all objests in scene. +You can set export path and subdir. +""" diff --git a/cg/blender/import_mesh/obj.py b/cg/blender/import_mesh/obj.py new file mode 100644 index 0000000..462eeb6 --- /dev/null +++ b/cg/blender/import_mesh/obj.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +""" +DESCRIPTION. +OBJ mesh importer. +Import files in blender scene. +""" +__version__ = "0.2" + +import logging +import bpy +import os + +logger = logging.getLogger(__name__) +logging.basicConfig(level=logging.INFO) + + +def import_obj(path): + bpy.ops.object.select_all(action='DESELECT') + + path = path.replace('\\', '/') + if os.path.isfile(path) and path.endswith('.obj'): + return bpy.ops.wm.obj_import(filepath=path, global_scale=0.001, clamp_size=0, forward_axis='Y', up_axis='Z') + if os.path.isdir(path): + file_list = sorted(os.listdir(path)) + obj_list = [dict(name=item) for item in file_list if item.endswith('.obj')] + return bpy.ops.wm.obj_import(directory=path, files=obj_list, global_scale=0.001, clamp_size=0, forward_axis='Y', up_axis='Z') + + return logger.info("Path must be a directory or *.obj file!") + diff --git a/cg/pipeline/README.md b/cg/pipeline/README.md index fe1c06d..bcfb0f2 100644 --- a/cg/pipeline/README.md +++ b/cg/pipeline/README.md @@ -12,3 +12,7 @@ - обработку mesh объектов для использования в качестве ассетов - импорт FEM материалов и назначение их для mesh объектов - экспорт mesh объектов в требуемые форматы + +### blender_opts.py + +Различные операции в Bledner