Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander N <alpha-beta-release@gmx.net>2013-04-12 18:07:09 +0400
committerAlexander N <alpha-beta-release@gmx.net>2013-04-12 18:07:09 +0400
commit19d63c89c7d9f6e2ad9da9258d651a8826f37975 (patch)
tree27604471c7b635c06bd1c010b8eede76dc0e98da /io_scene_ms3d
parent7d6131d4e390d0981208b78f08afa67189e5ce08 (diff)
raise HeaderError if, file header is invalid.
Diffstat (limited to 'io_scene_ms3d')
-rw-r--r--io_scene_ms3d/__init__.py2
-rw-r--r--io_scene_ms3d/ms3d_export.py20
-rw-r--r--io_scene_ms3d/ms3d_import.py50
-rw-r--r--io_scene_ms3d/ms3d_spec.py5
-rw-r--r--io_scene_ms3d/ms3d_ui.py18
5 files changed, 61 insertions, 34 deletions
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):