Browse Source

Fixed the UV indexing
Fixed a bug were buffer geometry files were missing the `data` key
PEP8 cleanup

repsac 10 years ago
parent
commit
3f1a96b00f

+ 1 - 1
utils/exporters/blender/addons/io_three/exporter/api/__init__.py

@@ -35,6 +35,7 @@ def data(node):
     except KeyError:
         pass
 
+
 def init():
     """Initializing the api module. Required first step before
     initializing the actual export process.
@@ -74,4 +75,3 @@ def scene_name():
 
     """
     return os.path.basename(bpy.data.filepath)
-

+ 1 - 1
utils/exporters/blender/addons/io_three/exporter/api/camera.py

@@ -50,7 +50,7 @@ def bottom(camera):
 
     """
     logger.debug("camera.bottom(%s)", camera)
-    return  -(camera.angle_y * camera.ortho_scale)
+    return -(camera.angle_y * camera.ortho_scale)
 
 
 @_camera

+ 5 - 4
utils/exporters/blender/addons/io_three/exporter/api/material.py

@@ -73,7 +73,7 @@ def bump_map(material):
     logger.debug("material.bump_map(%s)", material)
     for texture in _valid_textures(material):
         if texture.use_map_normal and not \
-        texture.texture.use_normal_map:
+           texture.texture.use_normal_map:
             return texture.texture
 
 
@@ -150,7 +150,7 @@ def diffuse_map(material):
     logger.debug("material.diffuse_map(%s)", material)
     for texture in _valid_textures(material):
         if texture.use_map_color_diffuse and not \
-        texture.blend_type == MULTIPLY:
+           texture.blend_type == MULTIPLY:
             return texture.texture
 
 
@@ -181,7 +181,7 @@ def light_map(material):
     logger.debug("material.light_map(%s)", material)
     for texture in _valid_textures(material, strict_use=False):
         if texture.use_map_color_diffuse and \
-        texture.blend_type == MULTIPLY:
+           texture.blend_type == MULTIPLY:
             return texture.texture
 
 
@@ -210,7 +210,7 @@ def normal_map(material):
     logger.debug("material.normal_map(%s)", material)
     for texture in _valid_textures(material):
         if texture.use_map_normal and \
-        texture.texture.use_normal_map:
+           texture.texture.use_normal_map:
             return texture.texture
 
 
@@ -339,6 +339,7 @@ def used_materials():
         if material.users > 0:
             yield material.name
 
+
 @_material
 def visible(material):
     """

+ 25 - 20
utils/exporters/blender/addons/io_three/exporter/api/mesh.py

@@ -202,12 +202,12 @@ def extra_vertex_groups(mesh, patterns_string):
         # Skip bone weights:
         vgroup_name = vgroup.name
         if armature:
-            is_bone_weight=False
+            is_bone_weight = False
             for bone in armature.pose.bones:
                 if bone.name == vgroup_name:
-                    is_bone_weight=True
+                    is_bone_weight = True
                     break
-            if (is_bone_weight):
+            if is_bone_weight:
                 continue
 
         if pattern_re is None:
@@ -218,12 +218,12 @@ def extra_vertex_groups(mesh, patterns_string):
             pattern_re = '^(?:' + '|'.join(
                 map(lambda entry:
                     '.*?'.join(map(re.escape, entry.strip().split('*'))),
-                patterns_string.split(',')) ) + ')$'
+                    patterns_string.split(','))) + ')$'
 
         if not re.match(pattern_re, vgroup_name):
             continue
 
-        extra_vgroups.append( (vgroup_name, vgroup_index) )
+        extra_vgroups.append((vgroup_name, vgroup_index))
     return extra_vgroups
 
 
@@ -237,14 +237,14 @@ def vertex_group_data(mesh, index):
     :param index:
 
     """
-    data = []
+    group_data = []
     for vertex in mesh.vertices:
         weight = None
         for group in vertex.groups:
             if group.group == index:
                 weight = group.weight
-        data.append(weight or 0.0)
-    return data
+        group_data.append(weight or 0.0)
+    return group_data
 
 
 @_mesh
@@ -257,7 +257,7 @@ def buffer_vertex_group_data(mesh, index):
     :param index:
 
     """
