Aller au contenu

Aide création lisp pour enregistrer des calques prédéfinis


Messages recommandés

Posté(e)

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 😉

Posté(e)

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 ?

  • 2 semaines après...
Posté(e)

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 !!

Posté(e)

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 ?

Posté(e)

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 ?

 

Posté(e)

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.

Posté(e)

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 ? 

Posté(e)

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.

 

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité