return ### # Generate sectors ### proc draw_deck {filename deckrad scale} { set trackwidth 10 set roadwidth 3 set radius [expr {$deckrad*$scale}] set swidth [expr {$trackwidth*$scale}] set rwidth [expr {$roadwidth*$scale}] set tracks [expr {int($deckrad/$trackwidth)}] set viewbox [expr {$radius*2}] set fout [open [file rootname $filename].svg w] fconfigure $fout -translation crlf puts $fout {} set cx [expr {$radius+$roadwidth*$scale}] set cy [expr {$radius+$roadwidth*$scale}] set map {} dict set map %radius% $radius dict set map %bbox% [expr {$radius*2+$roadwidth*$scale*2}] dict set map %cx% $cx dict set map %cy% $cy dict set map %tw% $swidth set pi [expr {4.0*atan(1.0)}] puts $fout [string map $map {}] set unit_area [expr {$trackwidth*$trackwidth*$pi}] set r [expr {$trackwidth+$roadwidth}] dict set map %iw% [expr {$trackwidth*$scale}] puts $fout [string map $map {}] puts $fout [string map $map {1000}] set track 2 set divisions 6 set hall 1 set break 0 while {$r < $deckrad} { set irad $r set test_rad [expr {$irad+$trackwidth}] set hollow [expr {$irad*$irad*$pi}] set oarea [expr {$divisions*$unit_area+$hollow+$roadwidth*6*$trackwidth}] set orad [expr {ceil(sqrt($oarea/$pi)*4.0)*0.25}] dict set map %track_r% [expr {$scale*$orad}] dict set map %iw% [expr {$scale*$irad}] dict set map %ow% [expr {$scale*$orad}] if {($track % 2)==1} { set hall 0 } else { set hall 1 } if {($orad+$trackwidth) > $deckrad} { set orad [expr {$deckrad-$roadwidth}] set hall 1 dict set map %ow% [expr {$scale*$orad}] set divisions [expr {int(ceil(($pi*$orad*$orad-$hollow)/$unit_area/6))*6}] set break 1 } set trad [expr {$irad+$trackwidth*0.5}] set theta 0 set dtheta [expr {2.0*$pi/$divisions}] if {!$hall} { puts $fout [string map $map {}] set r [expr {$orad+$roadwidth}] } else { puts $fout [string map $map {}] puts $fout [string map $map {}] set r $orad } for {set d 0} {$d < $divisions} {incr d} { set theta [expr {2.0*$pi/$divisions*$d}] set ttheta [expr {2.0*$pi/$divisions*($d-0.5)}] dict set map %x0% [expr {$cx+$scale*$irad*cos($theta)}] dict set map %x1% [expr {$cx+$scale*$orad*cos($theta)}] dict set map %y0% [expr {$cy+$scale*$irad*sin($theta)}] dict set map %y1% [expr {$cy+$scale*$orad*sin($theta)}] puts $fout [string map $map {}] dict set map %tx% [expr {$cx+$scale*$trad*cos($ttheta)}] dict set map %ty% [expr {$cy+$scale*$trad*sin($ttheta)}] set sector [expr {int(floor(360-360*$d/$divisions))}] if {$sector==360} { set sector 0 } dict set map %text% [format "%d%03d" $track $sector] puts $fout [string map $map {%text%}] } if {$break} { break } incr divisions 6 incr track } if {!$hall} { dict set map %ow% [expr {[dict get $map %ow%]+($roadwidth*$scale)}] puts $fout [string map $map {}] } puts $fout [string map $map {}] puts $fout {} } set level 0 foreach radius { 32.79 45.83 55.45 63.25 69.82 75.50 80.47 84.85 88.74 92.20 95.26 97.98 100.37 102.47 104.28 105.83 107.12 108.17 108.97 109.54 109.89 110.00 109.89 109.54 108.97 108.17 107.12 105.83 104.28 102.47 100.37 97.98 95.26 92.20 88.74 84.85 80.47 75.50 69.82 63.25 55.45 45.83 32.79 } { incr level draw_deck level-$level $radius 3 }