Arcasdk Posté(e) le 19 décembre 2008 Posté(e) le 19 décembre 2008 Bonjour je cherche à créer un ptit lisp pour faire du ménage dans mes calques. Mais ca commence mal.... La commande suivante ne me retourne strictement rien...... (setq js (ssget "_x" '(0 . "LAYER"))) Je ne vois pas ce qui cloche... Merci <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
(gile) Posté(e) le 19 décembre 2008 Posté(e) le 19 décembre 2008 Salut, Plusieurs choses, Ton expression ne retourne pas rien. En LISP, une expression retourne toujours quelque chose*, fusse nil ou un message d'erreur.Dans ton cas le message d'erreur est :; erreur: argument point incorrect Cette erreur concerne le filtre de sélection, qui doit être une liste de paires pointées (et pas seulement une paire pointée) On pourrait donc essayer, après avoir corrigé cette erreur :(setq js (ssget "_x" '((0 . "LAYER"))))L'expression retournerait nil parce que ssget ne permet de sélectionner que des "entités graphiques" et les calques sont des "objets non graphiques" comme les Styles, les SCU...Ces objets se trouvent dans des "tables", on y accède en LISP avec les fonctions tblnext, tblsearch, tblobjname. * même les expressions (prin1), (princ) et (print) retourne quelque chose : un symbole vide, donc invisible.Exemple :(type (princ)) retourne SYM, l'expression (princ) retourne un symbole(vl-symbol-name (princ)) retourne "", une chaine vide => (princ) retourne un symbole "vide" Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 19 décembre 2008 Posté(e) le 19 décembre 2008 Bonjour Les filtres de (ssget) doivent se présenter sous forme d'une liste d'éléments qui sont eux aussi des listes de paires pointées de code DXF. Pour reprendre ta ligne, elle deviendrait (setq js (ssget "_x" '((0 . "LAYER")))) D'autres part le code "0" représente le type d'entité, LAYER n'est pas un type d'entité.Le code pour les calques est "8" Donc pour sélectionner par exemple le calque "EPURE" le filtre serait: (setq js (ssget "_x" (list (cons 8 "EPURE")))) => (setq js (ssget "_x" '((8 . "EPURE")))) On peut aussi utiliser des jokers dans le nom de calque, ex:(setq js (ssget "_x" '((8 . "*EPURE?")))) => sélectionne tout les calques ayant par exemple comme nom:AXE-EPURE1 , CACHE-EPURE2 etc mais pas AXE-EPURE-projet* pour tous caractère? pour un seul caractère Il ya encore d'autre possibilité avec (wcmatch).... On peux donner aussi plusieurs noms de calque en les séparant par des "," (virgules)(setq js (ssget "_x" '((8 . "EPURE,AXES-EPURE,ETUDE-EPURE")))) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
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