banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Fri 26 November 2021 13:58

Acid
Juste Inscrit !
Date d'inscription: 26 Nov 2021
Messages: 4

[ACAD] Transfert d'attribut d'un bloc vers un autre

Bonjour,

Je dessinateur et dans le cadre de mon travail je suis confronté à un problème assez récurent mais qui doit être le même pour beaucoup de personne.
Le souci c’est que je ne trouve rien en fonctions AutoCAD et mes recherches me tournent vers le LISP.
Je ne connais rien au LISP et du coup je ne sais pas comment résoudre mon problème. Je viens vers vous afin de savoir si des outils existent.

J’ai un bloc perso « TCPOINT_R » qui est une substitution du fameux bloc Covadis « TCPOINT » avec plus d’attributs (MAT / ALT / COD / PROFONDEUR / DIAMETRE / REMARQUES / etc…).
J’ai d’autre part aux même coordonnées un bloc quelconque « BLOCXXX » avec divers attributs (ATTX1 / ATTX2 / ATTX3 / etc…).

Je cherche un moyen de transférer les données de l’un a l’autre sans devoir les remplir à la main.
Idéalement un outil simple mais le plus ouvert possible.
En LISP j’ai vu que l’on peut lancer une ligne de commande pour activer la fonction.
Exemple : (nom_de_la_fonction TCPOINT_R(MAT)=BLOCXXX(ATTX1) TCPOINT_R(PROFONDEUR)=BLOCXXX(ATTX2))

Existe-t-il une fonction AutoCAD qui peut faire cela ou sinon une commande LISP comme celle-ci est-elle réalisable ?

Hors ligne

 

#2 Tue 30 November 2021 08:57

olivier.eckmann
Participant assidu
Date d'inscription: 14 Dec 2007
Messages: 355

Re: [ACAD] Transfert d'attribut d'un bloc vers un autre

Bonjour,

Avec ce code ça permet de faire de la recopie 1 à 1 s'il n'y en a pas trop.

Code:

(defun C:COPYATT2ATT ( / oAtt1 oAtt1Dxf oAtt2 oAtt2Dxf sVal1)
  (while (and (setq oAtt1 (car (nentsel "\nAttribut source : ")))
          (setq oAtt1Dxf (entget oAtt1))
          (= "ATTRIB" (cdr (assoc 0 oAtt1Dxf)))
          (setq oAtt2 (car (nentsel "\nAttribut destination : ")))
          (setq oAtt2Dxf (entget oAtt2))
          (= "ATTRIB" (cdr (assoc 0 oAtt2Dxf)))
     )
    (setq sVal1 (cdr (assoc 1 oAtt1Dxf)))
    (setq oAtt2Dxf (subst (cons 1 sVal1) (assoc 1 oAtt2Dxf) oAtt2Dxf))
    (entmod oAtt2Dxf)
  )
)

Olivier

Hors ligne

 

#3 Tue 30 November 2021 09:57

Patrice
JeSuisCharlie
Date d'inscription: 16 Sep 2005
Messages: 4787

Re: [ACAD] Transfert d'attribut d'un bloc vers un autre

Hello Olivier - BRAVO !

Parfaite ta petite routine, et en plus elle fonctionne aussi sur les Blocs Dynamiques !

La Sante, GeoBye, Pat


(Autodesk Expert Elite Team)

Hors ligne

 

#4 Fri 03 December 2021 07:59

Acid
Juste Inscrit !
Date d'inscription: 26 Nov 2021
Messages: 4

Re: [ACAD] Transfert d'attribut d'un bloc vers un autre

Bonjour,

Je n'arrive pas a la tester ta routine. je dois vraiment être mauvais lol.
J'ai copicolle dans la ligne de commande, c'est sa qu'il faut faire?

pour tester dans un dessin vierge j'ai mis un bloc TCPOINT_R avec des valeurs quelconques dans certain ATT.
et mis un autre TCPOINT_R vierge (aux mêmes coordonnées puis juste a coté) mais les attributs ne se transfert pas.

