From 7e88fcc785414afbc0d1f6f622eb08391152f1b8 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Sun, 23 May 2021 17:00:06 -0500 Subject: [PATCH] Integrating blender import export logic --- src/blender_addon/io_mesh_msh2/__init__.py | 88 ++----------------- src/blender_addon/io_mesh_msh2/export_msh2.py | 52 ++++++----- src/blender_addon/io_mesh_msh2/import_msh2.py | 88 ++++++++++++++----- 3 files changed, 103 insertions(+), 125 deletions(-) diff --git a/src/blender_addon/io_mesh_msh2/__init__.py b/src/blender_addon/io_mesh_msh2/__init__.py index 7d9d964..a97c9d8 100644 --- a/src/blender_addon/io_mesh_msh2/__init__.py +++ b/src/blender_addon/io_mesh_msh2/__init__.py @@ -15,10 +15,12 @@ # -from .msh2 import msh2 +# from .msh2 import msh2 +# msh_handler = msh2.MSH2(None) + +from . import import_msh2, export_msh2 -msh_handler = msh2.MSH2(None) bl_info = { "name": "Zero Editor MSH2 format", "author": "Maxim Stewart", @@ -100,77 +102,7 @@ class ImportMSH2(bpy.types.Operator, ImportHelper, IOOBJOrientationHelper): import os keywords["relpath"] = os.path.dirname(bpy.data.filepath) - data = {**keywords} - msh_handler.import_file(data["filepath"]) - msh = msh_handler.get_mesh_obj() - sceen = bpy.context.scene - - # Test adding mesh2 to blender - for model in msh.models: - name = model.name.decode("utf-8") - # print(model) - # print(model.name) - # print(model.index) - # print(model.collection) - # print("") - # Create a mesh data block - mesh2 = bpy.data.meshes.new("{}".format(name)) - - verts = [] - edges = [] - faces = [] - segments = model.segments - for segment in segments: - if segment.classname == "SegmentGeometry": - vertices = segment.vertices - for vert in vertices: - x = vert.x - y = vert.y - z = vert.z - verts.append((x, y, z)) - - sfaces = segment.faces - for face in sfaces: - '''Using CCW order for importing.''' - faces.append(face.SIindices()) - - # Add the vertices to the mesh - mesh2.from_pydata(verts, edges, faces) - - # Create an object that uses the mesh data - myobj = bpy.data.objects.new("{}_obj".format(name), mesh2) - - # Link the object to the scene - sceen.objects.link(myobj) - - return {'FINISHED'} - - - # def draw(self, context): - # layout = self.layout - # - # row = layout.row(align=True) - # row.prop(self, "use_smooth_groups") - # row.prop(self, "use_edges") - # - # box = layout.box() - # row = box.row() - # row.prop(self, "split_mode", expand=True) - # - # row = box.row() - # if self.split_mode == 'ON': - # row.label(text="Split by:") - # row.prop(self, "use_split_objects") - # row.prop(self, "use_split_groups") - # else: - # row.prop(self, "use_groups_as_vgroups") - # - # row = layout.split(percentage=0.67) - # row.prop(self, "global_clamp_size") - # layout.prop(self, "axis_forward") - # layout.prop(self, "axis_up") - # - # layout.prop(self, "use_image_search") + return import_msh2.load(context, **keywords) class ExportMSH2(bpy.types.Operator, ExportHelper, IOOBJOrientationHelper): @@ -221,16 +153,8 @@ class ExportMSH2(bpy.types.Operator, ExportHelper, IOOBJOrientationHelper): "check_existing", "filter_glob", )) - data = {**keywords} - # msh.export_file() - # print("") - # print("") - # print(context) - # print("") - # print("") - msh.export_file(data["filepath"]) - return {'FINISHED'} + return export_msh2.save(context, **keywords) diff --git a/src/blender_addon/io_mesh_msh2/export_msh2.py b/src/blender_addon/io_mesh_msh2/export_msh2.py index 91e9f2f..43c76c2 100644 --- a/src/blender_addon/io_mesh_msh2/export_msh2.py +++ b/src/blender_addon/io_mesh_msh2/export_msh2.py @@ -24,30 +24,36 @@ Note, This exports mesh objects and materials only, nurbs and curves are not sup https://schlechtwetterfront.github.io/ze_filetypes/msh.html """ +import bpy +from .msh2 import msh2 +msh_handler = msh2.MSH2(None) -# def save(context, -# filepath, -# *, -# use_triangles=False, -# use_edges=True, -# use_normals=False, -# use_smooth_groups=False, -# use_smooth_groups_bitflags=False, -# use_uvs=True, -# use_materials=True, -# use_mesh_modifiers=True, -# use_mesh_modifiers_render=False, -# use_blen_objects=True, -# group_by_object=False, -# group_by_material=False, -# keep_vertex_order=False, -# use_vertex_groups=False, -# use_nurbs=True, -# use_selection=True, -# use_animation=False, -# global_matrix=None, -# path_mode='AUTO' -# ): +def save(context, + filepath, + *, + use_triangles=False, + use_edges=True, + use_normals=False, + use_smooth_groups=False, + use_smooth_groups_bitflags=False, + use_uvs=True, + use_materials=True, + use_mesh_modifiers=True, + use_mesh_modifiers_render=False, + use_blen_objects=True, + group_by_object=False, + group_by_material=False, + keep_vertex_order=False, + use_vertex_groups=False, + use_nurbs=True, + use_selection=True, + use_animation=False, + global_matrix=None, + path_mode='AUTO' + ): + + msh_handler.export_file(filepath) + return {'FINISHED'} # # _write(context, filepath, # EXPORT_TRI=use_triangles, diff --git a/src/blender_addon/io_mesh_msh2/import_msh2.py b/src/blender_addon/io_mesh_msh2/import_msh2.py index 516d22e..c12ce3a 100644 --- a/src/blender_addon/io_mesh_msh2/import_msh2.py +++ b/src/blender_addon/io_mesh_msh2/import_msh2.py @@ -24,25 +24,73 @@ Note, This loads mesh objects and materials only, nurbs and curves are not suppo https://schlechtwetterfront.github.io/ze_filetypes/msh.html """ +import bpy +from .msh2 import msh2 +msh_handler = msh2.MSH2(None) -# def load(context, -# filepath, -# *, -# global_clamp_size=0.0, -# use_smooth_groups=True, -# use_edges=True, -# use_split_objects=True, -# use_split_groups=True, -# use_image_search=True, -# use_groups_as_vgroups=False, -# use_cycles=True, -# relpath=None, -# global_matrix=None -# ): -# """ -# Called by the user interface or another script. -# load_msh2(path) - should give acceptable results. -# This function passes the file and sends the data off -# to be split into objects and then converted into mesh objects -# """ +def load(context, + filepath, + *, + files, + directory, + global_clamp_size=0.0, + use_smooth_groups=True, + use_edges=True, + use_split_objects=True, + use_split_groups=True, + use_image_search=True, + use_groups_as_vgroups=False, + use_cycles=True, + relpath=None, + global_matrix=None + ): + """ + Called by the user interface or another script. + load_msh2(path) - should give acceptable results. + This function passes the file and sends the data off + to be split into objects and then converted into mesh objects + """ + msh_handler.import_file(filepath) + msh = msh_handler.get_mesh_obj() + sceen = bpy.context.scene + + # Test adding mesh2 to blender + for model in msh.models: + name = model.name.decode("utf-8") + # print(model) + # print(model.name) + # print(model.index) + # print(model.collection) + # print("") + # Create a mesh data block + mesh2 = bpy.data.meshes.new("{}".format(name)) + + verts = [] + edges = [] + faces = [] + segments = model.segments + for segment in segments: + if segment.classname == "SegmentGeometry": + vertices = segment.vertices + for vert in vertices: + x = vert.x + y = vert.y + z = vert.z + verts.append((x, y, z)) + + sfaces = segment.faces + for face in sfaces: + '''Using CCW order for importing.''' + faces.append(face.SIindices()) + + # Add the vertices to the mesh + mesh2.from_pydata(verts, edges, faces) + + # Create an object that uses the mesh data + myobj = bpy.data.objects.new("{}_obj".format(name), mesh2) + + # Link the object to the scene + sceen.objects.link(myobj) + + return {'FINISHED'}