[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4753] trunk/py/scripts/addons/ io_scene_obj/export_obj.py: OBJ export: export split normals when " Include Normals" is checked (help keep sharp edges...).
Bastien Montagne
montagne29 at wanadoo.fr
Fri Sep 13 14:04:41 CEST 2013
Revision: 4753
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4753
Author: mont29
Date: 2013-09-13 12:04:40 +0000 (Fri, 13 Sep 2013)
Log Message:
-----------
OBJ export: export split normals when "Include Normals" is checked (help keep sharp edges...).
Modified Paths:
--------------
trunk/py/scripts/addons/io_scene_obj/export_obj.py
Modified: trunk/py/scripts/addons/io_scene_obj/export_obj.py
===================================================================
--- trunk/py/scripts/addons/io_scene_obj/export_obj.py 2013-09-13 00:48:12 UTC (rev 4752)
+++ trunk/py/scripts/addons/io_scene_obj/export_obj.py 2013-09-13 12:04:40 UTC (rev 4753)
@@ -401,7 +401,11 @@
continue # dont bother with this mesh.
if EXPORT_NORMALS and face_index_pairs:
- me.calc_normals()
+ me.calc_normals_split()
+ # No need to call me.free_normals_split later, as this mesh is deleted anyway!
+ loops = me.loops
+ else:
+ loops = []
if (EXPORT_SMOOTH_GROUPS or EXPORT_SMOOTH_GROUPS_BITFLAGS) and face_index_pairs:
smooth_groups, smooth_groups_tot = me.calc_smooth_groups(EXPORT_SMOOTH_GROUPS_BITFLAGS)
@@ -499,22 +503,19 @@
# NORMAL, Smooth/Non smoothed.
if EXPORT_NORMALS:
+ loops_to_normals = [0] * len(loops)
for f, f_index in face_index_pairs:
- if f.use_smooth:
- for v_idx in f.vertices:
- v = me_verts[v_idx]
- noKey = veckey3d(v.normal)
- if noKey not in globalNormals:
- globalNormals[noKey] = totno
- totno += 1
- fw('vn %.6f %.6f %.6f\n' % noKey)
- else:
- # Hard, 1 normal from the face.
- noKey = veckey3d(f.normal)
+ for l_idx in f.loop_indices:
+ noKey = veckey3d(loops[l_idx].normal)
if noKey not in globalNormals:
globalNormals[noKey] = totno
- totno += 1
+ loops_to_normals[l_idx] = totno
fw('vn %.6f %.6f %.6f\n' % noKey)
+ totno += 1
+ else:
+ loops_to_normals[l_idx] = globalNormals[noKey]
+ else:
+ loops_to_normals = []
if not faceuv:
f_image = None
@@ -610,29 +611,20 @@
fw('s off\n')
contextSmooth = f_smooth
- f_v = [(vi, me_verts[v_idx]) for vi, v_idx in enumerate(f.vertices)]
+ #f_v = [(vi, me_verts[v_idx]) for vi, v_idx in enumerate(f.vertices)]
+ f_v = [(vi, me_verts[v_idx], l_idx) for vi, (v_idx, l_idx) in enumerate(zip(f.vertices, f.loop_indices))]
fw('f')
if faceuv:
if EXPORT_NORMALS:
- if f_smooth: # Smoothed, use vertex normals
- for vi, v in f_v:
- fw(" %d/%d/%d" %
- (v.index + totverts,
- totuvco + uv_face_mapping[f_index][vi],
- globalNormals[veckey3d(v.normal)],
- )) # vert, uv, normal
-
- else: # No smoothing, face normals
- no = globalNormals[veckey3d(f.normal)]
- for vi, v in f_v:
- fw(" %d/%d/%d" %
- (v.index + totverts,
- totuvco + uv_face_mapping[f_index][vi],
- no,
- )) # vert, uv, normal
+ for vi, v, li in f_v:
+ fw(" %d/%d/%d" %
+ (v.index + totverts,
+ totuvco + uv_face_mapping[f_index][vi],
+ loops_to_normals[li],
+ )) # vert, uv, normal
else: # No Normals
- for vi, v in f_v:
+ for vi, v, li in f_v:
fw(" %d/%d" % (
v.index + totverts,
totuvco + uv_face_mapping[f_index][vi],
@@ -642,18 +634,10 @@
else: # No UV's
if EXPORT_NORMALS:
- if f_smooth: # Smoothed, use vertex normals
- for vi, v in f_v:
- fw(" %d//%d" % (
- v.index + totverts,
- globalNormals[veckey3d(v.normal)],
- ))
- else: # No smoothing, face normals
- no = globalNormals[veckey3d(f.normal)]
- for vi, v in f_v:
- fw(" %d//%d" % (v.index + totverts, no))
+ for vi, v, li in f_v:
+ fw(" %d//%d" % (v.index + totverts, loops_to_normals[li]))
else: # No Normals
- for vi, v in f_v:
+ for vi, v, li in f_v:
fw(" %d" % (v.index + totverts))
fw('\n')
More information about the Bf-extensions-cvs
mailing list