Aller au contenu

copier la valeur de l'attribut


doberman

Messages recommandés

Bonjour, je recherche un lisp qui permet de "copier-coller" des textes par simple clic, sans passé par les boites de dialogue, ce qui est interresant pour recopier des cartouches par exemple !

Il existe je l'ai deja utilisé et de mémoire il s'appelait RCVALTXT mais aujourd'hui pas moyen de remettre la main dessus, et je ne sais pas programmer en lisp.

D'avance merci a tous.

 

[courriel] [/courriel] seb_re95@hotmail.com

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

j'espère ne pas être mordu ;)

 

Ce qu'il est intéressant de savoir pour t'aider,

c'est d'être certain que la position des attributs dans les deux blocs est identique.

dans le cas bien entendu, où le bloc de départ est différent du bloc d'arrivée.

 

je m'explique,

copier la valeur du TROISIEME attribut du bloc TATA

dans la valeur du DEUXIEME attribut du bloc TOTO, pas simple mais faisable.

 

si les deux blocs, départ et arrivée sont les mêmes,

c'est plus cool.

 

avec ces renseignements, il sera aisé de te faire ton petit lisp...

 

amicalement

 

 

Lien vers le commentaire
Partager sur d’autres sites

:casstet: Non tu ne sera pas mordu ...<acronym class=dict title=

Et non les attibuts n'ont pas forcement la même position :( , de plus ce n'est pas forcement que pour des blocs, le lisp que j'utilisais pouvais copier les textes simples vers un bloc ou vers un autre texte simple et tout ca sans ouvrir les boites de dialogue et faire un copier-coller.

Voila j'espere avoir eté plus clair dans mes explications, et merci de ton implication.

Lien vers le commentaire
Partager sur d’autres sites

Voila un bout de code qui copie une valeur de texte dans un attribut de bloc :

Peut-être qu'en changeant le texte en attribut de bloc cela pourrait faire l'affaire.

 

(defun c:att ( / obj-txt chn obj-att att-tag att-val obj-blc blc-val)

(setq obj-txt (nentsel "\n Choisir le texte de reference : "))

(setq chn (cdr (assoc 1 (entget (car obj-txt)))))

 

(setq obj-att (nentsel "\n Choisir l'attribut à modifier : "))

(setq att-tag (cdr (assoc 2 (entget (car obj-att)))))

(setq att-val (cdr (assoc 1 (entget (car obj-att)))))

 

(alert (strcat "\nEtiquette de l'attribut : " att-tag ".\n"

"Valeur de " att-tag " : " att-val ".\n"

"Nouvelle valeur de " att-tag " : " chn "."))

 

(command "_attedit" "oui" "" att-tag att-val (car obj-att) "v" "r" chn "")

 

(entdel (car obj-txt))

)

Lien vers le commentaire
Partager sur d’autres sites

Est ce que le bout de code suivant pourrait remplacer ton lisp égaré?

 

