AutoCAD : Exporter des pièces en DXF avec nom de fichier basé sur un texte (LISP)

Comment automatiser l’exportation de pièces individuelles d’un dessin AutoCAD en fichiers DXF, en utilisant un texte existant dans le dessin pour nommer chaque fichier, et gérer l’écrasement des fichiers existants, afin d’optimiser la préparation pour des logiciels de nesting CNC ?

Pour optimiser la préparation de pièces destinées à la découpe CNC via un logiciel de nesting, l’exportation manuelle de chaque pièce en fichier DXF distinct est une tâche répétitive et chronophage. Les méthodes classiques comme _SAVEAS avec sélection manuelle ou _WBLOC ne permettent pas une automatisation complète, notamment pour le nommage des fichiers à partir d’un texte existant dans le dessin.

La solution la plus efficace consiste à utiliser une routine LISP personnalisée qui automatise la commande _SAVEAS en extrayant le nom du fichier d’un objet texte sélectionné et en exportant les objets choisis au format DXF.

Code LISP de la solution

Voici le script LISP proposé par Zebulon, intégrant une fonction de boîte de dialogue pour la gestion des fichiers existants :

(defun MsgBox (Titre Bouttons Message / Reponse WshShell)
; Valeur de Bouttons
; 0 = vbOKOnly Affiche le bouton OK uniquement.
; 1 = vbOKCancel Affiche les boutons OK et Annuler.
; 2 = vbAbortRetryIgnore Affiche le bouton Abandonner, Réessayer et Ignorer.
; 3 = vbYesNoCancel Affiche les boutons Oui, Non et Annuler.
; 4 = vbYesNo Affiche les boutons Oui et Non.
; 5 = vbRetryCancel Affiche les boutons Réessayer et Annuler.
; 16 = vbCritical Affiche l'icône Message critique.
; 32 = vbQuestion Affiche l'icône Requête d'avertissement.
; 48 = vbExclamation Affiche l'icône Message d'avertissement.
; 64 = vbInformation Affiche l'icône Message d'information.
; 0 = vbDefaultButton1 Le premier bouton est le bouton par défaut.
; 256 = vbDefaultButton2 Le deuxième bouton est le bouton par défaut.
; 512 = vbDefaultButton3 Le troisième bouton est le bouton par défaut.
; 768 = vbDefaultButton4 Le quatrième bouton est le bouton par défaut.
; 0 = vbApplicationModal Boîte de dialogue modale. L'utilisateur doit répondre au message affiché dans la zone de message avant de pouvoir continuer de travailler dans l'application en cours.
; 4096 = vbSystemModal Modal système. Toutes les applications sont interrompues jusqu'à ce que l'utilisateur réponde au message affiché dans la zone de message.

; Valeur renvoyée
; 1 = vbOK OK
; 2 = vbCancel Annuler
; 3 = vbAbort Abandonner
; 4 = vbRetry Réessayer
; 5 = vbIgnore Ignorer
; 6 = vbYes Oui
; 7 = vbNo Non

(setq WshShell (vlax-create-object "WScript.Shell"))
(setq Reponse (vlax-invoke WshShell 'Popup Message 0 Titre (itoa Bouttons)))
(vlax-release-object WshShell)
Reponse
)

(defun c:savedxf (/ txt)
 (vl-load-com)
 (setq txt (car (entsel "\nSélectionner le titre : ")))
 (setq txt (cdr (assoc 1 (entget txt))))
 (setq txt (substr txt 1 (vl-string-position 92 txt)))
 (setq txt (strcat (getvar "DWGPREFIX") txt ".dxf"))

 (if (findfile txt)
 (if (= (msgbox "Fichier existant" (+ 4 48 256) (strcat "Ecraser " txt " ?")) 6) ;; 4 affiche boutons oui non + 48 icone message d'avertissement + 256 non par défaut
 (command "_SaveAs" "_DXF" "_v" "2013" "_o" (ssget) "" "" txt "_y") ;; si oui j'écrase, sinon rien
 )
 (command "_SaveAs" "_DXF" "_v" "2013" "_o" (ssget) "" "" txt) ;; le fichier n'existe pas, je le crée
 )
 (princ)
)

Procédure d’utilisation du LISP

  1. Chargement du LISP :
    • Enregistrez le code ci-dessus dans un fichier texte avec l’extension .lsp (par exemple, savedxf.lsp).
    • Dans AutoCAD, utilisez la commande APPLOAD (ou _APPLOAD) pour charger ce fichier. Il est recommandé de l’ajouter au « Contenu du jeu » pour un chargement automatique à chaque démarrage d’AutoCAD.
  2. Exécution de la commande :
    • Tapez SAVEDXF (la commande est c:savedxf, donc SAVEDXF suffit) dans la ligne de commande et appuyez sur Entrée.
  3. Interaction avec l’utilisateur :
    • Le programme vous demandera de "Sélectionner le titre : ". Cliquez sur l’objet texte (TEXTE ou MTEXT) qui contient le nom de la pièce à exporter.
    • Ensuite, il vous sera demandé de "Sélectionner les objets : ". Sélectionnez tous les éléments graphiques constituant la pièce à exporter (lignes, arcs, polylignes, etc.) et validez la sélection (Entrée).
    • Si un fichier DXF portant le même nom existe déjà dans le répertoire, une boîte de dialogue vous demandera si vous souhaitez l’écraser. Choisissez « Oui » pour écraser ou « Non » pour annuler l’opération pour cette pièce.
  4. Résultat :
    • Un nouveau fichier DXF au format AutoCAD 2013 est créé dans le même répertoire que le dessin courant. Le nom du fichier est directement tiré du texte que vous avez sélectionné.

Détails techniques et bonnes pratiques

  • Extraction du nom de fichier :
    • Le LISP utilise la fonction (vl-string-position 92 txt) pour trouver la position du caractère \ (anti-slash, code ASCII 92) dans le texte sélectionné. Le nom du fichier est alors extrait de la première partie du texte, avant ce caractère. Par exemple, si le texte est « PIECE_A\Description », le nom sera « PIECE_A ».
    • Important : Cette méthode implique que le texte utilisé pour le nom de fichier doit contenir un caractère \ si vous souhaitez tronquer le nom. Si le texte est sur une seule ligne et ne contient pas de \, le script, tel quel, pourrait générer une erreur. Pour les textes simples sur une seule ligne sans \, une modification du LISP serait nécessaire pour extraire l’intégralité du contenu du texte.
  • Chemin d’enregistrement : Le fichier DXF est enregistré dans le répertoire du dessin courant, grâce à la variable système (getvar "DWGPREFIX"), évitant ainsi de devoir naviguer manuellement à chaque enregistrement.
  • Format DXF : Le script force l’enregistrement au format DXF 2013 (_v "2013"), ce qui assure une bonne compatibilité avec la plupart des logiciels de nesting CNC.
  • Gestion des fichiers existants : La fonction MsgBox permet une interaction utilisateur claire pour éviter l’écrasement accidentel de fichiers.
  • Exploration des commandes : Pour mieux comprendre les options des commandes AutoCAD en ligne de commande, vous pouvez temporairement définir la variable système FILEDIA à 0 avant d’exécuter une commande comme _SAVEAS. N’oubliez pas de la remettre à 1 ensuite.