from stl import mesh
import numpy as np

def lire_et_extraire_infos(nom_fichier):
	entiers = []
	tableau_float = []
	try:
		with open(nom_fichier, 'r') as fichier:
			lignes = fichier.readlines()
			
			for i in range(3):
				entiers.append(int(lignes[i].strip()))  # Convertit en entier et supprime les espaces en début et fin de ligne
			
			quatrieme_ligne = lignes[3].strip('[]\n').split(',')
			tableau_float = [float(x) for x in quatrieme_ligne]

		return entiers, tableau_float
	except FileNotFoundError:
		print(f"Le fichier '{nom_fichier}' n'a pas été trouvé.")
		return None, None


def transformeSTL(nom):
	nomDonne = nom+".rcl"
	donne = lire_et_extraire_infos(nomDonne)

	deplacement_metres=donne[0][0]
	lenX=donne[0][1]
	lenY=donne[0][2]
	test=donne[1]

	facteur = deplacement_metres

	test = [nombre / facteur for nombre in test]
	mini=min(test)-1
	test = [nombre - mini for nombre in test]

	vertices = np.zeros((lenX*lenY * 2,3) , dtype=float)
	y=0
	for i in range (0,lenX):
		for j in range (0,lenY):
			vertices[y]= [i,j,0]
			vertices[y+1]= [i,j,test[i*lenY+j]]
			y=y+2



	nb=(lenX*2-2)
	faces1 = np.zeros((nb, 3), dtype=int)
	y=0
	for i in range(0,lenX*2-2,2):
		faces1[y] = [i,i+1 ,i+2]
		faces1[y+1] = [i+1 ,i+3,i+2]
		y=y+2



	nb=lenY*2-2
	faces2 = np.zeros((nb, 3), dtype=int)
	y=0
	for i in range(0,lenX*2*lenY-lenY*2 ,lenX*2):
		faces2[y] 	= [i,i+1,i+lenX*2]
		faces2[y+1] = [i+1,i+lenX*2+1,i+lenX*2]
		y=y+2

	nb=(lenX*2-2)
	Start3 = (lenX*2*lenY)-lenX*2
	faces3 = np.zeros((nb, 3), dtype=int)
	y=0
	for i in range(Start3,lenX*2-2+Start3,2):
		faces3[y] = [i,i+1 ,i+2]
		faces3[y+1] = [i+1,i+3 ,i+2]
		y=y+2

	nb = lenY*2-2
	Start4 = lenX*2-2
	faces4 = np.zeros((nb, 3), dtype=int)
	y=0
	for i in range(Start4,lenX*2*lenY-lenY*2 +Start4,lenX*2):
		faces4[y] 	= [i,i+1,i+lenX*2]
		faces4[y+1] = [i+1,i+lenX*2+1,i+lenX*2]
		y=y+2

	nb = 2
	faces5 = np.zeros((nb,3), dtype=int)
	faces5[0] =[0,lenX*2-2,(lenX*2*lenY)-lenX*2]
	faces5[1] =[lenX*2-2,lenX*lenY*2-2,(lenX*2*lenY)-lenX*2]


	nb=lenX*lenY*2
	faces6 = np.zeros((nb,3), dtype=int)
	y=0
	for j in range(0,lenY-1):
		for i in range(lenX*2*j+1,lenX*2*j+lenX*2-1,2):
			faces6[y]=[i,i+2,lenX*2+i]
			faces6[y+1]=[i+2,lenX*2+i+2,lenX*2+i]
			y=y+2
			

	faces=np.concatenate((faces1, faces2,faces3,faces4,faces5,faces6), axis=0)

	# Créez le maillage STL
	cube = mesh.Mesh(np.zeros(faces.shape[0], dtype=mesh.Mesh.dtype))

	for i, f in enumerate(faces):
		for j in range(3):
			cube.vectors[i][j] = vertices[f[j], :]

	#Sauvegardez le cube au format STL
	nomSTL=nom+".stl"
	cube.save(nomSTL)

	#"""
