LUDWIG Posté(e) le 23 janvier 2005 Posté(e) le 23 janvier 2005 Bonjour, Dans un lisp, j'utilise enget pour sélectionner 1 objet. Or il faut absolument que ce soit un bloc. Comment faire pour répéter le entget tant que l'entité sélectionnée n'est pas un bloc ? Merci d'avance... Autocad 2021 - Revit 2022 - Windows 10
Tramber Posté(e) le 23 janvier 2005 Posté(e) le 23 janvier 2005 entget ne selectionne pas, il permet d'accéder à la définition DXF d'un objet. tu peux faire une boucle sur un jeu de selection ou sur la base des objets du dessin. (setq entdep (car(entsel)))(setq entbou entdep)sauvegarde une entié "point de départ", ne prends pas la dernière (while(/=(assoc 0 (entget(setq entbou (entnext entbou)))) "INSERT")(setq reponse(entget entbou))) J'écris ce code sans vérifier (faute d'AutoCAD) Regarde déjà la main ce que ca fait en faisant CTRL+SHIFT+E sur cette expression (entget(setq entbou (entnext entbou))) au bout d'un moment tu arriveras au dernier objet du dessin Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
didier Posté(e) le 23 janvier 2005 Posté(e) le 23 janvier 2005 bonjour LUDWIG, il est plaisant de voir quelqu'un qui s'accroche au Lisp comme Toi,je t'apporte une solution :(while (/= "INSERT"(cdr(assoc 0 (entget(setq ent (car (entsel "\nCliquez sur un bloc \n"))))))))Cette ligne de sélection va boucler TANT QUE l'entité choisie n'est pas un bloc,il me semble être dans le sujet,n'est t'il pas ? amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Tramber Posté(e) le 23 janvier 2005 Posté(e) le 23 janvier 2005 (while(/=(cdr(assoc 0 (entget(setq entbou (entnext entbou))))) "INSERT") (setq reponse(entget entbou)) Que serais-je sans Didier, j'avais oublié le CDR ! je l'ai vu en le lisant.Pour les parenthèse, non garanti ! D'ailleurs, la formule de Didier est sans détour. N'oublie pas, tout de même, d'explorer tes entités comme j'ai indiqué, c'est le moment d'apprendre que les objets sont stockés strictement dans l'ordre de création. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
LUDWIG Posté(e) le 24 janvier 2005 Auteur Posté(e) le 24 janvier 2005 Ah merci ! Je savais qu'une telle formulation existait pour l'avoir déjà vue... J'en été arrivé à : (while not (= "INSERT" (cdr (assoc 0 (entget (car setq OBJ (entsel))))))) qui, bien sûr, ne fonctionne pas ! Merci encore, Grands Maîtres ! Autocad 2021 - Revit 2022 - Windows 10
LUDWIG Posté(e) le 18 mars 2005 Auteur Posté(e) le 18 mars 2005 Aïe Aïe, ma problématique devient plus complexe : Je dois [surligneur] répéter le entget [/surligneur]tant que l'entité n'est pas un [surligneur] bloc de rotation 0 et d'échelle X Y et Z = 1[/surligneur]... Comment s'y prendre ? Je suppose que ce sera une ligne complexe... Je suis donc aussi preneur pour un [surligneur] arrêt du lisp [/surligneur]si mes conditions ne sont pas bonnes... Autocad 2021 - Revit 2022 - Windows 10
LUDWIG Posté(e) le 18 mars 2005 Auteur Posté(e) le 18 mars 2005 arhh c'était simple, il faut juste utiliser "AND" (while (= nil (and (= "INSERT"(cdr(assoc 0 (entget(setq premier (car (entsel "\nSélectionnez une définition de bloc A REMPLACER (échelle 1 et rotation 0)... \n\n"))))))) (= 0 (cdr(assoc 50 (entget premier)))) (= 1 (cdr(assoc 41 (entget premier)))) (= 1 (cdr(assoc 42 (entget premier)))) (= 1 (cdr(assoc 43 (entget premier)))) ))) Autocad 2021 - Revit 2022 - Windows 10
bonuscad Posté(e) le 18 mars 2005 Posté(e) le 18 mars 2005 C'est toujours simple quand on trouve ;) Un exemple presque identique, qui boucle donc tant que ce n'est pas un bloc avec facteur d'insertion à 1 et orientation à 0, mais aussi si tu RATE la sélection (sélection vide!) (defun c:select-insert ( / dxf_ent blk) (while (not (and (eq (cdr (assoc 0 dxf_ent)) "INSERT") (zerop (cdr (assoc 50 dxf_ent))) (eq (cdr (assoc 41 dxf_ent)) 1.0) (eq (cdr (assoc 42 dxf_ent)) 1.0) (eq (cdr (assoc 43 dxf_ent)) 1.0) ) ) (while (null (setq blk (entsel "\nChoisir un bloc: ")))) (setq dxf_ent (entget (car blk))) (if (not (and (eq (cdr (assoc 0 dxf_ent)) "INSERT") (zerop (cdr (assoc 50 dxf_ent))) (eq (cdr (assoc 41 dxf_ent)) 1.0) (eq (cdr (assoc 42 dxf_ent)) 1.0) (eq (cdr (assoc 43 dxf_ent)) 1.0) ) ) (alert "\nN'est pas un bloc, ou orientation et/ou échelle d'insertion ne conviennent pas!") ) ) (print dxf_ent) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
LUDWIG Posté(e) le 21 mars 2005 Auteur Posté(e) le 21 mars 2005 ah parfait parfait ! C'est vrai que quand ma sélection était vide, j'avais toujours un plantage !Et c'est intéressant de placer une "alerte" pour que l'utilisateur comprenne que ça sélection ne va pas (car dans mon cas, quand la sélection n'est pas bonne, la question de la sélection est redemandée mais l'utilisateur ne voit peut-etre pas que la question est reposée). Autocad 2021 - Revit 2022 - Windows 10
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