JahMan
Actif


Sexe: 
Inscrit le: 10 Aoû 2005
Messages: 916
|
Posté le: Mar Aoû 23, 2005 14:03 pm Sujet du message: Explication de ma presence sur le forum....
voila je suis en stage et je dois convertir un programme TCL qui ressemble à
ca :
Code: | set
racine "//geodoc/proddm/newcat"
if {[llength $argv]==2} {
set param [lindex $argv 0]
set entree [lindex $argv 1]
} {
#Tableau de choix des fichiers
frame .debut
pack .debut -expand 1 -fill x
frame .param
label .lp -text "Nom du fichier paramètres :"
set param "//geodoc/proddm/newcat/niveaufin.tab"
entry .ep -width 50 -textvariable param
button .rp -text "Recherche" -command {set param \
[tk_getOpenFile -initialdir $racine -initialfile niveaufin.tab
-title "Fichier Paramètres ?" -filetypes {{"Fichier
tab" .tab} {"Autres" .*}}]}
pack .param -in .debut -expand 1 -fill x -side top
pack .lp -in .param -side left
pack .rp -in .param -side right
pack .ep -in .param -expand 1 -fill x
frame .entree
label .le -text "Nom du fichier geo :"
entry .ee -width 50 -textvariable entree
button .re -text "Recherche" -command {set entree \
[tk_getOpenFile -initialdir [pwd] -initialfile *.geo
-title "Fichier Geo ?" -filetypes {{"Fichier .geo
" {.geo}} {"Fichier .zip "
{.zip}} }]}
pack .entree -in .debut -expand 1 -fill x -side top
pack .le -in .entree -side left
pack .re -in .entree -side right
pack .ee -in .entree -expand 1 -fill x
button .ok -text "Ok" -command {set ok 1}
button .quit -text "Quitter" -command {exit}
pack .ok -in .debut -side left
pack .quit -in .debut -side right
vwait ok
}
if {[file extension $entree]== ".zip"} {
exec cmd.exe /c pkunzip.exe -o $entree
set entree "[file rootname $entree].geo"
destroy .param .entree .debut
frame .debut
pack .debut -expand 1 -fill x
frame .entree
destroy .le .re .ee .ok .quit
label .le -text "Nom du fichier geo :"
entry .ee -width 50 -textvariable entree
button .re -text "Recherche" -command {set entree
\
[tk_getOpenFile -initialdir [pwd] -initialfile
*.geo -title "Fichier Geo ?" -filetypes
{{"Fichier .zip " {.zip}}
}]}
pack .entree -in .debut -expand 1 -fill x -side top
pack .le -in .entree -side left
pack .re -in .entree -side right
pack .ee -in .entree -expand 1 -fill x
button .ok -text "Ok" -command {set ok 1}
button .quit -text "Quitter" -command {exit}
pack .ok -in .debut -side left
pack .quit -in .debut -side right
vwait ok
}
set idpts 0
# LAYERS pour les elements graphiques
set tab [open $param r]
set lecture [gets $tab]
incr idpts
set class(INCONNU,class) " 0\nLAYER\n 5\n[format
"%X" $idpts]\n100\nAcDbSymbolTableRecord\n 2\nINCONNU\n
70\n0\n 62\n7\n 6\nCONTINUOUS"
set class(INCONNU,present) 0
incr idpts
set class(objet,class) " 0\nLAYER\n 5\n[format
"%X" $idpts]\n100\nAcDbSymbolTableRecord\n 2\nobjet\n
70\n0\n 62\n7\n 6\nCONTINUOUS"
set class(objet,present) 0
while {![eof $tab]} {
if {[file exists $racine/$lecture]==0 || [file
exists $racine/$lecture/cst]==0} {set lecture
"fond"}
if {[file exists
$racine/$lecture/cst/dxf.cst]==1} {set rep [open
$racine/$lecture/cst/dxf.cst r]} {set rep [open
$racine/$lecture/cst/couleur.cst r]}
set lit [gets $rep]
while {![eof $rep]} {
incr idpts
regsub {^ *} $lit {} lit ;# enlŠve
les blanc du debut
regsub -all { +} $lit { } lit ;# ne
laisse qu'un blanc entre les valeurs
if {$lit!=""} {
set lit [split $lit]
set cst [lindex $lit 0]
regsub -all { } $cst {} cst
set type [lindex $lit 1]
set epais [lindex $lit 2]
set tcolor [lindex $lit 3]
regsub -all {^0*} $tcolor {} tcolor
if {$tcolor==""} {set tcolor
7}
set motif [lindex $lit 4]
set fond [lindex $lit 5]
set mcolor [lindex $lit 6]
set class($cst,present) 0
set class($cst,class) "
0\nLAYER\n 5\n[format "%X"
$idpts]\n100\nAcDbSymbolTableRecord\n 2\n$cst\n 70\n0\n
62\n$tcolor\n 6\nCONTINUOUS"
}
set lit [gets $rep]
}
close $rep
set lecture [gets $tab]
}
close $tab
set Xmax 0
set Ymax 0
set Xmin 99999999
set Ymin 99999999
set ecritlayer ""
set nblayer 0
#Analyse du fichier geo pour mini maxi et layer
proc analyse {X Y cst obj} {
global Xmin Xmax Ymin Ymax class ecritlayer nblayer trace idpts
if {$cst==""} {set cst
"INCONNU"}
regsub -all { } $cst {} cst
if {[info exists class($cst,class)]==0}
{
set class($cst,present) 0
incr idpts
set class($cst,class) "
0\nLAYER\n 5\n[format "%X"
$idpts]\n100\nAcDbSymbolTableRecord\n 2\n$cst\n 70\n
0\n 62\n 7\n 6\nCONTINUOUS"
}
if {$class($cst,present)==0} {
set class($cst,present) 1
set ecritlayer
"$ecritlayer\n$class($cst,class)"
incr nblayer
}
if {$obj==0} {
if {$X>$Xmax} {set Xmax $X}
if {$Y>$Ymax} {set Ymax $Y}
if {$X<$Xmin} {set Xmin $X}
if {$Y<$Ymin} {set Ymin $Y}
}
}
# Chargement des proc
source /geo2dxf/dxf.tcl
#Lecture Ecriture
set sortie [file rootname $entree]
set nomsortie $sortie
set entree [open $entree r]
fconfigure $entree -buffersize 1024000
set lit_geo [gets $entree]
set id [pid]
set sortie_Block [open "B$id" w]
fconfigure $sortie_Block -buffersize 1024000
set sortie_Entities [open "E$id" w]
fconfigure $sortie_Entities -buffersize 1024000
set s 0
set d 0
set inclusion 0
set courbe 0
set idtexte 0
set Ecrit ""
while {![eof $entree]} {
set decoupe [split $lit_geo \;]
set topologie [lindex $decoupe 1]
# Generation des lignes et polylgnes
if {$topologie=="P" | $topologie=="L"
& [lindex $decoupe 17]!=0} {
PL 0
set Ecrit ""
}
# Generation des objets
if {$topologie=="S"} {
set Ecrit ""
set cst [lindex $decoupe 7]
regsub { } $cst {} cst
set Entitee [lindex $decoupe 6]
if {$Entitee==""} {set Entitee
"INCONNUE"}
set HR1 $cst
if {[info exists
symb($cst,exist)]==0} {
set symb($cst,exist) 1
set tab [open $param r]
set lecture [gets $tab]
while {[eof $tab]==0 &
[file exists $racine/$lecture/symboles/$cst.geo]==0} {
set lecture [gets
$tab]
}
close $tab
if {[file exists
$racine/$lecture/symboles/$cst.geo]==0 || [file exists
$racine/$lecture/symboles]==0 | [file exists
$racine/$lecture/symboles]==0 } {
#puts $trace "objets $cst inconnu"
set cst "HR1"
}
if { $cst!="HR1" } {
set ficsymb [open
"$racine/$lecture/symboles/$cst.geo" r]
} {set ficsymb [open
"$racine/niveaufin/symboles/HR1.geo" r]}
set lit_symb [gets $ficsymb]
set Xobjmax 0
set Yobjmax 0
set Xobjmin 99999999
set Yobjmin 99999999
while {![eof $ficsymb]} {
set decsymb [split $lit_symb \;]
set topologie [lindex $decsymb 1]
if {$topologie=="S" &
[lindex $decsymb 7]=="ANC"} {
set xorg [expr .001*[lindex
$decsymb 12]]
set yorg [expr .001*[lindex
$decsymb 13]]
set symb($cst,dimx)
[lindex $decsymb 17]
set symb($cst,dimy)
[lindex $decsymb 18]
incr idpts
set ancre "
0\nBLOCK\n 8\n0\n 2\n$HR1\n 5\n[format "%X"
$idpts]\n 10\n$xorg\n 20\n$yorg\n 30\n0\n 70\n0"
}
if {$topologie=="P" |
$topologie=="L" & [lindex $decsymb 17]!=0} {
if {[lindex $decsymb
12]>$Xobjmax} {set Xobjmax [lindex $decsymb
12]}
if {[lindex $decsymb
13]>$Yobjmax} {set Yobjmax [lindex $decsymb
13]}
if {[lindex $decsymb
12]<$Xobjmin} {set Xobjmin [lindex $decsymb
12]}
if {[lindex
$decsymb 13]<$Yobjmin} {set Yobjmin [lindex $decsymb
13]}
set inverse $lit_geo
set lit_geo $lit_symb
PL 1
}
set lit_symb [gets
$ficsymb]
}
set lit_geo $inverse
puts $sortie_Block "$ancre"
puts $sortie_Block "$Ecrit"
set finsymb 1
close $ficsymb
set cst [lindex $decoupe 7]
regsub { } $cst {} cst
set symb($cst,dx) [expr
.1*($Xobjmax-$Xobjmin)]
set symb($cst,dy) [expr
.1*($Yobjmax-$Yobjmin)]
puts $sortie_Block "
0\nENDBLK"
}
set cst [lindex $decoupe 7]
regsub { } $cst {} cst
analyse [lindex $decoupe 12] [lindex $decoupe
13] objet 0
set X [expr .01*[lindex $decoupe
12]]
set Y [expr .01*[lindex $decoupe
13]]
set Z [lindex $decoupe 14]
regsub {\+0} $Z {} Z
if {$Z==""} {set Z 0}
set Z [expr .01*$Z]
set dimx [lindex $decoupe 17]
set dimx [expr 1.0*$dimx/$symb($cst,dx)]
set dimy [lindex $decoupe 18]
set dimy [expr 1.0*$dimy/$symb($cst,dy)]
set angle [lindex $decoupe 19]
incr idpts
puts $sortie_Entities " 0\nINSERT\n
8\nobjet\n 2\n$HR1\n 5\n[format "%X" $idpts]\n
10\n$X\n 20\n$Y\n 30\n$Z"
puts $sortie_Entities " 41\n$dimx\n 42\n$dimy\n
50\n$angle"
}
# Generation des ecritures
if {$topologie=="E"} {
incr idtexte
set cst [lindex $decoupe 7]
regsub { } $cst {} cst
set Entitee [lindex $decoupe 6]
if {$Entitee==""} {set Entitee
"INCONNUE"}
set dimx [lindex $decoupe 16]
set dimy [lindex $decoupe 17]
set fechelle [expr 1.0*$dimx/$dimy]
set angle [lindex $decoupe 18]
set angle [expr 3.14159*$angle/180]
set gcd [string range [lindex $decoupe 20] 0
0]
set code72 1
if {$gcd=="G"} {set code72
0}
if {$gcd=="D"} {set code72
2}
set code73 2
if {$gcd=="B"} {set code73
1}
if {$gcd=="H"} {set code73
3}
analyse [lindex $decoupe 12] [lindex $decoupe
13] $cst 0
set X1 [expr .01*[lindex $decoupe 12]]
set Y1 [expr .01*[lindex $decoupe 13]]
set texte [lindex $decoupe 22]
incr idpts
set larg [expr .01*$dimy]
set long [expr .01*$dimx*[string length
$texte]*.5]
set X2 [expr $X1+$long*cos($angle)]
set Y2 [expr $Y1+$long*sin($angle)]
puts $sortie_Entities " 0\nTEXT\n
1\n$texte\n 5\n[format "%X" $idpts]\n 8\ntexte\n
10\n$X1\n 20\n$Y1"
puts $sortie_Entities " 40\n$larg"
}
set lit_geo [gets $entree]
}
close $entree
flush $sortie_Entities
close $sortie_Entities
flush $sortie_Block
close $sortie_Block
# Finalisation du fichier DXF
set sortie [open $nomsortie.dxf w]
#fconfigure $sortie -buffersize 1024000
set Xmin [expr .01*$Xmin]
set Xmax [expr .01*$Xmax]
set Ymin [expr .01*$Ymin]
set Ymax [expr .01*$Ymax]
set Xcentre [expr .5*($Xmin+$Xmax)]
set Ycentre [expr .5*($Ymin+$Ymax)]
puts $sortie " 0\nSECTION\n 2\nHEADER\n 9"
puts $sortie "\$ACADVER\n 1\nAC1009\n 9\n\$INSBASE\n 10\n0\n
20\n0\n 30\n0\n 9"
puts $sortie "\$EXTMIN\n 10\n$Xmin\n 20\n$Ymin\n 30\n0\n
9\n\$EXTMAX\n 10\n$Xmax\n 20\n$Ymax\n 30\n50\n 9"
puts $sortie "\$LIMMIN\n 10\n$Xmin\n 20\n$Ymin\n 9\n\$LIMMAX\n
10\n$Xmax\n 20\n$Ymax\n 9\n\$LUPREC\n 70\n 2\n
0\nENDSEC"
puts $sortie " 0\nSECTION\n 2\nCLASSES\n
0\nENDSEC"
puts $sortie " 0\nSECTION\n 2\nTABLES"
#puts $sortie " 0\nTABLE\n 2\nVPORT\n 5\n1\n
70\n0\n 0\nENDTAB"
#puts $sortie " 0\nTABLE\n 2\nLTYPE\n 5\n3\n
70\n0\n 0\nENDTAB"
#puts $sortie " 0\nTABLE\n 2\nUCS\n 5\n4\n
70\n0\n 0\nENDTAB"
#puts $sortie " 0\nTABLE\n 2\nSTYLE\n 5\n5\n
70\n0\n 0\nENDTAB"
#puts $sortie " 0\nTABLE\n 2\nVIEW\n 5\n6\n
70\n0\n 0\nENDTAB"
#puts $sortie " 0\nTABLE\n 2\nAPPID\n 5\n7\n
70\n0\n 0\nENDTAB"
#puts $sortie " 0\nTABLE\n 2\nDIMSTYLE\n 5\n8\n
70\n0\n 0\nENDTAB"
#puts $sortie " 0\nTABLE\n 2\nBLOCK_RECORD\n 5\n8\n
70\n0\n 0\nENDTAB"
puts $sortie " 0\nTABLE\n 2\nLAYER\n
5\nA\n100\nAcDbSymbolTable\n 70\n$nblayer$ecritlayer\n 0\nENDTAB\n
0\nENDSEC"
#puts $sortie " 0\nTABLE\n 2\nLAYER\n 5\nA\n
70\n1$ecritlayer\n 0\nENDTAB\n 0\nENDSEC"
puts $sortie " 0\nSECTION\n 2\nBLOCKS"
close $sortie
#set entree_Block [open B$id r]
#fconfigure $entree_Block -buffersize 1024000
#set lit [gets $entree_Block]
#while {[eof $entree_Block]==0} {if
{$lit!=""} {puts $sortie $lit};set lit [gets
$entree_Block]}
#close $entree_Block
exec cat B$id >> $nomsortie.dxf
exec d:/utils/rm -f B$id
set sortie [open $nomsortie.dxf a]
puts $sortie " 0\nENDSEC"
puts $sortie " 0\nSECTION\n 2\nENTITIES"
close $sortie
#set entree_Entitee [open E$id r]
#fconfigure $entree_Entitee -buffersize 1024000
#set lit [gets $entree_Entitee]
#while {[eof $entree_Entitee]==0} {if
{$lit!=""} {puts $sortie $lit};set lit [gets
$entree_Entitee]}
#close $entree_Entitee
exec cat E$id >> $nomsortie.dxf
exec d:/utils/rm -f E$id
set sortie [open $nomsortie.dxf a]
puts $sortie " 0\n\ENDSEC\n 0\nEOF"
close $sortie
#exec d:/utils/rm -f E$id
#puts $sortie " 0\n\ENDSEC\n 0\nEOF"
#flush $sortie
#puts $trace "Termine"
#flush $trace
exit
|
En C....
Si ya quelq'un qui veut m'aider
Put*** de stage
|
JahMan
Actif


Sexe: 
Inscrit le: 10 Aoû 2005
Messages: 916
|
Posté le: Mer Aoû 24, 2005 10:25 am Sujet du message:
hehe pache, clair je bosse pas beaucoup... je deprime ces derniers temps...
Alors entre deux posts je tape une petite ligne de code, je me documente sur
le langage...
Tu sais un stage non remunéré ca motive vraiment, mais vraiment pas du
tout!
merci pour ton soutien
Jah Bless
|