hae Having an xyplot it would be great to select data by means of a bars in order to export the data. This is my first start.
lappend auto_path [file join [pwd] plotchart]
package require Plotchart
set TMP [list 24.3 25.1 24.6 25.3 24.8 25.01 25.2 25.1 25 \
27.3 35.1 50 70 85 89 93 95 96 97 97.5 98 99.2 99.5 99.6 99.7 99.8 99.9 100
]
set Data(Bar,Selected) ""
set Data(Bar,Pixels) ""
set Data(Marker,Start) ""
set Data(Marker,End) ""
set Data(Sel,Start) ""
set Data(Sel,End) ""
set Data(Plot) ""
proc InitUI { } {
variable Data
canvas .c -background white -width 1000 -height 200
entry .start -textvariable Data(Sel,Start)
entry .end -textvariable Data(Sel,End)
grid .c -row 0 -column 0 -sticky nsew -columnspan 4 -pady {0 3}
grid [label .l1 -text Start] -row 1 -column 0
grid .start -row 1 -column 1
grid [label .l2 -text End] -row 1 -column 2
grid .end -row 1 -column 3
set p [::Plotchart::createXYPlot .c {0.0 2000.0 250.0} {0.0 100.0 20.0}]
set Data(Plot) $p
$p title "Temperatur TMP \[°C\]"
set Data(Bar,List) ""
set Data(Marker,Start) [$p object line series1 5 0 5 100 -dash {2 2} -fill green -tags Bar]
set Data(Marker,End) [$p object line series1 2000 0 2000 100 -dash {2 2} -fill red -tags Bar]
lappend Data(Bar,List) $Data(Marker,Start) $Data(Marker,End)
}
proc DrawPlot { YData } {
variable Data
set p $Data(Plot)
set X 0
foreach Y $YData {
$p plot series1 $X $Y
incr X
}
set c .c
bind $c <ButtonPress-1> [list BarAction %W %x %y press]
bind $c <B1-Motion> [list BarAction %W %x %y move]
bind $c <ButtonRelease-1> [list BarAction %W %x %y release]
}
proc BarAction { w x y action args } {
variable Data
puts [info level 0]
switch $action {
press {
set Closest [$w find closest $x $y]
puts "Closest: $Closest"
if { $Closest ni $Data(Bar,List) } {
puts "Not a Bar! Must be a line segment."
return
}
set Data(Bar,Selected) $Closest
set Pixels [Plotchart::coordsToPixel $w 10 101]
lassign $Pixels XPixel YPixel
set Data(Bar,Origin) [list $x $YPixel]
set Data(Bar,Pixels) [list $x $y]
}
move {
set Coords [Plotchart::pixelToCoords $w $x $y]
lassign $Coords X Y
if { $Data(Bar,Selected) eq $Data(Marker,Start) } {
set Data(Sel,Start) [format {%.2f} $X]
} else {
set Data(Sel,End) [format {%.2f} $X]
}
if { $Data(Bar,Selected) eq "" } {
return
}
lassign $Data(Bar,Origin) OriginX OriginY
$w moveto $Data(Bar,Selected) $x $OriginY
puts "move $x $OriginY"
}
release {
set Data(Bar,Selected) ""
}
default {
}
}
}
InitUI
DrawPlot $TMP