From 19d63c89c7d9f6e2ad9da9258d651a8826f37975 Mon Sep 17 00:00:00 2001 From: Alexander N Date: Fri, 12 Apr 2013 14:07:09 +0000 Subject: raise HeaderError if, file header is invalid. --- io_scene_ms3d/__init__.py | 2 +- io_scene_ms3d/ms3d_export.py | 20 +++++++++++------- io_scene_ms3d/ms3d_import.py | 50 +++++++++++++++++++++++++++++--------------- io_scene_ms3d/ms3d_spec.py | 5 +++++ io_scene_ms3d/ms3d_ui.py | 18 +++++++++------- 5 files changed, 61 insertions(+), 34 deletions(-) (limited to 'io_scene_ms3d') diff --git a/io_scene_ms3d/__init__.py b/io_scene_ms3d/__init__.py index 35f7c41e..be605476 100644 --- a/io_scene_ms3d/__init__.py +++ b/io_scene_ms3d/__init__.py @@ -23,7 +23,7 @@ bl_info = { 'description': "Import / Export MilkShape3D MS3D files"\ " (conform with MilkShape3D v1.8.4)", 'author': "Alexander Nussbaumer", - 'version': (0, 97, 0), + 'version': (0, 98, 0), 'blender': (2, 66, 0), 'location': "File > Import & File > Export", 'warning': "", diff --git a/io_scene_ms3d/ms3d_export.py b/io_scene_ms3d/ms3d_export.py index d29f3e2c..50390f54 100644 --- a/io_scene_ms3d/ms3d_export.py +++ b/io_scene_ms3d/ms3d_export.py @@ -180,11 +180,13 @@ class Ms3dExporter(): if self.options_verbose in Ms3dUi.VERBOSE_NORMAL: print("write - exception in try block\n type: '{0}'\n" " value: '{1}'".format(type, value, traceback)) + if self.report: + self.report({'WARNING', 'ERROR', }, "write - exception.") if t2 is None: t2 = time() - raise + return False else: pass @@ -194,7 +196,7 @@ class Ms3dExporter(): print(ms3d_str['SUMMARY_EXPORT'].format( (t3 - t1), (t2 - t1), (t3 - t2))) - return {"FINISHED"} + return True ########################################################################### @@ -385,14 +387,16 @@ class Ms3dExporter(): weights.append(blender_weight) elif count == 3: bone_ids.append(ms3d_index) - self.report( - {'WARNING', 'INFO'}, - ms3d_str['WARNING_EXPORT_SKIP_WEIGHT']) + if self.report and self.options_verbose in Ms3dUi.VERBOSE_NORMAL: + self.report( + {'WARNING', 'INFO'}, + ms3d_str['WARNING_EXPORT_SKIP_WEIGHT']) else: # only first three weights will be supported / four bones - self.report( - {'WARNING', 'INFO'}, - ms3d_str['WARNING_EXPORT_SKIP_WEIGHT_EX']) + if self.report and self.options_verbose in Ms3dUi.VERBOSE_NORMAL: + self.report( + {'WARNING', 'INFO'}, + ms3d_str['WARNING_EXPORT_SKIP_WEIGHT_EX']) break count += 1 diff --git a/io_scene_ms3d/ms3d_import.py b/io_scene_ms3d/ms3d_import.py index c9e87c23..e824aba1 100644 --- a/io_scene_ms3d/ms3d_import.py +++ b/io_scene_ms3d/ms3d_import.py @@ -56,6 +56,7 @@ from io_scene_ms3d.ms3d_spec import ( Ms3dModel, Ms3dVertexEx2, Ms3dVertexEx3, + Ms3dHeader, ) from io_scene_ms3d.ms3d_utils import ( select_all, @@ -160,16 +161,27 @@ class Ms3dImporter(): print(statistics) print("##########################################################") + except Ms3dHeader.HeaderError: + msg = "read - invalid file format." + if self.options_verbose in Ms3dUi.VERBOSE_NORMAL: + print(msg) + if self.report: + self.report({'WARNING', 'ERROR', }, msg) + + return False + except Exception: type, value, traceback = exc_info() if self.options_verbose in Ms3dUi.VERBOSE_NORMAL: print("read - exception in try block\n type: '{0}'\n" " value: '{1}'".format(type, value, traceback)) + if self.report: + self.report({'WARNING', 'ERROR', }, "read - exception.") if t2 is None: t2 = time() - raise + return False else: pass @@ -180,7 +192,7 @@ class Ms3dImporter(): print(ms3d_str['SUMMARY_IMPORT'].format( (t3 - t1), (t2 - t1), (t3 - t2))) - return {"FINISHED"} + return True ########################################################################### @@ -495,35 +507,39 @@ class Ms3dImporter(): bmv_new[layer_extra] = bmv[layer_extra] vert_index = length_verts length_verts += 1 - self.report({'WARNING', 'INFO'}, - ms3d_str['WARNING_IMPORT_EXTRA_VERTEX_NORMAL'].format( - bmv.normal, blender_normal)) + if self.report and self.options_verbose in Ms3dUi.VERBOSE_NORMAL: + self.report({'WARNING', 'INFO'}, + ms3d_str['WARNING_IMPORT_EXTRA_VERTEX_NORMAL'].format( + bmv.normal, blender_normal)) bmv = bmv_new if [[x] for x in bmv_list if x == bmv]: - self.report( - {'WARNING', 'INFO'}, - ms3d_str['WARNING_IMPORT_SKIP_VERTEX_DOUBLE'].format( - ms3d_triangle_index)) + if self.report and self.options_verbose in Ms3dUi.VERBOSE_NORMAL: + self.report( + {'WARNING', 'INFO'}, + ms3d_str['WARNING_IMPORT_SKIP_VERTEX_DOUBLE'].format( + ms3d_triangle_index)) continue bmv_list.append(bmv) bmf_normal += bmv.normal if len(bmv_list) < 3: - self.report( - {'WARNING', 'INFO'}, - ms3d_str['WARNING_IMPORT_SKIP_LESS_VERTICES'].format( - ms3d_triangle_index)) + if self.report and self.options_verbose in Ms3dUi.VERBOSE_NORMAL: + self.report( + {'WARNING', 'INFO'}, + ms3d_str['WARNING_IMPORT_SKIP_LESS_VERTICES'].format( + ms3d_triangle_index)) continue bmf_normal.normalize() bmf = bm.faces.get(bmv_list) if bmf is not None: - self.report( - {'WARNING', 'INFO'}, - ms3d_str['WARNING_IMPORT_SKIP_FACE_DOUBLE'].format( - ms3d_triangle_index)) + if self.report and self.options_verbose in Ms3dUi.VERBOSE_NORMAL: + self.report( + {'WARNING', 'INFO'}, + ms3d_str['WARNING_IMPORT_SKIP_FACE_DOUBLE'].format( + ms3d_triangle_index)) continue bmf = bm.faces.new(bmv_list) diff --git a/io_scene_ms3d/ms3d_spec.py b/io_scene_ms3d/ms3d_spec.py index d5d5d787..d5eadbee 100644 --- a/io_scene_ms3d/ms3d_spec.py +++ b/io_scene_ms3d/ms3d_spec.py @@ -351,6 +351,10 @@ class Ms3dHeader: Ms3dIo.write_string(raw_io, Ms3dIo.LENGTH_ID, self.id) Ms3dIo.write_dword(raw_io, self.version) + class HeaderError(Exception): + pass + + ############################################################################### class Ms3dVertex: @@ -1740,6 +1744,7 @@ class Ms3dModel: self.header.read(raw_io) if (self.header != Ms3dHeader()): debug_out.append("\nwarning, invalid file header\n") + raise Ms3dHeader.HeaderError _number_vertices = Ms3dIo.read_word(raw_io) if (_number_vertices > Ms3dSpec.MAX_VERTICES): diff --git a/io_scene_ms3d/ms3d_ui.py b/io_scene_ms3d/ms3d_ui.py index 8506b61d..70a79008 100644 --- a/io_scene_ms3d/ms3d_ui.py +++ b/io_scene_ms3d/ms3d_ui.py @@ -392,7 +392,7 @@ class Ms3dImportOperator(Operator, ImportHelper): def execute(self, blender_context): """ start executing """ from io_scene_ms3d.ms3d_import import (Ms3dImporter, ) - Ms3dImporter( + finished = Ms3dImporter( report=self.report, verbose=self.verbose, use_extended_normal_handling=self.use_extended_normal_handling, @@ -405,9 +405,10 @@ class Ms3dImportOperator(Operator, ImportHelper): blender_context, self.filepath ) - - blender_context.scene.update() - return {"FINISHED"} + if finished: + blender_context.scene.update() + return {"FINISHED"} + return {"CANCELLED"} def invoke(self, blender_context, event): blender_context.window_manager.fileselect_add(self) @@ -595,7 +596,7 @@ class Ms3dExportOperator(Operator, ExportHelper): def execute(self, blender_context): """start executing""" from io_scene_ms3d.ms3d_export import (Ms3dExporter, ) - Ms3dExporter( + finished = Ms3dExporter( self.report, verbose=self.verbose, use_blender_names=self.use_blender_names, @@ -611,9 +612,10 @@ class Ms3dExportOperator(Operator, ExportHelper): blender_context, self.filepath ) - - blender_context.scene.update() - return {"FINISHED"} + if finished: + blender_context.scene.update() + return {"FINISHED"} + return {"CANCELLED"} # def invoke(self, blender_context, event): -- cgit v1.2.3