Aller au contenu

Messages recommandés

Posté(e)

bonjour

je 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 selctionner

tous les elements sb1 sb2 sb3

merci

Posté(e)

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

Posté(e)

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)))))
) 

 

Amicalement

Vincent

 

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)

Posté(e)

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...

Posté(e)

merci a tous on peut toujours compter sur cadxp

je voulais a l' origine faire un jeu de selection à partir

d'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

 

  • 2 semaines après...
Posté(e)
  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

 

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é