Aller au contenu

Travailler sur les calques


Messages recommandés

Posté(e)

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>

Posté(e)

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

Posté(e)

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

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é