Projet fly caisse

Le virus commence à faire effet,je suis content​:joy::rofl::rofl:

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 :

    1. 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 :
  1. 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.
  2. 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 canvas matplotlib.
  3. 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.
  4. 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.
  5. 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éthode flatten() attend un argument de type str, 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 :grinning:

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 :roll_eyes:

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