tkpath - clock

Difference between version 4 and 5 - Previous - Next
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