1 from __future__ import absolute_import
8 from Cura.util import mesh
13 for line in lines.split('\r'):
16 m._prepareFaceCount(int(cnt) / 3)
17 f.seek(5, os.SEEK_SET)
19 data = [None,None,None]
21 for line in lines.split('\r'):
23 data[cnt] = line.split()[1:]
26 m._addFace(float(data[0][0]), float(data[0][1]), float(data[0][2]), float(data[1][0]), float(data[1][1]), float(data[1][2]), float(data[2][0]), float(data[2][1]), float(data[2][2]))
29 def _loadBinary(m, f):
32 faceCount = struct.unpack('<I', f.read(4))[0]
33 m._prepareFaceCount(faceCount)
34 for idx in xrange(0, faceCount):
35 data = struct.unpack("<ffffffffffffH", f.read(50))
36 m._addFace(data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11])
38 def loadScene(filename):
39 obj = mesh.printableObject()
42 f = open(filename, "rb")
43 if f.read(5).lower() == "solid":
46 f.seek(5, os.SEEK_SET)
51 obj._postProcessAfterLoad()
54 def saveAsSTL(mesh, filename):
55 f = open(filename, 'wb')
56 #Write the STL binary header. This can contain any info, except for "SOLID" at the start.
57 f.write(("CURA BINARY STL EXPORT. " + time.strftime('%a %d %b %Y %H:%M:%S')).ljust(80, '\000'))
58 #Next follow 4 binary bytes containing the amount of faces, and then the face information.
59 f.write(struct.pack("<I", int(mesh.vertexCount / 3)))
60 for idx in xrange(0, mesh.vertexCount, 3):
61 v1 = mesh.vertexes[idx]
62 v2 = mesh.vertexes[idx+1]
63 v3 = mesh.vertexes[idx+2]
64 f.write(struct.pack("<fff", 0.0, 0.0, 0.0))
65 f.write(struct.pack("<fff", v1[0], v1[1], v1[2]))
66 f.write(struct.pack("<fff", v2[0], v2[1], v2[2]))
67 f.write(struct.pack("<fff", v3[0], v3[1], v3[2]))
68 f.write(struct.pack("<H", 0))
71 if __name__ == '__main__':
72 for filename in sys.argv[1:]:
73 m = stlModel().load(filename)
74 print("Loaded %d faces" % (m.vertexCount / 3))
75 parts = m.splitToParts()
77 saveAsSTL(p, "export_%i.stl" % parts.index(p))