tiboulen Posté(e) le 10 septembre 2008 Posté(e) le 10 septembre 2008 bonjourje crée 3 listes de blocs jsb1 jsb2 jsbb3 par les fonctions :(setq jsb1 (ssget "X" (list (cons 0 "INSERT") (cons 2 sb1))))(setq jsb2 (ssget "X" (list (cons 0 "INSERT") (cons 2 sb2))))(setq jsb3 (ssget "X" (list (cons 0 "INSERT") (cons 2 sb3))))Comment faire pour les renir en une seule liste afin de selctionnertous les elements sb1 sb2 sb3merci
(gile) Posté(e) le 10 septembre 2008 Posté(e) le 10 septembre 2008 Salut, Tout d'abord, attention au vocabulaire.Une liste (élément fondamental du LISP) ce n'est pas la même chose qu'un jeu de sélection.Il y a des fonctions LISP pour traiter les listes (list, cons, car, cdr, nth, last, foreach, mapcar...) et d'autres pour traiter les jeux de sélection (ssget, ssname, ssadd, ssdel...). Tu as donc 3 jeux de sélections que tu voudrais unir en un seul.Tu peux créer un jeu de sélection vide : (setq jsb (ssadd)) et parcourir chacun des autres jeux pour ajouter tous leurs éléments à jsb (foreach js (list jsb1 jsb2 jsb3) ; on traite la liste des jeux de sélection (setq n 0) (while (setq ent (ssname js n)) (ssadd ent jsb) (setq n (1+ n)) ) ) PS: pas testé... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 10 septembre 2008 Posté(e) le 10 septembre 2008 Bonjour, Même remarque que (gile) au sujet de la différence entre un jeu de sélection et une liste. Mais il s'agit sans doute d'un abus de langage, puisque Tiboulen a appelé ses variables jsbn (js pour jeu de sélection je suppose). De mon côté j'ai fait ceci (defun ssaddjs (JSADD JS / I) (setq I 0) (repeat (sslength JSADD) (setq JS (ssadd (ssname JSADD I) JS)) (setq I (+ I 1)) ) JS ) (defun c:test () ;; ... ;; ...... ;;(setq jsb1 (ssget "X" (list (cons 0 "INSERT") (cons 2 sb1)))) ;;(setq jsb2 (ssget "X" (list (cons 0 "INSERT") (cons 2 sb2)))) ;;(setq jsb3 (ssget "X" (list (cons 0 "INSERT") (cons 2 sb3)))) (setq JSTOT (ssaddjs jsb1 (ssaddjs jsb2 (ssaddjs jsb3 (ssadd))))) ) AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
bseb67 Posté(e) le 11 septembre 2008 Posté(e) le 11 septembre 2008 Et pourquoi pas ca:(setq jsbn (ssget "x" (list (cons 0 "INSERT") '(-4 . " < o r" ) (cons 2 sb1) => retirer espace pour le or (cons 2 sb2) (cons 2 sb3) '(-4 . "or>")))) Tiboulen: il ne faut pas oublier que les blocs dynamique, le nom stocké dans le code dxf 2 n'est pas celui d'origine si le bloc est bougé dynamiquement càd si tu insères un bloc dynamique sans y toucher, il garde son nom. Mais dès que tu bouge une des propriétés dynamique, le nom devient un*U..... par contre si tu réinitialise le bloc le nom sera celui d'origine, [Edité le 11/9/2008 par bseb67] Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
tiboulen Posté(e) le 11 septembre 2008 Auteur Posté(e) le 11 septembre 2008 merci a tous on peut toujours compter sur cadxpje voulais a l' origine faire un jeu de selection à partird'un reperage de blocs, (ex tous les blocs a1 a2 et a3)donc grace a votre aide je suis arrive a :;;creer un jeu de selection des blocs contenus dans le dessin;; à partir d'une selection de blocs (defun c:selbl1 ( / i0 jsbt selbl0 j0 entbl1 sb1 jsb1) (setq i0 0 jsbt (ssadd));;define jsbt comme jeu de selection nul(prompt "\nReperez les blocs à slectionner")(setq selbl0 (ssget));;reperer les blocs (repeat (sslength selbl0) (setq j0 0 entbl1 (entget (ssname selbl0 i0)) sb1 (cdr (assoc 2 entbl1)) jsb1 (ssget "X" (list (cons 0 "INSERT") (cons 2 sb1))) ) (repeat (sslength jsb1) (ssadd (ssname jsb1 j0) jsbt);;on ajoute un element au jeu de selection total (setq j0 (+ j0 1)) );;repeat (setq i0 (+ i0 1)) );;repeat (sssetfirst nil jsbt));;end prog maintenant bseb67 apporte une piste plus elegante que je vais regarder
tiboulen Posté(e) le 11 septembre 2008 Auteur Posté(e) le 11 septembre 2008 C'est vrai que je ne sais pas du tout gerer les blocs dynamiques
Bruno_T Posté(e) le 22 septembre 2008 Posté(e) le 22 septembre 2008 Citation maintenant bseb67 apporte une piste plus elegante que je vais regarder bonsoir,oui ça évite de balayer plusieurs fois des jeux de sélections, mais naturellement tout dépend de ce qu'on souhaite en faire par la suite. On peut aussi l'écrire sous une forme plus compacte en évitant d'écrire les codes logiques (-4 . " < o r" etc., cependant c'est exactement la même chose. (ssget "X" (list (cons 0 "INSERT") (cons 2 "sb1,sb2,sb3"))) Bruno Toniutti
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