-    data = []
+    group_data = []
     for face in mesh.tessfaces:
         for vertex_index in face.vertices:
             vertex = mesh.vertices[vertex_index]
@@ -265,23 +265,23 @@ def buffer_vertex_group_data(mesh, index):
             for group in vertex.groups:
                 if group.group == index:
                     weight = group.weight
-            data.append(weight or 0.0)
-    return data
+            group_data.append(weight or 0.0)
+    return group_data
 
 
 @_mesh
-def faces(mesh, options, materials=None):
+def faces(mesh, options, material_list=None):
     """
 
     :param mesh:
     :param options:
-    :param materials: (Default value = None)
+    :param material_list: (Default value = None)
 
     """
     logger.debug("mesh.faces(%s, %s, materials=%s)",
                  mesh, options, materials)
 
-    materials = materials or []
+    material_list = material_list or []
     vertex_uv = len(mesh.uv_textures) > 0
     has_colors = len(mesh.vertex_colors) > 0
     logger.info("Has UVs = %s", vertex_uv)
@@ -296,7 +296,7 @@ def faces(mesh, options, materials=None):
     logger.debug("Materials enabled = %s", opt_materials)
     logger.debug("Normals enabled = %s", opt_normals)
 
-    uv_layers, uv_indices = _uvs(mesh) if opt_uvs else None
+    uv_indices = _uvs(mesh)[1] if opt_uvs else None
     vertex_normals = _normals(mesh) if opt_normals else None
     vertex_colours = vertex_colors(mesh) if opt_colours else None
 
@@ -338,7 +338,7 @@ def faces(mesh, options, materials=None):
         face_data.extend([v for v in face.vertices])
 
         if mask[constants.MATERIALS]:
-            for mat_index, mat in enumerate(materials):
+            for mat_index, mat in enumerate(material_list):
                 if mat[constants.DBG_INDEX] == face.material_index:
                     face_data.append(mat_index)
                     break
@@ -347,13 +347,13 @@ def faces(mesh, options, materials=None):
                          "for face %d" % face.index)
                 raise exceptions.MaterialError(error)
 
-        if uv_layers and uv_indices:
-            for index, uv_layer in enumerate(uv_layers):
+        if uv_indices:
+            for index, uv_layer in enumerate(uv_indices):
                 layer = mesh.tessface_uv_textures[index]
 
                 for uv_data in layer.data[face.index].uv:
                     uv_tuple = (uv_data[0], uv_data[1])
-                    uv_index = uv_indices[index][str(uv_tuple)]
+                    uv_index = uv_layer[str(uv_tuple)]
                     face_data.append(uv_index)
                     mask[constants.UVS] = True
 
@@ -638,7 +638,12 @@ def uvs(mesh):
     """
     logger.debug("mesh.uvs(%s)", mesh)
     uvs_ = []
-    return _uvs(mesh)[0]
+    for layer in _uvs(mesh)[0]:
+        uvs_.append([])
+        logger.info("Parsing UV layer %d", len(uvs_))
+        for pair in layer:
+            uvs_[-1].extend(pair)
+    return uvs_
 
 
 @_mesh

+ 4 - 5
utils/exporters/blender/addons/io_three/exporter/api/object.py

@@ -92,8 +92,8 @@ def cast_shadow(obj):
         if obj.data.type in (SPOT, SUN):
             ret = obj.data.shadow_method != NO_SHADOW
         else:
-            logger.info('%s is a lamp but this lamp type does not '\
-                'have supported shadows in ThreeJS', obj.name)
+            logger.info("%s is a lamp but this lamp type does not "
+                        "have supported shadows in ThreeJS", obj.name)
             ret = None
         return ret
     elif obj.type == MESH:
@@ -217,6 +217,7 @@ def nodes(valid_types, options):
         if _valid_node(obj, valid_types, options):
             yield obj.name
 
+
 @_object
 def position(obj, options):
     """
@@ -247,6 +248,7 @@ def receive_shadow(obj):
 
 AXIS_CONVERSION = axis_conversion(to_forward='Z', to_up='Y').to_4x4()
 
+
 @_object
 def matrix(obj, options):
     """
@@ -553,6 +555,3 @@ def _valid_node(obj, valid_types, options):
 
     # if we get this far assume that the mesh is valid
     return True
-
-
-

+ 1 - 0
utils/exporters/blender/addons/io_three/exporter/base_classes.py

@@ -56,6 +56,7 @@ class BaseClass(constants.BASE_DICT):
 
         """
         data = {}
+
         def _dict_copy(old, new):
             """Recursive function for processing all values
 

+ 13 - 11
utils/exporters/blender/addons/io_three/exporter/geometry.py

@@ -265,7 +265,7 @@ class Geometry(base_classes.BaseNode):
 
         for name, index in api.mesh.extra_vertex_groups(self.node,
                                                         option_extra_vgroups):
-            components.append(name);
+            components.append(name)
 
         for component in components:
             try:
@@ -284,7 +284,9 @@ class Geometry(base_classes.BaseNode):
         data = self._component_data()
 
         if self[constants.TYPE] != constants.GEOMETRY.title():
-            data = {constants.ATTRIBUTES: data}
+            data = {
+                constants.DATA: {constants.ATTRIBUTES: data}
+            }
 
         data[constants.METADATA] = {
             constants.TYPE: self[constants.TYPE]
@@ -426,7 +428,7 @@ class Geometry(base_classes.BaseNode):
                         self.get(constants.DRAW_CALLS)))
 
             indices_per_face = 3
-            index_threshold  = 0xffff - indices_per_face
+            index_threshold = 0xffff - indices_per_face
             if option_index_type == constants.UINT_32:
                 index_threshold = 0x7fffffff - indices_per_face
 
@@ -438,8 +440,8 @@ class Geometry(base_classes.BaseNode):
                 item_size = entry[constants.ITEM_SIZE]
 
                 attrib_keys.append(key)
-                attrib_data_in.append( (entry[constants.ARRAY], item_size) )
-                attrib_data_out.append( ([], i, i + item_size) )
+                attrib_data_in.append((entry[constants.ARRAY], item_size))
+                attrib_data_out.append(([], i, i + item_size))
                 i += item_size
 
             index_data, draw_calls = [], []
@@ -453,7 +455,7 @@ class Geometry(base_classes.BaseNode):
                 vertex_data = ()
                 for array, item_size in attrib_data_in:
                     vertex_data += tuple(
-                            array[i * item_size : (i + 1) * item_size])
+                            array[i * item_size:(i + 1) * item_size])
 
                 vertex_index = indexed.get(vertex_data)
 
@@ -464,7 +466,7 @@ class Geometry(base_classes.BaseNode):
 
                     indexed[vertex_data] = vertex_index
                     for array, i_from, i_to in attrib_data_out:
-                        array.extend(vertex_data[i_from : i_to])
+                        array.extend(vertex_data[i_from:i_to])
 
                 index_data.append(vertex_index)
 
@@ -477,7 +479,8 @@ class Geometry(base_classes.BaseNode):
                     start, count = 0, len(index_data)
                     if draw_calls:
                         prev = draw_calls[-1]
-                        start = prev[constants.DC_START] + prev[constants.DC_COUNT]
+                        start = (prev[constants.DC_START] +
+                                 prev[constants.DC_COUNT])
                         count -= start
                     draw_calls.append({
                         constants.DC_START: start,
@@ -501,7 +504,6 @@ class Geometry(base_classes.BaseNode):
                 logger.info("draw_calls = %s", repr(draw_calls))
                 self[constants.DRAW_CALLS] = draw_calls
 
-
     def _parse_geometry(self):
         """Parse the geometry to Three.Geometry specs"""
         if self.options.get(constants.VERTICES):
@@ -528,9 +530,9 @@ class Geometry(base_classes.BaseNode):
 
         if self.options.get(constants.FACES):
             logger.info("Parsing %s", constants.FACES)
-            materials = self.get(constants.MATERIALS)
+            material_list = self.get(constants.MATERIALS)
             self[constants.FACES] = api.mesh.faces(
-                self.node, self.options, materials=materials) or []
+                self.node, self.options, material_list=material_list) or []
 
         no_anim = (None, False, constants.OFF)
         if self.options.get(constants.ANIMATION) not in no_anim: