Apocalisp Posté(e) le 25 mars 2017 Posté(e) le 25 mars 2017 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 ;) .
Red Posté(e) le 25 mars 2017 Posté(e) le 25 mars 2017 Et avec clic droit selection similaires sur autocad ? “L'environnement est important, pour sauver un arbre, mangez un castor !”
Apocalisp Posté(e) le 25 mars 2017 Auteur Posté(e) le 25 mars 2017 Et avec clic droit selection similaires sur autocad ? Non, je ne cherche pas à sélectionner touts les points topo du dessin mais seulement ceux où le bloc seuil est inséré.
(gile) Posté(e) le 25 mars 2017 Posté(e) le 25 mars 2017 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
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