1 from __future__ import absolute_import
10 from util import util3d
13 def __init__(self, v0, v1, v2):
21 def load(self, filename):
22 f = open(filename, "rb")
23 if f.read(6).lower() == "solid ":
25 if len(self.faces) < 1:
26 f.seek(6, os.SEEK_SET)
32 self._createOrigonalVertexCopy()
34 def _loadAscii(self, f):
40 v0 = util3d.Vector3(float(data[1]), float(data[2]), float(data[3]))
43 v1 = util3d.Vector3(float(data[1]), float(data[2]), float(data[3]))
46 v2 = util3d.Vector3(float(data[1]), float(data[2]), float(data[3]))
47 self.faces.append(stlFace(v0, v1, v2))
48 self.vertexes.append(v0)
49 self.vertexes.append(v1)
50 self.vertexes.append(v2)
53 def _loadBinary(self, f):
56 faceCount = struct.unpack('<I', f.read(4))[0]
57 for idx in xrange(0, faceCount):
58 data = struct.unpack("<ffffffffffffH", f.read(50))
59 v0 = util3d.Vector3(data[3], data[4], data[5])
60 v1 = util3d.Vector3(data[6], data[7], data[8])
61 v2 = util3d.Vector3(data[9], data[10], data[11])
62 self.faces.append(stlFace(v0, v1, v2))
63 self.vertexes.append(v0)
64 self.vertexes.append(v1)
65 self.vertexes.append(v2)
67 def _createOrigonalVertexCopy(self):
68 self.origonalVertexes = list(self.vertexes)
69 for i in xrange(0, len(self.origonalVertexes)):
70 self.origonalVertexes[i] = self.origonalVertexes[i].copy()
73 def getMinimumZ(self):
74 minv = self.vertexes[0].copy()
75 maxv = self.vertexes[0].copy()
76 for v in self.vertexes:
77 minv.x = min(minv.x, v.x)
78 minv.y = min(minv.y, v.y)
79 minv.z = min(minv.z, v.z)
80 maxv.x = max(maxv.x, v.x)
81 maxv.y = max(maxv.y, v.y)
82 maxv.z = max(maxv.z, v.z)
85 self.size = maxv - minv
95 if __name__ == '__main__':
96 for filename in sys.argv[1:]:
97 stlModel().load(filename)