Integrated Freestyle to rendering pipeline
[blender.git] / release / scripts / off_export.py
1 #!BPY
2
3 """
4 Name: 'DEC Object File Format (.off)...'
5 Blender: 232
6 Group: 'Export'
7 Tooltip: 'Export selected mesh to DEC Object File Format (*.off)'
8 """
9
10 __author__ = "Anthony D'Agostino (Scorpius)"
11 __url__ = ("blender", "blenderartists.org",
12 "Author's homepage, http://www.redrival.com/scorpius")
13 __version__ = "Part of IOSuite 0.5"
14
15 __bpydoc__ = """\
16 This script exports meshes to DEC Object File Format.
17
18 The DEC (Digital Equipment Corporation) OFF format is very old and
19 almost identical to Wavefront's OBJ. I wrote this so I could get my huge
20 meshes into Moonlight Atelier. (DXF can also be used but the file size
21 is five times larger than OFF!) Blender/Moonlight users might find this
22 script to be very useful.
23
24 Usage:<br>
25         Select meshes to be exported and run this script from "File->Export" menu.
26
27 Notes:<br>
28         Only exports a single selected mesh.
29 """
30
31 # $Id:
32 #
33 # +---------------------------------------------------------+
34 # | Copyright (c) 2002 Anthony D'Agostino                   |
35 # | http://www.redrival.com/scorpius                        |
36 # | scorpius@netzero.com                                    |
37 # | February 3, 2001                                        |
38 # | Read and write Object File Format (*.off)               |
39 # +---------------------------------------------------------+
40
41 # ***** BEGIN GPL LICENSE BLOCK *****
42 #
43 # This program is free software; you can redistribute it and/or
44 # modify it under the terms of the GNU General Public License
45 # as published by the Free Software Foundation; either version 2
46 # of the License, or (at your option) any later version.
47 #
48 # This program is distributed in the hope that it will be useful,
49 # but WITHOUT ANY WARRANTY; without even the implied warranty of
50 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
51 # GNU General Public License for more details.
52 #
53 # You should have received a copy of the GNU General Public License
54 # along with this program; if not, write to the Free Software Foundation,
55 # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
56 #
57 # ***** END GPL LICENCE BLOCK *****
58
59 import Blender
60 import BPyMessages
61
62 # Python 2.3 has no reversed.
63 try:
64         reversed
65 except:
66         def reversed(l): return l[::-1]
67
68 # ==============================
69 # ====== Write OFF Format ======
70 # ==============================
71 def write(filename):
72         file = open(filename, 'wb')
73         scn= Blender.Scene.GetCurrent()
74         object= scn.objects.active
75         if not object or object.type != 'Mesh':
76                 BPyMessages.Error_NoMeshActive()
77                 return
78         
79         Blender.Window.WaitCursor(1)
80         mesh = object.getData(mesh=1)
81
82         # === OFF Header ===
83         file.write('OFF\n')
84         file.write('%d %d %d\n' % (len(mesh.verts), len(mesh.faces), 0))
85
86         # === Vertex List ===
87         for i, v in enumerate(mesh.verts):
88                 file.write('%.6f %.6f %.6f\n' % tuple(v.co))
89
90         # === Face List ===
91         for i, f in enumerate(mesh.faces):
92                 file.write('%i' % len(f))
93                 for v in reversed(f.v):
94                         file.write(' %d' % v.index)
95                 file.write('\n')
96         
97         file.close()
98         Blender.Window.WaitCursor(0)
99         message = 'Successfully exported "%s"' % Blender.sys.basename(filename)
100         
101
102 def fs_callback(filename):
103         if not filename.lower().endswith('.off'): filename += '.off'
104         write(filename)
105
106 Blender.Window.FileSelector(fs_callback, "Export OFF", Blender.sys.makename(ext='.off'))