Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Accepted changes by Frank Gover for robustness of bbox handles. Accepted plotchart based examples for multiple bounded crosshairs. |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | crosshair-bboxes-3603562 |
| Files: | files | file ages | folders |
| SHA1: |
6548d8e6e5abbd25a545899d830294c9 |
| User & Date: | andreask 2013-02-25 19:59:05 |
Context
|
2013-02-25
| ||
| 20:13 | Do not invoke the tracking callback while the crosshairs are out of bounds. Closed-Leaf check-in: 9804fb212f user: andreask tags: crosshair-bboxes-3603562 | |
| 19:59 | Accepted changes by Frank Gover for robustness of bbox handles. Accepted plotchart based examples for multiple bounded crosshairs. check-in: 6548d8e6e5 user: andreask tags: crosshair-bboxes-3603562 | |
|
2013-02-14
| ||
| 05:34 | [Bug 3603562]: Allow the confinement of the crosshairs to one or more rectangular bounding boxes. Bumped version to 1.1. check-in: 9382d1e073 user: aku tags: crosshair-bboxes-3603562 | |
Changes
Added examples/canvas/crosshairs_for_axes.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# test_axis.tcl --
# Test the drawing of the axis: nice rounded values?
# And vertical text to right axis?
#
# NOTE:
# Negative values require floor() instead of ceil()!
#
# NOTE:
# Problem with right axis!
#
# TODO:
# Floor and Ceil and less stringent check for bounds!
#
set base [file dirname [file dirname [file dirname [file normalize [info script]]]]]
source "$base/modules/plotchart/plotchart.tcl"
source "$base/modules/crosshair/crosshair.tcl"
package require Plotchart
grid [canvas .c1] [canvas .c2]
grid [canvas .c3] [canvas .c4]
#
# Create the plots
#
set plot_axes [list { 0.12 10.4 1.0} {-0.12 10.4 2.5} \
{10.12 -10.4 -2.0} {-5.1 -4.5 0.1} \
{-0.12 10.4 2.5} { 0.12 10.4 1.0} \
{-5.1 -4.5 0.1} {10.12 -10.4 -2.0}]
set i 1
foreach {x y} $plot_axes {
set p($i) [::Plotchart::createXYPlot .c${i} $x $y ]
incr i
}
set p(5) [::Plotchart::createRightAxis $p(2) {-5.99 -4.5 0.1}]
$p(2) plot data 10.0 -5.0
$p(2) plot data -10.0 -5.0
$p(5) dataconfig data -colour green
$p(5) plot data 10.0 -4.7
$p(5) plot data -10.0 -4.7
$p(2) vtext "my_changes"
$p(5) vtext "Data"
# Adding crosshairs to the plots
set i 1
array set color {1 blue 2 red 3 green 4 black}
foreach {x y} $plot_axes {
.c${i} configure -cursor tcross
crosshair::crosshair .c$i -dash {.} -fill $color($i)
crosshair::track on .c$i put_coords
set bbox_ll [::Plotchart::coordsToPixel [$p($i) canvas] [lindex $x 0] [lindex $y 0]]
set bbox_ur [::Plotchart::coordsToPixel [$p($i) canvas] [lindex $x 1] [lindex $y 1]]
#--- testing coordinate mixed up
if {$i==0} {
set bbox [concat $bbox_ll $bbox_ur]
} elseif {$i==1} {
set bbox [list [lindex $bbox_ur 0] [lindex $bbox_ll 1] [lindex $bbox_ll 0] [lindex $bbox_ur 1]]
} elseif {$i==2} {
set bbox [list [lindex $bbox_ll 0] [lindex $bbox_ur 1] [lindex $bbox_ur 0] [lindex $bbox_ll 1]]
} else {
set bbox [concat $bbox_ur $bbox_ll]
}
crosshair::bbox_add .c$i "$bbox"
puts "plot $i ==> bbox== $bbox color = $color($i)"
incr i
}
proc put_coords {a b c d e f g} {
set pcoords [::Plotchart::pixelToCoords $a $b $c]
set pcoord_x [lindex $pcoords 0]
set pcoord_y [lindex $pcoords 1]
puts "Canvas=$a Canvas_Coords=($b $c) PlotChart_plot_coords=([format "%.2f %.2f" $pcoord_x $pcoord_y])"
}
catch { console show }
|
Added examples/canvas/crosshairs_for_multixyplot.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# test_txplot.tcl --
# Test the -box options for time-x-plots
set base [file dirname [file dirname [file dirname [file normalize [info script]]]]]
source "$base/modules/plotchart/plotchart.tcl"
source "$base/modules/crosshair/crosshair.tcl"
package require Plotchart
pack [canvas .c -width 600 -height 410 -bg white]
::Plotchart::plotstyle configure default xyplot bottomaxis subtextcolor blue
::Plotchart::plotstyle configure default xyplot bottomaxis font "Helvetica 14"
::Plotchart::plotstyle configure default xyplot bottomaxis subtextfont "Helvetica 12 bold"
::Plotchart::plotstyle configure default xyplot leftaxis font "Helvetica 14"
::Plotchart::plotstyle configure default xyplot leftaxis subtextfont "Helvetica 12 bold"
::Plotchart::plotstyle configure default xyplot leftaxis subtextcolor red
::Plotchart::plotstyle configure default xyplot leftaxis usesubtext 1
set p1 [::Plotchart::createXYPlot .c {0 100 30} {0 20 5} -box {0 0 400 200}]
set p2 [::Plotchart::createXYPlot .c {0 100 30} {0 20 5} -box {100 210 400 200}]
#.c create rectangle 0 210 400 410
$p1 plot data 0 10
$p1 plot data 100 15
$p1 xtext Aha
#$p1 xsubtext "1, 2, 3"
$p1 ytext "Same spot?"
$p2 plot data 0 10
$p2 plot data 100 15
$p2 ytext "Higher up"
#$p2 ysubtext "Lower down"
$p2 vtext "To the left"
#$p2 vsubtext "To the right"
.c configure -cursor tcross
crosshair::crosshair .c -dash {.} -fill blue
#crosshair::track on .c put_coords
set bbox_ll [::Plotchart::coordsToPixel [$p1 canvas] 0 0 ]
set bbox_ur [::Plotchart::coordsToPixel [$p1 canvas] 100 20]
set bbox_p1 [concat $bbox_ll $bbox_ur]
crosshair::bbox_add .c "$bbox_p1"
set bbox_ll [::Plotchart::coordsToPixel [$p2 canvas] 0 0 ]
set bbox_ur [::Plotchart::coordsToPixel [$p2 canvas] 100 20]
set bbox_p2 [concat $bbox_ll $bbox_ur]
crosshair::bbox_add .c "$bbox_p2"
catch { console show }
|
Changes to modules/crosshair/ChangeLog.
1 2 3 4 5 6 7 | 2013-02-13 Andreas Kupries <andreas_kupries@users.sourceforge.net> * crosshair.tcl: [Bug 3603562]: Allow the confinement of the * crosshair.man: crosshairs to one or more rectangular bounding * pkgIndex.tcl: boxes. Bumped version to 1.1. 2009-01-21 Andreas Kupries <andreas_kupries@users.sourceforge.net> | > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | 2013-02-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * crosshair.tcl: [Bug 3603562]: Tweaks and fixes for robustness. * ../../examples/canvas/crosshair_for_axes.tcl: Examples of bounded * ../../examples/canvas/crosshair_for_multixyplot.tcl: crosshairs. 2013-02-13 Andreas Kupries <andreas_kupries@users.sourceforge.net> * crosshair.tcl: [Bug 3603562]: Allow the confinement of the * crosshair.man: crosshairs to one or more rectangular bounding * pkgIndex.tcl: boxes. Bumped version to 1.1. 2009-01-21 Andreas Kupries <andreas_kupries@users.sourceforge.net> |
| ︙ | ︙ |
Changes to modules/crosshair/crosshair.tcl.
1 2 3 4 5 6 7 | # crosshair.tcl - # # Kevin's mouse-tracking crosshair in Tk's canvas widget. # # This package displays a mouse-tracking crosshair in the canvas widget. # # Copyright (c) 2003 by Kevin B. Kenny. All rights reserved. | | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # crosshair.tcl - # # Kevin's mouse-tracking crosshair in Tk's canvas widget. # # This package displays a mouse-tracking crosshair in the canvas widget. # # Copyright (c) 2003 by Kevin B. Kenny. All rights reserved. # Redistribution permitted under the terms of the Tcl License. # # Copyright (c) 2008 Andreas Kupries. Added ability to provide the tracking # information to external users. # # Copyright (c) 2013 Frank Gover, Andreas Kupries. Added ability to # bound the crosshairs to an area of the canvas. Useful # for plots. |
| ︙ | ︙ | |||
157 158 159 160 161 162 163 164 165 166 167 |
proc ::crosshair::bbox_add { w bbox } {
variable config
if { ![info exists config($w)] } {
return -code error "no crosshairs in $w"
}
array set opts $config($w)
lappend opts(bbox) $bbox
set config($w) [array get opts]
set token bbox$w/[llength $opts(bbox)]
| > > > > > > > > > > > > < | 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
proc ::crosshair::bbox_add { w bbox } {
variable config
if { ![info exists config($w)] } {
return -code error "no crosshairs in $w"
}
array set opts $config($w)
# Sort the coordinates and make sure the bbox is in format
# "lower-left upper-right". The larger Y is on the lower left and
# the larger X is on the upper right.
set x_coords [lsort -real -increasing [list [lindex $bbox 0] [lindex $bbox 2]]]
set y_coords [lsort -real -decreasing [list [lindex $bbox 1] [lindex $bbox 3]]]
set bbox [list \
[lindex $x_coords 0] [lindex $y_coords 0] \
[lindex $x_coords 1] [lindex $y_coords 1]]
lappend opts(bbox) $bbox
set config($w) [array get opts]
set token bbox$w/[llength $opts(bbox)]
return $token
}
#----------------------------------------------------------------------
#
# ::crosshair::bbox_remove --
#
|
| ︙ | ︙ | |||
424 425 426 427 428 429 430 |
set llx [lindex $box 0]
set lly [lindex $box 1]
set urx [lindex $box 2]
set ury [lindex $box 3]
#puts \tTEST($x,$y):$llx,$lly,$urx,$ury:[expr {($x < $llx) || ($x > $urx) || ($y < $lly) || ($y > $ury)}]
| | > | | | | | 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 |
set llx [lindex $box 0]
set lly [lindex $box 1]
set urx [lindex $box 2]
set ury [lindex $box 3]
#puts \tTEST($x,$y):$llx,$lly,$urx,$ury:[expr {($x < $llx) || ($x > $urx) || ($y < $lly) || ($y > $ury)}]
# Test each edge. Note that the border lines are considered as "outside".
expr {($x <= $llx) ||
($x >= $urx) ||
($y >= $lly) ||
($y <= $ury)}
}
#----------------------------------------------------------------------
#
# ::crosshair::Move --
#
# Moves the crosshairs in a camvas
|
| ︙ | ︙ |
