nen Posté(e) le 3 mai 2023 Posté(e) le 3 mai 2023 Bonjour le forum👋, Je me permets de revenir vers vous 🙂 J’ai un plan dans lequel le dessinateur a placé du texte (commande : _texte) en fait il aurait dû le faire avec un bloc avec un attribut. Ma question est la suivante, est-il possible de remplacer un texte par un bloc avec un attribut et récupérer la valeur du texte ? Dis d’une autre façon pour être plus claire (dans le dwg joint), l’attribut est en bleu et le texte en jaune, je voudrais remplacer le jaune par le bleu et récupérer la valeur du jaune. J’espère que c’est claire 😉 Meilleures salutations Exemple.dwg
JPhil Posté(e) le 3 mai 2023 Posté(e) le 3 mai 2023 Voici un programme qui récupère la valeur d'un texte (mtexte ou attribut) et le colle sur un texte (mtexte ou attribut) : (defun c:foo ( / selatt selatt2 objatt objatt2) (setq selatt (nentsel (strcat "\nSélectionner l'attribut ou le texte à copier :"))) (setq selatt2 (nentsel (strcat "\nSélectionner l'attribut ou le texte de destination :"))) (setq objatt (vlax-ename->vla-object (car selatt))) (setq objatt2 (vlax-ename->vla-object (car selatt2))) (if (and (or (= (vla-get-ObjectName objatt) "AcDbText") (= (vla-get-ObjectName objatt) "AcDbMText") (= (vla-get-ObjectName objatt) "AcDbAttribute")) (or (= (vla-get-ObjectName objatt2) "AcDbText") (= (vla-get-ObjectName objatt2) "AcDbMText") (= (vla-get-ObjectName objatt2) "AcDbAttribute"))) (vla-put-textstring objatt2 (vla-get-textstring objatt)) ) )
bonuscad Posté(e) le 3 mai 2023 Posté(e) le 3 mai 2023 Bonjour, A copier-coller directement en ligne de commande. ((lambda ( / js n dxf_ent pt txt) (setq js (ssget '((0 . "TEXT") (62 . 2)))) (cond (js (repeat (setq n (sslength js)) (setq dxf_ent (entget (ssname js (setq n (1- n)))) pt (cdr (assoc 10 dxf_ent)) txt (cdr (assoc 1 dxf_ent)) ) (entmake (list '(0 . "INSERT") '(100 . "AcDbEntity") '(67 . 0) '(410 . "Model") (cons 8 (getvar "CLAYER")) '(62 . 4) '(100 . "AcDbBlockReference") '(66 . 1) (cons 2 "Attribut") (cons 10 pt) '(41 . 1.0) '(42 . 1.0) '(43 . 1.0) '(50 . 0.0) '(70 . 0) '(71 . 0) '(44 . 0.0) '(45 . 0.0) '(210 0.0 0.0 1.0) ) ) (entmake (list '(0 . "ATTRIB") '(100 . "AcDbEntity") '(67 . 0) '(410 . "Model") (cons 8 (getvar "CLAYER")) '(62 . 0) '(100 . "AcDbText") (cons 10 pt) '(40 . 8.0) (cons 1 txt) '(50 . 0.0) '(41 . 1.0) '(51 . 0.0) '(7 . "Standard") '(71 . 0) '(72 . 1) (cons 11 pt) '(210 0.0 0.0 1.0) '(100 . "AcDbAttribute") '(280 . 0) '(2 . "NUMERO") '(70 . 0) '(73 . 0) '(74 . 2) '(280 . 1) ) ) (entmake (list '(0 . "SEQEND") '(100 . "AcDbEntity") '(67 . 0) '(410 . "Model") (cons 8 (getvar "CLAYER")) '(62 . 4))) ) ) ) (prin1) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
nen Posté(e) le 3 mai 2023 Auteur Posté(e) le 3 mai 2023 Bonsoir, Je vous remercie JPhil et Bonuscad pour votre aide👍. Ton code Bonuscad fait exactement ce que je désirais faire. JPhil ton code fonctionne très bien, malheureusement ce n’est pas vraiment ce je voulais faire mais il est aussi très utile. J’ai fait une petite modification, J’ai rajouté « (defun c:foo2 () » avec une parenthèse en plus à la fin afin d’éviter de faire des copier-coller😉. Une petite question🤔 le nom bloc dans le code est bien « (cons 2 "Attribut") » et pour l’étiquette « '(2 . "NUMERO") » ? Si je veux changer le nom du bloc ou l’étiquette c’est bien là que je dois les changer ?🤔 Meilleures salutations
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