#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,
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
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.
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;
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