Aller au contenu

Concaténer 2 textes cote à cote


JVC

Messages recommandés

Bonjour à tous,

Je cherche le moyen de concaténer dans le même fichier à plusieurs reprises deux textes  du type "TN : " ET "111.00" pour obtenir "TN : 111.00" que j'ai obtenu en décomposant une étiquette de Covadis ...

T2MTEXT ne convient pas car agglomere tous les textes du plans

Comment procéderiez vous ?

 

Merci d'avance 🙂

 

Windows 10

Autocad Map 3D 2022/Covadis 17

QGIS 3.10 et +

Lien vers le commentaire
Partager sur d’autres sites

Coucou,
Pourquoi ne pas lancer la commande TXT2MTXT à plusieurs reprise en ne sélectionnant que 2 textes à chaque fois ? De combien de concaténation parle-t-on ?
Car autrement, comment souhaites-tu faire comprendre à AutoCAD quels textes doivent être merge ensemble ou non si tu sélectionnes tous tes textes en une seule fois ?

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Luna,

Il y a environ entre 500 et 1000 étiquettes.

Le problème vient qu'en décomposer l'étiquette Autocad et Covadis nous en font 2 entités. Idem en passant par Covadis Echanges.

Comment faire comprendre à Autocad les textes à concaténer ?  ils sont alignés et vraiment à côté par conséquent 🙂

Windows 10

Autocad Map 3D 2022/Covadis 17

QGIS 3.10 et +

Lien vers le commentaire
Partager sur d’autres sites

J'ai une idée éventuelle mais il me faudrait un .dwg d'exemple pour voir si c'est faisable. Et ce n'est pas optimale car chat reviendrait à tester si la distance entre un premier texte et les autres est inférieure (voire égale) à une valeur spécifique et lancer la commande sur ces deux textes, puis passer au texte suivant, etc...

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Coucou,
Désolée pour le délai, je n'ai pas pu trouver de temps libre plus tôt. J'ai testé sur ton DWG et cela semble être bon :

(defun c:JVC_ASSOTXT (/ *error* foo e fuzz layer cmdecho jsel i name lst tmp err)
  ;; PARAMETRAGE UTILISATEUR !!!
  (setq
    layer "TOU_EU_ALTI_FE"  ;; --> Calque défini pour le filtre de sélection (si plusieurs, séparer par une virgule sans espace!)
    e 0.952993              ;; --> Distance à prendre en compte entre les 2 textes à associer
    fuzz 1E-4               ;; --> Précision sur l'écart entre la distance à considérer pour associer les textes et la distance réelle entre 2 textes
  )
  ;; FIN DU PARAMETRAGE UTILISATEUR !!!
  (defun *error* (msg)
    (setvar "CMDECHO" cmdecho)
    (princ msg)
  )
  (defun foo (lst / name pt tmp ent)
    (if
      (and
        (setq
          name (car lst)
          pt (cdr (assoc 10 (entget name)))
          tmp (cdr lst)
        )
        (not
          (while (not (equal (distance pt (cdr (assoc 10 (entget (car tmp))))) e fuzz))
            (setq tmp (cdr tmp))
          )
        )
        (setq ent (car tmp))
      )
      (progn
        (setq lst (cdr lst))
        (setq lst (vl-remove ent lst))
        (setq tmp (ssadd name))
        (ssadd ent tmp)
        (command "TXT2MTXT" tmp "")
        (setq name (entlast))
        (entmod (subst '(41 . 3) (assoc 41 (entget name)) (entget name)))
        lst
      )
      name
    )
  )
  (sssetfirst)
  (vla-StartUndoMark (vla-get-activedocument (vlax-get-acad-object)))
  (and
    (setq cmdecho (getvar "CMDECHO"))
    (setvar "CMDECHO" 0)
    (setq err (ssadd))
    (setq jsel (ssget "_X" (list '(0 . "TEXT") (cons 8 layer))))
    (repeat (setq i (sslength jsel))
      (setq
        name (ssname jsel (setq i (1- i)))
        lst (cons name lst)
      )
    )
    (not
      (while lst
        (if (not (listp (setq tmp (foo lst))))
          (progn
            (ssadd tmp err)
            (setq lst (cdr lst))
          )
          (setq lst tmp)
        )
      )
    )
    (sssetfirst nil err)
    (setvar "CMDECHO" cmdecho)
    (princ
      (strcat
        "\nUn total de " (itoa (sslength jsel))
        " blocs ont été traités."
        (if (< 0 (sslength err))
          (strcat "\n /!\\ " (itoa (sslength err)) "/" (itoa (sslength jsel)) " blocs ont échoués dans le traitement...")
          ""
        )
      )
    )
  )
  (vla-EndUndoMark (vla-get-activedocument (vlax-get-acad-object)))
  (princ)
)

Je n'ai pas émis l'hypothèse que tu puisses changer les paramètres au cours de la commande mais je les ai tout de même regroupé en début de programme pour modifier les calques (pour filtrer la sélection), la distance à considérer et la tolérance.

En espérant que c'est OK pour toi 🙂

Bisous,
Luna

  • Like 1
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Une autre solution : Filtrer les chaines "Fe :" avec la sélection rapide et de les placer dans un calque spécifique, puis avec un lisp ajouter la chaine "Fe : " à gauche des chaines numériques.

J'ai réécrit mon programme pour qu'il filtre la sélection des textuels (calque et type d'objets TEXT ou MTEXT) et qu'il fasse la concaténation uniquement sur les valeurs numériques.Luna-JVC_ASSOTXT_002.thumb.jpg.c52448471c5e7ac0c12f8805f39ee945.jpg

Fabcad,

Le Rennais Métropolitain.

 

 

 

 

FD_prefixe_v003.lsp

Modifié par fabcad
Lisp modifié avec commentaires
  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Salut à tous les deux : @Luna et @fabcad !

 

Merci beaucoup pour ces programmes 🙂

Qui fonctionnent tous les deux 🙂

 

Disposant de covadis, j'ai découvert par la même occasion la possibilité de placer un préfixe devant les données .

Encore merci pour vos réponses !

 

Un tres bon week end

Windows 10

Autocad Map 3D 2022/Covadis 17

QGIS 3.10 et +

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é