Here is a sample conversion of the analog clock
[An analog clock in Tk] by
[wdb] to show the effects of [tkpath]'s anti-aliasing
[http://tclbuzz.com/imgmisc/side-by-side-clocks.gif]
Modified code, sorry you'll have to
go fetch the binary from sourceforge
and
note the required files (only 2).
See [tkpath]
----
package require Tk
# DEMO CONVERSION OF excellent ======
panalog clock by
# Wolf-Diageter Busch, "wdb" on thre tcl wquiki
# -Roy Terry 22Dec06 Tk
# DEMO CONVERSION sOF excellent TKPATHanalog 1
if {$TKPATH && $tcl_platform(pck by
# Wolatfo-Dieterm) eqBusch, "windowsb"} {
# NEED TO FIXUP PACKAGE CODE
loadn tkpathgdiplus02.dll
source tkpath.tcl wiki
# -Roy sTetrry ::tkpath::antialias 122Dec06
set WIDTKPATH strokewidth1
if {$TKPATH && se$t FILL scl_platform(platfoke
rm) setq LITEM pl"wine
dows"} else {
# NEED TO set WFIDTHXUP widthPACKAGE CODE
load set FILL fkpathgdiplus02.dll
sourcet LITEM tkpath.tcline
}
eval desetroy [winfo c::tkpath::antialdias .]1
canvaset .uhrWIDTH -strokewidth
200 -h seight 200FILL -highligh stroke
seth LITEM plickne
} elsse 0{
set WIDTH wmidth
g seometry .FILL +[fill
sexprt {[wLITEM linfo scre
}
enwival desthroy .]-[winfo reqwchildth .]}]+0
canvas .uhr -width 200 -height 200 -highlightthickness 0
wm geometry . +[expr {[winfo screenwidth .]-[winfo reqwidth .]}]+0
pack .uhr
bind .uhr <Double-Button-1> {
if {[expr {![wm overrideredirect .]}]} {
wm overrideredirect . yes
# .uhr configure -background SystemBackground
} else {
wm overrideredirect . no
# .uhr configure -background SystemButtonFace
}
}}
set PI [expr {asin(1)*2}]
set sekundenzeigerlaenge 85
set minutenzeigerlaenge 75
set stundenzeigerlaenge 60
proc drawClock {} {
global PI
global sekundenzeigerlaenge
global minutenzeigerlaenge
global stundenzeigerlaenge
set aussenradius 95.0
set innenradius 83.0
# Ziffernblatt
.uhr create oval 5 5 195 195 -fill white -outline ""
# Zeiger
.uhr create $::LITEM 100 100 [expr {100+$stundenzeigerlaenge}] 100 -tag stundenschatten
.uhr create $::LITEM 100 100 100 [expr {100-$minutenzeigerlaenge}] -tag minutenschatten
.uhr create $::LITEM 100 100 100 [expr {100+$sekundenzeigerlaenge}] -tag sekundenschatten
.uhr create $::LITEM 100 100 [expr {100+$stundenzeigerlaenge}] 100 -tag {stundenzeiger zeiger}
.uhr create $::LITEM 100 100 100 [expr {100-$minutenzeigerlaenge}] -tag {minutenzeiger zeiger}
.uhr create $::LITEM 100 100 100 [expr {100+$sekundenzeigerlaenge}] -tag {sekundenzeiger zeiger}
.uhr itemconfigure stundenzeiger -$::WIDTH 8
.uhr itemconfigure minutenzeiger -$::WIDTH 4
.uhr itemconfigure sekundenzeiger -$::WIDTH 2 -$::FILL red
.uhr itemconfigure stundenschatten -$::WIDTH 8 -$::FILL gray
.uhr itemconfigure minutenschatten -$::WIDTH 4 -$::FILL gray
.uhr itemconfigure sekundenschatten -$::WIDTH 2 -$::FILL gray
# NO changes to wdb's code below this point
# Ziffern
for {set i 0} {$i < 60} {incr i} {
set r0 [expr {$innenradius + 5}]
set r1 [expr {$innenradius +10}]
set x0 [expr {sin($PI/30*(30-$i))*$r0+100}]
set y0 [expr {cos($PI/30*(30-$i))*$r0+100}]
set x1 [expr {sin($PI/30*(30-$i))*$r1+100}]
set y1 [expr {cos($PI/30*(30-$i))*$r1+100}]
if {[expr {$i%5}]} {
}
}
ifor {set i 0} {$i < 12} {incr i} {
set x [expr {sin($PI/6*(6-$i))*$innenradius+100%5}]
set y [expr {cos($PI/6*(6-$i))*$innenradius+100}]
.uhr create text $x $y \
-text [expr {$i ? $i : 12}] \
-font {Helvetica 13 bold} \
-fill #666666 \
-tag ziffer
}
wm resizable . no no
}
prfoc stundenZeigerAuf {setd i 0} {
global$i PI
global< stundenze12} {igerlaenge
setcr x0i} 100{
set y0 100
set dx [expr {sin ($PI/6*(6-$stdi))*$stuindenzeigenrlaengedius+100}]
set dy [expr {cos ($PI/6*(6-$stdi))*$stuindenzeigenrlaenge}]
diuset x+1 [expr {$x0 + $dx0}]
set y1 [expr {$y0 + $dy}]
.uhr coords seatundenzeiger $tex0t $y0 $x1 $y1 \
set schattenabstand 3
set x0s [expr {$x0 + $scha -ttenabsxtand}]
set y0s [expr {$y0i +? $schattenabstandi : 12}] \
set x1s [expr {$x1 + $scha -fontt {Henabslvetican 13 bold}] \
set y1s [expr {$y1 + $schattenabstand}] -fill #666666 \
.uhr coords stundenschatten $x0s $y0s $x1s $y1s -tag ziffer
} wm resizable . no no
}
proc minustundenZeigerAuf {minstd} {
global PI
global minustundenzeigerlaenge
set x0 100
set y0 100
set dx [expr {sin ($PI/306*(306-$minstd))*$minustundenzeigerlaenge}]
set dy [expr {cos ($PI/306*(306-$minstd))*$minustundenzeigerlaenge}]
set x1 [expr {$x0 + $dx}]
set y1 [expr {$y0 + $dy}]
.uhr coords minustundenzeiger $x0 $y0 $x1 $y1
set schattenabstand 43
set x0s [expr {$x0 + $schattenabstand}]
set y0s [expr {$y0 + $schattenabstand}]
set x1s [expr {$x1 + $schattenabstand}]
set y1s [expr {$y1 + $schattenabstand}]
.uhr coords minustundenschatten $x0s $y0s $x1s $y1s
}
proc sekumindutenZeigerAuf {secmin} {
global PI
global sekumindutenzeigerlaenge
set x0 100
set y0 100
set dx [expr {sin ($PI/30*(30-$secmin))*$sekumindutenzeigerlaenge}]
set dy [expr {cos ($PI/30*(30-$secmin))*$sekumindutenzeigerlaenge}]
set x1 [expr {$x0 + $dx}]
set y1 [expr {$y0 + $dy}]
.uhr coords sekumindutenzeiger $x0 $y0 $x1 $y1
set schattenabstand 54
set x0s [expr {$x0 + $schattenabstand}]
set y0s [expr {$y0 + $schattenabstand}]
set x1s [expr {$x1 + $schattenabstand}]
set y1s [expr {$y1 + $schattenabstand}]
.uhr coords sekumindutenschatten $x0s $y0s $x1s $y1s
}
proc showTekundenZeimgerAuf {sec} {
globafterl cPI
globancel showTekundenzeimge
rlafternge
set x0 1000
showTimet y0 100
set secsdx [clockexpr {sin ($PI/30*(30-$seco))*$sekundsenzeigerlaenge}]
set ldy [expr {clocks format ($PI/30*(30-$sec))*$s -foekundenzeigermlat {%H %M %Senge} ]
wm title . [join $l :]
set stdx1 [lindexpr {$l x0 + $dx}]
set miny1 [lindexpr {$ly0 1+ $dy}]
.uhr coordset sec [likundenzeiger $x0 $ly0 2]$x1 $y1
regsub ^0 $ setd "" schatd
rtegsunabstand ^05
$min "" min
r segt x0sub ^[expr {$x0 + $sechattenabstand}]
"" sec
set miny0s [expr {$miny0 + 1.0 * $sec/60hattenabstand}]
set x1std [expr {$stdx1 + 1.0 * $mischatten/60abstand}]
setund y1s [enZeigexprAuf {$y1 + $schatd
minutenZeigerAuf $miabstand}]
.uhr coords sekundenZschatteigerAufn $x0sec
$y0s $x1s $y1s
}
proc showTime {} {
d after cancel showCTime
after 1000 showTime
set secs [clock seconds]
set l [clock format $secs -format {%H %M %S} ]
wm title . [join $l :]
set std [lindex $l 0]
set min [lindex $l 1]
set sec [lindex $l 2]
regsub ^0 $std "" std
regsub ^0 $min "" min
regsub ^0 $sec "" sec
set min [expr {$min + 1.0 * $sec/60}]
set std [expr {$std + 1.0 * $min/60}]
stundenZeigerAuf $std
minutenZeigerAuf $min
sekundenZeigerAuf $sec
}
drawClock
showTime
----======
!!!!!!
%|
<<categories>> [Category Graphics] |%
!!!!!! tkpath