Aller au contenu

Une question pour les programmeur LISP


Messages recommandés

Posté(e)

Bonjour à tous,

J'ai pris des bouts de LISP à droite à gauche pour en faire un truc sympa.

Le but est de pointer une seule fois une entité. Le prog détermine s'il s'agit d'un texte, mtexte ou d'un attribut. Mon soucis est le suivant, je ne sais pas comment récupérer le point où je clique et la nature de l'objet en même temps. Mon prog me fait cliquer deux fois au même endroit.

Avez vous une solution pour ne cliquer qu'une seule fois?

Merci à vous.

 

Je ne suis pas programmeur, soyez indulgent.

 

(defun c:dd ()

(progn

(setvar "cmdecho" 0)

(setq ep

(entget

(car (entsel "choisir un texte\n"))

)

)

(setq cc (cdr (assoc 0 ep)))

(setq ed (getpoint))

(if (= cc "TEXT")

(progn

(command "ddedit" ed)))

(if (= cc "MTEXT")

(progn

(command "ddedit" ed)))

(if (= cc "INSERT")

(progn

(command "MODIFATTRINSITU" ed)))

(setvar "cmdecho" 1)

)

)

Sans nous, les machines ne sont rien

Posté(e)

Salut !

Si tu enlèves le (car...) avant (entsel ...) tu verras que la fonction retourne le nom de l'entité sélectionnée ET le point cliqué.

Essaie un (entsel) seul sur une entité, tu verras...

;)

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Salut Neo83,

 

en regardant l'aide sur entsel, tu découvres que cette fonction renvoie:

A list whose first element is the entity name of the chosen object and whose second element is the coordinates (in terms of the current UCS) of the point used to pick the object.

 

Càd: l'entité sélectionnée dans le "car" et les coordonnées dans le scu en-cours dans le "cadr"

 

Et voilà :D ,

sauf que pour le Z, il te renvoie la valeur de la variable autocad ELEVATION

 

[Edité le 7/10/2009 par bseb67]

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Salut,

Comme je vous l'ai dit, je ne suis pas programmeur mais simple dessinateur.

Donc si vous pouviez être plus clair...

Lorsque j'enlève le car devant entsel cela me donne,

 

Commande: dd

choisir un texte

; erreur: type d'argument incorrect: lentityp (

(2377.23 252.715 0.0))

 

Cela fonctionne encore moins qu'avant. Donc Please, please, help me...

 

Merci à vous.

 

Sans nous, les machines ne sont rien

Posté(e)

Comme ceci !

 

Regarde les petites différences avec ton code et essayes de comprendre...

(defun c:dd ( / ent dxf_ent typ_ent)
(setvar "cmdecho" 0)
(while (null (setq ent (nentsel "\nChoisir un texte: "))))
(setq dxf_ent (entget (car ent)) typ_ent (cdr (assoc 0 dxf_ent)))
(cond
	((or (eq typ_ent "TEXT") (eq typ_ent "MTEXT"))
		(command "_.ddedit" (cadr ent))
	)
	((eq typ_ent "ATTRIB")
		(command "_.ATTIPEDIT" (cadr ent))
	)
	(T
		(princ "\nImpossible d'éditer l'objet sélectionné.")
	)
)
(setvar "cmdecho" 1)
(prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Merci, Merci bonuscad.

Mais sans traduction pour moi cela reste du gresque ancien, et sans pierre de Rosette.

Il n'était pas possible de modifier "mon collage" pour arriver à mes fins?

De toutes manières merci.

 

Sans nous, les machines ne sont rien

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é