diff options
Diffstat (limited to 'io_mesh_raw/export_raw.py')
-rw-r--r-- | io_mesh_raw/export_raw.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/io_mesh_raw/export_raw.py b/io_mesh_raw/export_raw.py new file mode 100644 index 00000000..b44fbda2 --- /dev/null +++ b/io_mesh_raw/export_raw.py @@ -0,0 +1,98 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# <pep8 compliant> + +__author__ = ["Aurel Wildfellner"] +__version__ = '0.2' +__bpydoc__ = """\ +This script exports a Mesh to a RAW triangle format file. + +The raw triangle format is very simple; it has no verts or faces lists. +It's just a simple ascii text file with the vertices of each triangle +listed on each line. In addition, also quads can be exported as a line +of 12 values (this was the default before blender 2.5). Now default +settings will triangulate the mesh. + +Usage: +Execute this script from the "File->Export" menu. You can select +whether modifiers should be applied and if the mesh is triangulated. + +""" + +import bpy + + +def faceToTriangles(face): + triangles = [] + if (len(face) == 4): + triangles.append([face[0], face[1], face[2]]) + triangles.append([face[2], face[3], face[0]]) + else: + triangles.append(face) + + return triangles + + +def faceValues(face, mesh, matrix): + fv = [] + for verti in face.vertices: + fv.append((matrix * mesh.vertices[verti].co)[:]) + return fv + + +def faceToLine(face): + return " ".join([("%.6f %.6f %.6f" % v) for v in face] + ["\n"]) + + +def write(filepath, + applyMods=True, + triangulate=True, + ): + + scene = bpy.context.scene + + faces = [] + for obj in bpy.context.selected_objects: + if applyMods or obj.type != 'MESH': + try: + me = obj.to_mesh(scene, True, "PREVIEW") + except: + me = None + is_tmp_mesh = True + else: + me = obj.data + is_tmp_mesh = False + + if me is not None: + matrix = obj.matrix_world.copy() + for face in me.faces: + fv = faceValues(face, me, matrix) + if triangulate: + faces.extend(faceToTriangles(fv)) + else: + faces.append(fv) + + if is_tmp_mesh: + bpy.data.meshes.remove(me) + + # write the faces to a file + file = open(filepath, "w") + for face in faces: + file.write(faceToLine(face)) + file.close() |