Aller au contenu

Remplacer un texte par un attribut en récupérant la valeur du texte


Messages recommandés

Posté(e)

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

Posté(e)

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

 

Posté(e)

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

Posté(e)

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

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é