fix BGE bug #8668: Behavior of os.getcwd() is not consistent between operating systems
[blender-staging.git] / release / scripts / slp_import.py
1 #!BPY
2
3 """
4 Name: 'Pro Engineer (.slp)...'
5 Blender: 232
6 Group: 'Import'
7 Tooltip: 'Import Pro Engineer (.slp) File Format'
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 imports Pro Engineer files to Blender.
17
18 This format can be exported from Pro/Engineer and most other CAD
19 applications. Written at the request of a Blender user. It is almost
20 identical to RAW format.
21
22 Usage:<br>
23         Execute this script from the "File->Import" menu and choose an SLP file to
24 open.
25
26 Notes:<br>
27         Generates the standard verts and faces lists, but without duplicate
28 verts. Only *exact* duplicates are removed, there is no way to specify a
29 tolerance.
30 """
31
32 # $Id$
33 #
34 # +---------------------------------------------------------+
35 # | Copyright (c) 2004 Anthony D'Agostino                   |
36 # | http://www.redrival.com/scorpius                        |
37 # | scorpius@netzero.com                                    |
38 # | May 3, 2004                                             |
39 # | Read and write SLP Triangle File Format (*.slp)         |
40 # +---------------------------------------------------------+
41
42 # ***** BEGIN GPL LICENSE BLOCK *****
43 #
44 # This program is free software; you can redistribute it and/or
45 # modify it under the terms of the GNU General Public License
46 # as published by the Free Software Foundation; either version 2
47 # of the License, or (at your option) any later version.
48 #
49 # This program is distributed in the hope that it will be useful,
50 # but WITHOUT ANY WARRANTY; without even the implied warranty of
51 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
52 # GNU General Public License for more details.
53 #
54 # You should have received a copy of the GNU General Public License
55 # along with this program; if not, write to the Free Software Foundation,
56 # Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
57 #
58 # ***** END GPL LICENCE BLOCK *****
59
60 import Blender, meshtools
61 #import time
62
63 # ================================
64 # === Read SLP Triangle Format ===
65 # ================================
66 def read(filename):
67         #start = time.clock()
68         file = open(filename, "rb")
69
70         raw = []
71         for line in file: #.xreadlines():
72                 data = line.split()
73                 if data[0] == "vertex":
74                         vert = map(float, data[1:])
75                         raw.append(vert)
76         
77         tri = []
78         for i in xrange(0, len(raw), 3):
79                 tri.append(raw[i] + raw[i+1] + raw[i+2])
80
81         #$import pprint; pprint.pprint(tri)
82
83         # Collect data from RAW format
84         faces = []
85         for line in tri:
86                 f1, f2, f3, f4, f5, f6, f7, f8, f9 = line
87                 faces.append([(f1, f2, f3), (f4, f5, f6), (f7, f8, f9)])
88
89         # Generate verts and faces lists, without duplicates
90         verts = []
91         coords = {}
92         index = 0
93         for i in xrange(len(faces)):
94                 for j in xrange(len(faces[i])):
95                         vertex = faces[i][j]
96                         if not coords.has_key(vertex):
97                                 coords[vertex] = index
98                                 index += 1
99                                 verts.append(vertex)
100                         faces[i][j] = coords[vertex]
101
102         objname = Blender.sys.splitext(Blender.sys.basename(filename))[0]
103
104         meshtools.create_mesh(verts, faces, objname)
105         Blender.Window.DrawProgressBar(1.0, '')  # clear progressbar
106         file.close()
107         #end = time.clock()
108         #seconds = " in %.2f %s" % (end-start, "seconds")
109         message = "Successfully imported " + Blender.sys.basename(filename)# + seconds
110         meshtools.print_boxed(message)
111
112 def fs_callback(filename):
113         read(filename)
114
115 if __name__ == '__main__':
116         Blender.Window.FileSelector(fs_callback, "Import SLP", "*.slp")