Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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é ?

Annonce

Printemps des cartes 2024

#1 Thu 22 January 2009 14:55

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Autocad : exposer des attributs quelque soit le nom

Aloha
Nous transformons nos fichiers de récolements grâce à FME. Le format natif est le DXF/DWG. Le format de sortie du APIC voire de l'Oracle DB. Les prestataires renseignent des attributs (plus d'une centaine de dénommination) sur certains blocs (plus d'une centaine de type de blocs).
Ci-joint le journal d'un objet.
Je souhaiterai automatiser la récupération des attributs et de leur valeur sans pour autant être tenu de connaître le nom de l'attributs. En effet, ma technique qui consiste à chercher l'index d'une valeur dans la liste des attributs puis exposer les attributs de cette liste nécessite ce pré-requis.
Mon besoin : créer les attributs quelques soient leurs noms ou leur valeur pour tous les blocs de mon fichier source.

Une idée ? Quelqu'un a déjà fait çà ?

D'avance merci,


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#2 Thu 22 January 2009 15:39

ogayte
Participant assidu
Lieu: Saint-Estève
Date d'inscription: 6 Mar 2006
Messages: 658
Site web

Re: Autocad : exposer des attributs quelque soit le nom

Ci-dessous une fonction TCL piquée à Matthieu et à utiliser dans un TclCaller.

Code:

proc ListAttributeNames {} {
global FME_AttributeNames
foreach attr [FME_AttributeNames] {
append champs $attr
append champs ";"
}
return $champs

Cette fonction renvoie la liste des attributs de l'objet. Utiliser un AttributeSplitter à la suite pour découper la chaîne.

Vous pourrez sans doute récupérer les valeurs de chaque champ avec une autre fonction Tcl ou plus simplement en modifiant ce code.


Olivier Gayte
http://www.veremes.com
+33 (0)4-68-38-65-27

Hors ligne

 

#3 Fri 23 January 2009 09:32

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: Autocad : exposer des attributs quelque soit le nom

Aloha
J'ai ajouté l'appel TCl dans mon workbench. Cependant, je ne sais pas vraiment quels doit être la syntaxe pour utiliser la fonction de Matthieu. Ci dessous un extrait de mon fmw :

Code:

#! <TRANSFORMER
#!...
#! <XFORM_ATTR ATTR_NAME="ATTR" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="SRCFILE" PARM_VALUE="$(FME_MF_DIR)test_recup_attr.tcl"/>
#! <XFORM_PARM PARM_NAME="TCLPROG" PARM_VALUE="FME_GetAttribute "/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="TCLCaller"/>
#! <XFORM_PARM PARM_NAME="SRC" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="VAL_ATTR" PARM_VALUE="ATTR"/>
#! </TRANSFORMER>

Ce qui me pose le plus de souci c'est le paramètre de TCLPROG. Doit-il être égal à ListAttributeNames ?
J'obtiens le message d'erreur suivant avec la configuration ci-dessus :

Code:

2009-01-23 09:26:00|   3.2|  0.0|ERROR |@TCL -- failed to evaluate expression `if {"C:\My FME Workspaces\récolements/test_recup_attr.tcl" != {}} {source {C:\My FME Workspaces\récolements/test_recup_attr.tcl}};' -- can't read "champs": no such variable
2009-01-23 09:26:01|   3.2|  0.0|ERROR |@TCL -- failed to evaluate expression `if {"C:\My FME Workspaces\récolements/test_recup_attr.tcl" != {}} {source {C:\My FME Workspaces\récolements/test_recup_attr.tcl}};' -- can't read "champs": no such variable

Il faut dire que si Python je le manie un peu, TCL non.
Merci en tous les cas pour cette piste.


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#4 Mon 26 January 2009 15:40

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: Autocad : exposer des attributs quelque soit le nom

Aloha

Voici  le code que j'utilise :

Code:

proc ListAttributeNames {} {
global FME_AttributeNames;
  foreach attr [FME_AttributeNames] {
    if {![regexp {^fme_} $attr]} {
        if {![regexp {^autocad_} $attr]} {
          append champs $attr ;
          set val [FME_GetAttribute $attr] 
          append champs ";"
          append champs $val
          append champs ";"
          } else {
          append champs ""}
    } else {
    append champs ""}
  };
return $champs
}
# return $champs;

smile


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

Pied de page des forums

Powered by FluxBB