From 91e25c8fe96ffcbd14076e09c0659cb753bcd6c3 Mon Sep 17 00:00:00 2001 From: Alexander N Date: Sat, 17 Aug 2013 22:21:17 +0000 Subject: workaround for [#36443] Vertex to UV index doesn't match with 2.68a - until the .faces.new(..) is scrambling the vertices order (input -> output), i use the workaround, that build a de-scramble dictionary. i still thing it is a bug in blender 2.68. - got rid of unneeded option 'io_scene_ms3d.set_sence_to_metric', Ms3dSetSceneToMetricOperator, set_sence_to_metric --- io_scene_ms3d/__init__.py | 2 +- io_scene_ms3d/ms3d_import.py | 31 ++++++++++++++++++++++++++++--- io_scene_ms3d/ms3d_ui.py | 31 ------------------------------- io_scene_ms3d/ms3d_utils.py | 34 ---------------------------------- 4 files changed, 29 insertions(+), 69 deletions(-) (limited to 'io_scene_ms3d') diff --git a/io_scene_ms3d/__init__.py b/io_scene_ms3d/__init__.py index 00363f10..fc228245 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, 99, 1), + 'version': (0, 99, 2), 'blender': (2, 66, 0), 'location': "File > Import & File > Export", 'warning': "", diff --git a/io_scene_ms3d/ms3d_import.py b/io_scene_ms3d/ms3d_import.py index c4f0953e..125b0ee2 100644 --- a/io_scene_ms3d/ms3d_import.py +++ b/io_scene_ms3d/ms3d_import.py @@ -363,6 +363,7 @@ class Ms3dImporter(): # create all vertices for ms3d_vertex_index, ms3d_vertex in enumerate(ms3d_model.vertices): bmv = bm.verts.new(self.geometry_correction(ms3d_vertex.vertex)) + bmv.index = ms3d_vertex_index if layer_extra and ms3d_vertex.vertex_ex_object and \ (isinstance(ms3d_vertex.vertex_ex_object, Ms3dVertexEx2) \ @@ -526,6 +527,7 @@ class Ms3dImporter(): ms3d_model.vertices.append( ms3d_model.vertices[vert_index]) bmv_new = bm.verts.new(bmv.co) + bmv_new.index = -vert_index bmv_new.normal = blender_normal bmv_new[layer_extra] = bmv[layer_extra] vert_index = length_verts @@ -557,6 +559,7 @@ class Ms3dImporter(): bmf_normal.normalize() bmf = bm.faces.get(bmv_list) + if bmf is not None: if self.report and self.options_verbose in Ms3dUi.VERBOSE_NORMAL: self.report( @@ -566,15 +569,37 @@ class Ms3dImporter(): continue bmf = bm.faces.new(bmv_list) + bmf.index = ms3d_triangle_index bmf.normal = bmf_normal + ########################## + ## WORKAROUND + # [#36443] Vertex to UV index doesn't match with 2.68a + # https://projects.blender.org/tracker/index.php?func=detail&aid=36443&group_id=9&atid=498 + # + scrambled_order = dict() + for face_vertex_index, face_bm_vertex in enumerate(bmf.verts): + scrambled_order[face_bm_vertex] = face_vertex_index # blender uv custom data per "face vertex" - bmf.loops[0][layer_uv].uv = Vector( + bmf.loops[scrambled_order[bmv_list[0]]][layer_uv].uv = Vector( (ms3d_triangle.s[0], 1.0 - ms3d_triangle.t[0])) - bmf.loops[1][layer_uv].uv = Vector( + bmf.loops[scrambled_order[bmv_list[1]]][layer_uv].uv = Vector( (ms3d_triangle.s[1], 1.0 - ms3d_triangle.t[1])) - bmf.loops[2][layer_uv].uv = Vector( + bmf.loops[scrambled_order[bmv_list[2]]][layer_uv].uv = Vector( (ms3d_triangle.s[2], 1.0 - ms3d_triangle.t[2])) + scrambled_order = None + # + ## WORKAROUND + ########################## + + ## blender uv custom data per "face vertex" + #bmf.loops[0][layer_uv].uv = Vector( + # (ms3d_triangle.s[0], 1.0 - ms3d_triangle.t[0])) + #bmf.loops[1][layer_uv].uv = Vector( + # (ms3d_triangle.s[1], 1.0 - ms3d_triangle.t[1])) + #bmf.loops[2][layer_uv].uv = Vector( + # (ms3d_triangle.s[2], 1.0 - ms3d_triangle.t[2])) + ########################## # ms3d custom data per "mesh face" bmf[layer_smoothing_group] = ms3d_triangle.smoothing_group diff --git a/io_scene_ms3d/ms3d_ui.py b/io_scene_ms3d/ms3d_ui.py index 5a3431c1..bde05713 100644 --- a/io_scene_ms3d/ms3d_ui.py +++ b/io_scene_ms3d/ms3d_ui.py @@ -46,7 +46,6 @@ from io_scene_ms3d.ms3d_spec import ( from io_scene_ms3d.ms3d_utils import ( enable_edit_mode, get_edge_split_modifier_add_if, - set_sence_to_metric, ) @@ -1705,37 +1704,8 @@ class Ms3dSmoothingGroupPanel(Panel): ).smoothing_group_index = 0 -############################################################################### -class Ms3dSetSceneToMetricOperator(Operator): - """ . """ - bl_idname = 'io_scene_ms3d.set_sence_to_metric' - bl_label = ms3d_str['BL_LABEL_SET_SCENE_TO_METRIC'] - bl_description = ms3d_str['BL_DESC_SET_SCENE_TO_METRIC'] - - - # - @classmethod - def poll(cls, blender_context): - return True - - # entrypoint for option - def execute(self, blender_context): - return self.set_sence_to_metric(blender_context) - - # entrypoint for option via UI - def invoke(self, blender_context, event): - return blender_context.window_manager.invoke_props_dialog(self) - - - ########################################################################### - def set_sence_to_metric(self, blender_context): - set_sence_to_metric(blender_context) - return {"FINISHED"} - - ############################################################################### def register(): - register_class(Ms3dSetSceneToMetricOperator) register_class(Ms3dGroupProperties) register_class(Ms3dModelProperties) register_class(Ms3dArmatureProperties) @@ -1754,7 +1724,6 @@ def unregister(): unregister_class(Ms3dArmatureProperties) unregister_class(Ms3dModelProperties) unregister_class(Ms3dGroupProperties) - unregister_class(Ms3dSetSceneToMetricOperator) def inject_properties(): Mesh.ms3d = PointerProperty(type=Ms3dModelProperties) diff --git a/io_scene_ms3d/ms3d_utils.py b/io_scene_ms3d/ms3d_utils.py index 82a75223..c6196d9a 100644 --- a/io_scene_ms3d/ms3d_utils.py +++ b/io_scene_ms3d/ms3d_utils.py @@ -177,40 +177,6 @@ def matrix_difference(mat_src, mat_dst): return mat_dst_inv * mat_src -############################################################################### -def set_sence_to_metric(blender_context): - try: - # set metrics - blender_context.scene.unit_settings.system = 'METRIC' - blender_context.scene.unit_settings.system_rotation = 'DEGREES' - blender_context.scene.unit_settings.scale_length = 0.001 # 1.0mm - blender_context.scene.unit_settings.use_separate = False - blender_context.tool_settings.normal_size = 1.0 # 1.0mm - - # set all 3D views to texture shaded - # and set up the clipping - for screen in blender_context.blend_data.screens: - for area in screen.areas: - if (area.type != 'VIEW_3D'): - continue - - for space in area.spaces: - if (space.type != 'VIEW_3D'): - continue - - #space.viewport_shade = 'SOLID' - space.show_textured_solid = True - space.clip_start = 0.1 # 0.1mm - space.clip_end = 1000000.0 # 1km - #screen.scene.game_settings.material_mode = 'MULTITEXTURE' - - except Exception: - raise - - else: - pass - - ############################################################################### ############################################################################### -- cgit v1.2.3