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)