Aller au contenu

Recopier Texte Mtexte ou Attribut


salvanorigatore

Messages recommandés

Bonjour a tous,

j'ai un peu cherché sur les forums mais j'ai rien trouvé ...:unsure:

 

voilà j'aurais besoins d'un outils qui copie un Text, Mtext ou attribut depuis et vers un Text, Mtext ou attribut.

En fait je veux pouvoir d'un simple clic sur un Text, Mtext ou attribut copier le texte et le coller d'un autre simple clic sur un autre Text, Mtext ou attribut

 

Merci beaucoup d'avance :wub:

" 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

Bonjour,

Sur Cadxp après une rapide recherche, je pense que ce code de BonusCAD fera l’affaire..

http://cadxp.com/topic/7656-copier-la-valeur-de-lattribu/page__view__findpost__p__38070

 

Je ne l’ai pas testé en profondeur mais une lecture rapide du code me dit qu’il devrait plutôt bien fonctionner.

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Salut VDH-Bruno,

merci bcp c’était exactement ce que je cherchais :wub:

 

NB. j'ai préféré le code du message #11

 

.. et biensur un grand merci aussi à BonusCAD :wub::wub:

 

 

Je conseil a tous de l'avoir sous la main car il est très utile et pratique B)

" 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

re,

je reviens sur le sujet pour préciser que ce lisp permet en effet de faire ce que j'attendais mais que il ne le fait qu'une seule fois, il faut donc relancer la commande pour chaque Texte :(

 

Ce que j'aurais voulu c'est qu'il garde la commande et que je puisse coller le Texte autant de fois que je veux.

 

SVP est-ce que quelqu’un saurait modifier ce lisp ?

 

merci beaucoup 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

Re,

 

En attendant mieux, dans le code remplace cette séquence :

(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)
)

 

Par la suivante :

(progn (setq new_text (extract_txt nil (setq dxf1 (sel_obj "à COPIER")) nil))
      (while (setq old_text (extract_txt nil (setq dxf2 (sel_obj "où COLLER")) nil)); modif
        (extract_txt T dxf2 new_text)
      ) ; modif
)

 

C’est pas un modèle d’élégance (faire échappe pour sortir de la boucle) mais cela devrait faire le travail, mes obligations personnelles et professionnelles ne me permettant pas de faire plus en ce moment..

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

je reviens sur le sujet pour préciser que ce lisp permet en effet de faire ce que j'attendais mais que il ne le fait qu'une seule fois, il faut donc relancer la commande pour chaque Texte :(

Ce que j'aurais voulu c'est qu'il garde la commande et que je puisse coller le Texte autant de fois que je veux.

 

J’y pense, on arrive à le faire très facilement, en détournant légèrement le fonctionnement de l’excellente routine d’incrémentation INCSEL (gile):

Increment version 2.0 : Incrémenter une valeur numérique, alphabétique ou alphanumérique dans une chaîne de caractères (texte ou attribut)

commandes : inctxt (insertions multiples d'un texte) ; incatt (insertions multiples d'un bloc avec attribut) ; incsuf (incrémentation du suffixe des textes sélectionnés) ; incsel (incrémentation d'une valeur dans les textes sélectionnés) ; incadd (ajout d'une chaîne avec incrément) ; incr (choisir une de ces commandes)

liens : Incrémenter les suffixes ; Lisp Numeros...besoin d'une correction.

 

Pour cela il te suffit de copier dans la valeur de départ de la boite de dialogue le texte à coller, puis de régler la valeur de l’incrément à 0.

 

C'est simple efficace et sans codage supplémentaire ;)

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Re,

J’y pense, on y arrive très facilement à le faire, en détournant légèrement le fonctionnement de l’excellente routine d’incrémentation INCSEL (gile):

Pour cela il te suffit de copier dans la valeur de départ de la boite de dialogue le texte à coller, puis de régler la valeur de l’incrément à 0.

C'est simple efficace et sans codage supplémentaire ;)

A+

C'est peut-etre efficace mais surement plus long et moins simple qu'avec le lisp de bonuscad ;)

 

mais merci quand même de la suggestion

" 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

Re,

 

En attendant mieux, dans le code remplace cette séquence :

(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)
)

 

Par la suivante :

(progn (setq new_text (extract_txt nil (setq dxf1 (sel_obj "à COPIER")) nil))
  	(while (setq old_text (extract_txt nil (setq dxf2 (sel_obj "où COLLER")) nil)); modif
    	(extract_txt T dxf2 new_text)
  	) ; modif
)

 

C’est pas un modèle d’élégance (faire échappe pour sortir de la boucle) mais cela devrait faire le travail, mes obligations personnelles et professionnelles ne me permettant pas de faire plus en ce moment.

 

Re,

j'ai remplacé le bout de code mais ça ne change rien :blink:

 

voici ce que donne le code avec ta suggestion :

 

(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 "à COPIER")) nil))
  	(while (setq old_text (extract_txt nil (setq dxf2 (sel_obj "où COLLER")) nil)); modif
		(extract_txt T dxf2 new_text)
  	) ; modif
)

           	(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)

)

 

si tu a une solution ...

" 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

si tu a une solution ...

 

Tu as été un peu rapide, il fallait substituer le second bloc d'instruction comme ceci:

(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))
          (while ; modif
            (setq old_text (extract_txt nil (setq dxf2 (sel_obj "où COLLER")) nil))
            (extract_txt T dxf2 new_text)
          ) ;modif
   )
 )
 (prin1)
)

 

A+

Apprendre => Prendre => Rendre

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é