kalos Posté(e) le 22 juillet 2010 Posté(e) le 22 juillet 2010 comment récupérer le jeu de selection sur lequel on a travaillé dans un lisp? exemple: (defun c:attsum (/ sset sum i l name entDef) (setq sset (ssget ":E") ; Everything in Aperture sum 0 ) (if sset (progn (setq i 0 l (sslength sset) ) (while (< i l) (setq name (ssname sset i) loop T ) ;; Boucle sur les attributs (while loop (setq name (entnext name) entDef (entget name) ) (if (and (= (cdr (assoc 0 entDef)) "ATTRIB") (= (cdr (assoc 2 entDef)) "VALEUR BLOC") ) ;; On a trouvé l'attribut d'étiquette VALEUR BLOC (setq sum (+ sum (atof (cdr (assoc 1 entDef)))) loop nil ) ) (if (= (cdr (assoc 0 entDef)) "SEQEND") (setq loop nil) ) ; Fin de séquence, on termine la boucle ) ;; Passe à l'insertion de bloc suivante (setq i (1+ i)) ) (prompt (strcat "Somme : " (rtos sum))) ) ) (princ) ) le lisp marche bien sauf que j'aimerai récupérer la selection de départ et la commande autocad 'select p' ne me redonne pas la main pour passer d'autres commandes.
kalos Posté(e) le 22 juillet 2010 Auteur Posté(e) le 22 juillet 2010 je précise que le probleme ne pose pas avec (ssget "_P") sélection précédente
Patrick_35 Posté(e) le 22 juillet 2010 Posté(e) le 22 juillet 2010 Salut Ta sélection, tu l'as toujours dans ta variable sset ?Il suffit de remettre ta variable i à 0 et de refaire une boucle @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
kalos Posté(e) le 22 juillet 2010 Auteur Posté(e) le 22 juillet 2010 j'ai du mal à comprendre la subtilité du lisp encore...je sais que mon jeu de selection se trouve dans SSET, ce que je ne comprends pas c'est pourquoi ma routine lisp ne me redonne pas la main sur le jeu de selection. Je ne comprends pas ce que tu veux dire par refaire une boucle, pourquoi faire?
Patrick_35 Posté(e) le 22 juillet 2010 Posté(e) le 22 juillet 2010 Là, tu mets bien ta variable i à 0 et tu détermines le nombre d'éléments sélectionnés(setq i 0 l (sslength sset) ) Et ici, tu parcours bien le jeu de sélection dans une boucle while (tant que la valeur de i est inférieur à la valeur de l)(while (< i l) (setq name (ssname sset i) loop T ) A croire que tu recopies des bouts de code sans chercher à comprendre :casstet: @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 22 juillet 2010 Posté(e) le 22 juillet 2010 Que cherches-tu à faire toi ?ssset n'est accessible que pendant l'exécution du LISP, la réponse donnée par Patrick_35 est valable si tu veux modifier le LISP (ajouter des expressions à ce LISP) Si tu veux utiliser le jeu de sélection après l'exécution du LISP, ssget n'est plus accessible (nil), il faut donc utiliser le jeu de sélection précédent, soit : (ssget "_P") en LISP.Si tu veux sélectionner/gripper le jeux de sélection précédent, il faut utiliser l'expression que j'ai donné dans un autre post :(sssetfirst nil (ssget "_P")) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
kalos Posté(e) le 22 juillet 2010 Auteur Posté(e) le 22 juillet 2010 oui ça je l'avais compris, je sais que "sset" est une variable local et que en dehors de la fonction, c'est inutile. que j'utilise:(sssetfirst nil (ssget "_P")) ou (sssetfirst nil sset) dans ma fonction cela revient au même, je n'ai pas les poignées.en tous cas elles ne sont pas visibles, que dois je faire pour que le gripset J'ai constaté que le regen me les ressuscites mais c'est un peu lourd comme manipulation. pourquoi mes grip handles sont off ? mon pickset (sset) est défini.
(gile) Posté(e) le 22 juillet 2010 Posté(e) le 22 juillet 2010 Regarde les variables système GRIPS et GRIPOBJLIMIT Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
capde06 Posté(e) le 22 juillet 2010 Posté(e) le 22 juillet 2010 je ne sais pas si j'ai bien comprismais bon exemple : dans une routine lisp(defun c:routine()(setq sset (ssget)))a la fin de la routine, la selection"sset" est toujours en mémoire... donc on peut l'utiliser avec une commandeex . effacer_!sset_ le point d'exclamation rappelle la variablea partir du moment ou il n'y a pas eu un nil dessus et quelle ne soit pas la declarer la (defun c:attsum (/sum i l name entDef) j'espère que je ne suis pas hors sujet[Edité le 22/7/2010 par capde06] [Edité le 22/7/2010 par capde06] Vous fîtes ce que vous pûtes et vous m'épatâtes !!!!
kalos Posté(e) le 23 juillet 2010 Auteur Posté(e) le 23 juillet 2010 GRIPS et GRIPOBJLIMIT ne changent rien. J'ai enfin trouvé ce qui n'allait pas, au lieu de (ssget ":E"), j'ai utilisé (ssget "_I"), le cumul marche bien et me redonne la selection correctement. I Implied selection (objects selected while PICKFIRST is in effect). plus besoin de (sssetfirst nil sset)
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