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-03-17 22:29:43 +0400
committerAlexander N <alpha-beta-release@gmx.net>2013-03-17 22:29:43 +0400
commite56284b89d7a3c68f234a8c7c12aa7f1e620404c (patch)
treefffcc7ba354c95207814cbb59b052563880f0924 /io_scene_ms3d
parent50a08afe70a91a55b410e5cc4b16244956e6814d (diff)
fix: invalid header warning; changed: verbose modes from bool to enum; changed: position of update scene;
Diffstat (limited to 'io_scene_ms3d')
-rw-r--r--io_scene_ms3d/__init__.py2
-rw-r--r--io_scene_ms3d/ms3d_export.py30
-rw-r--r--io_scene_ms3d/ms3d_import.py78
-rw-r--r--io_scene_ms3d/ms3d_spec.py72
-rw-r--r--io_scene_ms3d/ms3d_strings.py6
-rw-r--r--io_scene_ms3d/ms3d_ui.py51
-rw-r--r--io_scene_ms3d/ms3d_utils.py2
7 files changed, 130 insertions, 111 deletions
diff --git a/io_scene_ms3d/__init__.py b/io_scene_ms3d/__init__.py
index 73534177..35f7c41e 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, 96, 0),
+ 'version': (0, 97, 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 1967558e..d29f3e2c 100644
--- a/io_scene_ms3d/ms3d_export.py
+++ b/io_scene_ms3d/ms3d_export.py
@@ -94,7 +94,7 @@ class Ms3dExporter():
"""
def __init__(self,
report,
- verbose=False,
+ verbose='NONE',
use_blender_names=True,
use_blender_materials=False,
apply_transform=True,
@@ -142,14 +142,17 @@ class Ms3dExporter():
try:
# write ms3d file to disk
with io.FileIO(filepath, "wb") as raw_io:
- ms3d_model.write(raw_io)
+ debug_out = ms3d_model.write(raw_io)
raw_io.flush()
raw_io.close()
+
+ if self.options_verbose in Ms3dUi.VERBOSE_MAXIMAL:
+ print(debug_out)
finally:
pass
# if option is set, this time will enlargs the io time
- if self.options_verbose:
+ if self.options_verbose in Ms3dUi.VERBOSE_MAXIMAL:
ms3d_model.print_internal()
post_setup_environment(self, blender_context)
@@ -165,16 +168,18 @@ class Ms3dExporter():
blender_context.user_preferences.edit.use_global_undo = self.undo
is_valid, statistics = ms3d_model.is_valid()
- print()
- print("##########################################################")
- print("Export from Blender to MS3D")
- print(statistics)
- print("##########################################################")
+ if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
+ print()
+ print("##########################################################")
+ print("Export from Blender to MS3D")
+ print(statistics)
+ print("##########################################################")
except Exception:
type, value, traceback = exc_info()
- print("write - exception in try block\n type: '{0}'\n"
- " value: '{1}'".format(type, value, traceback))
+ 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 t2 is None:
t2 = time()
@@ -185,8 +190,9 @@ class Ms3dExporter():
pass
t3 = time()
- print(ms3d_str['SUMMARY_EXPORT'].format(
- (t3 - t1), (t2 - t1), (t3 - t2)))
+ if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
+ print(ms3d_str['SUMMARY_EXPORT'].format(
+ (t3 - t1), (t2 - t1), (t3 - t2)))
return {"FINISHED"}
diff --git a/io_scene_ms3d/ms3d_import.py b/io_scene_ms3d/ms3d_import.py
index a9bfed19..c9e87c23 100644
--- a/io_scene_ms3d/ms3d_import.py
+++ b/io_scene_ms3d/ms3d_import.py
@@ -87,7 +87,7 @@ class Ms3dImporter():
"""
def __init__(self,
report,
- verbose=False,
+ verbose='NONE',
use_extended_normal_handling=False,
use_animation=True,
use_quaternion_rotation=False,
@@ -131,13 +131,16 @@ class Ms3dImporter():
# open ms3d file
with io.FileIO(filepath, 'rb') as raw_io:
# read and inject ms3d data from disk to internal structure
- ms3d_model.read(raw_io)
+ debug_out = ms3d_model.read(raw_io)
raw_io.close()
+
+ if self.options_verbose in Ms3dUi.VERBOSE_MAXIMAL:
+ print(debug_out)
finally:
pass
# if option is set, this time will enlargs the io time
- if self.options_verbose:
+ if self.options_verbose in Ms3dUi.VERBOSE_MAXIMAL:
ms3d_model.print_internal()
t2 = time()
@@ -148,23 +151,20 @@ class Ms3dImporter():
# inject ms3d data to blender
self.to_blender(blender_context, ms3d_model)
- blender_scene = blender_context.scene
-
- # finalize/restore environment
- blender_scene.update()
-
post_setup_environment(self, blender_context)
- print()
- print("##########################################################")
- print("Import from MS3D to Blender")
- print(statistics)
- print("##########################################################")
+ if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
+ print()
+ print("##########################################################")
+ print("Import from MS3D to Blender")
+ print(statistics)
+ print("##########################################################")
except Exception:
type, value, traceback = exc_info()
- print("read - exception in try block\n type: '{0}'\n"
- " value: '{1}'".format(type, value, traceback))
+ 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 t2 is None:
t2 = time()
@@ -175,50 +175,12 @@ class Ms3dImporter():
pass
t3 = time()
- print(ms3d_str['SUMMARY_IMPORT'].format(
- (t3 - t1), (t2 - t1), (t3 - t2)))
-
- return {"FINISHED"}
-
-
- def internal_read(self, blender_context, raw_io):
- try:
- # setup environment
- pre_setup_environment(self, blender_context)
-
- try:
- ms3d_model.read(raw_io)
- finally:
- pass
- # if option is set, this time will enlargs the io time
- if self.options_verbose:
- ms3d_model.print_internal()
-
- is_valid, statistics = ms3d_model.is_valid()
+ if self.options_verbose in Ms3dUi.VERBOSE_NORMAL:
+ print(ms3d_str['SUMMARY_IMPORT'].format(
+ (t3 - t1), (t2 - t1), (t3 - t2)))
- if is_valid:
- # inject ms3d data to blender
- blender_empty_object, blender_mesh_object = self.to_blender(blender_context, ms3d_model)
-
- blender_scene = blender_context.scene
-
- # finalize/restore environment
- blender_scene.update()
-
- post_setup_environment(self, blender_context)
-
- except Exception:
- type, value, traceback = exc_info()
- print("read - exception in try block\n type: '{0}'\n"
- " value: '{1}'".format(type, value, traceback))
-
- raise
-
- else:
- pass
-
- return blender_empty_object, blender_mesh_object
+ return {"FINISHED"}
###########################################################################
@@ -629,7 +591,7 @@ class Ms3dImporter():
# end BMesh stuff
####################################################
- blender_mesh.validate(self.options_verbose)
+ blender_mesh.validate(self.options_verbose in Ms3dUi.VERBOSE_MAXIMAL)
return blender_mesh_object
diff --git a/io_scene_ms3d/ms3d_spec.py b/io_scene_ms3d/ms3d_spec.py
index 740b333c..d5d5d787 100644
--- a/io_scene_ms3d/ms3d_spec.py
+++ b/io_scene_ms3d/ms3d_spec.py
@@ -290,6 +290,8 @@ class Ms3dIo:
if not buffer:
raise EOFError()
eol = buffer.find(Ms3dSpec.STRING_TERMINATION)
+ if eol < 0:
+ eol = len(buffer)
register_error(Ms3dSpec.STRING_MS3D_REPLACE, Ms3dIo.ms3d_replace)
s = buffer[:eol].decode(encoding=Ms3dSpec.STRING_ENCODING, errors=Ms3dSpec.STRING_ERROR)
return s
@@ -1733,13 +1735,15 @@ class Ms3dModel:
add content to blender scene
"""
+ debug_out = []
+
self.header.read(raw_io)
if (self.header != Ms3dHeader()):
- print("\nwarning, invalid file header")
+ debug_out.append("\nwarning, invalid file header\n")
_number_vertices = Ms3dIo.read_word(raw_io)
if (_number_vertices > Ms3dSpec.MAX_VERTICES):
- print("\nwarning, invalid count: number_vertices: {}".format(
+ debug_out.append("\nwarning, invalid count: number_vertices: {}\n".format(
_number_vertices))
self._vertices = []
for i in range(_number_vertices):
@@ -1747,7 +1751,7 @@ class Ms3dModel:
_number_triangles = Ms3dIo.read_word(raw_io)
if (_number_triangles > Ms3dSpec.MAX_TRIANGLES):
- print("\nwarning, invalid count: number_triangles: {}".format(
+ debug_out.append("\nwarning, invalid count: number_triangles: {}\n".format(
_number_triangles))
self._triangles = []
for i in range(_number_triangles):
@@ -1755,7 +1759,7 @@ class Ms3dModel:
_number_groups = Ms3dIo.read_word(raw_io)
if (_number_groups > Ms3dSpec.MAX_GROUPS):
- print("\nwarning, invalid count: number_groups: {}".format(
+ debug_out.append("\nwarning, invalid count: number_groups: {}\n".format(
_number_groups))
self._groups = []
for i in range(_number_groups):
@@ -1763,7 +1767,7 @@ class Ms3dModel:
_number_materials = Ms3dIo.read_word(raw_io)
if (_number_materials > Ms3dSpec.MAX_MATERIALS):
- print("\nwarning, invalid count: number_materials: {}".format(
+ debug_out.append("\nwarning, invalid count: number_materials: {}\n".format(
_number_materials))
self._materials = []
for i in range(_number_materials):
@@ -1782,7 +1786,7 @@ class Ms3dModel:
_number_joints = Ms3dIo.read_word(raw_io)
_progress.add('NUMBER_JOINTS')
if (_number_joints > Ms3dSpec.MAX_JOINTS):
- print("\nwarning, invalid count: number_joints: {}".format(
+ debug_out.append("\nwarning, invalid count: number_joints: {}\n".format(
_number_joints))
self._joints = []
for i in range(_number_joints):
@@ -1794,61 +1798,61 @@ class Ms3dModel:
_number_group_comments = Ms3dIo.read_dword(raw_io)
_progress.add('NUMBER_GROUP_COMMENTS')
if (_number_group_comments > Ms3dSpec.MAX_GROUPS):
- print("\nwarning, invalid count:"\
- " number_group_comments: {}".format(
+ debug_out.append("\nwarning, invalid count:"\
+ " number_group_comments: {}\n".format(
_number_group_comments))
if _number_group_comments > _number_groups:
- print("\nwarning, invalid count:"\
- " number_group_comments: {}, number_groups: {}".format(
+ debug_out.append("\nwarning, invalid count:"\
+ " number_group_comments: {}, number_groups: {}\n".format(
_number_group_comments, _number_groups))
for i in range(_number_group_comments):
item = Ms3dCommentEx().read(raw_io)
if item.index >= 0 and item.index < _number_groups:
self.groups[item.index]._comment_object = item
else:
- print("\nwarning, invalid index:"\
- " group_index: {}, number_groups: {}".format(
+ debug_out.append("\nwarning, invalid index:"\
+ " group_index: {}, number_groups: {}\n".format(
item.index, _number_groups))
_progress.add('GROUP_COMMENTS')
_number_material_comments = Ms3dIo.read_dword(raw_io)
_progress.add('NUMBER_MATERIAL_COMMENTS')
if (_number_material_comments > Ms3dSpec.MAX_MATERIALS):
- print("\nwarning, invalid count:"\
- " number_material_comments: {}".format(
+ debug_out.append("\nwarning, invalid count:"\
+ " number_material_comments: {}\n".format(
_number_material_comments))
if _number_material_comments > _number_materials:
- print("\nwarning, invalid count:"\
+ debug_out.append("\nwarning, invalid count:"\
" number_material_comments:"\
- " {}, number_materials: {}".format(
+ " {}, number_materials: {}\n".format(
_number_material_comments, _number_materials))
for i in range(_number_material_comments):
item = Ms3dCommentEx().read(raw_io)
if item.index >= 0 and item.index < _number_materials:
self.materials[item.index]._comment_object = item
else:
- print("\nwarning, invalid index:"\
+ debug_out.append("\nwarning, invalid index:"\
" material_index: {}, number_materials:"\
- " {}".format(item.index, _number_materials))
+ " {}\n".format(item.index, _number_materials))
_progress.add('MATERIAL_COMMENTS')
_number_joint_comments = Ms3dIo.read_dword(raw_io)
_progress.add('NUMBER_JOINT_COMMENTS')
if (_number_joint_comments > Ms3dSpec.MAX_JOINTS):
- print("\nwarning, invalid count:"\
- " number_joint_comments: {}".format(
+ debug_out.append("\nwarning, invalid count:"\
+ " number_joint_comments: {}\n".format(
_number_joint_comments))
if _number_joint_comments > _number_joints:
- print("\nwarning, invalid count:"\
- " number_joint_comments: {}, number_joints: {}".format(
+ debug_out.append("\nwarning, invalid count:"\
+ " number_joint_comments: {}, number_joints: {}\n".format(
_number_joint_comments, _number_joints))
for i in range(_number_joint_comments):
item = Ms3dCommentEx().read(raw_io)
if item.index >= 0 and item.index < _number_joints:
self.joints[item.index]._comment_object = item
else:
- print("\nwarning, invalid index:"\
- " joint_index: {}, number_joints: {}".format(
+ debug_out.append("\nwarning, invalid index:"\
+ " joint_index: {}, number_joints: {}\n".format(
item.index, _number_joints))
_progress.add('JOINT_COMMENTS')
@@ -1872,8 +1876,8 @@ class Ms3dModel:
elif self.sub_version_vertex_extra == 3:
item = Ms3dVertexEx3()
else:
- print("\nwarning, invalid version:"\
- " sub_version_vertex_extra: {}".format(
+ debug_out.append("\nwarning, invalid version:"\
+ " sub_version_vertex_extra: {}\n".format(
sub_version_vertex_extra))
continue
self.vertices[i]._vertex_ex_object = item.read(raw_io)
@@ -1894,13 +1898,13 @@ class Ms3dModel:
except EOFError:
# reached end of optional data.
- print("Ms3dModel.read - optional data read: {}".format(_progress))
+ debug_out.append("Ms3dModel.read - optional data read: {}\n".format(_progress))
pass
except Exception:
type, value, traceback = exc_info()
- print("Ms3dModel.read - exception in optional try block,"
- " _progress={0}\n type: '{1}'\n value: '{2}'".format(
+ debug_out.append("Ms3dModel.read - exception in optional try block,"
+ " _progress={0}\n type: '{1}'\n value: '{2}'\n".format(
_progress, type, value, traceback))
else:
@@ -1935,7 +1939,7 @@ class Ms3dModel:
self.sub_version_model_extra = 0
self._model_ex_object = Ms3dModelEx()
- return
+ return "".join(debug_out)
def write(self, raw_io):
@@ -1944,6 +1948,8 @@ class Ms3dModel:
creates, writes MS3D file.
"""
+ debug_out = []
+
self.header.write(raw_io)
Ms3dIo.write_word(raw_io, self.number_vertices)
@@ -2005,15 +2011,15 @@ class Ms3dModel:
except Exception:
type, value, traceback = exc_info()
- print("Ms3dModel.write - exception in optional try block"
- "\n type: '{0}'\n value: '{1}'".format(
+ debug_out.append("Ms3dModel.write - exception in optional try block"
+ "\n type: '{0}'\n value: '{1}'\n".format(
type, value, traceback))
pass
else:
pass
- return
+ return "".join(debug_out)
def is_valid(self):
diff --git a/io_scene_ms3d/ms3d_strings.py b/io_scene_ms3d/ms3d_strings.py
index 98658760..0a0f8b55 100644
--- a/io_scene_ms3d/ms3d_strings.py
+++ b/io_scene_ms3d/ms3d_strings.py
@@ -190,6 +190,12 @@ ms3d_str = {
'PROP_NAME_TRANSPARENCY': "Transparency",
'PROP_NAME_TRANSPARENCY_MODE': "Transp. Mode",
'PROP_NAME_VERBOSE': "Verbose",
+ 'ENUM_VERBOSE_NONE_1': "None",
+ 'ENUM_VERBOSE_NONE_2': "",
+ 'ENUM_VERBOSE_NORMAL_1': "Normal",
+ 'ENUM_VERBOSE_NORMAL_2': "",
+ 'ENUM_VERBOSE_MAXIMALIMAL_1': "Maximal",
+ 'ENUM_VERBOSE_MAXIMALIMAL_2': "",
'PROP_SMOOTHING_GROUP_INDEX': "Smoothing group id",
'PROP_NAME_ROTATION_MODE' : "Bone Rotation Mode",
'PROP_DESC_ROTATION_MODE' : "set the preferred rotation mode of bones",
diff --git a/io_scene_ms3d/ms3d_ui.py b/io_scene_ms3d/ms3d_ui.py
index 46d8a500..8506b61d 100644
--- a/io_scene_ms3d/ms3d_ui.py
+++ b/io_scene_ms3d/ms3d_ui.py
@@ -90,7 +90,16 @@ from bpy.app import (
class Ms3dUi:
- DEFAULT_VERBOSE = debug
+ VERBOSE_MODE_NONE = 'NONE'
+ VERBOSE_MODE_NORMAL = 'NORMAL'
+ VERBOSE_MODE_MAXIMAL = 'MAXIMAL'
+
+ VERBOSE_NONE = {}
+ VERBOSE_NORMAL = {True, VERBOSE_MODE_NORMAL, VERBOSE_MODE_MAXIMAL, }
+ VERBOSE_MAXIMAL = {True, VERBOSE_MODE_MAXIMAL, }
+
+ DEFAULT_VERBOSE = VERBOSE_MODE_NONE
+
###########################################################################
FLAG_TEXTURE_COMBINE_ALPHA = 'COMBINE_ALPHA'
@@ -262,9 +271,22 @@ class Ms3dImportOperator(Operator, ImportHelper):
options={'HIDDEN', }
)
- verbose = BoolProperty(
+ verbose = EnumProperty(
name=ms3d_str['PROP_NAME_VERBOSE'],
description=ms3d_str['PROP_DESC_VERBOSE'],
+ items=( (Ms3dUi.VERBOSE_MODE_NONE,
+ ms3d_str['ENUM_VERBOSE_NONE_1'],
+ ms3d_str['ENUM_VERBOSE_NONE_2'],
+ ),
+ (Ms3dUi.VERBOSE_MODE_NORMAL,
+ ms3d_str['ENUM_VERBOSE_NORMAL_1'],
+ ms3d_str['ENUM_VERBOSE_NORMAL_2'],
+ ),
+ (Ms3dUi.VERBOSE_MODE_MAXIMAL,
+ ms3d_str['ENUM_VERBOSE_MAXIMALIMAL_1'],
+ ms3d_str['ENUM_VERBOSE_MAXIMALIMAL_2'],
+ ),
+ ),
default=Ms3dUi.PROP_DEFAULT_VERBOSE,
)
@@ -370,7 +392,7 @@ class Ms3dImportOperator(Operator, ImportHelper):
def execute(self, blender_context):
""" start executing """
from io_scene_ms3d.ms3d_import import (Ms3dImporter, )
- return Ms3dImporter(
+ Ms3dImporter(
report=self.report,
verbose=self.verbose,
use_extended_normal_handling=self.use_extended_normal_handling,
@@ -384,6 +406,9 @@ class Ms3dImportOperator(Operator, ImportHelper):
self.filepath
)
+ blender_context.scene.update()
+ return {"FINISHED"}
+
def invoke(self, blender_context, event):
blender_context.window_manager.fileselect_add(self)
return {'RUNNING_MODAL', }
@@ -410,9 +435,22 @@ class Ms3dExportOperator(Operator, ExportHelper):
options={'HIDDEN', }
)
- verbose = BoolProperty(
+ verbose = EnumProperty(
name=ms3d_str['PROP_NAME_VERBOSE'],
description=ms3d_str['PROP_DESC_VERBOSE'],
+ items=( (Ms3dUi.VERBOSE_MODE_NONE,
+ ms3d_str['ENUM_VERBOSE_NONE_1'],
+ ms3d_str['ENUM_VERBOSE_NONE_2'],
+ ),
+ (Ms3dUi.VERBOSE_MODE_NORMAL,
+ ms3d_str['ENUM_VERBOSE_NORMAL_1'],
+ ms3d_str['ENUM_VERBOSE_NORMAL_2'],
+ ),
+ (Ms3dUi.VERBOSE_MODE_MAXIMAL,
+ ms3d_str['ENUM_VERBOSE_MAXIMALIMAL_1'],
+ ms3d_str['ENUM_VERBOSE_MAXIMALIMAL_2'],
+ ),
+ ),
default=Ms3dUi.PROP_DEFAULT_VERBOSE,
)
@@ -557,7 +595,7 @@ class Ms3dExportOperator(Operator, ExportHelper):
def execute(self, blender_context):
"""start executing"""
from io_scene_ms3d.ms3d_export import (Ms3dExporter, )
- return Ms3dExporter(
+ Ms3dExporter(
self.report,
verbose=self.verbose,
use_blender_names=self.use_blender_names,
@@ -574,6 +612,9 @@ class Ms3dExportOperator(Operator, ExportHelper):
self.filepath
)
+ blender_context.scene.update()
+ return {"FINISHED"}
+
#
def invoke(self, blender_context, event):
blender_context.window_manager.fileselect_add(self)
diff --git a/io_scene_ms3d/ms3d_utils.py b/io_scene_ms3d/ms3d_utils.py
index c44b19ca..82a75223 100644
--- a/io_scene_ms3d/ms3d_utils.py
+++ b/io_scene_ms3d/ms3d_utils.py
@@ -114,8 +114,6 @@ def pre_setup_environment(porter, blender_context):
# change back to object mode
enable_edit_mode(False, blender_context)
- blender_context.scene.update()
-
###############################################################################
def post_setup_environment(porter, blender_context):