from def3D import point, vertex
class STLImport():
def __init__(self, filename):
self.listeVertex = []
self.listePoint = []
self.load(filename)
def GetVertex(self):
return self.listeVertex
def load(self, filename):
f = open(filename, 'rb')
header = f.read(6)
isASCII = ( header== 'solid ')
if isASCII:
name = f.readline()
print "Nom du Solide : %s " % name
self.parseASCII(f)
else:
print "Non ASCII file : aborting"
return -1
def parseASCII(self,f ):
for line in f:
line = line.lower().strip()
commande = line.split(" ")
Nb_Param = len(commande)
try:
{'facet' : self.facet,
'outer' : self.outer,
'vertex' : self.vertex,
'endloop' : self.endloop,
'endfacet': self.endfacet}[commande[0]](commande,Nb_Param)
except KeyError:
# Commande inconnue ou erreur
pass
def facet(self,commande,Nb_Param):
pass
#on ignore les normales.
def outer(self,commande,Nb_Param):
if commande[1]=="loop":
#On vide la liste de vecteurs
self.listePoint = []
def vertex(self,commande,Nb_Param):
if (Nb_Param==4):
x,y,z = float(commande[1]),float(commande[2]),float(commande[3])
self.listePoint.append(point(x,y,z))
def endloop(self,commande,Nb_Param):
if len(self.listePoint)==3:
a,b,c = self.listePoint
triangle = vertex(a,b,c)
self.listeVertex.append(triangle)
def endfacet(self,commande,Nb_Param):
pass
#fin de la face
#Small exemple :
#stl = STLImport("data/test.stl")
#for vertex in stl.GetVertex():
# print vertex.vecteurs