diff options
author | Mikhail Rachinskiy <mikhail.rachinskiy@gmail.com> | 2021-12-31 11:40:57 +0300 |
---|---|---|
committer | Mikhail Rachinskiy <mikhail.rachinskiy@gmail.com> | 2021-12-31 11:40:57 +0300 |
commit | 5df5a211c5f02cead0630715b78d24549bbf9749 (patch) | |
tree | 55befbabfb5999f14812c0da091a057e226a22e9 /io_mesh_ply | |
parent | 5533f703fb6e2f5c1eb42734b763185e89a8f324 (diff) |
PLY: Cleanup and simplify collecting faces info
Diffstat (limited to 'io_mesh_ply')
-rw-r--r-- | io_mesh_ply/export_ply.py | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/io_mesh_ply/export_ply.py b/io_mesh_ply/export_ply.py index e86f43f3..d90c0e49 100644 --- a/io_mesh_ply/export_ply.py +++ b/io_mesh_ply/export_ply.py @@ -24,7 +24,15 @@ colors, and texture coordinates per face or per vertex. """ -def _write_binary(fw, ply_verts, ply_faces, mesh_verts): +class _PLYface: + __slots__ = "verts", "sides" + + def __init__(self, sides: int) -> None: + self.verts = [] + self.sides = sides + + +def _write_binary(fw, ply_verts: list, ply_faces: list[_PLYface], mesh_verts: list) -> None: from struct import pack # Vertex data @@ -43,11 +51,10 @@ def _write_binary(fw, ply_verts, ply_faces, mesh_verts): # --------------------------- for pf in ply_faces: - length = len(pf) - fw(pack("<B%dI" % length, length, *pf)) + fw(pack(f"<B{pf.sides}I", pf.sides, *pf.verts)) -def _write_ascii(fw, ply_verts, ply_faces, mesh_verts): +def _write_ascii(fw, ply_verts: list, ply_faces: list[_PLYface], mesh_verts: list) -> None: # Vertex data # --------------------------- @@ -66,8 +73,8 @@ def _write_ascii(fw, ply_verts, ply_faces, mesh_verts): # --------------------------- for pf in ply_faces: - fw(b"%d" % len(pf)) - for index in pf: + fw(b"%d" % pf.sides) + for index in pf.verts: fw(b" %d" % index) fw(b"\n") @@ -96,12 +103,12 @@ def save_mesh(filepath, mesh, use_ascii, use_normals, use_uv_coords, use_colors) mesh_verts = mesh.vertices # vdict = {} # (index, normal, uv) -> new index - vdict = [{} for i in range(len(mesh_verts))] + vdict = [{} for _ in range(len(mesh_verts))] ply_verts = [] - ply_faces = [[] for f in range(len(mesh.polygons))] + ply_faces = [] vert_count = 0 - for i, f in enumerate(mesh.polygons): + for f in mesh.polygons: if use_normals: smooth = f.use_smooth @@ -120,8 +127,8 @@ def save_mesh(filepath, mesh, use_ascii, use_normals, use_uv_coords, use_colors) for l in range(f.loop_start, f.loop_start + f.loop_total) ] - pf = ply_faces[i] - for j, vidx in enumerate(f.vertices): + pf = _PLYface(f.loop_total) + for i, vidx in enumerate(f.vertices): v = mesh_verts[vidx] if use_normals and smooth: @@ -129,11 +136,11 @@ def save_mesh(filepath, mesh, use_ascii, use_normals, use_uv_coords, use_colors) normal_key = rvec3d(normal) if use_uv_coords: - uvcoord = uv[j][0], uv[j][1] + uvcoord = uv[i][0], uv[i][1] uvcoord_key = rvec2d(uvcoord) if use_colors: - color = col[j] + color = col[i] color = ( int(color[0] * 255.0), int(color[1] * 255.0), @@ -150,7 +157,9 @@ def save_mesh(filepath, mesh, use_ascii, use_normals, use_uv_coords, use_colors) ply_verts.append((vidx, normal, uvcoord, color)) vert_count += 1 - pf.append(pf_vidx) + pf.verts.append(pf_vidx) + + ply_faces.append(pf) with open(filepath, "wb") as file: fw = file.write |