Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous...

 

J'ai un petit problème avec un (ssget, en effet, j'ai une erreur

(sslength JeuSel)=; erreur: type d'argument incorrect: lselsetp nil

Avec ce code donné en exemple dans l'excellent "Introduction à AutoLisp" de Maître (gile) :

      (setq JeuSel (ssget "_W" '(2 5) '(30 18)))
     (princ "\n(sslength JeuSel)=")
     (princ (sslength JeuSel))

 

Sachant qu'il n'y a rien dans cette fenêtre.

 

Mon code d'origine est :

      (setq JeuSel (ssget "_W" XYMinSel XYmaxSel))

avec

XYMinSel=(776360.0 2.3616e+006)

XYMaxSel=(776464.0 2.36168e+006)

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,

 

ssget retourne nil si aucun objet n'a été sélectionné.

(sslength nil) génère une erreur : type d'argument incorrect: lselsetp nil.

 

Donc pour savoir si le jeu de sélection retourné par ssget est vide, il suffit de regarder si l'expression retourne nil.

(if (null (setq JeuSel (ssget "_W" XYMinSel XYmaxSel)))
 (princ "\nAucun  objet sélectionné.")
 (princ (strcat "\n" (itoa (sslength jeuSel)) " objet(s) sélectionné(s)."))
)

ou, plus simplement puisqu'en LISP tout c qui n'est pas nil est vrai :

(if (setq JeuSel (ssget "_W" XYMinSel XYmaxSel))
 (princ (strcat "\n" (itoa (sslength jeuSel)) " objet(s) sélectionné(s)."))
 (princ "\nAucun  objet sélectionné.")
)

 

NB : on devrait toujours "emballer" un appel à ssget dans une expression conditionnelle du type: (if (setq ss (ssget ...)) ...)

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

Posté(e)

Salut.

 

Merci pour ton aide, ça fonctionne nickel...

 

Je pensais, à tord, que le (sslength retournerait 0 s'il était vide...

 

Encore merci...

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)

Par contre, j'ai placé un filtre à mon (ssget, mais je ne suis pas sûr qu'il fonctionne.

 

Je cherche à exclure de ma sélection ce qui est dans les calques "Cadre" et "Cartouche"...

 

Voici mon bout de code :

(ssget "_W"
 XYMinSel
 XYmaxSel
 '((-4 . "/=") (-4 . "<AND") (8 . "Cadre") (8 . "Cartouche") (-4 . "AND>"))
)

 

J'avoue que c'est la première fois que j'utilise ce type de filtre...

 

Une petite question subsidiaire, peut-on écrire :

(8 . "Cadre,Cartouche")

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)

Tu peux simplement faire : '((-4 . ""))

 

 

PS : les tests relationnels comme "/=" ne fonctionnent qu'avec des nombres. Voir la section 16.4 de Introduction à AutoLISP.

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

Posté(e)

Merci (gile) pour ton aide.

 

J'ai mal interprété ""!=" ou "/=" ou "<>" : différent de" dans la section 16.4...

 

Encore merci... Ça fonctionne nickel...

 

Mais il y a une petite correction, (le deuxième "-4") pour le cas où quelqu'un d'autre aurait besoin de ton exemple...

'((-4 . "<NOT") (8 . "Cadre,Cartouche") (-4 . "NOT>"))

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é