Le virus commence à faire effet,je suis content:joy:
Ayant la flemme de cherche et tester des logiciels pour les grosse mousse qui seront un assemblage de mousse les une sur les autres .
j’ai fait écrire à chatgpt un programme en python qui me tranche une stl pour généré des dxf a envoyer à la laser.
c’es archaïque mais ça fait le job dont j’ai besoin
import tkinter as tk
from tkinter import filedialog
from stl import mesh
import numpy as np
import ezdxf
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import matplotlib.pyplot as plt
import os
class STLtoDXFApp:
def __init__(self, root):
self.root = root
self.root.title("STL to DXF Converter")
self.filepath = None
self.layer_height = 0.2
self.create_widgets()
def create_widgets(self):
self.menu = tk.Menu(self.root)
self.root.config(menu=self.menu)
file_menu = tk.Menu(self.menu)
self.menu.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="Open", command=self.load_stl_file)
file_menu.add_command(label="Save As", command=self.save_as_dxf)
self.layer_height_label = tk.Label(self.root, text="Layer Height:")
self.layer_height_label.pack(pady=5)
self.layer_height_entry = tk.Entry(self.root)
self.layer_height_entry.insert(0, str(self.layer_height))
self.layer_height_entry.pack(pady=5)
self.canvas_frame = tk.Frame(self.root)
self.canvas_frame.pack(pady=10, fill=tk.BOTH, expand=True)
self.generate_button = tk.Button(self.root, text="Generate DXF", command=self.save_as_dxf, state=tk.DISABLED)
self.generate_button.pack(pady=5)
def load_stl_file(self):
self.filepath = filedialog.askopenfilename(filetypes=[("STL Files", "*.stl")])
if self.filepath:
self.visualize_stl()
self.generate_button.config(state=tk.NORMAL) # Activer le bouton Generate DXF
def visualize_stl(self):
for widget in self.canvas_frame.winfo_children():
widget.destroy()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
self.model = mesh.Mesh.from_file(self.filepath)
ax.add_collection3d(Poly3DCollection(self.model.vectors, alpha=0.5, edgecolors='r'))
scale = self.model.points.flatten(order='C')
ax.auto_scale_xyz(scale, scale, scale)
canvas = FigureCanvasTkAgg(fig, master=self.canvas_frame)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
def save_as_dxf(self):
save_path = filedialog.askdirectory()
if save_path:
self.generate_button.config(state=tk.DISABLED) # Désactiver le bouton pendant la génération
self.layer_height = float(self.layer_height_entry.get())
filename = os.path.splitext(os.path.basename(self.filepath))[0]
self.slice_stl_to_dxf(save_path, filename)
self.generate_button.config(state=tk.NORMAL) # Réactiver le bouton après la génération
def create_dxf_layer(self, layer_contours, layer_index, save_path, filename):
doc = ezdxf.new(dxfversion='R2010')
msp = doc.modelspace()
for contour in layer_contours:
points = [(point[0], point[1]) for point in contour]
if len(points) > 1:
points.append(points[0]) # Close the contour
msp.add_lwpolyline(points)
doc.saveas(f'{save_path}/{filename}_layer_{layer_index + 1:03d}.dxf') # Ajouter +1 à l'index pour commencer à 001
def slice_stl_to_dxf(self, save_path, filename):
z_min, z_max = self.model.z.min(), self.model.z.max()
current_z = z_min
layer_index = 0
while current_z < z_max:
contours = []
for triangle in self.model.vectors:
vertices = triangle.reshape((3, 3))
z_values = vertices[:, 2]
if (z_values.min() <= current_z) and (z_values.max() >= current_z):
intersection_points = []
for i in range(3):
p1 = vertices[i]
p2 = vertices[(i + 1) % 3]
if p1[2] == p2[2] == current_z:
intersection_points.extend([p1, p2])
elif (p1[2] <= current_z <= p2[2]) or (p1[2] >= current_z >= p2[2]):
t = (current_z - p1[2]) / (p2[2] - p1[2])
intersection_point = p1 + t * (p2 - p1)
intersection_points.append(intersection_point)
if len(intersection_points) >= 2:
contours.append(intersection_points)
self.create_dxf_layer(contours, layer_index, save_path, filename)
current_z += self.layer_height
layer_index += 1
if __name__ == "__main__":
root = tk.Tk()
app = STLtoDXFApp(root)
root.mainloop()
Il faut intaller des dépendances : pip install numpy matplotlib ezdxf numpy-stl
Tu fais ça comment ?
Tu peux expliquer comment tu formules ta demande, la définition des fichiers, les formats, où sont trouvés les fichiers nécessaires au traitement ?
Je suis plutôt bluffé !
Au fait … ça marche ?
voici ce que j’ai demander :
moi:
- je recherche un trancheur de stl qui me génère des dxf pour chaque couche
chat gpt me donne plusieur réponse dont :
-
- Scripts personnalisés
Pour les utilisateurs avancés, il est possible de créer des scripts personnalisés en Python ou dans d’autres langages de programmation pour automatiser le processus de tranchage et d’exportation en DXF. Cela nécessitera des connaissances en programmation et en manipulation de fichiers 3D.
moi:
- peux tu me réaliser la solution 5 ?
chatgpt m’a sorti un premier code super chiant à utiliser
moi:
- peux tu ajouter une interface graphique qui vas me proposer un champs pour la hauteur de chaque touche, un menu fichier avec ouvrir pour sélectionner le stl et enregistrer sous pour le DXF. ajoute aussi la visualisation du stl et la visualisation de chaque couches
il m’a sortit un code mais à oublier ma demande de visualisation du stl
je lui demande donc :
- ok est il possible de visualiser le stl ?
Chatgpt me sort un code avec des explications
*le code est buguer *
moi :
- le programme n’affiche rien quand je charge un stl
chatgpt: :
- Si le programme ne semble pas afficher le modèle STL lorsque vous le chargez, il peut y avoir quelques raisons possibles pour cela. Voici quelques points à vérifier :
- Erreur dans le chargement du fichier STL : Assurez-vous que le chemin du fichier STL est correct et que le fichier est valide. Vérifiez également que le fichier STL contient des données de modèle valides.
- Erreur dans la visualisation du modèle STL : Assurez-vous que la bibliothèque
matplotlib
est correctement installée et fonctionnelle. Il est possible que des erreurs se produisent lors de la visualisation du modèle STL dans le canvasmatplotlib
. - Console pour les erreurs : Vérifiez la console ou le terminal où vous avez lancé le script Python. Il est possible que des erreurs ou des avertissements s’affichent, ce qui peut fournir des informations sur ce qui ne fonctionne pas correctement.
- Nettoyage du canvas : Assurez-vous que le canvas est correctement nettoyé avant de dessiner le nouveau modèle STL. Le code actuel semble supposer qu’il n’y a qu’un seul widget dans
canvas_frame
, mais si d’autres widgets sont ajoutés, cela pourrait entraîner des problèmes d’affichage. - Compatibilité avec le système d’exploitation : Parfois, il peut y avoir des problèmes d’affichage liés à la gestion des fenêtres graphiques entre différents systèmes d’exploitation. Assurez-vous que le code est compatible avec le système d’exploitation que vous utilisez.
Si vous ne trouvez toujours pas la cause du problème, n’hésitez pas à partager le code ou les messages d’erreur que vous voyez dans la console, et je serai heureux de vous aider à résoudre le problème.
moi:
- j’ai ces erreurs : File « C:\Program Files\Python311\Lib\tkinter_init_.py », line 1948, in call
return self.func(*args)
^^^^^^^^^^^^^^^^
File « Z:\Atelier de malauzat\projets\Flycaisse\mousses\logiciels\3DSlice2DXF\V0.1\3DSlice2DXF.py », line 43, in load_stl_file
self.visualize_stl()
File « Z:\Atelier de malauzat\projets\Flycaisse\mousses\logiciels\3DSlice2DXF\V0.1\3DSlice2DXF.py », line 57, in visualize_stl
scale = self.model.points.flatten(-1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: order must be str, not int
chatgpt:
- Il semble que le problème soit lié à l’utilisation de la méthode
flatten()
avec un argument incorrect. Dans la version de NumPy utilisée (probablement NumPy 1.21), la méthodeflatten()
attend un argument de typestr
, indiquant l’ordre dans lequel les éléments doivent être aplatis.
Pour résoudre ce problème, nous devons spécifier l’argument order
comme une chaîne. Habituellement, C
ou F
est utilisé pour indiquer l’ordre de l’aplatissement. C
signifie « row-major » (C-style), et F
signifie « column-major » (Fortran-style).
Voici comment modifier la ligne concernée dans la méthode visualize_stl()
pour résoudre cette erreur
je remplace la ligne
après 2 ou 3 erreurs traiter comme ça, plus d’erreurs.
je lui demande de rajouter un bouton générate
Quelque bugs que je lui demande de corriger avec la même méthode description et messages de la console
ça marche
je lui demande :
- peux tu rajouter au début du nom des fichiers le nom du fichier stl sans l’extension
@Manon je pense qu’il est possible de faire tous ça en 1 fois ?
OUI
par contre je ne sais pas si ça ne siphonne pas tous mon pc pour le KGB, la NSA , ou les petit hommes verts et j’ai peut être vendu mon âme au diable ou a open-AI au passage
Si c’est gratuit … vous connaissez la suite
C’est rare que j’obtienne un code qui marche du premier coup avec chatGPT et même avec copilot, sauf quand c’est du code ultra-classique et assez court.
Sinon il faut lui demander très précisément quoi faire, et donc en fait savoir faire le code.
Tu as définitivement vendu ton âme à OpenAI et peut être même que tu va bientôt commencer à compter en hexadécimal en commençant par zéro.
A une époque, il y avait un programme SlicerForFusion qui faisait ça très bien, facile à utiliser et tout, mais il a été retiré du site autodesk. Je vois en ligne qu’il y aurait un slicer intégré dans Fiusion360.
Je regarderai éventuellement merci
Je note pour le paramètres cambam que j’utilise
Pour Contre-plaqué Filmé de 9mm
numéro outil 116
vitesse rotation 12000
vitesse d’avance 600
Vitesse de décente 300
incrément de passe: 2
plan de dégagement: 10
Profondeur finale : -10
TOP, bravo
Tu devrais quand même penser à les commercialiser
Ou faire des trucs comme ça : https://www.sancyvan.fr/realisations
Je viens de calculer j ai 300 vis par fly d imprimante 3d
Si tu utilises un tourne vis manuel ==) j ai un bon produit pour les tendinites.