Je ne comprends pas que cette fonction ne soit pas prévu d'origine, sa me parait quelque chose de simple et d'essentiel de nos jour ou beaucoup de données passe par le SIG.

Hors ligne

 

#5 Fri 03 December 2021 08:17

Patrice
JeSuisCharlie
Date d'inscription: 16 Sep 2005
Messages: 4787

Re: [ACAD] Transfert d'attribut d'un bloc vers un autre

Hello

Tu fais un copier / coller du code dans un fichier TXT (notepad.exe)
Fichier / Enregistrer sous... Et tu nommes le fichier COPATT2ATT.LSP
Dans AutoCAD, Commande :  APPLOAD < Entree >
Tu selectionnes et charges le bon fichier
Au clavier:  COPYATT2ATT

La Sante, GeoBye, Pat


(Autodesk Expert Elite Team)

Hors ligne

 

#6 Mon 06 December 2021 07:51

Acid
Juste Inscrit !
Date d'inscription: 26 Nov 2021
Messages: 4

Re: [ACAD] Transfert d'attribut d'un bloc vers un autre

Bonjour,

Merci Patrice pour la démarche.

Petit retour après avoir testé la routine, elle permet de sélectionner manuellement un ATT et de copier la valeur vers un ATT sélectionné.
c'est en effet ce que je cherche a faire, mais il faut sélectionner les valeurs une a une? ou elle peut le faire sur l'ensemble des blocs du dessin?
J'ai environ 400 ATT a transférer, certes c'est plus rapide que de copie/colle chacun.

Merci pour ce coup de pouce mais je continue mes recherches.

Hors ligne

 

#7 Mon 06 December 2021 09:17

olivier.eckmann
Participant assidu
Date d'inscription: 14 Dec 2007
Messages: 355

Re: [ACAD] Transfert d'attribut d'un bloc vers un autre

Bonjour,

A raison de 10s par attribut, ça ne fait que 4000s soit un peu plus d'une heure. Certes ce n'est absolument pas passionnant de cliquer des attributs pendant 1h, mais le temps de chercher/trouver/tester/valider une solution plus automatique tu aurais déjà fini le travail.
Je suis le premier à vouloir automatiser les choses, mais parfois on s'acharne alors que la solution manuelle peut être plus rapide.

Sinon sans programmation, on peut s'en sortir avec ATTIN, ATTOUT et l'extraction de données :
1. S'assurer d'avoir un identifiant unique pour chacune des 2 séries. Normalement pour les TCPOINT pas de souci, pour les autres voir l'attribut qui sert de matricule.
2. ATTOUT sur les TCPOINT => fichier TCPOINT.TXT, et ATTOUT sur les blocs XXX => BLOCXXX.TXT
3. Extraction de données sur les TCPOINT avec données X Y et MAT, idem sur les bloc XXX avec X Y ATTXX
4. Ouvrir les 2 fichiers TXT des TCPOINT sous Excel et jointure sur la matricule pour ajouter X et Y à la liste des valeur par HANDLE. Idem sur les bloc XXX
5. Jointure sur les X pour recopier les valeurs des attributs du bloc XXX dans les attributs du TCPOINT
6. ATTIN sur les TCPOINT

Olivier

Hors ligne

 

#8 Mon 06 December 2021 10:59

Acid
Juste Inscrit !
Date d'inscription: 26 Nov 2021
Messages: 4

Re: [ACAD] Transfert d'attribut d'un bloc vers un autre

@olivier.eckmann le problème c'est que cette tache va être systématique pour tous les dossiers de notre client qui nous impose un bloc d'information, donc des heures en perspective.

l'automatisation limite les erreurs d'où mes recherches.

j'avais déjà pensé a ATTIN / ATTOUT sans avoir fait le test.

une autre solution potentiellement possible mais pas très jolie:
- renommer les ATT dans mon bloc TCPOINT pour que le nom corresponde a celui de destination
- un coup de BATTMAN
- substituer les TCPOINT par mon bloc destination
- un coup de BATTMAN

Comme déjà dit, j'espère que ce post servira peut être à plusieurs personnes face au même souci..

Greg

Hors ligne

 

Pied de page des forums

Powered by FluxBB