Aller au contenu

sélection de blocs


Apocalisp

Messages recommandés

Bonjour,

 

Je cherche une commande ou un lisp me permettant de sélectionner touts les points topo d'un dessin sur lesquels sont attaché un certain type de bloc.

 

Cela reviens sans doute à sélectionner les blocs A ayant le même point d'insertion que les blocs B...

(en l'occurrence il s'agit pour moi d'isoler les points topo correspondant à des seuils de bâtiments)

 

Si quelqu'un peux m'aider je lui en serais éternellement reconnaissant.

 

Bisous ;) .

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Il n'y a pas de fonction LISP qui fasse ça directement.

 

Un moyen est de sélectionner tous les blocs "B" pour récupérer leurs points d'insertion puis de sélectionner tous les blocs "A" et supprimer du jeu de sélection ceux dont le point d'insertion n'est pas dans la liste.

 

(defun c:test (/ ssB i pts ssA)
 ;; sélectionner tous les blocs "B"
 (setq ssB (ssget "_X" '((0 . "INSERT") (2 . "B"))))
 ;; collecter tous les points d'insertion des blocs "B"
 (repeat (setq i (sslength ssB))
   (setq
     pts (cons	(cdr (assoc 10 (entget (ssname ssB (setq i (1- i))))))
	pts
  )
   )
 )
 ;; sélectionner tous les blocs "A"
 (setq	ssA (ssget "_X" '((0 . "INSERT") (2 . "A"))))
 ;; suppimer du je de sélection les blocs "A" dont le point d'insertion
 ;; n'est pas dans liste des points d'insertions des blocs "B"
 (repeat (setq i (sslength ssA))
   (setq a (ssname ssA (setq i (1- i))))
   (if	(not (member (cdr (assoc 10 (entget a))) pts))
     (ssdel a ssA)
   )
 )
 ;; gripper le jeu de sélection "A"
 (sssetfirst nil ssA)
 (princ)
)

 

 

On peut aussi faire la même chose en utilisant un jeu de sélection construit avec les points d'insertion des blocs "B".

 

(defun c:test (/ ssB filter i)
 ;; sélectionner tous les blocs "B"
 (setq ssB (ssget "_X" '((0 . "INSERT") (2 . "B"))))
 ;; construire un filtre de sélection
 (setq filter '((-4 . "OR>")))
 ;; avec tous les points d'insertion des blocs "B"
 (repeat (setq i (sslength ssB))
   (setq filter (cons
	   (assoc 10 (entget (ssname ssB (setq i (1- i)))))
	   filter
	 )
   )
 )
;; pour sélectionner les blocs "A"
 (setq	filter (vl-list*
	 '(0 . "INSERT")
	 '(2 . "A")
	 '(-4 . "<OR")
	 filter
       )
 )
 ;; sélectionner et gripper les blocs "A"
 (sssetfirst nil (ssget "_X" filter))
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

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é