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-08-18 02:21:17 +0400
committerAlexander N <alpha-beta-release@gmx.net>2013-08-18 02:21:17 +0400
commit91e25c8fe96ffcbd14076e09c0659cb753bcd6c3 (patch)
treecf23947d9a56f80d9c741dbda3124f3343a315c8
parent78a1a609731d0501e0e17aa319e4e1e4c98c76e5 (diff)
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
-rw-r--r--io_scene_ms3d/__init__.py2
-rw-r--r--io_scene_ms3d/ms3d_import.py31
-rw-r--r--io_scene_ms3d/ms3d_ui.py31
-rw-r--r--io_scene_ms3d/ms3d_utils.py34
4 files changed, 29 insertions, 69 deletions
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,
)
@@ -1706,36 +1705,7 @@ class Ms3dSmoothingGroupPanel(Panel):
###############################################################################
-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
@@ -178,40 +178,6 @@ def matrix_difference(mat_src, mat_dst):
###############################################################################
-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