(defun extract_txt ( flag msg / ent dxf_ent typ_ent)
(while (null ent)
	(setq ent (nentsel (strcat "\nChoisir la chaine de Texte/Texte Multiligne/Attribut à " msg ": ")))
	(cond
		((not (null ent))
			(setq typ_ent (cdr (assoc 0 (setq dxf_ent (entget (car ent))))))
			(cond
				((member typ_ent '("TEXT" "MTEXT" "ATTRIB"))
					(if flag
						(progn
							(entmod (subst (cons 1 (extract_txt nil "COPIER")) (assoc 1 dxf_ent) dxf_ent))
							(if (assoc 330 dxf_ent) (entupd (cdr (assoc 330 dxf_ent))))
						)
						(cdr (assoc 1 dxf_ent))
					)
				)					
				(T
					(setq ent nil)
					(princ "\nN'est pas un Texte MTexte ou Attribut!")
				)
			)
		)
	)
)
)
(defun c:subtitutexte ( / )
(extract_txt T "MODIFIER")
(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

Merci bcp Bonuscad c exactement ce que je voulé, j'ai pas encore essayé toute les config possible mais a priorie ca tourne nikel, un grand ouf, et surtout un merci a toi !! Par contre si je peu me permettre une petite remarque, ou plutot une suggestion, Ne peut on pas choisir en premier le texte à COPIER et le COLLER plutot que de choisir la cible A MODIFIER et ensuite cliquer sur le texte a COPIER ??( comme celui de Fabcad) Je c'est pas si c tres clair ?

M'enfin, je ne pense pas qu'il faut bouleversé le lisp pour faire "juste ca" mais ca m'arrangerais, car je sais rien faire en .lisp

 

Merci aussi a Fabcad mais ton lisp ne marche que pour les attributs et non pas pour les textes "simple ou multiple" ( Perso je trouve la fentre d'alerte "Enervante" surtout si je dois utilisé le lisp plusieur fois de suite)Mais Quel performances !!! Quand est-ce que je sauré faire ça ???! :(

 

Merci encore a tous.

 

 

Lien vers le commentaire
Partager sur d’autres sites

Le même légèrement modifié pour fonctionner dans le sens que tu désire.

Il serait peut être aussi interressant d'y rajouter une option pour "Swapper" (Echanger) les valeurs de textes.

 

Bien que j'ai mis les entité MTEXT, car cela ne pose pas de problème technique pour le déroulement du programme. Mais les caractères spéciaux de formatage des textes multiligne risquent de causer des pertes ou des ajouts de caractères..... :casstet:

 

Donc bien que cela fonctionne, je déconseille de l''utiliser avec les MTEXT.

 

(defun extract_txt ( flag msg / ent dxf_ent typ_ent)
(while (null ent)
	(setq ent (nentsel (strcat "\nChoisir la chaine de Texte/Texte Multiligne/Attribut " msg ": ")))
	(cond
		((not (null ent))
			(setq typ_ent (cdr (assoc 0 (setq dxf_ent (entget (car ent))))))
			(cond
				((member typ_ent '("TEXT" "MTEXT" "ATTRIB"))
					(if flag
						(progn
							(entmod (subst (cons 1 new_text) (assoc 1 dxf_ent) dxf_ent))
							(if (assoc 330 dxf_ent) (entupd (cdr (assoc 330 dxf_ent))))
						)
						(cdr (assoc 1 dxf_ent))
					)
				)
				(T
					(setq ent nil)
					(princ "\nN'est pas un Texte MTexte ou Attribut!")
				)
			)
		)
	)
)
)
(defun c:subtitutexte ( / new_text)
(setq new_text (extract_txt nil "à COPIER"))
(extract_txt T "où COLLER")
(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

Merci Bonuscad, pouquoi pas y ajouté l'option dont tu me parle !! Bien que je ne vois pas vraiment "a quoi sa sert exactement" <acronym class=dict title= !! Mais bon ,faut essayer, ca m'aideras surement a mieu voir la fonctionnalités. En tout cas pour moi, j'ai eu le lisp que je desirais, encore merci et n'hesite pas si tu a d'autre idées d'améliorations.

 

Tant que j'y suis j'en profite, j'utilise un lisp qui s'appel Resgaine, je sais pas si vous connaissez, mais j'ai un petit soucie avec ce lisp et je voudrais le modifier quelque peu mais je ne sais pas comment faire ?? (C'est un lisp qui sert a dessiner des gaines)

 

 

Lien vers le commentaire
Partager sur d’autres sites

ahhh bah ouais sa peut toujours servir !

 

Je ne te sens pas très motivé ;)

 

Mais bon voilà quand même le code remanié pour intégrer cette option d'interchangabilité de chaine de texte.

NB: Fonctionne pour échanger des valeurs d'attribut dans le même bloc

 

(defun sel_obj (msg / ent typ_ent dxf_list)
(while (null ent)
	(setq ent (nentsel (strcat "\nChoisir la chaine de Texte/Texte Multiligne/Attribut " msg ": ")))
	(cond
		((not (null ent))
			(setq typ_ent (cdr (assoc 0 (setq dxf_list (entget (car ent))))))
			(cond
				((not (member typ_ent '("TEXT" "MTEXT" "ATTRIB")))
					(setq ent nil)
					(princ "\nN'est pas un Texte MTexte ou Attribut!")
				)
			)
		)
	)
)
dxf_list
)
(defun extract_txt (flag dxf_ent str_text / )
(if flag
	(progn
		(entmod (subst (cons 1 str_text) (assoc 1 dxf_ent) dxf_ent))
		(if (assoc 330 dxf_ent) (entupd (cdr (assoc 330 dxf_ent))))
	)
	(cdr (assoc 1 dxf_ent))
)
)
(defun c:subtitutexte ( / new_text old_text dxf1 dxf2)
(initget "Echanger Copier _Swap Copy")
(if (eq (getkword "\nChaine de texte [Echanger/Copier]? : ") "Swap")
	(progn
		(setq new_text (extract_txt nil (setq dxf1 (sel_obj "à ECHANGER")) nil))
		(setq old_text (extract_txt nil (setq dxf2 (sel_obj "où ECHANGER")) nil))
		(extract_txt T dxf1 old_text)
		(extract_txt T dxf2 new_text)
	)
	(progn
		(setq new_text (extract_txt nil (setq dxf1 (sel_obj "à COPIER")) nil))
		(setq old_text (extract_txt nil (setq dxf2 (sel_obj "où COLLER")) nil))
		(extract_txt T dxf2 new_text)
	)
)
(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

  • 11 mois après...

Waouw !!!

 

Exactement ce que je suis venu chercher aujourd'hui, presque un an jour pour jour après la création de ce post !

 

Comme quoi il faut toujours chercher avant de poster...

... et aussi donner des titres explicites !

 

C'est trop fort CADxp ! :)

Lien vers le commentaire
Partager sur d’autres sites

  • 7 ans après...

Mais bon voilà quand même le code remanié pour intégrer cette option d'interchangabilité de chaine de texte.

NB: Fonctionne pour échanger des valeurs d'attribut dans le même bloc

Bonjour bonuscad,

merci bcp pour ton lisp il est super :wub::wub:

 

STP t’est-il possible de modifier ton lisp pour faire en sorte que lorsque je clique pour copier un texte je puisse ensuite le coller autant de fois que je veux au lieu d’être obligé de relancer à chaque fois la commande ?

 

Merci bcp d'avance

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Bonjour à tous et plus particulièrement à toi bonuscad,

 

J'adore ce code :) et je cherche à coller au mieux avec mon besoin, bref, comment peut-on ne pas sélectionner le texte cible qui est dans mon cas inséré juste avant, j'ai bien testé plusieurs idées :blink: avec (entlast) et une variable T1 insérée un peu partout, mais sans résultat. :angry:

(Command "_INSERT" "*MonTexte" P1 "" "" P2)
(setq T1 (entlast))

Un peu d'aide sur ce coup de pouce me ferai grand bien. :D

Merci par avance.

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é