Aller au contenu

Messages recommandés

Posté(e)

Bonjour à la communauté...

 

Voilà, j'ai fais (seul avec mes petits doigt) une petite boucle LiSP pour supprimer des calques.

 

Mes dessins proviennent du Cadastre et il y a plein d'informations dans ces documents qui ne me servent à rien, j'efface dont le calque et son contenu...

 

J'ai donc une liste (LstCalqSup) avec tout les calques à supprimer. J'ai ensuite une boucle qui supprime ces calques un par un suivant la liste...

 

Problème : mon LiSP ne supprime que le premier calque...

(defun c:TESTCAD (/)
 (princ "\nVersion 1.9")
 (setq LstCalqSup
        '("1FLECHEFL"       "1PARCELLENFP"    "1SUBDFISC"       "1TROUPARCELLE"
           "1TROUSUBDFISC"   "3BORNE"          "3FOSSEMI"        "3HAIENONMI"
           "3MURMI"          "3MURNONMI"       "3SUBDFISCTEX"
         )
 ) ;_ Fin de setq
 (if (/= "" (car LstCalqSup))
   (if (tblsearch "layer" (car LstCalqSup))
     (progn (command "-SUPCALQUE" "n" (car LstCalqSup) "" "o")
            (setq LstCalqSup (cdr LstCalqSup))
     ) ;_ Fin de progn
   ) ;_ Fin de if
 ) ;_ Fin de if
 (princ)
) ;_ Fin de defun

 

Je me doute bien qu'il y a des solutions plus "propre" et/ou plus efficaces, mais ce code là est de moi... ;-)

 

Si quelqu'un a une astuce ou un conseil pour supprimer tout les calques de ma liste, je suis preneur...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut,

 

Pour parcourir tous les éléments d'une liste, il y a la fonction foreach (for each = pour chaque en français).

 

(defun c:TESTCAD (/ LstCalqSup)
 (princ "\nVersion 1.9")
 (setq	LstCalqSup
 '("1FLECHEFL"	     "1PARCELLENFP"    "1SUBDFISC"
   "1TROUPARCELLE"   "1TROUSUBDFISC"   "3BORNE"
   "3FOSSEMI"	     "3HAIENONMI"      "3MURMI"
   "3MURNONMI"	     "3SUBDFISCTEX"
  )
 ) ;_ Fin de setq
 (foreach calque LstCalqSup
   (if	(tblsearch "layer" calque)
     (command-s "_-laydel" "_name" calque "" "_yes")
   ) ;_ Fin de if
 ) ;_ Fin de foreach
 (princ)
) ;_ Fin de defun

 

J'ai remplacé command par command-s qui plus rapide à condition d'utiliser AutoCAD 2013 ou plus.

J'ai aussi mis le nom "global" (international) de la commande et de ses options pour éviter les problèmes de compatibilité.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut,

 

tu n'as pas de boucle dans ton code.

Tu peux faire:

 

(foreach CalqSup LstCalqSup
   (if (tblsearch "layer" CalqSup)
     (command "-SUPCALQUE" "n" CalqSup "" "o")
   ) ;_ Fin de if
) ;_ Fin de foreach

 

ou alors:

 

(while LstCalqSup
   (if (tblsearch "layer" (car LstCalqSup))
     (progn (command "-SUPCALQUE" "n" (car LstCalqSup) "" "o")
            (setq LstCalqSup (cdr LstCalqSup))
     ) ;_ Fin de progn
   ) ;_ Fin de if
) ;_ Fin de while

Aide au téléchargement du cadastre dgfip-download-helper
Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0
Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js

Posté(e) (modifié)

Salut

 

Il faut faire une boucle quand on veut traiter une liste

(defun c:TESTCAD (/ CalqSup n)
 (princ "\nVersion 1.9")
 (setq LstCalqSup
        '("1FLECHEFL"       "1PARCELLENFP"    "1SUBDFISC"       "1TROUPARCELLE"
           "1TROUSUBDFISC"   "3BORNE"          "3FOSSEMI"        "3HAIENONMI"
           "3MURMI"          "3MURNONMI"       "3SUBDFISCTEX"
         
)
n 0
 ) ;_ Fin de setq
 (while (setq CalqSup (nth n LstCalqSup))
   (if (tblsearch "layer" CalqSup)
     (command "-SUPCALQUE" "n" CalqSup "" "o")
   ) ;_ Fin de if
   (setq n (1+ n))
 ) ;_ Fin de if
 (princ)
)

 

 

Ou encore

(mapcar '(lambda(x / a)
  (or (vl-catch-all-error-p (setq a (vl-catch-all-apply 'vla-item (list (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) x))))
    (vla-delete a)
  )
)
LstCalqSup
)

 

ps : Grillé, mais je donne quand même ma solution qui diffère un peu.

pps : Pas réveillé ce matin. ma ligne de code corrigée.

 

@+

Modifié par Patrick_35

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonjour à tous, et merci...

 

(gile) : Effectivement, je savais qu'il fallait un (foreach, mais je ne sais pas trop l'utiliser.

 

vincentp010 : Zut ! ! Je n'avais pas fait gaffe à ça ! ! Honte à moi...

 

Patrick_35 : il y avait aussi (while, que je comprend mieux que (foreach...

 

Je me suis permis de rajouter une ligne, au cas où un des calques à supprimer n'existe pas... :

(princ (strcat "\nCalque " calque " introuvable"))

 

Voici en fichier joint, et grace à vous, mon code en entier, si quelqu'un de la communauté en a besoin, il est là...

 

Il me permet de rapidement modifier un DXF du Cadastre tel que je l'utilise dans mes projets...

 

Encore merci à vous... Tout ceci m'aide énormément ! ! !

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é