From e63e95789e23f672b2d55319232e391e254219fb Mon Sep 17 00:00:00 2001
From: Campbell Barton <ideasman42@gmail.com>
Date: Fri, 23 Mar 2012 01:18:52 +0000
Subject: [PATCH] update addons enabled by default to use 'faces -> tessfaces'
 also grease pencil scatter and quake map export.

---
 io_mesh_ply/export_ply.py     |  6 +++---
 io_mesh_ply/import_ply.py     |  4 ++--
 io_mesh_raw/export_raw.py     |  2 +-
 io_mesh_stl/__init__.py       | 14 +++++++-------
 io_mesh_stl/blender_utils.py  |  4 ++--
 io_scene_fbx/export_fbx.py    |  4 ++--
 io_scene_map/export_map.py    |  5 ++++-
 io_scene_obj/export_obj.py    |  4 ++--
 io_scene_obj/import_obj.py    | 10 +++++-----
 io_scene_x3d/export_x3d.py    |  8 ++++----
 io_scene_x3d/import_x3d.py    | 16 ++++++++--------
 object_grease_scatter.py      | 27 ---------------------------
 space_view3d_panel_measure.py |  2 +-
 13 files changed, 41 insertions(+), 65 deletions(-)

diff --git a/io_mesh_ply/export_ply.py b/io_mesh_ply/export_ply.py
index cfadfbae6..995bd0f5a 100644
--- a/io_mesh_ply/export_ply.py
+++ b/io_mesh_ply/export_ply.py
@@ -102,9 +102,9 @@ def save(operator,
     ply_verts = []  # list of dictionaries
     # vdict = {} # (index, normal, uv) -> new index
     vdict = [{} for i in range(len(mesh_verts))]
-    ply_faces = [[] for f in range(len(mesh.faces))]
+    ply_faces = [[] for f in range(len(mesh.tessfaces))]
     vert_count = 0
-    for i, f in enumerate(mesh.faces):
+    for i, f in enumerate(mesh.tessfaces):
 
         smooth = f.use_smooth
         if not smooth:
@@ -177,7 +177,7 @@ def save(operator,
            "property uchar green\n"
            "property uchar blue\n")
 
-    fw("element face %d\n" % len(mesh.faces))
+    fw("element face %d\n" % len(mesh.tessfaces))
     fw("property list uchar uint vertex_indices\n")
     fw("end_header\n")
 
diff --git a/io_mesh_ply/import_ply.py b/io_mesh_ply/import_ply.py
index ff013c019..ee64552a5 100644
--- a/io_mesh_ply/import_ply.py
+++ b/io_mesh_ply/import_ply.py
@@ -301,8 +301,8 @@ def load_ply(filepath):
     mesh.vertices.foreach_set("co", [a for v in obj[b'vertex'] for a in (v[vindices_x], v[vindices_y], v[vindices_z])])
 
     if mesh_faces:
-        mesh.faces.add(len(mesh_faces))
-        mesh.faces.foreach_set("vertices_raw", unpack_face_list(mesh_faces))
+        mesh.tessfaces.add(len(mesh_faces))
+        mesh.tessfaces.foreach_set("vertices_raw", unpack_face_list(mesh_faces))
 
         if uvindices or colindices:
             if uvindices:
diff --git a/io_mesh_raw/export_raw.py b/io_mesh_raw/export_raw.py
index d33cfbae1..a18015185 100644
--- a/io_mesh_raw/export_raw.py
+++ b/io_mesh_raw/export_raw.py
@@ -79,7 +79,7 @@ def write(filepath,
 
         if me is not None:
             matrix = obj.matrix_world.copy()
-            for face in me.faces:
+            for face in me.tessfaces:
                 fv = faceValues(face, me, matrix)
                 if triangulate:
                     faces.extend(faceToTriangles(fv))
diff --git a/io_mesh_stl/__init__.py b/io_mesh_stl/__init__.py
index 7005e50dd..f2fe7c160 100644
--- a/io_mesh_stl/__init__.py
+++ b/io_mesh_stl/__init__.py
@@ -60,9 +60,10 @@ import os
 import bpy
 from bpy.props import StringProperty, BoolProperty, CollectionProperty
 from bpy_extras.io_utils import ExportHelper, ImportHelper
+from bpy.types import Operator, OperatorFileListElement
 
 
-class ImportSTL(bpy.types.Operator, ImportHelper):
+class ImportSTL(Operator, ImportHelper):
     '''Load STL triangle mesh data'''
     bl_idname = "import_mesh.stl"
     bl_label = "Import STL"
@@ -76,7 +77,7 @@ class ImportSTL(bpy.types.Operator, ImportHelper):
             )
     files = CollectionProperty(
             name="File Path",
-            type=bpy.types.OperatorFileListElement,
+            type=OperatorFileListElement,
             )
     directory = StringProperty(
             subtype='DIR_PATH',
@@ -106,12 +107,13 @@ class ImportSTL(bpy.types.Operator, ImportHelper):
         return {'FINISHED'}
 
 
-class ExportSTL(bpy.types.Operator, ExportHelper):
+class ExportSTL(Operator, ExportHelper):
     '''Save STL triangle mesh data from the active object'''
     bl_idname = "export_mesh.stl"
     bl_label = "Export STL"
 
     filename_ext = ".stl"
+    filter_glob = StringProperty(default="*.stl", options={'HIDDEN'})
 
     ascii = BoolProperty(name="Ascii",
                          description="Save the file in ASCII file format",
@@ -136,14 +138,12 @@ class ExportSTL(bpy.types.Operator, ExportHelper):
 
 
 def menu_import(self, context):
-    self.layout.operator(ImportSTL.bl_idname,
-                         text="Stl (.stl)").filepath = "*.stl"
+    self.layout.operator(ImportSTL.bl_idname, text="Stl (.stl)")
 
 
 def menu_export(self, context):
     default_path = os.path.splitext(bpy.data.filepath)[0] + ".stl"
-    self.layout.operator(ExportSTL.bl_idname,
-                         text="Stl (.stl)").filepath = default_path
+    self.layout.operator(ExportSTL.bl_idname, text="Stl (.stl)")
 
 
 def register():
diff --git a/io_mesh_stl/blender_utils.py b/io_mesh_stl/blender_utils.py
index 2e8c8d6d0..76c864cd4 100644
--- a/io_mesh_stl/blender_utils.py
+++ b/io_mesh_stl/blender_utils.py
@@ -66,7 +66,7 @@ def faces_from_mesh(ob, apply_modifier=False, triangulate=True):
     if triangulate:
         # From a list of faces, return the face triangulated if needed.
         def iter_face_index():
-            for face in mesh.faces:
+            for face in mesh.tessfaces:
                 vertices = face.vertices[:]
                 if len(vertices) == 4:
                     yield vertices[0], vertices[1], vertices[2]
@@ -75,7 +75,7 @@ def faces_from_mesh(ob, apply_modifier=False, triangulate=True):
                     yield vertices
     else:
         def iter_face_index():
-            for face in mesh.faces:
+            for face in mesh.tessfaces:
                 yield face.vertices[:]
 
     vertices = mesh.vertices
diff --git a/io_scene_fbx/export_fbx.py b/io_scene_fbx/export_fbx.py
index c71ba3cdf..c5c09627e 100644
--- a/io_scene_fbx/export_fbx.py
+++ b/io_scene_fbx/export_fbx.py
@@ -1364,7 +1364,7 @@ def save_single(operator, scene, filepath="",
         # convert into lists once.
         me_vertices = me.vertices[:]
         me_edges = me.edges[:] if use_mesh_edges else ()
-        me_faces = me.faces[:]
+        me_faces = me.tessfaces[:]
 
         poseMatrix = write_object_props(my_mesh.blenObject, None, my_mesh.parRelMatrix())[3]
         pose_items.append((my_mesh.fbxName, poseMatrix))
@@ -2005,7 +2005,7 @@ def save_single(operator, scene, filepath="",
                     material_mapping_local = {}
                     if me.tessface_uv_textures:
                         for uvlayer in me.tessface_uv_textures:
-                            for f, uf in zip(me.faces, uvlayer.data):
+                            for f, uf in zip(me.tessfaces, uvlayer.data):
                                 tex = uf.image
                                 textures[tex] = texture_mapping_local[tex] = None
 
diff --git a/io_scene_map/export_map.py b/io_scene_map/export_map.py
index a10926b41..77108b8f5 100644
--- a/io_scene_map/export_map.py
+++ b/io_scene_map/export_map.py
@@ -354,8 +354,11 @@ def export_map(context, filepath):
         # High quality normals
         #XXX25: BPyMesh.meshCalcNormals(dummy_mesh)
 
+        # We need tessfaces
+        dummy_mesh.update(calc_tessface)
+
         # Split mesh into connected regions
-        for face_group in mesh_utils.mesh_linked_faces(dummy_mesh):
+        for face_group in mesh_utils.mesh_linked_tessfaces(dummy_mesh):
             if is_cube_facegroup(face_group):
                 write_cube2brush(file, face_group)
                 TOTBRUSH += 1
diff --git a/io_scene_obj/export_obj.py b/io_scene_obj/export_obj.py
index 33168d302..f7e8f59b6 100644
--- a/io_scene_obj/export_obj.py
+++ b/io_scene_obj/export_obj.py
@@ -345,8 +345,8 @@ def write_file(filepath, objects, scene,
             me_verts = me.vertices[:]
 
             # Make our own list so it can be sorted to reduce context switching
-            face_index_pairs = [(face, index) for index, face in enumerate(me.faces)]
-            # faces = [ f for f in me.faces ]
+            face_index_pairs = [(face, index) for index, face in enumerate(me.tessfaces)]
+            # faces = [ f for f in me.tessfaces ]
 
             if EXPORT_EDGES:
                 edges = me.edges
diff --git a/io_scene_obj/import_obj.py b/io_scene_obj/import_obj.py
index b3be1f454..17d559a40 100644
--- a/io_scene_obj/import_obj.py
+++ b/io_scene_obj/import_obj.py
@@ -550,7 +550,7 @@ def create_mesh(new_objects,
         me.materials.append(material)
 
     me.vertices.add(len(verts_loc))
-    me.faces.add(len(faces))
+    me.tessfaces.add(len(faces))
 
     # verts_loc is a list of (x, y, z) tuples
     me.vertices.foreach_set("co", unpack_list(verts_loc))
@@ -558,14 +558,14 @@ def create_mesh(new_objects,
     # faces is a list of (vert_indices, texco_indices, ...) tuples
     # XXX faces should contain either 3 or 4 verts
     # XXX no check for valid face indices
-    me.faces.foreach_set("vertices_raw", unpack_face_list([f[0] for f in faces]))
+    me.tessfaces.foreach_set("vertices_raw", unpack_face_list([f[0] for f in faces]))
 
-    if verts_tex and me.faces:
+    if verts_tex and me.tessfaces:
         me.tessface_uv_textures.new()
 
     context_material_old = -1  # avoid a dict lookup
     mat = 0  # rare case it may be un-initialized.
-    me_faces = me.faces
+    me_faces = me.tessfaces
 
     for i, face in enumerate(faces):
         if len(face[0]) < 2:
@@ -575,7 +575,7 @@ def create_mesh(new_objects,
                 edges.append(face[0])
         else:
 
-            blender_face = me.faces[i]
+            blender_face = me.tessfaces[i]
 
             (face_vert_loc_indices,
              face_vert_tex_indices,
diff --git a/io_scene_x3d/export_x3d.py b/io_scene_x3d/export_x3d.py
index 8bd40659b..ddc071328 100644
--- a/io_scene_x3d/export_x3d.py
+++ b/io_scene_x3d/export_x3d.py
@@ -526,10 +526,10 @@ def export(file,
         mesh_id_normals = prefix_quoted_str(mesh_id, 'normals_')
 
         # tessellation faces may not exist
-        if not mesh.faces and mesh.polygons:
+        if not mesh.tessfaces and mesh.polygons:
             mesh.update(calc_tessface=True)
 
-        if not mesh.faces:
+        if not mesh.tessfaces:
             return
 
         use_collnode = bool([mod for mod in obj.modifiers
@@ -582,7 +582,7 @@ def export(file,
 
             # fast access!
             mesh_vertices = mesh.vertices[:]
-            mesh_faces = mesh.faces[:]
+            mesh_faces = mesh.tessfaces[:]
             mesh_faces_materials = [f.material_index for f in mesh_faces]
             mesh_faces_vertices = [f.vertices[:] for f in mesh_faces]
 
@@ -750,7 +750,7 @@ def export(file,
                         # build a mesh mapping dict
                         vertex_hash = [{} for i in range(len(mesh.vertices))]
                         # worst case every face is a quad
-                        face_tri_list = [[None, None, None] for i in range(len(mesh.faces) * 2)]
+                        face_tri_list = [[None, None, None] for i in range(len(mesh.tessfaces) * 2)]
                         vert_tri_list = []
                         totvert = 0
                         totface = 0
diff --git a/io_scene_x3d/import_x3d.py b/io_scene_x3d/import_x3d.py
index 38cd5a057..f25cf38c0 100644
--- a/io_scene_x3d/import_x3d.py
+++ b/io_scene_x3d/import_x3d.py
@@ -1667,17 +1667,17 @@ def importMesh_IndexedFaceSet(geom, bpyima, ancestry):
     # print(len(ifs_points), faces, edges, ngons)
 
     try:
-        bpymesh.faces.add(len(faces))
-        bpymesh.faces.foreach_set("vertices_raw", [a for f in faces for a in (f + [0] if len(f) == 3 else f)])  # XXX25 speed
+        bpymesh.tessfaces.add(len(faces))
+        bpymesh.tessfaces.foreach_set("vertices_raw", [a for f in faces for a in (f + [0] if len(f) == 3 else f)])  # XXX25 speed
     except KeyError:
         print("one or more vert indices out of range. corrupt file?")
         #for f in faces:
-        #   bpymesh.faces.extend(faces, smooth=True)
+        #   bpymesh.tessfaces.extend(faces, smooth=True)
 
     bpymesh.validate()
     # bpymesh.update()  # cant call now, because it would convert tessface
 
-    if len(bpymesh.faces) != len(faces):
+    if len(bpymesh.tessfaces) != len(faces):
         print('\tWarning: adding faces did not work! file is invalid, not adding UVs or vcolors')
         return bpymesh, ccw
 
@@ -1700,7 +1700,7 @@ def importMesh_IndexedFaceSet(geom, bpyima, ancestry):
                     print('\tWarning: UV Index out of range')
                     f.uv[j] = ifs_texpoints[0]  # XXX25, speedup
 
-    elif bpyima and len(bpymesh.faces):
+    elif bpyima and len(bpymesh.tessfaces):
         # Oh Bugger! - we cant really use blenders ORCO for for texture space since texspace dosnt rotate.
         # we have to create VRML's coords as UVs instead.
 
@@ -1768,7 +1768,7 @@ def importMesh_IndexedFaceSet(geom, bpyima, ancestry):
         depth_v = depth_u = max(depth_v, depth_u)
 
         bpymesh_vertices = bpymesh.vertices[:]
-        bpymesh_faces = bpymesh.faces[:]
+        bpymesh_faces = bpymesh.tessfaces[:]
 
         for j, f in enumerate(uvlay.data):
             f.image = bpyima
@@ -1785,7 +1785,7 @@ def importMesh_IndexedFaceSet(geom, bpyima, ancestry):
         collay = bpymesh.tessface_vertex_colors.new()
 
         for f_idx, f in enumerate(collay.data):
-            fv = bpymesh.faces[f_idx].vertices[:]
+            fv = bpymesh.tessfaces[f_idx].vertices[:]
             if len(fv) == 3:  # XXX speed
                 fcol = f.color1, f.color2, f.color3
             else:
@@ -1963,7 +1963,7 @@ def importMesh_Cylinder(geom, ancestry):
     if not side:
         # remove all quads
         # XXX25
-        # bpymesh.faces.delete(1, [f for f in bpymesh.faces if len(f) == 4])
+        # bpymesh.tessfaces.delete(1, [f for f in bpymesh.tessfaces if len(f) == 4])
         pass
 
     return bpymesh
diff --git a/object_grease_scatter.py b/object_grease_scatter.py
index 9a271de9c..225c60d8f 100644
--- a/object_grease_scatter.py
+++ b/object_grease_scatter.py
@@ -72,33 +72,6 @@ def _main(self,
         self.report({'WARNING'}, "Group '%s' not found" % obj.name)
         return
 
-    def faces_from_hits(hit_list):
-        def from_pydata(self, verts, edges, faces):
-            """
-            Make a mesh from a list of verts/edges/faces
-            Until we have a nicer way to make geometry, use this.
-            """
-            self.add_geometry(len(verts), len(edges), len(faces))
-
-            verts_flat = [f for v in verts for f in v]
-            self.verts.foreach_set("co", verts_flat)
-            del verts_flat
-
-            edges_flat = [i for e in edges for i in e]
-            self.edges.foreach_set("verts", edges_flat)
-            del edges_flat
-
-            def treat_face(f):
-                if len(f) == 3:
-                    return f[0], f[1], f[2], 0
-                elif f[3] == 0:
-                    return f[3], f[0], f[1], f[2]
-                return f
-
-            faces_flat = [v for f in faces for v in treat_face(f)]
-            self.faces.foreach_set("verts_raw", faces_flat)
-            del faces_flat
-
     def debug_edge(v1, v2):
         mesh = bpy.data.meshes.new("Retopo")
         mesh.from_pydata([v1, v2], [(0.0, 1.0)], [])
diff --git a/space_view3d_panel_measure.py b/space_view3d_panel_measure.py
index c8fd57d2e..a1fe5e137 100644
--- a/space_view3d_panel_measure.py
+++ b/space_view3d_panel_measure.py
@@ -321,7 +321,7 @@ def objectEdgeLength(obj, selectedOnly, globalSpace):
 # Return the area of a face (in global space).
 # @note Copies the functionality of the following functions,
 # but also respects the scaling (via the "obj.matrix_world" parameter):
-# @sa: rna_mesh.c:rna_MeshFace_area_get
+# @sa: rna_mesh.c:rna_MeshTessFace_area_get
 # @sa: math_geom.c:area_quad_v3
 # @sa: math_geom.c:area_tri_v3
 # @sa: math_geom.c:area_poly_v3
-- 
GitLab