From 31a9b97f60d10ba1787b344cf9a743af282c29b7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 31 May 2011 07:44:41 +0000 Subject: option for x3d to write normals --- io_scene_x3d/__init__.py | 1 + io_scene_x3d/export_x3d.py | 60 +++++++++++++++++++++++++++++++++------------- 2 files changed, 45 insertions(+), 16 deletions(-) (limited to 'io_scene_x3d') diff --git a/io_scene_x3d/__init__.py b/io_scene_x3d/__init__.py index b795f6ab..43671ed8 100644 --- a/io_scene_x3d/__init__.py +++ b/io_scene_x3d/__init__.py @@ -97,6 +97,7 @@ class ExportX3D(bpy.types.Operator, ExportHelper): use_selection = BoolProperty(name="Selection Only", description="Export selected objects only", default=False) use_apply_modifiers = BoolProperty(name="Apply Modifiers", description="Use transformed mesh data from each object", default=True) use_triangulate = BoolProperty(name="Triangulate", description="Write quads into 'IndexedTriangleSet'", default=True) + use_normals = BoolProperty(name="Normals", description="Write normals with geometry", default=False) use_compress = BoolProperty(name="Compress", description="GZip the resulting file, requires a full python install", default=False) axis_forward = EnumProperty( diff --git a/io_scene_x3d/export_x3d.py b/io_scene_x3d/export_x3d.py index aebc2f25..8fe47cff 100644 --- a/io_scene_x3d/export_x3d.py +++ b/io_scene_x3d/export_x3d.py @@ -103,7 +103,9 @@ def export(file, scene, use_apply_modifiers=False, use_selection=True, - EXPORT_TRI=False,): + use_triangulate=False, + use_normals=False, + ): fw = file.write @@ -255,7 +257,7 @@ def export(file, return "%s" % (newname) secureName.nodeID = 0 - def writeIndexedFaceSet(ident, ob, mesh, mtx, world, EXPORT_TRI=False): + def writeIndexedFaceSet(ident, ob, mesh, mtx, world): shape_name_x3d = clean_str(ob.name) mesh_name_x3d = clean_str(mesh.name) @@ -342,6 +344,7 @@ def export(file, mesh_materials_use_face_texture = [getattr(material, "use_face_texture", True) for material in mesh_materials] # fast access! + mesh_vertices = mesh.vertices[:] mesh_faces = mesh.faces[:] mesh_faces_materials = [f.material_index for f in mesh_faces] mesh_faces_vertices = [f.vertices[:] for f in mesh_faces] @@ -429,7 +432,7 @@ def export(file, mesh_faces_uv = mesh.uv_textures.active.data if is_uv else None #-- IndexedFaceSet or IndexedLineSet - if EXPORT_TRI: + if use_triangulate: fw("%s\n") + if use_normals: + fw("%s\n") + if is_uv: fw("%s\n") if is_col: fw("%s\n") fw("%s\n" % ident) @@ -545,6 +558,10 @@ def export(file, if is_smooth: fw("creaseAngle=\"%.4g\" " % mesh.auto_smooth_angle) + if use_normals: + # currently not optional, could be made so: + fw("normalPerVertex=\"true\" ") + # IndexedTriangleSet assumes true if is_col: fw("colorPerVertex=\"false\" ") @@ -556,10 +573,10 @@ def export(file, j = 0 for i in face_group: if len(mesh_faces_vertices[i]) == 4: - fw("%d %d %d %d -1, " % (j, j + 1, j + 2, j + 3)) + fw("%d %d %d %d -1 " % (j, j + 1, j + 2, j + 3)) j += 4 else: - fw("%d %d %d -1, " % (j, j + 1, j + 2)) + fw("%d %d %d -1 " % (j, j + 1, j + 2)) j += 3 fw("\" ") # --- end texCoordIndex @@ -569,9 +586,9 @@ def export(file, for i in face_group: fv = mesh_faces_vertices[i] if len(fv) == 3: - fw("%i %i %i -1, " % fv) + fw("%i %i %i -1 " % fv) else: - fw("%i %i %i %i -1, " % fv) + fw("%i %i %i %i -1 " % fv) fw("\" ") # --- end coordIndex @@ -583,19 +600,28 @@ def export(file, if True: if is_coords_written: fw("%s\n" % (ident, "coord_", mesh_name_x3d)) + if use_normals: + fw("%s\n" % (ident, "normals_", mesh_name_x3d)) else: fw("%s\n") is_coords_written = True + if use_normals: + fw("%s\n") + if is_uv: fw("%s\n") @@ -603,7 +629,7 @@ def export(file, fw("%s\n") #--- output vertexColors @@ -805,7 +831,7 @@ def export(file, me = ob.data if me is not None: - writeIndexedFaceSet(ident, ob, me, ob_mat, world, EXPORT_TRI=EXPORT_TRI) + writeIndexedFaceSet(ident, ob, me, ob_mat, world) # free mesh created with create_mesh() if me != ob.data: @@ -845,6 +871,7 @@ def save(operator, context, filepath="", use_selection=True, use_apply_modifiers=False, use_triangulate=False, + use_normals=False, use_compress=False, global_matrix=None, ): @@ -879,7 +906,8 @@ def save(operator, context, filepath="", context.scene, use_apply_modifiers=use_apply_modifiers, use_selection=use_selection, - EXPORT_TRI=use_triangulate, + use_triangulate=use_triangulate, + use_normals=use_normals, ) return {'FINISHED'} -- cgit v1.2.3