[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4678] trunk/py/scripts/addons/ io_scene_ms3d: workaround for [#36443] Vertex to UV index doesn' t match with 2.68a

Alexander N alpha-beta-release at gmx.net
Sun Aug 18 00:21:17 CEST 2013


Revision: 4678
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4678
Author:   beta-tester
Date:     2013-08-17 22:21:17 +0000 (Sat, 17 Aug 2013)
Log Message:
-----------
workaround for [#36443] Vertex to UV index doesn't match with 2.68a

- until the <BMesh>.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

Modified Paths:
--------------
    trunk/py/scripts/addons/io_scene_ms3d/__init__.py
    trunk/py/scripts/addons/io_scene_ms3d/ms3d_import.py
    trunk/py/scripts/addons/io_scene_ms3d/ms3d_ui.py
    trunk/py/scripts/addons/io_scene_ms3d/ms3d_utils.py

Modified: trunk/py/scripts/addons/io_scene_ms3d/__init__.py
===================================================================
--- trunk/py/scripts/addons/io_scene_ms3d/__init__.py	2013-08-14 07:29:11 UTC (rev 4677)
+++ trunk/py/scripts/addons/io_scene_ms3d/__init__.py	2013-08-17 22:21:17 UTC (rev 4678)
@@ -23,7 +23,7 @@
     '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': "",

Modified: trunk/py/scripts/addons/io_scene_ms3d/ms3d_import.py
===================================================================
--- trunk/py/scripts/addons/io_scene_ms3d/ms3d_import.py	2013-08-14 07:29:11 UTC (rev 4677)
+++ trunk/py/scripts/addons/io_scene_ms3d/ms3d_import.py	2013-08-17 22:21:17 UTC (rev 4678)
@@ -363,6 +363,7 @@
         # 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 @@
                         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 @@
             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,16 +569,38 @@
                 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
 

Modified: trunk/py/scripts/addons/io_scene_ms3d/ms3d_ui.py
===================================================================
--- trunk/py/scripts/addons/io_scene_ms3d/ms3d_ui.py	2013-08-14 07:29:11 UTC (rev 4677)
+++ trunk/py/scripts/addons/io_scene_ms3d/ms3d_ui.py	2013-08-17 22:21:17 UTC (rev 4678)
@@ -46,7 +46,6 @@
 from io_scene_ms3d.ms3d_utils import (
         enable_edit_mode,
         get_edge_split_modifier_add_if,
-        set_sence_to_metric,
         )
 
 
@@ -1706,36 +1705,7 @@
 
 
 ###############################################################################
-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 @@
     unregister_class(Ms3dArmatureProperties)
     unregister_class(Ms3dModelProperties)
     unregister_class(Ms3dGroupProperties)
-    unregister_class(Ms3dSetSceneToMetricOperator)
 
 def inject_properties():
     Mesh.ms3d = PointerProperty(type=Ms3dModelProperties)

Modified: trunk/py/scripts/addons/io_scene_ms3d/ms3d_utils.py
===================================================================
--- trunk/py/scripts/addons/io_scene_ms3d/ms3d_utils.py	2013-08-14 07:29:11 UTC (rev 4677)
+++ trunk/py/scripts/addons/io_scene_ms3d/ms3d_utils.py	2013-08-17 22:21:17 UTC (rev 4678)
@@ -178,42 +178,8 @@
 
 
 ###############################################################################
-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
-
-
 ###############################################################################
-
-###############################################################################
 #234567890123456789012345678901234567890123456789012345678901234567890123456789
 #--------1---------2---------3---------4---------5---------6---------7---------
 # ##### END OF FILE #####



More information about the Bf-extensions-cvs mailing list