b70a935b4a94fe6dafb0317d946eb7835a19b46a
[blender.git] / release / scripts / off_import.py
1 #!BPY
2
3 """
4 Name: 'Object File Format (.off)...'
5 Blender: 232
6 Group: 'Import'
7 Tooltip: 'Import Object File Format (*.off)'
8 """
9
10 __author__ = "Anthony D'Agostino (Scorpius)"
11 __url__ = ("blender", "elysiun",
12 "Author's homepage, http://www.redrival.com/scorpius")
13 __version__ = "Part of IOSuite 0.5"
14
15 __bpydoc__ = """\
16 This script imports Object File Format files to Blender.
17
18 Usage:
19
20 Execute this script from the "File->Import" menu and choose an OFF file to
21 open.
22 """
23
24
25 # +---------------------------------------------------------+
26 # | Copyright (c) 2002 Anthony D'Agostino                   |
27 # | http://www.redrival.com/scorpius                        |
28 # | scorpius@netzero.com                                    |
29 # | February 3, 2001                                        |
30 # | Released under the Blender Artistic Licence (BAL)       |
31 # | Import Export Suite v0.5                                |
32 # +---------------------------------------------------------+
33 # | Read and write Object File Format (*.off)               |
34 # +---------------------------------------------------------+
35
36 import Blender, mod_meshtools
37 #import time
38
39 # =============================
40 # ====== Read OFF Format ======
41 # =============================
42 def read(filename):
43         #start = time.clock()
44         file = open(filename, "rb")
45
46         verts = []
47         faces = []
48
49         # === OFF Header ===
50         offheader = file.readline()
51         numverts, numfaces, null = file.readline().split()
52         numverts = int(numverts)
53         numfaces = int(numfaces)
54
55         # === Vertex List ===
56         for i in range(numverts):
57                 if not i%100 and mod_meshtools.show_progress:
58                         Blender.Window.DrawProgressBar(float(i)/numverts, "Reading Verts")
59                 x, y, z = file.readline().split()
60                 x, y, z = float(x), float(y), float(z)
61                 verts.append((x, y, z))
62
63         # === Face List ===
64         for i in range(numfaces):
65                 if not i%100 and mod_meshtools.show_progress:
66                         Blender.Window.DrawProgressBar(float(i)/numfaces, "Reading Faces")
67                 line = file.readline().split()
68                 numfaceverts = len(line)-1
69                 facev = []
70                 for j in range(numfaceverts):
71                         index = int(line[j+1])
72                         facev.append(index)
73                 facev.reverse()
74                 faces.append(facev)
75
76         objname = Blender.sys.splitext(Blender.sys.basename(filename))[0]
77
78         mod_meshtools.create_mesh(verts, faces, objname)
79         Blender.Window.DrawProgressBar(1.0, '')  # clear progressbar
80         file.close()
81         #end = time.clock()
82         #seconds = " in %.2f %s" % (end-start, "seconds")
83         message = "Successfully imported " + Blender.sys.basename(filename)# + seconds
84         mod_meshtools.print_boxed(message)
85
86 def fs_callback(filename):
87         read(filename)
88
89 Blender.Window.FileSelector(fs_callback, "Import OFF")