| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- 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)
|