Despe Posté(e) le 7 mars 2023 Posté(e) le 7 mars 2023 Bonjour tout le monde, je souhaite crée un lisp pour enregistrer automatiquement des calques prédéfinis dans le dossier de dessin et qu'il ajoute un suffix a la fin du fichier. (defun c:save-selected-layers () (vl-load-com) (setq layers '("Calque1" "Calque2")) (setq filename (strcat (vl-filename-base (getvar 'dwgname)) "_Archive.dwg")) (if (not (null filename)) (progn (vla-clear (vla-get-activedocument (vlax-get-acad-object))) (vlax-for obj (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))) (setq layername (vla-get-name obj)) (if (member layername layers) (vla-put-layeron obj 1) (vla-put-layeron obj 0) ) ) (command "_.-PLOT" "_Yes" "_Model" "_No" "_Window" "_No" "_Fit" "_Yes" "_No" "_No" "_Yes" "_Yes" "_No") (command "_.SAVEAS" filename "") (alert (strcat "Layers saved to " filename) 64) ) (alert "No filename specified, layers not saved." 16) ) (princ) J'ai déjà fait ça mais il ne veux pas m'enregistrer le fichier Merci d'avance pour votre aide 😉
JPhil Posté(e) le 7 mars 2023 Posté(e) le 7 mars 2023 Quand tu tapes cette instruction dans la ligne de commande d'AutoCAD : (strcat (vl-filename-base (getvar 'dwgname)) "_Archive.dwg") Quel est le résultat ?
Despe Posté(e) le 15 mars 2023 Auteur Posté(e) le 15 mars 2023 Merci beaucoup pour ta réponse, je passe un peux par pas mal d'idée pour arriver a mes fins 😅 En faite se que je souhaite c'est que depuis un fichier de dessin fini, je lance ma commande et un nouveau fichier se crée avec seulement quelques calques déjà prédéfinis Aujourd'hui je suis parti sur cette idée (defun c:sarchive () ; Sauvegarder le dessin actuel (command "SAUVERAP") ; Activer l'affichage de la boîte de dialogue d'enregistrement (setq filedia 1) ; Enregistrer le fichier sous un nouveau nom avec "_Livraison" ajouté (setq filename (strcat (getvar "dwgprefix") (getvar "dwgname"))) (setq new-filename (strcat (substr filename 1 (- (strlen filename) 4)) "_Livraison.dwg")) (command "_saveas" "LT2018" new-filename) (princ (strcat "\nSaved the changes to the file '" new-filename "' in AutoCAD 2018 format.")) ; Supprimer les objets sur les calques spécifiés (setq layer-names '("DIVISION" "FONCIER_SOMMET")) (foreach layer layer-names (setq entlist (vl-remove-if-not '(lambda (x) (eq (vla-get-Layer x) layer)) (vlax-ename->vla-object (entget (entlast))))) (if entlist (progn (setq len (length entlist)) (repeat len (vla-Delete (nth (setq len (1- len)) entlist)) ) (princ (strcat "\nDeleted " (itoa len) " objects on layer " layer ".")) ) (princ (strcat "\nNo objects found on layer " layer ".")) ) ) ; Activer l'affichage de la boîte de dialogue d'enregistrement (setq filedia 1) ; Sauvegarder le dessin actuel (command "SAUVERAP") ) Donc ce lisp fonctionne mais j'aimerai plutôt essayer d'utiliser la commande "-supcalque" pour supprimer tout les calques du dessin sauf les calques en bleu (car c'était pour tester) et remplacer ca à la place de ma partie en rouge. Ou alors garder ma partie en rouge et a la place de désigner les objets des calques a supprimer, même principe que SUPCALQUE sélectionner tour les calques sauf la partie en bleue et ensuite purger. Je sais pas si c'est très claire 😅 Et désolé si l'écriture est pas très belle !!
JPhil Posté(e) le 15 mars 2023 Posté(e) le 15 mars 2023 Si je te demande le résultat, c'est qu'il y a une différence entre : (setq filename (strcat (vl-filename-base (getvar 'dwgname)) "_Archive.dwg")) et : (setq filename (strcat (getvar "dwgprefix") (getvar "dwgname"))) (setq new-filename (strcat (substr filename 1 (- (strlen filename) 4)) "_Archive.dwg")) Avant d'aller plus loin, vois-tu la différence ?
Despe Posté(e) le 15 mars 2023 Auteur Posté(e) le 15 mars 2023 Le premier va juste me chercher me le nom du fichier et ajouter _Archive.dwg Alors que l'autre va chercher le chemin et le nom du fichier pour y ajouter "Z:\\Documents\\test\\Dessin\\test_Archive.dwg" C'est bien ca ?
JPhil Posté(e) le 15 mars 2023 Posté(e) le 15 mars 2023 Oui! Donc si tu modifies ton premier lisp pour inclure le chemin, il se pourrait que la commande SAVEAS accepte de sauvegarder ton fichier. Pour le deuxième programme, souhaites-tu effacer des éléments appartenant à un ou des calques précis, ou souhaites-tu effacer des éléments appartenant à une ou des couleurs précis (couleur du calque, couleur de l'objet), ou souhaites-tu un mixte des deux ? Bref, si t'es clair dans ton explication, généralement le programme suit. Faits les étapes en mode manuel de ce que tu veux, note à côté la commande AutoCAD pour y parvenir et ça deviendra ton programme.
Despe Posté(e) le 15 mars 2023 Auteur Posté(e) le 15 mars 2023 Merci beaucoup pour ton retour ! En faite pour mon deuxième programme, j'aimerais avec effacer la totalité de mes calques avec -supcalque (car ils ont encore des objets) sauf par exemple les calques "DIVISON" et "FONCIER_SOMMET" Ne pas reprendre en compte ma partie en rouge c'était un test. Le problème que je rencontre c'est que je ne sais pas comment je peux annoncer dans ma commande la suppression de tout les calques via -supcalque sauf "DIVISION" et "FONCIER_SOMMET" Tu aurais une idée de comment je pourrais procéder ?
JPhil Posté(e) le 16 mars 2023 Posté(e) le 16 mars 2023 1) Tu listes l'ensemble des calques. 2) Par le biais d'une boucle tester chaque calque. a) Si le calque correspond à "DIVISION" ne rien faire. b) Si le calque ne correspond pas à "DIVISION" supprimer le calque avec son contenu. 3) PURGER puis enregistrer le dessin.
Despe Posté(e) le 16 mars 2023 Auteur Posté(e) le 16 mars 2023 Très bien merci beaucoup je vais essayer de faire ça 😉
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant