Aller au contenu

entget tant que la sélection n\'est pas valide


LUDWIG

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

(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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

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é