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