Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

utilisateur autoCAD depuis une paire d'années, je commence seulement à gouter aux joies des lisp et des macro-commandes.. Et je trouve cela super!

 

Néanmoins, je suis a la recherche d'un lisp qui me permettrai de sélectionner dans un dessin un type de ligne spécifique.

 

Pourriez vous m'aidez ??

 

Merci

Posté(e)

Bonjour lerom88 et bienvenu sur le forum,

 

Un petit truc vite fait.

(defun c:seltligne (/ ss)
 (if (setq ss (ssget "_I" '((6 . "nom_du_type_de_ligne"))))
   (sssetfirst nil ss)
   (sssetfirst nil (ssget "_X" (list (cons 6 "nom_du_type_de_ligne") (cons 410 (getvar "ctab")))))
   )  
 (princ)
 )

 

Il te reste à mettre le nom de ton type de ligne entre guillemets aux lignes 2 et 4.

 

Olivier

  • Upvote 1
Posté(e)

C'est exactement ce que je recherchais merci beaucoup !!

 

Juste une petite question: est il possible d'ajouter des micro-commandes dans un lisp ?

 

J'aimerai faire une succession de commande, puis utiliser ce lisp, puis de nouveaux des commandes, etc..

Posté(e)

Salut...

 

Heu... pourquoi ne pas utiliser les commandes natives d'AutoCad par le filtrage de sélection?...

AutoCad Map 3D 2011 - Covadis v16.0d

Windows 7 - 64b

Posté(e)

compte les clics

 

avec sstl; 1 clic et 4 lettres...

2 secondes maxi si tu as pas eu ton café du matin... et franchement ne pas mettre spécial sélection dans les lisp au démarage c'est se privé de ssc, ssl, sse qui me servent plusieurs fois par jour

  • Upvote 1
Posté(e)

Je ne peux pas passer par les sélections de gile car il faut cliquer sur une ligne et je cherche à ne pas utiliser la souris. Ce lisp me sert dans une "nouvelle commande" ou j'ai déja une succession de commande.

Posté(e)

Bonjour lerom88,

 

Dans ce cas, ceci suffit.

 

(if (sssetfirst nil (ssget "_I" '((6 . "nom_du_type_de_ligne"))))
 nil
 (sssetfirst nil (ssget "_X" (list (cons 6 "nom_du_type_de_ligne") (cons 410 (getvar "ctab")))))
   )

 

Olivier

Posté(e)

Bonjour Olivier, merci Beaucoup ! :)

 

Je cherche également le même style de lisp, mais cette fois ci pour sélectionner les objets d'un calque.

 

Merci encore

 

lerom88

Posté(e)

Si tu fait un lisp, tu peux simplifier en te contentant de créé une variable avec ton jeu de sélection, pour t'en servir plus tard. Selon la façon que tu veux sélectionner tes objet, regarde la fonction ssget.

 

(if (setq ss (ssget "_I" '((8 . "nom_du_calque"))))
 nil
 (setq ss (ssget "_X" (list (cons 8 "nom_du_calque") (cons 410 (getvar "ctab")))))
   )

 

Olivier

Posté(e)

Mais les jeux de sélection je suis obligé de les recréer dans chaque dessin non ? je vais faire le test pour les calques.

 

Vous m'avez été d'une grande aide, je vous en remercie.

 

lerom88

Posté(e)

Ca ne fonctionne pas est ce que je mis prends bien ?

 

(defun c:selcalque (/ ss)
 (if (sssetfirst nil (ssget "_I" '((8 . "cotation"))))
 nil
 (sssetfirst nil (ssget "_X" (list (cons 8 "cotation") (cons 410 (getvar "ctab")))))
   ) 
 (princ)
 )

Posté(e)

Je pense que la condition du if déclaré en (sssetfirst) bloque l'évalution.

En effet en cas de succés (sssetfirst) ne renvoit pas True mais une liste contenant toujour en 1er élément un nil!

 

(if (setq ss (ssget "_I" '((8 . "cotation"))))
 (sssetfirst nil ss)
 (sssetfirst nil (setq ss (ssget "_X" (list (cons 8 "cotation") (cons 410 (getvar "ctab"))))))
)

 

Sous cette forme, ce sera mieux, comme l'avait écrit -Olivier- dans sa réponse #2

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Je n'ai pas retesté, et je me suis fait avoir.

@bonuscad

En faites, il se passe l'inverse. Lorsque la condition n'est pas rempli on obtient (nil nil) et non nil tout cours. La condition est donc considérée comme remplie.

 

Si l'on veux vraiment supprimer la variable, cela donne :

(defun c:selcalque ()
 (if (cadr (sssetfirst nil (ssget "_I" '((8 . "cotation")))))
   nil
   (sssetfirst nil (ssget "_X" (list (cons 8 "cotation") (cons 410 (getvar "ctab")))))    
   ) 
 (princ)
 )

 

Olivier

  • Upvote 1
Posté(e)
@bonuscad

En faites, il se passe l'inverse. Lorsque la condition n'est pas rempli on obtient (nil nil) et non nil tout cours. La condition est donc considérée comme remplie.

 

Oui je me suis mal exprimé, en fait tout simplement, on considère qu'une liste, même constituée que d'élément vide est toujours VRAIE.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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

Salut...

 

Heu... pourquoi ne pas utiliser les commandes natives d'AutoCad par le filtrage de sélection?...

Exact et 'Filter permet de sauver des configurations de sélection même très compliquées... et c'est présent aussi sur Autocad LT depuis n versions.

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é