[Bf-extensions-cvs] [c584e86e] master: PLY: code cleanup
Mikhail Rachinskiy
noreply at git.blender.org
Tue Oct 15 16:57:41 CEST 2019
Commit: c584e86e4d133be61e4775ce1ad662ffd0b2647b
Author: Mikhail Rachinskiy
Date: Tue Oct 15 18:57:32 2019 +0400
Branches: master
https://developer.blender.org/rBAc584e86e4d133be61e4775ce1ad662ffd0b2647b
PLY: code cleanup
Group related and separate unrelated code, rename classes according to PEP8, remove redundant, outdated or misleading comments, greatly simplify UVs and vertex color variable init code.
===================================================================
M io_mesh_ply/__init__.py
M io_mesh_ply/export_ply.py
M io_mesh_ply/import_ply.py
===================================================================
diff --git a/io_mesh_ply/__init__.py b/io_mesh_ply/__init__.py
index 28de08be..c9a79e1f 100644
--- a/io_mesh_ply/__init__.py
+++ b/io_mesh_ply/__init__.py
@@ -24,7 +24,7 @@ bl_info = {
"version": (1, 1, 0),
"blender": (2, 82, 0),
"location": "File > Import-Export",
- "description": "Import-Export PLY mesh data with UV's and vertex colors",
+ "description": "Import-Export PLY mesh data with UVs and vertex colors",
"wiki_url": "https://docs.blender.org/manual/en/latest/addons/io_mesh_ply.html",
"support": 'OFFICIAL',
"category": "Import-Export",
diff --git a/io_mesh_ply/export_ply.py b/io_mesh_ply/export_ply.py
index cd50dbaf..812aeb54 100644
--- a/io_mesh_ply/export_ply.py
+++ b/io_mesh_ply/export_ply.py
@@ -34,44 +34,26 @@ def save_mesh(filepath, mesh, use_normals=True, use_uv_coords=True, use_colors=T
def rvec2d(v):
return round(v[0], 6), round(v[1], 6)
- has_uv = bool(mesh.uv_layers)
- has_vcol = bool(mesh.vertex_colors)
-
- if not has_uv:
+ if use_uv_coords and mesh.uv_layers:
+ active_uv_layer = mesh.uv_layers.active.data
+ else:
use_uv_coords = False
- if not has_vcol:
- use_colors = False
- if not use_uv_coords:
- has_uv = False
- if not use_colors:
- has_vcol = False
-
- if has_uv:
- active_uv_layer = mesh.uv_layers.active
- if not active_uv_layer:
- use_uv_coords = False
- has_uv = False
- else:
- active_uv_layer = active_uv_layer.data
-
- if has_vcol:
- active_col_layer = mesh.vertex_colors.active
- if not active_col_layer:
- use_colors = False
- has_vcol = False
- else:
- active_col_layer = active_col_layer.data
+ if use_colors and mesh.vertex_colors:
+ active_col_layer = mesh.vertex_colors.active.data
+ else:
+ use_colors = False
# in case
color = uvcoord = uvcoord_key = normal = normal_key = None
- mesh_verts = mesh.vertices # save a lookup
- ply_verts = [] # list of dictionaries
+ mesh_verts = mesh.vertices
# vdict = {} # (index, normal, uv) -> new index
vdict = [{} for i in range(len(mesh_verts))]
+ ply_verts = []
ply_faces = [[] for f in range(len(mesh.polygons))]
vert_count = 0
+
for i, f in enumerate(mesh.polygons):
smooth = not use_normals or f.use_smooth
@@ -79,12 +61,12 @@ def save_mesh(filepath, mesh, use_normals=True, use_uv_coords=True, use_colors=T
normal = f.normal[:]
normal_key = rvec3d(normal)
- if has_uv:
+ if use_uv_coords:
uv = [
active_uv_layer[l].uv[:]
for l in range(f.loop_start, f.loop_start + f.loop_total)
]
- if has_vcol:
+ if use_colors:
col = [
active_col_layer[l].color[:]
for l in range(f.loop_start, f.loop_start + f.loop_total)
@@ -98,11 +80,11 @@ def save_mesh(filepath, mesh, use_normals=True, use_uv_coords=True, use_colors=T
normal = v.normal[:]
normal_key = rvec3d(normal)
- if has_uv:
+ if use_uv_coords:
uvcoord = uv[j][0], uv[j][1]
uvcoord_key = rvec2d(uvcoord)
- if has_vcol:
+ if use_colors:
color = col[j]
color = (
int(color[0] * 255.0),
@@ -115,7 +97,7 @@ def save_mesh(filepath, mesh, use_normals=True, use_uv_coords=True, use_colors=T
vdict_local = vdict[vidx]
pf_vidx = vdict_local.get(key) # Will be None initially
- if pf_vidx is None: # same as vdict_local.has_key(key)
+ if pf_vidx is None: # Same as vdict_local.has_key(key)
pf_vidx = vdict_local[key] = vert_count
ply_verts.append((vidx, normal, uvcoord, color))
vert_count += 1
@@ -136,13 +118,11 @@ def save_mesh(filepath, mesh, use_normals=True, use_uv_coords=True, use_colors=T
)
fw(f"element vertex {len(ply_verts)}\n")
-
fw(
"property float x\n"
"property float y\n"
"property float z\n"
)
-
if use_normals:
fw(
"property float nx\n"
@@ -164,6 +144,7 @@ def save_mesh(filepath, mesh, use_normals=True, use_uv_coords=True, use_colors=T
fw(f"element face {len(mesh.polygons)}\n")
fw("property list uchar uint vertex_indices\n")
+
fw("end_header\n")
# Vertex data
diff --git a/io_mesh_ply/import_ply.py b/io_mesh_ply/import_ply.py
index 943f50a3..2bf91442 100644
--- a/io_mesh_ply/import_ply.py
+++ b/io_mesh_ply/import_ply.py
@@ -19,7 +19,7 @@
# <pep8 compliant>
-class element_spec(object):
+class ElementSpec:
__slots__ = (
"name",
"count",
@@ -43,7 +43,7 @@ class element_spec(object):
return -1
-class property_spec(object):
+class PropertySpec:
__slots__ = (
"name",
"list_type",
@@ -102,7 +102,7 @@ class property_spec(object):
return self.read_format(format, 1, self.numeric_type, stream)[0]
-class object_spec(object):
+class ObjectSpec:
__slots__ = ("specs",)
def __init__(self):
@@ -113,15 +113,16 @@ class object_spec(object):
return dict([(i.name, [i.load(format, stream) for j in range(i.count)]) for i in self.specs])
# Longhand for above LC
-
- # answer = {}
- # for i in self.specs:
- # answer[i.name] = []
- # for j in range(i.count):
- # if not j % 100 and meshtools.show_progress:
- # Blender.Window.DrawProgressBar(float(j) / i.count, 'Loading ' + i.name)
- # answer[i.name].append(i.load(format, stream))
- # return answer
+ """
+ answer = {}
+ for i in self.specs:
+ answer[i.name] = []
+ for j in range(i.count):
+ if not j % 100 and meshtools.show_progress:
+ Blender.Window.DrawProgressBar(float(j) / i.count, 'Loading ' + i.name)
+ answer[i.name].append(i.load(format, stream))
+ return answer
+ """
def read(filepath):
@@ -154,7 +155,7 @@ def read(filepath):
b'double': 'd',
b'string': 's',
}
- obj_spec = object_spec()
+ obj_spec = ObjectSpec()
invalid_ply = (None, None, None)
with open(filepath, 'rb') as plyf:
@@ -206,15 +207,15 @@ def read(filepath):
if len(tokens) < 3:
print("Invalid element line")
return invalid_ply
- obj_spec.specs.append(element_spec(tokens[1], int(tokens[2])))
+ obj_spec.specs.append(ElementSpec(tokens[1], int(tokens[2])))
elif tokens[0] == b'property':
if not len(obj_spec.specs):
print("Property without element")
return invalid_ply
if tokens[1] == b'list':
- obj_spec.specs[-1].properties.append(property_spec(tokens[4], type_specs[tokens[2]], type_specs[tokens[3]]))
+ obj_spec.specs[-1].properties.append(PropertySpec(tokens[4], type_specs[tokens[2]], type_specs[tokens[3]]))
else:
- obj_spec.specs[-1].properties.append(property_spec(tokens[2], None, type_specs[tokens[1]]))
+ obj_spec.specs[-1].properties.append(PropertySpec(tokens[2], None, type_specs[tokens[1]]))
if not valid_header:
print("Invalid header ('end_header' line not found!)")
return invalid_ply
@@ -373,7 +374,7 @@ def load_ply_mesh(filepath, ply_name):
if texture and uvindices:
pass
- # XXX28: add support for using texture.
+ # TODO add support for using texture.
# import os
# import sys
More information about the Bf-extensions-cvs
mailing list