diff options
Diffstat (limited to 'ds9/library')
-rw-r--r-- | ds9/library/catplot.tcl | 2 | ||||
-rw-r--r-- | ds9/library/ime.tcl | 611 | ||||
-rw-r--r-- | ds9/library/markeranalysishist.tcl | 11 | ||||
-rw-r--r-- | ds9/library/markeranalysispanda.tcl | 2 | ||||
-rw-r--r-- | ds9/library/markeranalysisplot2d.tcl | 11 | ||||
-rw-r--r-- | ds9/library/markeranalysisplot3d.tcl | 11 | ||||
-rw-r--r-- | ds9/library/markeranalysisradial.tcl | 13 | ||||
-rw-r--r-- | ds9/library/plot.tcl | 1123 | ||||
-rw-r--r-- | ds9/library/plotbar.tcl | 161 | ||||
-rw-r--r-- | ds9/library/plotconfig.tcl | 287 | ||||
-rw-r--r-- | ds9/library/plotdata.tcl | 428 | ||||
-rw-r--r-- | ds9/library/plotdialog.tcl | 241 | ||||
-rw-r--r-- | ds9/library/plotline.tcl | 272 | ||||
-rw-r--r-- | ds9/library/plotprint.tcl | 163 | ||||
-rw-r--r-- | ds9/library/plotprocess.tcl | 58 | ||||
-rw-r--r-- | ds9/library/plotscatter.tcl | 209 |
16 files changed, 1647 insertions, 1956 deletions
diff --git a/ds9/library/catplot.tcl b/ds9/library/catplot.tcl index 9072745..567da52 100644 --- a/ds9/library/catplot.tcl +++ b/ds9/library/catplot.tcl @@ -86,7 +86,7 @@ proc CATPlotGenerate {varname} { set var(plot,var) $vvarname } - PlotClearData $vvarname + PlotDeleteData $vvarname PlotDataSet $vvarname $dim $rr PlotTitle $vvarname $var(title) $xtitle $ytitle $vvar(proc,updategraph) $vvarname diff --git a/ds9/library/ime.tcl b/ds9/library/ime.tcl deleted file mode 100644 index 9cf3493..0000000 --- a/ds9/library/ime.tcl +++ /dev/null @@ -1,611 +0,0 @@ -# Copyright (C) 1999-2018 -# Smithsonian Astrophysical Observatory, Cambridge, MA, USA -# For conditions of distribution and use, see copyright notice in "copyright" - -package provide DS9 1.0 - -proc IMEDef {} { - global iime - global ime - global pime - - set ime(task) stats - set ime(shape) circle - - array set pime [array get ime] -} - -proc IMEChangeTask {} { - global current - - if {$current(frame) == {}} { - return - } - - if {$current(mode) != {analysis}} { - return - } - - UpdateTaskMenu - IMEChangeShape -} - -proc IMEChangeShape {} { - global ime - global ds9 - global current - - switch $ime(task) { - stats - - hist { - switch $ime(shape) { - circle - - ellipse - - box - - polygon {} - default {set ime(shape) circle} - } - } - radial { - switch $ime(shape) { - annulus - - ellipseannulus - - boxannulus {} - default {set ime(shape) annulus} - } - } - plot2d {} - plot3d { - switch $ime(shape) { - circle - - ellipse - - box - - polygon - - point {} - default {set ime(shape) point} - } - } - } - - foreach ff $ds9(frames) { - $ff marker analysis unselect all - set coord [$ff get crosshair canvas] - set XX [lindex $coord 0] - set YY [lindex $coord 1] - - $ff analysis shape $ime(shape) $XX $YY - - if {$current(frame) == $ff} { - IMEDoTask $current(frame) - } - } -} - -proc IMEDoTask {which} { - global ime - - if {![$which has fits]} { - return - } - - switch $ime(task) { - stats {IMEStatsTask $which} - hist {IMEHistTask $which} - radial {IMERadialTask $which} - plot2d {IMEPlot2DTask $which} - plot3d {IMEPlot3DTask $which} - } -} - -proc IMEKey {which K xx yy} { - global ime - - # always available - switch $K { - question { - IMEHelp - return - } - } - - if {![$which has fits]} { - return - } - - switch $K { - a { - # FWHM (Aperture Sum) - } - b { - # Box Coords? - } - c { - # Column Cut - } - d { - # remap (Load Display) - set ime(task) plot3d - IMEKeyTask $which $xx $yy - } - e { - # remap (Contour) - } - f { - # remap (Redraw) - } - g { - # remap (Graphics Cursor) - } - h { - set ime(task) hist - IMEKeyTask $which $xx $yy - } - i { - # remap (Image Cursor) - } - j { - # Line Guassian Fit - } - k { - # Col Gaussian Fit - } - l { - # Line Cut - } - m { - set ime(task) stats - IMEKeyTask $which $xx $yy - } - n { - # remap (Next Frame) - } - o { - # remap (Overplot) - } - p { - # remap (Prev Frame) - } - q { - # remap (Quit) - } - r { - set ime(task) radial - IMEKeyTask $which $xx $yy - } - s { - # Surface Plot - } - t { - # remap (Output Image) - } - u { - # Vector Plot - } - v { - set ime(task) plot2d - IMEKeyTask $which $xx $yy - } - w { - # remap (Toggle Logfile) - } - x { - # Print coords/values - } - y { - # remap (Set Origin) - } - z { - # Print value grid - } - , { - # Quick Profile Photometry - } - . { - # Quick Radial Profile Plot and Fit - } - } -} - -proc IMEKeyTask {which xx yy} { - global ime - - $which crosshair canvas $xx $yy - - $which analysis shape $ime(shape) $xx $yy - IMEDoTask $which - - UpdateColormapLevelMosaic $which $xx $yy canvas - UpdateInfoBox $which $xx $yy canvas - UpdatePixelTableDialog $which $xx $yy canvas - UpdateGraphLayout $which - UpdateGraphAxis $which - UpdateGraphData $which $xx $yy canvas -} - -proc IMEButton {which xx yy} { - global ime - global imarker - - global debug - if {$debug(tcl,ime)} { - puts stderr "IMEButton $which $xx $yy" - } - - # see if we are on a handle - set hh [$which get marker analysis handle $xx $yy] - set id [lindex $hh 0] - set imarker(handle) [lindex $hh 1] - - if {$imarker(handle)} { - $which marker analysis $id edit begin $imarker(handle) - set imarker(motion) beginEdit - return - } - - # else, see if we are on a segment of a polygon - set hh [$which get marker analysis polygon segment $xx $yy] - set id [lindex $hh 0] - set segment [lindex $hh 1] - if {$segment} { - $which marker analysis $id create polygon vertex $segment $xx $yy - $which marker analysis $id edit begin $imarker(handle) - set imarker(handle) [expr 4+$segment+1] - set imarker(motion) beginEdit - return - } - - # see if any markers are selected - if {[$which get marker analysis select number]>0} { - # else, see if we are on a marker - if {[$which get marker analysis id $xx $yy]} { - $which marker analysis $id move begin - set imarker(motion) beginMove - return - } else { - $which marker analysis unselect all - set imarker(motion) none - return - } - } - - $which marker analysis $id move begin - set imarker(motion) beginMove - - $which crosshair canvas $xx $yy - $which analysis shape $ime(shape) $xx $yy - IMEDoTask $which -} - -proc IMEShift {which xx yy} { - global ime - global imarker - - global debug - if {$debug(tcl,ime)} { - puts stderr "IMEShift $which $xx $yy" - } - - # see if we are on a handle - set hh [$which get marker analysis handle $xx $yy] - set id [lindex $hh 0] - set imarker(handle) [lindex $hh 1] - - if {$imarker(handle)} { - $which marker analysis $id rotate begin - set imarker(motion) beginRotate - } -} - -proc IMEDouble {which xx yy} { - global ime - global imarker - - global debug - if {$debug(tcl,ime)} { - puts stderr "IMEDouble $which $xx $yy" - } - - if {[$which get marker analysis id $xx $yy]} { - $which marker analysis select only $xx $yy - } -} - -proc IMEMotion {which xx yy} { - global ime - global imarker - - global debug - if {$debug(tcl,ime)} { - puts stderr "IMEMotion $which $xx $yy" - } - - switch -- $imarker(motion) { - none {} - beginMove - - move { - $which marker analysis move motion $x $y - set imarker(motion) move - $which crosshair canvas $xx $yy - $which analysis shape $ime(shape) $xx $yy - IMEDoTask $which - } - beginEdit - - edit { - set imarker(motion) edit - $which marker analysis edit motion $xx $yy $imarker(handle) - IMEDoTask $which - } - beginRotate - - rotate { - set imarker(motion) rotate - $which marker analysis rotate motion $xx $yy $imarker(handle) - IMEDoTask $which - } - region - - shiftregion {} - } -} - -proc IMERelease {which xx yy} { - global ime - global imarker - - global debug - if {$debug(tcl,ime)} { - puts stderr "IMERelease $which $xx $yy" - } - - switch -- $imarker(motion) { - none {} - beginMove - - beginRotate {} - beginEdit {} - move { - $which marker analysis move end - IMEDoTask $which - } - edit { - $which marker analysis edit end - IMEDoTask $which - } - rotate { - $which marker analysis rotate end - IMEDoTask $which - } - region - - shiftregion {} - } - - set imarker(motion) none - set imarker(handle) -1 -} - -proc IMEArrowKey {which xx yy} { - global ime - global ds9 - - global debug - if {$debug(tcl,ime)} { - puts stderr "IMEArrow $which $xx $yy" - } - - $which crosshair warp $xx $yy - - set coord [$which get crosshair canvas] - set XX [lindex $coord 0] - set YY [lindex $coord 1] - - $which analysis shape $ime(shape) $XX $YY - IMEDoTask $which - - UpdateColormapLevelMosaic $which $XX $YY canvas - UpdateInfoBox $which $XX $YY canvas - UpdatePixelTableDialog $which $XX $YY canvas - UpdateGraphData $which $XX $YY canvas -} - -proc IMEHelp {} { - global ime - - set rr "\tAnalysis Help\n\n?\tPrint Help\nd\tPlot 3D\nm\tStatistics\nv\tPlot 2D\n" - - SimpleTextDialog imehlp "Analysis Help" 80 20 insert top $rr -} - -proc IMEStatsTask {which} { - global ime - - set rr [$which get marker analysis hide analysis stats physical fk5] - - SimpleTextDialog "imestat" "Statistics" 80 20 insert top $rr -} - -proc IMEHistTask {which} { - global iime - global ime - - set id 0 - - set varname imehist - global $varname - upvar #0 $varname var - - set vvarname analysishist - upvar #0 $vvarname vvar - global $vvarname - - set xdata ${vvarname}x - set ydata ${vvarname}y - global $xdata $ydata - - set ping [PlotPing $vvarname] - - if {!$ping} { - PlotLineDialog $vvarname Histogram {} Values Counts - - set vvar(manage) 0 - set vvar(dim) xy - set vvar(xdata) $xdata - set vvar(ydata) $ydata - blt::vector create $xdata $ydata - } - - $which get marker analysis hide analysis histogram $xdata $ydata 512 - - if {!$ping} { - PlotExternal $vvarname - set vvar(smooth) step - set vvar(fill) 1 - $vvar(proc,updateelement) $vvarname - $vvar(proc,updategraph) $vvarname - } - - PlotStats $vvarname - PlotList $vvarname -} - -proc IMERadialTask {which} { - global iime - global ime - - set varname imerad - global $varname - upvar #0 $varname var - - set vvarname analysisrad - upvar #0 $vvarname vvar - global $vvarname - - set vvar(system) physical - - set xdata ${vvarname}x - set ydata ${vvarname}y - set yedata ${vvarname}ye - global $xdata $ydata $yedata - - set ping [PlotPing $vvarname] - - if {!$ping} { - PlotLineDialog $vvarname "Radial Profile" {} physical {} - MarkerAnalysisRadialAxisTitle $vvarname - - set vvar(manage) 0 - set vvar(dim) xyey - set vvar(xdata) $xdata - set vvar(ydata) $ydata - set vvar(yedata) $yedata - blt::vector create $xdata $ydata $yedata - } - - $which get marker analysis hide analysis radial $xdata $ydata $yedata physical - - if {!$ping} { - PlotExternal $vvarname - $vvar(proc,updateelement) $vvarname - $vvar(proc,updategraph) $vvarname - } - - PlotStats $vvarname - PlotList $vvarname -} - -proc IMEPlot2DTask {which} { - global iime - global ime - - set varname imeplot2d - global $varname - upvar #0 $varname var - - set vvarname analysisplot2d - upvar #0 $vvarname vvar - global $vvarname - - set vvar(system) physical - set vvar(sky) fk5 - set vvar(method) average - - set xdata ${vvarname}x - set ydata ${vvarname}y - set xcdata ${vvarname}xc - set ycdata ${vvarname}yc - global $xdata $ydata $xcdata $ycdata - - set ping [PlotPing $vvarname] - - if {!$ping} { - PlotLineDialog $vvarname Plot2D {} physical Counts - MarkerAnalysisPlot2dXAxisTitle $vvarname - MarkerAnalysisPlot2dYAxisTitle $vvarname - - # setup our own formatting - set vvar(graph,format) 0 - set vvar(xcdata) $xcdata - set vvar(ycdata) $ycdata - $vvar(graph) xaxis configure \ - -command "MarkerAnalysisPlot2dXAxis $vvarname" - - set vvar(manage) 0 - set vvar(dim) xy - set vvar(xdata) $xdata - set vvar(ydata) $ydata - blt::vector create $xdata $ydata $xcdata $ycdata - } - - $which get marker analysis hide analysis plot2d $xdata $ydata $xcdata $ycdata physical fk5 average - - if {!$ping} { - PlotExternal $vvarname - $vvar(proc,updateelement) $vvarname - $vvar(proc,updategraph) $vvarname - } - - PlotStats $vvarname - PlotList $vvarname -} - -proc IMEPlot3DTask {which} { - global iime - global ime - - set varname imeplot3d - global $varname - upvar #0 $varname var - - set vvarname analysisplot3d - upvar #0 $vvarname vvar - global $vvarname - - set vvar(system) image - set vvar(method) average - - set xdata ${vvarname}x - set ydata ${vvarname}y - global $xdata $ydata - - set ping [PlotPing $vvarname] - - if {!$ping} { - PlotLineDialog $vvarname Plot3D {} image Counts - MarkerAnalysisPlot3dXAxisTitle $vvarname - MarkerAnalysisPlot3dYAxisTitle $vvarname - - set vvar(manage) 0 - set vvar(dim) xy - set vvar(xdata) $xdata - set vvar(ydata) $ydata - blt::vector create $xdata $ydata - } - - $which get marker analysis hide analysis plot3d $xdata $ydata physical fk5 average - - if {!$ping} { - PlotExternal $vvarname - $vvar(proc,updateelement) $vvarname - $vvar(proc,updategraph) $vvarname - } - - PlotStats $vvarname - PlotList $vvarname -} - diff --git a/ds9/library/markeranalysishist.tcl b/ds9/library/markeranalysishist.tcl index 83d57a9..a3f7f2a 100644 --- a/ds9/library/markeranalysishist.tcl +++ b/ds9/library/markeranalysishist.tcl @@ -80,10 +80,13 @@ proc MarkerAnalysisHistogramCB {frame id} { } PlotLineDialog $vvarname $tt Histogram $bunit Counts - set vvar(manage) 0 - set vvar(dim) xy - set vvar(xdata) $xdata - set vvar(ydata) $ydata + set tt $vvar(graph,total) + set cc $vvar(graph,current) + + set vvar(graph$cc,manage) 0 + set vvar(graph$cc,dim) xy + set vvar(graph$cc,xdata) $xdata + set vvar(graph$cc,ydata) $ydata blt::vector create $xdata $ydata } diff --git a/ds9/library/markeranalysispanda.tcl b/ds9/library/markeranalysispanda.tcl index ec8f36e..d60b158 100644 --- a/ds9/library/markeranalysispanda.tcl +++ b/ds9/library/markeranalysispanda.tcl @@ -103,7 +103,7 @@ proc MarkerAnalysisPandaCB {frame id} { MarkerAnalysisPandaAxisTitle $vvarname } - PlotClearData $vvarname + PlotDeleteData $vvarname PlotDataSet $vvarname 3 [$frame get marker $id analysis panda $sys] $vvar(proc,updategraph) $vvarname PlotStats $vvarname diff --git a/ds9/library/markeranalysisplot2d.tcl b/ds9/library/markeranalysisplot2d.tcl index a8fdf1d..87b02f3 100644 --- a/ds9/library/markeranalysisplot2d.tcl +++ b/ds9/library/markeranalysisplot2d.tcl @@ -169,10 +169,13 @@ proc MarkerAnalysisPlot2dCB {frame id} { $vvar(graph) xaxis configure \ -command "MarkerAnalysisPlot2dXAxis $vvarname" - set vvar(manage) 0 - set vvar(dim) xy - set vvar(xdata) $xdata - set vvar(ydata) $ydata + set tt $vvar(graph,total) + set cc $vvar(graph,current) + + set vvar(graph$cc,manage) 0 + set vvar(graph$cc,dim) xy + set vvar(graph$cc,xdata) $xdata + set vvar(graph$cc,ydata) $ydata blt::vector create $xdata $ydata $xcdata $ycdata } diff --git a/ds9/library/markeranalysisplot3d.tcl b/ds9/library/markeranalysisplot3d.tcl index 2b93cbc..4591d22 100644 --- a/ds9/library/markeranalysisplot3d.tcl +++ b/ds9/library/markeranalysisplot3d.tcl @@ -174,10 +174,13 @@ proc MarkerAnalysisPlot3dCB {frame id} { set vvar(mode) pointer PlotChangeMode $vvarname - set vvar(manage) 0 - set vvar(dim) xy - set vvar(xdata) $xdata - set vvar(ydata) $ydata + set tt $vvar(graph,total) + set cc $vvar(graph,current) + + set vvar(graph$cc,manage) 0 + set vvar(graph$cc,dim) xy + set vvar(graph$cc,xdata) $xdata + set vvar(graph$cc,ydata) $ydata blt::vector create $xdata $ydata } diff --git a/ds9/library/markeranalysisradial.tcl b/ds9/library/markeranalysisradial.tcl index 45a552d..81f9db9 100644 --- a/ds9/library/markeranalysisradial.tcl +++ b/ds9/library/markeranalysisradial.tcl @@ -107,11 +107,14 @@ proc MarkerAnalysisRadialCB {frame id} { PlotLineDialog $vvarname $tt "Radial Profile" $sys {} MarkerAnalysisRadialAxisTitle $vvarname - set vvar(manage) 0 - set vvar(dim) xyey - set vvar(xdata) $xdata - set vvar(ydata) $ydata - set vvar(yedata) $yedata + set tt $vvar(graph,total) + set cc $vvar(graph,current) + + set vvar(graph$cc,manage) 0 + set vvar(graph$cc,dim) xyey + set vvar(graph$cc,xdata) $xdata + set vvar(graph$cc,ydata) $ydata + set vvar(graph$cc,yedata) $yedata blt::vector create $xdata $ydata $yedata } diff --git a/ds9/library/plot.tcl b/ds9/library/plot.tcl index 98cf932..8c512c9 100644 --- a/ds9/library/plot.tcl +++ b/ds9/library/plot.tcl @@ -16,16 +16,13 @@ proc PlotDef {} { set iap(tiff,compress) none set iap(error) [msgcat::mc {An error has occurred while creating the image. Please be sure that the plot window is in the upper left corner of the default screen and the entire window is visible.}] + # per Canvas set pap(graph,bg) white - set pap(graph,title) {} set pap(graph,title,family) helvetica set pap(graph,title,size) 12 set pap(graph,title,weight) normal set pap(graph,title,slant) roman - set pap(legend) 0 - set pap(legend,title) Legend - set pap(legend,position) right set pap(legend,title,family) helvetica set pap(legend,title,size) 10 set pap(legend,title,weight) normal @@ -35,6 +32,23 @@ proc PlotDef {} { set pap(legend,font,weight) normal set pap(legend,font,slant) roman + set pap(axis,title,family) helvetica + set pap(axis,title,size) 9 + set pap(axis,title,weight) normal + set pap(axis,title,slant) roman + + set pap(axis,font,family) helvetica + set pap(axis,font,size) 9 + set pap(axis,font,weight) normal + set pap(axis,font,slant) roman + + # per Graph + set pap(graph,title) {} + + set pap(legend) 0 + set pap(legend,title) Legend + set pap(legend,position) right + set pap(axis,x,title) {} set pap(axis,x,grid) 1 set pap(axis,x,log) 0 @@ -53,20 +67,10 @@ proc PlotDef {} { set pap(axis,y,max) {} set pap(axis,y,format) {} - set pap(axis,title,family) helvetica - set pap(axis,title,size) 9 - set pap(axis,title,weight) normal - set pap(axis,title,slant) roman - - set pap(axis,font,family) helvetica - set pap(axis,font,size) 9 - set pap(axis,font,weight) normal - set pap(axis,font,slant) roman + set pap(bar,mode) normal + # per DataSet set pap(show) 1 - set pap(shape,symbol) none - set pap(shape,fill) 1 - set pap(shape,color) red set pap(smooth) linear set pap(color) black set pap(fill) 0 @@ -74,52 +78,184 @@ proc PlotDef {} { set pap(width) 1 set pap(dash) 0 + set pap(shape,symbol) none + set pap(shape,fill) 1 + set pap(shape,color) red + set pap(error) 1 set pap(error,cap) 0 set pap(error,color) red set pap(error,width) 1 set pap(bar,relief) raised - set pap(bar,mode) normal } -proc PlotAxisFormat {varname axis w nn} { +# Canvas +proc PlotLayoutCanvas {varname} { upvar #0 $varname var global $varname - return [format $var(axis,$axis,format) $nn] + set tt $var(graph,total) + set cc $var(graph,current) + + for {set ii 1} {$ii<=$tt} {incr ii} { + pack forget $var(graph$ii) + } + + for {set ii 1} {$ii<=$tt} {incr ii} { + pack $var(graph$ii) -side top -expand yes -fill both + } } -proc PlotClearData {varname} { +# Graph +proc PlotAddGraph {varname} { upvar #0 $varname var global $varname global ds9 + global pap + + incr ${varname}(graph,total) + incr ${varname}(graph,current) + + set tt $var(graph,total) + set cc $var(graph,current) + + set var(graph$cc,data,total) 0 + set var(graph$cc,data,current) 0 + + set var(graph$cc,name) {} + set var(graph$cc,xdata) {} + set var(graph$cc,ydata) {} + set var(graph$cc,xedata) {} + set var(graph$cc,yedata) {} + + array set $varname [array get pap] + + # per Canvas + # per Graph + set var(graph$cc,bar,mode) $pap(bar,mode) + + # per DataSet + set var(graph$cc,show) $pap(show) + set var(graph$cc,shape,symbol) $pap(shape,symbol) + set var(graph$cc,shape,fill) $pap(shape,fill) + set var(graph$cc,shape,color) $pap(shape,color) + set var(graph$cc,smooth) $pap(smooth) + set var(graph$cc,color) $pap(color) + set var(graph$cc,fill) $pap(fill) + set var(graph$cc,fill,color) $pap(fill,color) + set var(graph$cc,width) $pap(width) + set var(graph$cc,dash) $pap(dash) + + set var(graph$cc,error) $pap(error) + set var(graph$cc,error,cap) $pap(error,cap) + set var(graph$cc,error,color) $pap(error,color) + set var(graph$cc,error,width) $pap(error,width) + + set var(graph$cc,bar,relief) $pap(bar,relief) + + $var(proc,addgraph) $varname + + # set up zoom stack, assuming mode is zoom + global ds9 + switch $ds9(wm) { + x11 - + win32 {Blt_ZoomStack $var(graph$cc) -mode release} + aqua {Blt_ZoomStack $var(graph$cc) -mode release \ + -button "ButtonPress-2"} + } - if {$var(data,total) == 0} { + PlotLayoutCanvas $varname +} + +proc PlotDeleteGraph {varname} { + upvar #0 $varname var + global $varname + + set cc $var(graph,current) + if {$cc>1} { + destroy $var(graph$cc) + + incr ${varname}(graph,total) -1 + incr ${varname}(graph,current) -1 + } +} + +# Data +proc PlotAddData {varname} { + upvar #0 $varname var + global $varname + + set tt $var(graph,total) + set cc $var(graph,current) + + # warning: uses current vars + if {$var(graph$cc,data,total) == 0} { + return + } + + # delete current elements + set nn $var(graph$cc,data,current) + foreach el [$var(graph$cc) element names] { + set f [split $el -] + if {[lindex $f 1] == $nn} { + $var(graph$cc) element delete $el + } + } + + global $var(graph$cc,xdata) $var(graph$cc,ydata) + $var(graph$cc) element create "d-${nn}" \ + -xdata $var(graph$cc,xdata) -ydata $var(graph$cc,ydata) + if {$var(graph$cc,xedata) != {}} { + if {[$var(graph$cc,xedata) length] != 0} { + $var(graph$cc) element configure "d-${nn}" \ + -xerror $var(graph$cc,xedata) + } + } + if {$var(graph$cc,yedata) != {}} { + if {[$var(graph$cc,yedata) length] != 0} { + $var(graph$cc) element configure "d-${nn}" \ + -yerror $var(graph$cc,yedata) + } + } +} + +proc PlotDeleteData {varname} { + upvar #0 $varname var + global $varname + + global ds9 + + set tt $var(graph,total) + set cc $var(graph,current) + + if {$var(graph$cc,data,total) == 0} { return } # first set can be external - set clear $var(1,manage) + set clear $var(graph$cc,1,manage) - for {set nn 1} {$nn<=$var(data,total)} {incr nn} { - if {$var($nn,manage)} { + for {set nn 1} {$nn<=$var(graph$cc,data,total)} {incr nn} { + if {$var(graph$cc,$nn,manage)} { # delete elements - foreach el [$var(graph) element names] { + foreach el [$var(graph$cc) element names] { set f [split $el -] if {[lindex $f 1] == $nn} { - $var(graph) element delete $el + $var(graph$cc) element delete $el } } # destroy vectors - blt::vector destroy $var($nn,xdata) $var($nn,ydata) - switch $var($nn,dim) { + blt::vector destroy \ + $var(graph$cc,$nn,xdata) $var(graph$cc,$nn,ydata) + switch $var(graph$cc,$nn,dim) { xy {} - xyex {blt::vector destroy $var($nn,xedata)} - xyey {blt::vector destroy $var($nn,yedata)} - xyexey {blt::vector destroy $var($nn,xedata) $var($nn,yedata)} + xyex {blt::vector destroy $var(graph$cc,$nn,xedata)} + xyey {blt::vector destroy $var(graph$cc,$nn,yedata)} + xyexey {blt::vector destroy \ + $var(graph$cc,$nn,xedata) $var(graph$cc,$nn,yedata)} } foreach x [array names $varname] { @@ -132,14 +268,14 @@ proc PlotClearData {varname} { } if {$clear} { - set var(data,total) 0 - set var(data,current) 0 + set var(graph$cc,data,total) 0 + set var(graph$cc,data,current) 0 - set var(name) {} - set var(xdata) {} - set var(ydata) {} - set var(xedata) {} - set var(yedata) {} + set var(graph$cc,name) {} + set var(graph$cc,xdata) {} + set var(graph$cc,ydata) {} + set var(graph$cc,xedata) {} + set var(graph$cc,yedata) {} # reset other variables set var(axis,x,auto) 1 @@ -152,352 +288,84 @@ proc PlotClearData {varname} { set var(axis,y,max) {} set var(axis,y,format) {} - $var(mb).select delete $ds9(menu,start) end + $var(mb).graph.select delete $ds9(menu,start) end $var(proc,updategraph) $varname PlotStats $varname PlotList $varname } else { - set var(data,total) 1 - set var(data,current) 1 + set var(graph$cc,data,total) 1 + set var(graph$cc,data,current) 1 - $var(mb).select delete [expr $ds9(menu,start)+1] end + $var(mb).graph.select delete [expr $ds9(menu,start)+1] end PlotCurrentData $varname $var(proc,updategraph) $varname } } -proc PlotCurrentData {varname} { +proc PlotCurrentGraph {varname} { upvar #0 $varname var global $varname - if {$var(data,total) > 0} { - set nn $var(data,current) - - set var(manage) $var($nn,manage) - set var(dim) $var($nn,dim) - - set var(xdata) $var($nn,xdata) - set var(ydata) $var($nn,ydata) - set var(xedata) $var($nn,xedata) - set var(yedata) $var($nn,yedata) + set tt $var(graph,total) + set cc $var(graph,current) - PlotSetVar $varname $nn + if {$tt > 0} { + PlotCurrentData $varname } - - PlotStats $varname - PlotList $varname } -proc PlotDataSet {varname dim data} { +proc PlotCurrentData {varname} { upvar #0 $varname var global $varname - switch -- $dim { - 4 { - # first data set - PlotDataSetOne $varname "4.1" $data + set tt $var(graph,total) + set cc $var(graph,current) - # set color - set cc $var(color) - set var(color) [PlotNextColor $var(color)] + if {$var(graph$cc,data,total) > 0} { + set nn $var(graph$cc,data,current) - # second data set - PlotDataSetOne $varname "4.2" $data - set var(color) $cc - } - 5 { - # first data set - PlotDataSetOne $varname "5.1" $data + set var(graph$cc,manage) $var(graph$cc,$nn,manage) + set var(graph$cc,dim) $var(graph$cc,$nn,dim) - # set color - set cc $var(color) - set var(color) [PlotNextColor $var(color)] + set var(graph$cc,xdata) $var(graph$cc,$nn,xdata) + set var(graph$cc,ydata) $var(graph$cc,$nn,ydata) + set var(graph$cc,xedata) $var(graph$cc,$nn,xedata) + set var(graph$cc,yedata) $var(graph$cc,$nn,yedata) - # second data set - PlotDataSetOne $varname "5.2" $data - set var(color) $cc - } - default {PlotDataSetOne $varname $dim $data} + PlotSetVar $varname $nn } + + PlotStats $varname + PlotList $varname } -proc PlotDataSetOne {varname dim data} { +proc PlotAxisFormat {varname axis w nn} { upvar #0 $varname var global $varname - # look for no data - if {[string length $data] == 0} { - return - } - - # total length - set ll [llength $data] - - # incr count - incr ${varname}(data,total) - set nn $var(data,total) - set var(data,current) $nn - - # new vector names - set xdata ap${varname}xx${nn} - set ydata ap${varname}yy${nn} - set xedata ap${varname}xe${nn} - set yedata ap${varname}ye${nn} - - # basics xy - set var(manage) 1 - set var(name) "Dataset $nn" - set var(xdata) $xdata - set var(ydata) $ydata - global $var(xdata) $var(ydata) - blt::vector create $var(xdata) $var(ydata) - - # substitute all separtors - regsub -all {[\n\r\t, ]+} $data { } data - # remove all non-numeric data - regsub -all {[^0-9.e\- ]+} $data {} data - - set x {} - set y {} - set xe {} - set ye {} - switch -- $dim { - 2 - - xy { - set var(dim) xy - set var(xedata) {} - set var(yedata) {} - - for {set ii 0} {$ii<$ll} {incr ii 2} { - lappend x [lindex $data $ii] - lappend y [lindex $data [expr $ii+1]] - } - $var(xdata) set $x - $var(ydata) set $y - } - - xyex { - set var(dim) xyex - set var(xedata) $xedata - set var(yedata) {} - - global $var(xedata) - blt::vector create $var(xedata) - - for {set ii 0} {$ii<$ll} {incr ii 3} { - lappend x [lindex $data $ii] - lappend y [lindex $data [expr $ii+1]] - lappend xe [lindex $data [expr $ii+2]] - } - $var(xdata) set $x - $var(ydata) set $y - $var(xedata) set $xe - } - - 3 - - xyey { - set var(dim) xyey - set var(xedata) {} - set var(yedata) $yedata - - global $var(yedata) - blt::vector create $var(yedata) - - for {set ii 0} {$ii<$ll} {incr ii 3} { - lappend x [lindex $data $ii] - lappend y [lindex $data [expr $ii+1]] - lappend ye [lindex $data [expr $ii+2]] - } - $var(xdata) set $x - $var(ydata) set $y - $var(yedata) set $ye - } - - xyexey { - set var(dim) xyexey - set var(xedata) $xedata - set var(yedata) $yedata - - global $var(xedata) $var(yedata) - blt::vector create $var(xedata) $var(yedata) - - for {set ii 0} {$ii<$ll} {incr ii 4} { - lappend x [lindex $data $ii] - lappend y [lindex $data [expr $ii+1]] - lappend xe [lindex $data [expr $ii+2]] - lappend ye [lindex $data [expr $ii+3]] - } - $var(xdata) set $x - $var(ydata) set $y - $var(xedata) set $xe - $var(yedata) set $ye - } - - 4.1 { - set var(dim) xyey - set var(xedata) {} - set var(yedata) $yedata - - global $var(yedata) - blt::vector create $var(yedata) - - for {set ii 0} {$ii<$ll} {incr ii 4} { - lappend x [lindex $data $ii] - lappend y [lindex $data [expr $ii+1]] - lappend ye [lindex $data [expr $ii+2]] - } - $var(xdata) set $x - $var(ydata) set $y - $var(yedata) set $ye - } - - 4.2 { - set var(dim) xy - set var(xedata) {} - set var(yedata) {} - - for {set ii 0} {$ii<$ll} {incr ii 4} { - lappend x [lindex $data $ii] - lappend y [lindex $data [expr $ii+3]] - } - $var(xdata) set $x - $var(ydata) set $y - } - - 5.1 { - set var(dim) xyey - set var(xedata) {} - set var(yedata) $yedata - - global $var(yedata) - blt::vector create $var(yedata) - - for {set ii 0} {$ii<$ll} {incr ii 5} { - lappend x [lindex $data $ii] - lappend y [lindex $data [expr $ii+1]] - lappend ye [lindex $data [expr $ii+2]] - } - $var(xdata) set $x - $var(ydata) set $y - $var(yedata) set $ye - } - - 5.2 { - set var(dim) xyey - set var(xedata) {} - set var(yedata) $yedata - - global $var(yedata) - blt::vector create $var(yedata) - - for {set ii 0} {$ii<$ll} {incr ii 5} { - lappend x [lindex $data $ii] - lappend y [lindex $data [expr $ii+3]] - lappend ye [lindex $data [expr $ii+4]] - } - $var(xdata) set $x - $var(ydata) set $y - $var(yedata) set $ye - } - } - - set var($nn,manage) 1 - set var($nn,dim) $var(dim) - - set var($nn,xdata) $var(xdata) - set var($nn,ydata) $var(ydata) - set var($nn,xedata) $var(xedata) - set var($nn,yedata) $var(yedata) - - PlotGetVar $varname $nn - - # update data set menu - $var(mb).select add radiobutton -label "$var(name)" \ - -variable ${varname}(data,current) -value $nn \ - -command [list PlotCurrentData $varname] - - PlotCreateElement $varname - $var(proc,updateelement) $varname + return [format $var(axis,$axis,format) $nn] } -proc PlotDupData {varname mm} { +proc PlotChangeMode {varname} { upvar #0 $varname var global $varname - if {$var(data,total) == 0} { - return - } + set tt $var(graph,total) + set cc $var(graph,current) - # incr count - incr ${varname}(data,total) - set nn $var(data,total) - set pp [expr $nn-1] - - # new vector names - set var($nn,name) "Dataset $nn" - set var($nn,xdata) ap${varname}xx${nn} - set var($nn,ydata) ap${varname}yy${nn} - set var($nn,xedata) ap${varname}xe${nn} - set var($nn,yedata) ap${varname}ye${nn} - global $var($mm,xdata) $var($mm,ydata) $var($mm,xedata) $var($mm,yedata) - global $var($nn,xdata) $var($nn,ydata) $var($nn,xedata) $var($nn,yedata) - - $var($mm,xdata) dup $var($nn,xdata) - $var($mm,ydata) dup $var($nn,ydata) - if {$var($mm,xedata) != {}} { - $var($mm,xedata) dup $var($nn,xedata) - } else { - set var($nn,xedata) {} - } - if {$var($mm,yedata) != {}} { - $var($mm,yedata) dup $var($nn,yedata) - } else { - set var($nn,yedata) {} + for {set ii 1} {$ii<=$tt} {incr ii} { + switch $var(mode) { + pointer { + blt::RemoveBindTag $var(graph$ii) zoom-$var(graph$ii) + bind $var(graph$ii) <1> [list PlotButton $varname %x %y] + } + zoom { + bind $var(graph$ii) <1> {} + blt::AddBindTag $var(graph$ii) zoom-$var(graph$ii) + } + } } - - set var($nn,manage) 1 - set var($nn,dim) $var($mm,dim) - - set var($nn,show) $var($mm,show) - set var($nn,shape,symbol) $var($mm,shape,symbol) - set var($nn,shape,fill) $var($mm,shape,fill) - set var($nn,shape,color) $var($mm,shape,color) - set var($nn,smooth) $var($mm,smooth) - set var($nn,color) [PlotNextColor $var($mm,color)] - set var($nn,fill) $var($mm,fill) - set var($nn,fill,color) [PlotNextColor $var($mm,fill,color)] - set var($nn,width) $var($mm,width) - set var($nn,dash) $var($mm,dash) - set var($nn,error) $var($mm,error) - set var($nn,error,cap) $var($mm,error,cap) - set var($nn,error,color) $var($mm,error,color) - set var($nn,error,width) $var($mm,error,width) - set var($nn,bar,relief) $var($mm,bar,relief) - - # update data set menu - $var(mb).select add radiobutton -label "$var($nn,name)" \ - -variable ${varname}(data,current) -value $nn \ - -command [list PlotCurrentData $varname] - - # make current - set var(data,current) $nn - - set var(manage) $var($nn,manage) - set var(dim) $var($nn,dim) - - set var(xdata) $var($nn,xdata) - set var(ydata) $var($nn,ydata) - set var(xedata) $var($nn,xedata) - set var(yedata) $var($nn,yedata) - - PlotSetVar $varname $nn - - PlotCreateElement $varname - $var(proc,updateelement) $varname - $var(proc,updategraph) $varname - PlotStats $varname - PlotList $varname } proc PlotDestroy {varname} { @@ -506,27 +374,34 @@ proc PlotDestroy {varname} { global iap + set tt $var(graph,total) + set cc $var(graph,current) + # see if it still is around if {![PlotPing $varname]} { return } - for {set nn 1} {$nn<=$var(data,total)} {incr nn} { - switch $var($nn,dim) { + for {set nn 1} {$nn<=$var(graph$cc,data,total)} {incr nn} { + switch $var(graph$cc,$nn,dim) { xy { - blt::vector destroy $var($nn,xdata) $var($nn,ydata) + blt::vector destroy \ + $var(graph$cc,$nn,xdata) $var(graph$cc,$nn,ydata) } xyex { - blt::vector destroy $var($nn,xdata) $var($nn,ydata) \ - $var($nn,xedata) + blt::vector destroy \ + $var(graph$cc,$nn,xdata) $var(graph$cc,$nn,ydata) \ + $var(graph$cc,$nn,xedata) } xyey { - blt::vector destroy $var($nn,xdata) $var($nn,ydata) \ - $var($nn,yedata) + blt::vector destroy \ + $var(graph$cc,$nn,xdata) $var(graph$cc,$nn,ydata) \ + $var(graph$cc,$nn,yedata) } xyexey { - blt::vector destroy $var($nn,xdata) $var($nn,ydata) \ - $var($nn,xedata) $var($nn,yedata) + blt::vector destroy \ + $var(graph$cc,$nn,xdata) $var(graph$cc,$nn,ydata) \ + $var(graph$cc,$nn,xedata) $var(graph$cc,$nn,yedata) } } } @@ -557,29 +432,33 @@ proc PlotExternal {varname} { upvar #0 $varname var global $varname + set tt $var(graph,total) + set cc $var(graph,current) + # incr count - incr ${varname}(data,total) - set nn $var(data,total) - set var(data,current) $nn + incr ${varname}(graph$cc,data,total) + set nn $var(graph$cc,data,total) + set var(graph$cc,data,current) $nn - set var(name) "Dataset $nn" + set var(graph$cc,name) "Dataset $nn" - set var($nn,manage) $var(manage) - set var($nn,dim) $var(dim) + set var(graph$cc,$nn,manage) $var(graph$cc,manage) + set var(graph$cc,$nn,dim) $var(graph$cc,dim) - set var($nn,xdata) $var(xdata) - set var($nn,ydata) $var(ydata) - set var($nn,xedata) $var(xedata) - set var($nn,yedata) $var(yedata) + set var(graph$cc,$nn,xdata) $var(graph$cc,xdata) + set var(graph$cc,$nn,ydata) $var(graph$cc,ydata) + set var(graph$cc,$nn,xedata) $var(graph$cc,xedata) + set var(graph$cc,$nn,yedata) $var(graph$cc,yedata) PlotGetVar $varname $nn # update data set menu - $var(mb).select add radiobutton -label "[msgcat::mc {Dataset}] $nn" \ - -variable ${varname}(data,current) -value $nn \ + $var(mb).graph.select add radiobutton \ + -label "[msgcat::mc {Dataset}] $nn" \ + -variable ${varname}(graph$cc,data,current) -value $nn \ -command "PlotCurrentData $varname" - PlotCreateElement $varname + PlotAddData $varname } proc PlotList {varname} { @@ -599,34 +478,38 @@ proc PlotListGenerate {varname} { upvar #0 $varname var global $varname - set rr {} - if {$var(xdata) != {}} { - global $var(xdata) $var(ydata) $var(xedata) $var(yedata) - set ll [$var(xdata) length] - set xx [$var(xdata) range] - set yy [$var(ydata) range] + set tt $var(graph,total) + set cc $var(graph,current) - switch $var(dim) { + set rr {} + if {$var(graph$cc,xdata) != {}} { + global $var(graph$cc,xdata) $var(graph$cc,ydata) \ + $var(graph$cc,xedata) $var(graph$cc,yedata) + set ll [$var(graph$cc,xdata) length] + set xx [$var(graph$cc,xdata) range] + set yy [$var(graph$cc,ydata) range] + + switch $var(graph$cc,dim) { xy { for {set ii 0} {$ii<$ll} {incr ii} { append rr "[lindex $xx $ii] [lindex $yy $ii]\n" } } xyex { - set xe [$var(xedata) range] + set xe [$var(graph$cc,xedata) range] for {set ii 0} {$ii<$ll} {incr ii} { append rr "[lindex $xx $ii] [lindex $yy $ii] [lindex $xe $ii]\n" } } xyey { - set ye [$var(yedata) range] + set ye [$var(graph$cc,yedata) range] for {set ii 0} {$ii<$ll} {incr ii} { append rr "[lindex $xx $ii] [lindex $yy $ii] [lindex $ye $ii]\n" } } xyexey { - set xe [$var(xedata) range] - set ye [$var(yedata) range] + set xe [$var(graph$cc,xedata) range] + set ye [$var(graph$cc,yedata) range] for {set ii 0} {$ii<$ll} {incr ii} { append rr "[lindex $xx $ii] [lindex $yy $ii] [lindex $xe $ii] [lindex $ye $ii]\n" } @@ -644,150 +527,6 @@ proc PlotListDestroyCB {varname} { set var(list) 0 } -proc PlotLoadConfig {varname} { - upvar #0 $varname var - global $varname - - PlotLoadConfigFile $varname [OpenFileDialog apconfigfbox] -} - -# used by backup -proc PlotLoadConfigFile {varname filename} { - upvar #0 $varname var - global $varname - - if {$filename != {}} { - source $filename - array set $varname [array get analysisplot] - unset analysisplot - - # backward compatibility - FixVar ${varname}(axis,x,grid) ${varname}(graph,x,grid) - FixVar ${varname}(axis,x,log) ${varname}(graph,x,log) - FixVar ${varname}(axis,x,flip) ${varname}(graph,x,flip) - FixVar ${varname}(axis,y,grid) ${varname}(graph,y,grid) - FixVar ${varname}(axis,y,log) ${varname}(graph,y,log) - FixVar ${varname}(axis,y,flip) ${varname}(graph,y,flip) - - FixVar ${varname}(graph,title,family) ${varname}(titleFont) - FixVar ${varname}(graph,title,size) ${varname}(titleSize) - FixVar ${varname}(graph,title,weight) ${varname}(titleWeight) - FixVar ${varname}(graph,title,slant) ${varname}(titleSlant) - - FixVar ${varname}(axis,title,family) ${varname}(textlabFont) - FixVar ${varname}(axis,title,size) ${varname}(textlabSize) - FixVar ${varname}(axis,title,weight) ${varname}(textlabWeight) - FixVar ${varname}(axis,title,slant) ${varname}(textlabSlant) - - FixVar ${varname}(axis,font,family) ${varname}(numlabFont) - FixVar ${varname}(axis,font,size) ${varname}(numlabSize) - FixVar ${varname}(axis,font,weight) ${varname}(numlabWeight) - FixVar ${varname}(axis,font,slant) ${varname}(numlabSlant) - - FixVar ${varname}(show) ${varname}(linear) - FixVar ${varname}(shape,color) ${varname}(discrete,color) - FixVar ${varname}(shape,fill) ${varname}(discrete,fill) - FixVar ${varname}(width) ${varname}(linear,width) - FixVar ${varname}(color) ${varname}(linear,color) - if {[info exists ${varname}(linear,dash)]} { - set var(linear,dash) [FromYesNo $var(linear,dash)] - } - FixVar ${varname}(dash) ${varname}(linear,dash) - - if {[info exists ${varname}(discrete)]} { - if {$var(discrete)} { - FixVar ${varname}(shape,symbol) ${varname}(discrete,symbol) - } else { - FixVarRm ${varname}(discrete,symbol) - } - } - - FixVarRm ${varname}(bar) - FixVarRm ${varname}(bar,color) - - FixVarRm ${varname}(discrete) - - FixVarRm ${varname}(quadratic) - FixVarRm ${varname}(quadratic,width) - FixVarRm ${varname}(quadratic,color) - FixVarRm ${varname}(quadratic,dash) - - FixVarRm ${varname}(step) - FixVarRm ${varname}(step,color) - FixVarRm ${varname}(step,dash) - FixVarRm ${varname}(step,width) - - if {[info exists var(grid)]} { - set var(axis,x,grid) $var(grid) - set var(axis,y,grid) $var(grid) - unset var(grid) - } - if {[info exists var(format)]} { - set var(graph,format) $var(format) - set var(axis,x,format) $var(format,x) - set var(axis,y,format) $var(format,y) - unset var(format) - unset var(format,x) - unset var(format,y) - } - - if {[info exists var(grid,log)]} { - switch $var(grid,log) { - linearlinear { - set var(axis,x,log) 0 - set var(axis,y,log) 0 - } - linearlog { - set var(axis,x,log) 0 - set var(axis,y,log) 1 - } - loglinear { - set var(axis,x,log) 1 - set var(axis,y,log) 0 - } - loglog { - set var(axis,x,log) 1 - set var(axis,y,log) 1 - } - } - unset var(grid,log) - } - - $var(proc,updategraph) $varname - $var(proc,updateelement) $varname - } -} - -proc PlotLoadData {varname} { - upvar #0 $varname var - global $varname - - set filename [OpenFileDialog apdatafbox] - if {$filename != {}} { - set dim xy - if {[PlotDataFormatDialog dim]} { - PlotLoadDataFile $varname $filename $dim - } - } -} - -# used by backup -proc PlotLoadDataFile {varname filename dim} { - upvar #0 $varname var - global $varname - - set ch [open $filename] - set data [read $ch] - close $ch - - PlotRaise $varname - - PlotDataSet $varname $dim $data - $var(proc,updategraph) $varname - PlotStats $varname - PlotList $varname -} - proc PlotNextColor {which} { switch -- $which { black {return red} @@ -825,154 +564,6 @@ proc PlotRaise {varname} { return 0 } -proc PlotSaveConfig {varname} { - upvar #0 $varname var - global $varname - - PlotSaveConfigFile $varname [SaveFileDialog apconfigfbox] -} - -proc PlotSaveConfigFile {varname filename} { - upvar #0 $varname var - global $varname - - if {$filename == {}} { - return - } - - set ch [open $filename w] - - set analysisplot(graph,bg) $var(graph,bg) - - set analysisplot(graph,title) $var(graph,title) - set analysisplot(graph,title,family) $var(graph,title,family) - set analysisplot(graph,title,size) $var(graph,title,size) - set analysisplot(graph,title,weight) $var(graph,title,weight) - set analysisplot(graph,title,slant) $var(graph,title,slant) - - set analysisplot(legend) $var(legend) - set analysisplot(legend,title) $var(legend,title) - set analysisplot(legend,position) $var(legend,position) - set analysisplot(legend,title,family) $var(legend,title,family) - set analysisplot(legend,title,size) $var(legend,title,size) - set analysisplot(legend,title,weight) $var(legend,title,weight) - set analysisplot(legend,title,slant) $var(legend,title,slant) - set analysisplot(legend,font,family) $var(legend,font,family) - set analysisplot(legend,font,size) $var(legend,font,size) - set analysisplot(legend,font,weight) $var(legend,font,weight) - set analysisplot(legend,font,slant) $var(legend,font,slant) - - set analysisplot(axis,x,title) $var(axis,x,title) - set analysisplot(axis,x,grid) $var(axis,x,grid) - set analysisplot(axis,x,log) $var(axis,x,log) - set analysisplot(axis,x,flip) $var(axis,x,flip) - set analysisplot(axis,x,auto) $var(axis,x,auto) - set analysisplot(axis,x,min) $var(axis,x,min) - set analysisplot(axis,x,max) $var(axis,x,max) - set analysisplot(axis,x,format) $var(axis,x,format) - - set analysisplot(axis,y,title) $var(axis,y,title) - set analysisplot(axis,y,grid) $var(axis,y,grid) - set analysisplot(axis,y,log) $var(axis,y,log) - set analysisplot(axis,y,flip) $var(axis,y,flip) - set analysisplot(axis,y,auto) $var(axis,y,auto) - set analysisplot(axis,y,min) $var(axis,y,min) - set analysisplot(axis,y,max) $var(axis,y,max) - set analysisplot(axis,y,format) $var(axis,y,format) - - set analysisplot(axis,title,family) $var(axis,title,family) - set analysisplot(axis,title,size) $var(axis,title,size) - set analysisplot(axis,title,weight) $var(axis,title,weight) - set analysisplot(axis,title,slant) $var(axis,title,slant) - - set analysisplot(axis,font,family) $var(axis,font,family) - set analysisplot(axis,font,size) $var(axis,font,size) - set analysisplot(axis,font,weight) $var(axis,font,weight) - set analysisplot(axis,font,slant) $var(axis,font,slant) - - set analysisplot(show) $var(show) - set analysisplot(shape,symbol) $var(shape,symbol) - set analysisplot(shape,fill) $var(shape,fill) - set analysisplot(shape,color) $var(shape,color) - set analysisplot(smooth) $var(smooth) - set analysisplot(color) $var(color) - set analysisplot(fill) $var(fill) - set analysisplot(fill,color) $var(fill,color) - set analysisplot(width) $var(width) - set analysisplot(dash) $var(dash) - - set analysisplot(error) $var(error) - set analysisplot(error,cap) $var(error,cap) - set analysisplot(error,color) $var(error,color) - set analysisplot(error,width) $var(error,width) - - set analysisplot(bar,relief) $var(bar,relief) - set analysisplot(bar,mode) $var(bar,mode) - - puts $ch "array set analysisplot \{ [array get analysisplot] \}" - close $ch -} - -proc PlotSaveData {varname} { - upvar #0 $varname var - global $varname - - if {$var(xdata) == {}} { - return - } - - PlotSaveDataFile $varname [SaveFileDialog apdatafbox] -} - -proc PlotSaveDataFile {varname filename} { - upvar #0 $varname var - global $varname - - if {$var(xdata) == {}} { - return - } - - if {$filename == {}} { - return - } - - global $var(xdata) $var(ydata) $var(xedata) $var(yedata) - set ll [$var(xdata) length] - set xx [$var(xdata) range] - set yy [$var(ydata) range] - - set ch [open $filename w] - switch $var(dim) { - xy { - for {set ii 0} {$ii<$ll} {incr ii} { - puts $ch "[lindex $xx $ii] [lindex $yy $ii]" - } - } - xyex { - set xe [$var(xedata) range] - for {set ii 0} {$ii<$ll} {incr ii} { - puts $ch "[lindex $xx $ii] [lindex $yy $ii] [lindex $xe $ii]" - } - } - xyey { - set ye [$var(yedata) range] - for {set ii 0} {$ii<$ll} {incr ii} { - puts $ch "[lindex $xx $ii] [lindex $yy $ii] [lindex $ye $ii]" - } - } - xyexey { - set xe [$var(xedata) range] - set ye [$var(yedata) range] - for {set ii 0} {$ii<$ll} {incr ii} { - puts $ch "[lindex $xx $ii] [lindex $yy $ii] [lindex $xe $ii] [lindex $ye $ii]" - } - } - } - close $ch - - PlotRaise $varname -} - proc PlotStats {varname} { upvar #0 $varname var global $varname @@ -990,6 +581,9 @@ proc PlotStatsGenerate {varname} { upvar #0 $varname var global $varname + set tt $var(graph,total) + set cc $var(graph,current) + set min {} set max {} set mean {} @@ -997,14 +591,14 @@ proc PlotStatsGenerate {varname} { set varr {} set sdev {} - if {$var(ydata) != {}} { - if {[$var(ydata) length] > 0} { - set min [format "%6.3f" [blt::vector expr min($var(ydata))]] - set max [format "%6.3f" [blt::vector expr max($var(ydata))]] - set mean [format "%6.3f" [blt::vector expr mean($var(ydata))]] - set median [format "%6.3f" [blt::vector expr median($var(ydata))]] - set varr [format "%6.3f" [expr [blt::vector expr var($var(ydata))]]] - set sdev [format "%6.3f" [expr [blt::vector expr sdev($var(ydata))]]] + if {$var(graph$cc,ydata) != {}} { + if {[$var(graph$cc,ydata) length] > 0} { + set min [format "%6.3f" [blt::vector expr min($var(graph$cc,ydata))]] + set max [format "%6.3f" [blt::vector expr max($var(graph$cc,ydata))]] + set mean [format "%6.3f" [blt::vector expr mean($var(graph$cc,ydata))]] + set median [format "%6.3f" [blt::vector expr median($var(graph$cc,ydata))]] + set varr [format "%6.3f" [expr [blt::vector expr var($var(graph$cc,ydata))]]] + set sdev [format "%6.3f" [expr [blt::vector expr sdev($var(graph$cc,ydata))]]] } } @@ -1029,6 +623,9 @@ proc PlotTitle {varname title xaxis yaxis} { upvar #0 $varname var global $varname + set tt $var(graph,total) + set cc $var(graph,current) + set var(graph,title) "$title" set var(axis,x,title) "$xaxis" set var(axis,y,title) "$yaxis" @@ -1038,6 +635,9 @@ proc PlotUpdateGraph {varname} { upvar #0 $varname var global $varname + set tt $var(graph,total) + set cc $var(graph,current) + global ds9 if {$var(axis,x,auto)} { @@ -1056,39 +656,39 @@ proc PlotUpdateGraph {varname} { set ymax $var(axis,y,max) } - $var(graph) xaxis configure -min $xmin -max $xmax \ + $var(graph$cc) xaxis configure -min $xmin -max $xmax \ -descending $var(axis,x,flip) - $var(graph) yaxis configure -min $ymin -max $ymax \ + $var(graph$cc) yaxis configure -min $ymin -max $ymax \ -descending $var(axis,y,flip) if {$var(graph,format)} { if {$var(axis,x,format) != {}} { - $var(graph) xaxis configure \ + $var(graph$cc) xaxis configure \ -command [list PlotAxisFormat $varname x] } else { - $var(graph) xaxis configure -command {} + $var(graph$cc) xaxis configure -command {} } if {$var(axis,y,format) != {}} { - $var(graph) yaxis configure \ + $var(graph$cc) yaxis configure \ -command [list PlotAxisFormat $varname y] } else { - $var(graph) yaxis configure -command {} + $var(graph$cc) yaxis configure -command {} } } # Menus - if {$var(xdata) != {}} { + if {$var(graph$cc,xdata) != {}} { $var(mb).file entryconfig "[msgcat::mc {Save Data}]..." -state normal $var(mb).file entryconfig [msgcat::mc {Clear Data}] -state normal $var(mb).file entryconfig [msgcat::mc {Statistics}] -state normal $var(mb).file entryconfig [msgcat::mc {List Data}] -state normal - if {$var(1,manage)} { + if {$var(graph$cc,1,manage)} { $var(mb).file entryconfig [msgcat::mc {Duplicate Data}] \ - -state disabled + -state normal } else { $var(mb).file entryconfig [msgcat::mc {Duplicate Data}] \ - -state normal + -state disable } } else { $var(mb).file entryconfig "[msgcat::mc {Save Data}]..." -state disabled @@ -1099,68 +699,39 @@ proc PlotUpdateGraph {varname} { } # Graph - $var(graph) configure -plotpadx 0 -plotpady 0 \ + $var(graph$cc) configure -plotpadx 0 -plotpady 0 \ -title $var(graph,title) \ -font "{$ds9($var(graph,title,family))} $var(graph,title,size) $var(graph,title,weight) $var(graph,title,slant)" \ -bg $var(graph,bg) -plotbackground $var(graph,bg) - $var(graph) xaxis configure \ + $var(graph$cc) xaxis configure \ -bg $var(graph,bg) \ -grid $var(axis,x,grid) -logscale $var(axis,x,log) \ -title $var(axis,x,title) \ -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" - $var(graph) yaxis configure \ + $var(graph$cc) yaxis configure \ -bg $var(graph,bg) \ -grid $var(axis,y,grid) -logscale $var(axis,y,log) \ -title $var(axis,y,title) \ -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" - $var(graph) legend configure -hide [expr !$var(legend)] \ + $var(graph$cc) legend configure -hide [expr !$var(legend)] \ -bg $var(graph,bg) \ -position $var(legend,position) -title $var(legend,title) \ -font "{$ds9($var(legend,font,family))} $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" \ -titlefont "{$ds9($var(legend,title,family))} $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)" } -proc PlotCreateElement {varname} { - upvar #0 $varname var - global $varname - - # warning: uses current vars - if {$var(data,total) == 0} { - return - } - - # delete current elements - set nn $var(data,current) - foreach el [$var(graph) element names] { - set f [split $el -] - if {[lindex $f 1] == $nn} { - $var(graph) element delete $el - } - } - - global $var(xdata) $var(ydata) - $var(graph) element create "d-${nn}" -xdata $var(xdata) -ydata $var(ydata) - if {$var(xedata) != {}} { - if {[$var(xedata) length] != 0} { - $var(graph) element configure "d-${nn}" -xerror $var(xedata) - } - } - if {$var(yedata) != {}} { - if {[$var(yedata) length] != 0} { - $var(graph) element configure "d-${nn}" -yerror $var(yedata) - } - } -} - proc PlotColorMenu {w varname color cmd} { upvar #0 $varname var global $varname + set tt $var(graph,total) + set cc $var(graph,current) + menu $w $w add radiobutton -label [msgcat::mc {Black}] \ -variable ${varname}($color) -value black -command $cmd @@ -1187,44 +758,58 @@ proc PlotSetVar {varname nn} { upvar #0 $varname var global $varname - set var(name) $var($nn,name) - set var(show) $var($nn,show) - set var(shape,symbol) $var($nn,shape,symbol) - set var(shape,fill) $var($nn,shape,fill) - set var(shape,color) $var($nn,shape,color) - set var(smooth) $var($nn,smooth) - set var(color) $var($nn,color) - set var(fill) $var($nn,fill) - set var(fill,color) $var($nn,fill,color) - set var(width) $var($nn,width) - set var(dash) $var($nn,dash) - set var(error) $var($nn,error) - set var(error,cap) $var($nn,error,cap) - set var(error,color) $var($nn,error,color) - set var(error,width) $var($nn,error,width) - set var(bar,relief) $var($nn,bar,relief) + set tt $var(graph,total) + set cc $var(graph,current) + + # per DataSet + set var(graph$cc,name) $var(graph$cc,$nn,name) + set var(graph$cc,show) $var(graph$cc,$nn,show) + set var(graph$cc,smooth) $var(graph$cc,$nn,smooth) + set var(graph$cc,color) $var(graph$cc,$nn,color) + set var(graph$cc,fill) $var(graph$cc,$nn,fill) + set var(graph$cc,fill,color) $var(graph$cc,$nn,fill,color) + set var(graph$cc,width) $var(graph$cc,$nn,width) + set var(graph$cc,dash) $var(graph$cc,$nn,dash) + + set var(graph$cc,shape,symbol) $var(graph$cc,$nn,shape,symbol) + set var(graph$cc,shape,fill) $var(graph$cc,$nn,shape,fill) + set var(graph$cc,shape,color) $var(graph$cc,$nn,shape,color) + + set var(graph$cc,error) $var(graph$cc,$nn,error) + set var(graph$cc,error,cap) $var(graph$cc,$nn,error,cap) + set var(graph$cc,error,color) $var(graph$cc,$nn,error,color) + set var(graph$cc,error,width) $var(graph$cc,$nn,error,width) + + set var(graph$cc,bar,relief) $var(graph$cc,$nn,bar,relief) } proc PlotGetVar {varname nn} { upvar #0 $varname var global $varname - set var($nn,name) $var(name) - set var($nn,show) $var(show) - set var($nn,shape,symbol) $var(shape,symbol) - set var($nn,shape,fill) $var(shape,fill) - set var($nn,shape,color) $var(shape,color) - set var($nn,smooth) $var(smooth) - set var($nn,color) $var(color) - set var($nn,fill) $var(fill) - set var($nn,fill,color) $var(fill,color) - set var($nn,width) $var(width) - set var($nn,dash) $var(dash) - set var($nn,error) $var(error) - set var($nn,error,cap) $var(error,cap) - set var($nn,error,color) $var(error,color) - set var($nn,error,width) $var(error,width) - set var($nn,bar,relief) $var(bar,relief) + set tt $var(graph,total) + set cc $var(graph,current) + + # per DataSet + set var(graph$cc,$nn,name) $var(graph$cc,name) + set var(graph$cc,$nn,show) $var(graph$cc,show) + set var(graph$cc,$nn,smooth) $var(graph$cc,smooth) + set var(graph$cc,$nn,color) $var(graph$cc,color) + set var(graph$cc,$nn,fill) $var(graph$cc,fill) + set var(graph$cc,$nn,fill,color) $var(graph$cc,fill,color) + set var(graph$cc,$nn,width) $var(graph$cc,width) + set var(graph$cc,$nn,dash) $var(graph$cc,dash) + + set var(graph$cc,$nn,shape,symbol) $var(graph$cc,shape,symbol) + set var(graph$cc,$nn,shape,fill) $var(graph$cc,shape,fill) + set var(graph$cc,$nn,shape,color) $var(graph$cc,shape,color) + + set var(graph$cc,$nn,error) $var(graph$cc,error) + set var(graph$cc,$nn,error,cap) $var(graph$cc,error,cap) + set var(graph$cc,$nn,error,color) $var(graph$cc,error,color) + set var(graph$cc,$nn,error,width) $var(graph$cc,error,width) + + set var(graph$cc,$nn,bar,relief) $var(graph$cc,bar,relief) } proc PlotBackup {ch dir} { @@ -1233,14 +818,17 @@ proc PlotBackup {ch dir} { set rdir "./[lindex [file split $dir] end]" # only save ap plots - foreach tt $iap(windows) { - if {[string range $tt 0 1] == {ap}} { - set fdir [file join $dir $tt] + foreach ww $iap(windows) { + if {[string range $ww 0 1] == {ap}} { + set fdir [file join $dir $ww] - set varname $tt + set varname $ww upvar #0 $varname var global $varname + set tt $var(graph,total) + set cc $var(graph,current) + # create dir if needed if {![file isdirectory $fdir]} { if {[catch {file mkdir $fdir}]} { @@ -1249,24 +837,25 @@ proc PlotBackup {ch dir} { } } - switch $var(type) { + switch $var(graph$cc,type) { line {puts $ch "PlotLineTool"} bar {puts $ch "PlotBarTool"} scatter {puts $ch "PlotScatterTool"} + strip {puts $ch "PlotStripTool"} } - set save $var(data,current) - for {set ii 1} {$ii<=$var(data,total)} {incr ii} { - set ${varname}(data,current) $ii + set save $var(graph$cc,data,current) + for {set ii 1} {$ii<=$var(graph$cc,data,total)} {incr ii} { + set ${varname}(graph$cc,data,current) $ii PlotCurrentData $varname PlotSaveDataFile $varname "$fdir/plot$ii.dat" PlotSaveConfigFile $varname "$fdir/plot$ii.plt" - puts $ch "PlotLoadDataFile $varname $fdir/plot$ii.dat $var(dim)" + puts $ch "PlotLoadDataFile $varname $fdir/plot$ii.dat $var(graph$cc,dim)" puts $ch "PlotLoadConfigFile $varname $fdir/plot$ii.plt" } - set ${varname}(data,current) $save + set ${varname}(graph$cc,data,current) $save PlotCurrentData $varname } } diff --git a/ds9/library/plotbar.tcl b/ds9/library/plotbar.tcl index 3a1a75c..d9d12ae 100644 --- a/ds9/library/plotbar.tcl +++ b/ds9/library/plotbar.tcl @@ -7,6 +7,7 @@ package provide DS9 1.0 # used by backup proc PlotBarTool {} { global iap + PlotBar $iap(tt) [msgcat::mc {Bar Plot Tool}] {} {} {} 2 {} } @@ -29,10 +30,8 @@ proc PlotBar {tt wtt title xaxis yaxis dim data} { upvar #0 $varname var global $varname - PlotBarProc $varname - PlotDialog $varname $wtt $title $xaxis $yaxis - PlotDialogBar $varname - + PlotBarDialog $varname $wtt $title $xaxis $yaxis + PlotDataSet $varname $dim $data $var(proc,updategraph) $varname PlotStats $varname @@ -43,26 +42,17 @@ proc PlotBarDialog {varname wtt title xaxis yaxis} { upvar #0 $varname var global $varname - PlotBarProc $varname - PlotDialog $varname $wtt $title $xaxis $yaxis - PlotDialogBar $varname -} - -proc PlotBarProc {varname} { - upvar #0 $varname var - global $varname - + set var(proc,addgraph) PlotBarAddGraph set var(proc,updategraph) PlotBarUpdateGraph set var(proc,updateelement) PlotBarUpdateElement set var(proc,highlite) PlotBarHighliteElement set var(proc,button) PlotBarButton -} -proc PlotDialogBar {varname} { - upvar #0 $varname var - global $varname + PlotDialog $varname $wtt $title $xaxis $yaxis + PlotAddGraph $varname - global ds9 + set tt $var(graph,total) + set cc $var(graph,current) # Graph $var(mb).graph add separator @@ -84,80 +74,77 @@ proc PlotDialogBar {varname} { -variable ${varname}(bar,mode) -value overlap \ -command [list $var(proc,updategraph) $varname] - # Dataset - $var(mb).dataset add checkbutton -label [msgcat::mc {Show}] \ - -variable ${varname}(show) \ + # Data + $var(mb).data add checkbutton -label [msgcat::mc {Show}] \ + -variable ${varname}(graph$cc,show) \ -command [list PlotBarUpdateElement $varname] - $var(mb).dataset add separator - $var(mb).dataset add cascade -label [msgcat::mc {Color}] \ - -menu $var(mb).dataset.color - $var(mb).dataset add cascade -label [msgcat::mc {Relief}] \ - -menu $var(mb).dataset.relief - $var(mb).dataset add cascade -label [msgcat::mc {Error}] \ - -menu $var(mb).dataset.error - $var(mb).dataset add separator - $var(mb).dataset add command -label "[msgcat::mc {Name}]..." \ + $var(mb).data add separator + $var(mb).data add cascade -label [msgcat::mc {Color}] \ + -menu $var(mb).data.color + $var(mb).data add cascade -label [msgcat::mc {Relief}] \ + -menu $var(mb).data.relief + $var(mb).data add cascade -label [msgcat::mc {Error}] \ + -menu $var(mb).data.error + $var(mb).data add separator + $var(mb).data add command -label "[msgcat::mc {Name}]..." \ -command [list DatasetNameDialog $varname] - PlotColorMenu $var(mb).dataset.color $varname color \ + PlotColorMenu $var(mb).data.color $varname graph$cc,color \ [list PlotBarUpdateElement $varname] # Relief - menu $var(mb).dataset.relief - $var(mb).dataset.relief add radiobutton -label [msgcat::mc {Flat}] \ - -variable ${varname}(bar,relief) -value flat \ + menu $var(mb).data.relief + $var(mb).data.relief add radiobutton -label [msgcat::mc {Flat}] \ + -variable ${varname}(graph$cc,bar,relief) -value flat \ -command [list PlotBarUpdateElement $varname] - $var(mb).dataset.relief add radiobutton -label [msgcat::mc {Sunken}] \ - -variable ${varname}(bar,relief) -value sunken \ + $var(mb).data.relief add radiobutton -label [msgcat::mc {Sunken}] \ + -variable ${varname}(graph$cc,bar,relief) -value sunken \ -command [list PlotBarUpdateElement $varname] - $var(mb).dataset.relief add radiobutton -label [msgcat::mc {Raised}] \ - -variable ${varname}(bar,relief) -value raised \ + $var(mb).data.relief add radiobutton -label [msgcat::mc {Raised}] \ + -variable ${varname}(graph$cc,bar,relief) -value raised \ -command [list PlotBarUpdateElement $varname] - $var(mb).dataset.relief add radiobutton -label [msgcat::mc {Solid}] \ - -variable ${varname}(bar,relief) -value solid \ + $var(mb).data.relief add radiobutton -label [msgcat::mc {Solid}] \ + -variable ${varname}(graph$cc,bar,relief) -value solid \ -command [list PlotBarUpdateElement $varname] - $var(mb).dataset.relief add radiobutton -label [msgcat::mc {Groove}] \ - -variable ${varname}(bar,relief) -value groove \ + $var(mb).data.relief add radiobutton -label [msgcat::mc {Groove}] \ + -variable ${varname}(graph$cc,bar,relief) -value groove \ -command [list PlotBarUpdateElement $varname] # Error - menu $var(mb).dataset.error - $var(mb).dataset.error add checkbutton -label [msgcat::mc {Show}] \ - -variable ${varname}(error) \ + menu $var(mb).data.error + $var(mb).data.error add checkbutton -label [msgcat::mc {Show}] \ + -variable ${varname}(graph$cc,error) \ -command [list PlotBarUpdateElement $varname] - $var(mb).dataset.error add checkbutton -label [msgcat::mc {Cap}] \ - -variable ${varname}(error,cap) \ + $var(mb).data.error add checkbutton -label [msgcat::mc {Cap}] \ + -variable ${varname}(graph$cc,error,cap) \ -command [list PlotBarUpdateElement $varname] - $var(mb).dataset.error add separator - $var(mb).dataset.error add cascade -label [msgcat::mc {Color}] \ - -menu $var(mb).dataset.error.color - $var(mb).dataset.error add cascade -label [msgcat::mc {Width}] \ - -menu $var(mb).dataset.error.width + $var(mb).data.error add separator + $var(mb).data.error add cascade -label [msgcat::mc {Color}] \ + -menu $var(mb).data.error.color + $var(mb).data.error add cascade -label [msgcat::mc {Width}] \ + -menu $var(mb).data.error.width - PlotColorMenu $var(mb).dataset.error.color $varname error,color \ + PlotColorMenu $var(mb).data.error.color $varname graph$cc,error,color \ [list PlotBarUpdateElement $varname] - WidthDashMenu $var(mb).dataset.error.width $varname error,width {} \ + WidthDashMenu $var(mb).data.error.width $varname graph$cc,error,width {} \ [list PlotBarUpdateElement $varname] {} +} - # graph - set var(type) bar - set var(graph) [blt::barchart $var(top).bar \ - -width 600 \ - -height 500 \ - -highlightthickness 0 \ - ] +proc PlotBarAddGraph {varname} { + upvar #0 $varname var + global $varname - $var(graph) xaxis configure -grid no -stepsize 0 - $var(graph) yaxis configure -grid yes + set cc $var(graph,current) - pack $var(graph) -expand yes -fill both + set var(type$cc) bar + set var(graph$cc) [blt::barchart $var(canvas).gr$cc \ + -width 600 \ + -height 500 \ + -highlightthickness 0 \ + ] - # set up zoom stack, assuming mode is zoom - switch $ds9(wm) { - x11 - - win32 {Blt_ZoomStack $var(graph) -mode release} - aqua {Blt_ZoomStack $var(graph) -mode release -button "ButtonPress-2"} - } + $var(graph$cc) xaxis configure -grid no -stepsize 0 + $var(graph$cc) yaxis configure -grid yes } proc PlotBarUpdateGraph {varname} { @@ -165,33 +152,47 @@ proc PlotBarUpdateGraph {varname} { global $varname PlotUpdateGraph $varname - $var(graph) configure -barmode $var(bar,mode) + + set tt $var(graph,total) + set cc $var(graph,current) + + for {set ii 1} {$ii<=$tt} {incr ii} { + $var(graph$ii) configure -barmode $var(bar,mode) + } } proc PlotBarUpdateElement {varname} { upvar #0 $varname var global $varname - set nn $var(data,current) + set tt $var(graph,total) + set cc $var(graph,current) + + # warning: uses current vars + if {$var(graph$cc,data,total) == 0} { + return + } + + set nn $var(graph$cc,data,current) PlotGetVar $varname $nn - if {$var(error)} { + if {$var(graph$cc,error)} { set show both } else { set show none } - if {$var(error,cap)} { - set cap [expr $var(error,width)+3] + if {$var(graph$cc,error,cap)} { + set cap [expr $var(graph$cc,error,width)+3] } else { set cap 0 } - $var(graph) element configure "d-${nn}" \ - -label $var(name) -hide [expr !$var(show)] \ - -relief $var(bar,relief) -color $var(color) \ - -showerrorbars $show -errorbarcolor $var(error,color) \ - -errorbarwidth $var(error,width) -errorbarcap $cap + $var(graph$cc) element configure "d-${nn}" \ + -label $var(graph$cc,name) -hide [expr !$var(graph$cc,show)] \ + -relief $var(graph$cc,bar,relief) -color $var(graph$cc,color) \ + -showerrorbars $show -errorbarcolor $var(graph$cc,error,color) \ + -errorbarwidth $var(graph$cc,error,width) -errorbarcap $cap } proc PlotBarButton {varname x y} { diff --git a/ds9/library/plotconfig.tcl b/ds9/library/plotconfig.tcl new file mode 100644 index 0000000..085faaa --- /dev/null +++ b/ds9/library/plotconfig.tcl @@ -0,0 +1,287 @@ +# Copyright (C) 1999-2018 +# Smithsonian Astrophysical Observatory, Cambridge, MA, USA +# For conditions of distribution and use, see copyright notice in "copyright" + +package provide DS9 1.0 + +proc PlotLoadConfig {varname} { + upvar #0 $varname var + global $varname + + PlotLoadConfigFile $varname [OpenFileDialog apconfigfbox] +} + +# used by backup +proc PlotLoadConfigFile {varname filename} { + upvar #0 $varname var + global $varname + + set tt $var(graph,total) + set cc $var(graph,current) + + if {$filename == {}} { + return + } + + source $filename + # array set $varname [array get analysisplot] + + set var(graph,bg) $analysisplot(graph,bg) + + set var(graph,title) $analysisplot(graph,title) + set var(graph,title,family) $analysisplot(graph,title,family) + set var(graph,title,size) $analysisplot(graph,title,size) + set var(graph,title,weight) $analysisplot(graph,title,weight) + set var(graph,title,slant) $analysisplot(graph,title,slant) + + set var(legend) $analysisplot(legend) + set var(legend,title) $analysisplot(legend,title) + set var(legend,position) $analysisplot(legend,position) + set var(legend,title,family) $analysisplot(legend,title,family) + set var(legend,title,size) $analysisplot(legend,title,size) + set var(legend,title,weight) $analysisplot(legend,title,weight) + set var(legend,title,slant) $analysisplot(legend,title,slant) + set var(legend,font,family) $analysisplot(legend,font,family) + set var(legend,font,size) $analysisplot(legend,font,size) + set var(legend,font,weight) $analysisplot(legend,font,weight) + set var(legend,font,slant) $analysisplot(legend,font,slant) + + set var(axis,x,title) $analysisplot(axis,x,title) + set var(axis,x,grid) $analysisplot(axis,x,grid) + set var(axis,x,log) $analysisplot(axis,x,log) + set var(axis,x,flip) $analysisplot(axis,x,flip) + set var(axis,x,auto) $analysisplot(axis,x,auto) + set var(axis,x,min) $analysisplot(axis,x,min) + set var(axis,x,max) $analysisplot(axis,x,max) + set var(axis,x,format) $analysisplot(axis,x,format) + + set var(axis,y,title) $analysisplot(axis,y,title) + set var(axis,y,grid) $analysisplot(axis,y,grid) + set var(axis,y,log) $analysisplot(axis,y,log) + set var(axis,y,flip) $analysisplot(axis,y,flip) + set var(axis,y,auto) $analysisplot(axis,y,auto) + set var(axis,y,min) $analysisplot(axis,y,min) + set var(axis,y,max) $analysisplot(axis,y,max) + set var(axis,y,format) $analysisplot(axis,y,format) + + set var(axis,title,family) $analysisplot(axis,title,family) + set var(axis,title,size) $analysisplot(axis,title,size) + set var(axis,title,weight) $analysisplot(axis,title,weight) + set var(axis,title,slant) $analysisplot(axis,title,slant) + + set var(axis,font,family) $analysisplot(axis,font,family) + set var(axis,font,size) $analysisplot(axis,font,size) + set var(axis,font,weight) $analysisplot(axis,font,weight) + set var(axis,font,slant) $analysisplot(axis,font,slant) + + set var(graph$cc,show) $analysisplot(show) + set var(graph$cc,smooth) $analysisplot(smooth) + set var(graph$cc,color) $analysisplot(color) + set var(graph$cc,fill) $analysisplot(fill) + set var(graph$cc,fill,color) $analysisplot(fill,color) + set var(graph$cc,width) $analysisplot(width) + set var(graph$cc,dash) $analysisplot(dash) + + set var(graph$cc,shape,symbol) $analysisplot(shape,symbol) + set var(graph$cc,shape,fill) $analysisplot(shape,fill) + set var(graph$cc,shape,color) $analysisplot(shape,color) + + set var(graph$cc,error) $analysisplot(error) + set var(graph$cc,error,cap) $analysisplot(error,cap) + set var(graph$cc,error,color) $analysisplot(error,color) + set var(graph$cc,error,width) $analysisplot(error,width) + + set var(graph$cc,bar,relief) $analysisplot(bar,relief) + set var(graph$cc,bar,mode) $analysisplot(bar,mode) + + unset analysisplot + + # backward compatibility + FixVar ${varname}(axis,x,grid) ${varname}(graph,x,grid) + FixVar ${varname}(axis,x,log) ${varname}(graph,x,log) + FixVar ${varname}(axis,x,flip) ${varname}(graph,x,flip) + FixVar ${varname}(axis,y,grid) ${varname}(graph,y,grid) + FixVar ${varname}(axis,y,log) ${varname}(graph,y,log) + FixVar ${varname}(axis,y,flip) ${varname}(graph,y,flip) + + FixVar ${varname}(graph,title,family) ${varname}(titleFont) + FixVar ${varname}(graph,title,size) ${varname}(titleSize) + FixVar ${varname}(graph,title,weight) ${varname}(titleWeight) + FixVar ${varname}(graph,title,slant) ${varname}(titleSlant) + + FixVar ${varname}(axis,title,family) ${varname}(textlabFont) + FixVar ${varname}(axis,title,size) ${varname}(textlabSize) + FixVar ${varname}(axis,title,weight) ${varname}(textlabWeight) + FixVar ${varname}(axis,title,slant) ${varname}(textlabSlant) + + FixVar ${varname}(axis,font,family) ${varname}(numlabFont) + FixVar ${varname}(axis,font,size) ${varname}(numlabSize) + FixVar ${varname}(axis,font,weight) ${varname}(numlabWeight) + FixVar ${varname}(axis,font,slant) ${varname}(numlabSlant) + + FixVar ${varname}(graph$cc,show) ${varname}(linear) + FixVar ${varname}(graph$cc,shape,color) ${varname}(discrete,color) + FixVar ${varname}(graph$cc,shape,fill) ${varname}(discrete,fill) + FixVar ${varname}(graph$cc,width) ${varname}(linear,width) + FixVar ${varname}(graph$cc,color) ${varname}(linear,color) + if {[info exists ${varname}(linear,dash)]} { + set var(linear,dash) [FromYesNo $var(linear,dash)] + } + FixVar ${varname}(graph$cc,dash) ${varname}(linear,dash) + + if {[info exists ${varname}(discrete)]} { + if {$var(discrete)} { + FixVar ${varname}(graph$cc,shape,symbol) \ + ${varname}(discrete,symbol) + } else { + FixVarRm ${varname}(discrete,symbol) + } + } + + FixVarRm ${varname}(bar) + FixVarRm ${varname}(bar,color) + + FixVarRm ${varname}(discrete) + + FixVarRm ${varname}(quadratic) + FixVarRm ${varname}(quadratic,width) + FixVarRm ${varname}(quadratic,color) + FixVarRm ${varname}(quadratic,dash) + + FixVarRm ${varname}(step) + FixVarRm ${varname}(step,color) + FixVarRm ${varname}(step,dash) + FixVarRm ${varname}(step,width) + + if {[info exists var(grid)]} { + set var(axis,x,grid) $var(grid) + set var(axis,y,grid) $var(grid) + unset var(grid) + } + if {[info exists var(format)]} { + set var(graph,format) $var(format) + set var(axis,x,format) $var(format,x) + set var(axis,y,format) $var(format,y) + unset var(format) + unset var(format,x) + unset var(format,y) + } + + if {[info exists var(grid,log)]} { + switch $var(grid,log) { + linearlinear { + set var(axis,x,log) 0 + set var(axis,y,log) 0 + } + linearlog { + set var(axis,x,log) 0 + set var(axis,y,log) 1 + } + loglinear { + set var(axis,x,log) 1 + set var(axis,y,log) 0 + } + loglog { + set var(axis,x,log) 1 + set var(axis,y,log) 1 + } + } + unset var(grid,log) + } + + $var(proc,updategraph) $varname + $var(proc,updateelement) $varname +} + +proc PlotSaveConfig {varname} { + upvar #0 $varname var + global $varname + + PlotSaveConfigFile $varname [SaveFileDialog apconfigfbox] +} + +proc PlotSaveConfigFile {varname filename} { + upvar #0 $varname var + global $varname + + set tt $var(graph,total) + set cc $var(graph,current) + + if {$filename == {}} { + return + } + + set ch [open $filename w] + + set analysisplot(graph,bg) $var(graph,bg) + + set analysisplot(graph,title) $var(graph,title) + set analysisplot(graph,title,family) $var(graph,title,family) + set analysisplot(graph,title,size) $var(graph,title,size) + set analysisplot(graph,title,weight) $var(graph,title,weight) + set analysisplot(graph,title,slant) $var(graph,title,slant) + + set analysisplot(legend) $var(legend) + set analysisplot(legend,title) $var(legend,title) + set analysisplot(legend,position) $var(legend,position) + set analysisplot(legend,title,family) $var(legend,title,family) + set analysisplot(legend,title,size) $var(legend,title,size) + set analysisplot(legend,title,weight) $var(legend,title,weight) + set analysisplot(legend,title,slant) $var(legend,title,slant) + set analysisplot(legend,font,family) $var(legend,font,family) + set analysisplot(legend,font,size) $var(legend,font,size) + set analysisplot(legend,font,weight) $var(legend,font,weight) + set analysisplot(legend,font,slant) $var(legend,font,slant) + + set analysisplot(axis,x,title) $var(axis,x,title) + set analysisplot(axis,x,grid) $var(axis,x,grid) + set analysisplot(axis,x,log) $var(axis,x,log) + set analysisplot(axis,x,flip) $var(axis,x,flip) + set analysisplot(axis,x,auto) $var(axis,x,auto) + set analysisplot(axis,x,min) $var(axis,x,min) + set analysisplot(axis,x,max) $var(axis,x,max) + set analysisplot(axis,x,format) $var(axis,x,format) + + set analysisplot(axis,y,title) $var(axis,y,title) + set analysisplot(axis,y,grid) $var(axis,y,grid) + set analysisplot(axis,y,log) $var(axis,y,log) + set analysisplot(axis,y,flip) $var(axis,y,flip) + set analysisplot(axis,y,auto) $var(axis,y,auto) + set analysisplot(axis,y,min) $var(axis,y,min) + set analysisplot(axis,y,max) $var(axis,y,max) + set analysisplot(axis,y,format) $var(axis,y,format) + + set analysisplot(axis,title,family) $var(axis,title,family) + set analysisplot(axis,title,size) $var(axis,title,size) + set analysisplot(axis,title,weight) $var(axis,title,weight) + set analysisplot(axis,title,slant) $var(axis,title,slant) + + set analysisplot(axis,font,family) $var(axis,font,family) + set analysisplot(axis,font,size) $var(axis,font,size) + set analysisplot(axis,font,weight) $var(axis,font,weight) + set analysisplot(axis,font,slant) $var(axis,font,slant) + + set analysisplot(show) $var(graph$cc,show) + set analysisplot(smooth) $var(graph$cc,smooth) + set analysisplot(color) $var(graph$cc,color) + set analysisplot(fill) $var(graph$cc,fill) + set analysisplot(fill,color) $var(graph$cc,fill,color) + set analysisplot(width) $var(graph$cc,width) + set analysisplot(dash) $var(graph$cc,dash) + + set analysisplot(shape,symbol) $var(graph$cc,shape,symbol) + set analysisplot(shape,fill) $var(graph$cc,shape,fill) + set analysisplot(shape,color) $var(graph$cc,shape,color) + + set analysisplot(error) $var(graph$cc,error) + set analysisplot(error,cap) $var(graph$cc,error,cap) + set analysisplot(error,color) $var(graph$cc,error,color) + set analysisplot(error,width) $var(graph$cc,error,width) + + set analysisplot(bar,relief) $var(graph$cc,bar,relief) + set analysisplot(bar,mode) $var(graph$cc,bar,mode) + + puts $ch "array set analysisplot \{ [array get analysisplot] \}" + close $ch +} + diff --git a/ds9/library/plotdata.tcl b/ds9/library/plotdata.tcl new file mode 100644 index 0000000..025447e --- /dev/null +++ b/ds9/library/plotdata.tcl @@ -0,0 +1,428 @@ +# Copyright (C) 1999-2018 +# Smithsonian Astrophysical Observatory, Cambridge, MA, USA +# For conditions of distribution and use, see copyright notice in "copyright" + +package provide DS9 1.0 + +proc PlotLoadData {varname} { + upvar #0 $varname var + global $varname + + set filename [OpenFileDialog apdatafbox] + if {$filename != {}} { + set dim xy + if {[PlotDataFormatDialog dim]} { + PlotLoadDataFile $varname $filename $dim + } + } +} + +# used by backup +proc PlotLoadDataFile {varname filename dim} { + upvar #0 $varname var + global $varname + + set ch [open $filename] + set data [read $ch] + close $ch + + PlotRaise $varname + + PlotDataSet $varname $dim $data + $var(proc,updategraph) $varname + PlotStats $varname + PlotList $varname +} + +proc PlotSaveData {varname} { + upvar #0 $varname var + global $varname + + set tt $var(graph,total) + set cc $var(graph,current) + + if {$var(graph$cc,xdata) == {}} { + return + } + + PlotSaveDataFile $varname [SaveFileDialog apdatafbox] +} + +proc PlotSaveDataFile {varname filename} { + upvar #0 $varname var + global $varname + + set tt $var(graph,total) + set cc $var(graph,current) + + if {$var(graph$cc,xdata) == {}} { + return + } + + if {$filename == {}} { + return + } + + global $var(graph$cc,xdata) $var(graph$cc,ydata) \ + $var(graph$cc,xedata) $var(graph$cc,yedata) + set ll [$var(graph$cc,xdata) length] + set xx [$var(graph$cc,xdata) range] + set yy [$var(graph$cc,ydata) range] + + set ch [open $filename w] + switch $var(graph$cc,dim) { + xy { + for {set ii 0} {$ii<$ll} {incr ii} { + puts $ch "[lindex $xx $ii] [lindex $yy $ii]" + } + } + xyex { + set xe [$var(graph$cc,xedata) range] + for {set ii 0} {$ii<$ll} {incr ii} { + puts $ch "[lindex $xx $ii] [lindex $yy $ii] [lindex $xe $ii]" + } + } + xyey { + set ye [$var(graph$cc,yedata) range] + for {set ii 0} {$ii<$ll} {incr ii} { + puts $ch "[lindex $xx $ii] [lindex $yy $ii] [lindex $ye $ii]" + } + } + xyexey { + set xe [$var(graph$cc,xedata) range] + set ye [$var(graph$cc,yedata) range] + for {set ii 0} {$ii<$ll} {incr ii} { + puts $ch "[lindex $xx $ii] [lindex $yy $ii] [lindex $xe $ii] [lindex $ye $ii]" + } + } + } + close $ch + + PlotRaise $varname +} + +proc PlotDataSet {varname dim data} { + upvar #0 $varname var + global $varname + + set tt $var(graph,total) + set cc $var(graph,current) + + switch -- $dim { + 4 { + # first data set + PlotDataSetOne $varname "4.1" $data + + # set color + set col $var(graph$cc,color) + set var(graph$cc,color) [PlotNextColor $var(graph$cc,color)] + + # second data set + PlotDataSetOne $varname "4.2" $data + set var(graph$cc,color) $col + } + 5 { + # first data set + PlotDataSetOne $varname "5.1" $data + + # set color + set col $var(graph$cc,color) + set var(graph$cc,color) [PlotNextColor $var(graph$cc,color)] + + # second data set + PlotDataSetOne $varname "5.2" $data + set var(graph$cc,color) $col + } + default {PlotDataSetOne $varname $dim $data} + } +} + +proc PlotDataSetOne {varname dim data} { + upvar #0 $varname var + global $varname + + set tt $var(graph,total) + set cc $var(graph,current) + + # look for no data + if {[string length $data] == 0} { + return + } + + # total length + set ll [llength $data] + + # incr count + incr ${varname}(graph$cc,data,total) + set nn $var(graph$cc,data,total) + set var(graph$cc,data,current) $nn + + # new vector names + set xdata ap${varname}xx${nn} + set ydata ap${varname}yy${nn} + set xedata ap${varname}xe${nn} + set yedata ap${varname}ye${nn} + + # basics xy + set var(graph$cc,manage) 1 + set var(graph$cc,name) "Dataset $nn" + set var(graph$cc,xdata) $xdata + set var(graph$cc,ydata) $ydata + global $var(graph$cc,xdata) $var(graph$cc,ydata) + blt::vector create $var(graph$cc,xdata) $var(graph$cc,ydata) + + # substitute all separtors + regsub -all {[\n\r\t, ]+} $data { } data + # remove all non-numeric data + regsub -all {[^0-9.e\- ]+} $data {} data + + set x {} + set y {} + set xe {} + set ye {} + switch -- $dim { + 2 - + xy { + set var(graph$cc,dim) xy + set var(graph$cc,xedata) {} + set var(graph$cc,yedata) {} + + for {set ii 0} {$ii<$ll} {incr ii 2} { + lappend x [lindex $data $ii] + lappend y [lindex $data [expr $ii+1]] + } + $var(graph$cc,xdata) set $x + $var(graph$cc,ydata) set $y + } + + xyex { + set var(graph$cc,dim) xyex + set var(graph$cc,xedata) $xedata + set var(graph$cc,yedata) {} + + global $var(graph$cc,xedata) + blt::vector create $var(graph$cc,xedata) + + for {set ii 0} {$ii<$ll} {incr ii 3} { + lappend x [lindex $data $ii] + lappend y [lindex $data [expr $ii+1]] + lappend xe [lindex $data [expr $ii+2]] + } + $var(graph$cc,xdata) set $x + $var(graph$cc,ydata) set $y + $var(graph$cc,xedata) set $xe + } + + 3 - + xyey { + set var(graph$cc,dim) xyey + set var(graph$cc,xedata) {} + set var(graph$cc,yedata) $yedata + + global $var(graph$cc,yedata) + blt::vector create $var(graph$cc,yedata) + + for {set ii 0} {$ii<$ll} {incr ii 3} { + lappend x [lindex $data $ii] + lappend y [lindex $data [expr $ii+1]] + lappend ye [lindex $data [expr $ii+2]] + } + $var(graph$cc,xdata) set $x + $var(graph$cc,ydata) set $y + $var(graph$cc,yedata) set $ye + } + + xyexey { + set var(graph$cc,dim) xyexey + set var(graph$cc,xedata) $xedata + set var(graph$cc,yedata) $yedata + + global $var(graph$cc,xedata) $var(graph$cc,yedata) + blt::vector create $var(graph$cc,xedata) $var(graph$cc,yedata) + + for {set ii 0} {$ii<$ll} {incr ii 4} { + lappend x [lindex $data $ii] + lappend y [lindex $data [expr $ii+1]] + lappend xe [lindex $data [expr $ii+2]] + lappend ye [lindex $data [expr $ii+3]] + } + $var(graph$cc,xdata) set $x + $var(graph$cc,ydata) set $y + $var(graph$cc,xedata) set $xe + $var(graph$cc,yedata) set $ye + } + + 4.1 { + set var(graph$cc,dim) xyey + set var(graph$cc,xedata) {} + set var(graph$cc,yedata) $yedata + + global $var(graph$cc,yedata) + blt::vector create $var(graph$cc,yedata) + + for {set ii 0} {$ii<$ll} {incr ii 4} { + lappend x [lindex $data $ii] + lappend y [lindex $data [expr $ii+1]] + lappend ye [lindex $data [expr $ii+2]] + } + $var(graph$cc,xdata) set $x + $var(graph$cc,ydata) set $y + $var(graph$cc,yedata) set $ye + } + + 4.2 { + set var(graph$cc,dim) xy + set var(graph$cc,xedata) {} + set var(graph$cc,yedata) {} + + for {set ii 0} {$ii<$ll} {incr ii 4} { + lappend x [lindex $data $ii] + lappend y [lindex $data [expr $ii+3]] + } + $var(graph$cc,xdata) set $x + $var(graph$cc,ydata) set $y + } + + 5.1 { + set var(graph$cc,dim) xyey + set var(graph$cc,xedata) {} + set var(graph$cc,yedata) $yedata + + global $var(graph$cc,yedata) + blt::vector create $var(graph$cc,yedata) + + for {set ii 0} {$ii<$ll} {incr ii 5} { + lappend x [lindex $data $ii] + lappend y [lindex $data [expr $ii+1]] + lappend ye [lindex $data [expr $ii+2]] + } + $var(graph$cc,xdata) set $x + $var(graph$cc,ydata) set $y + $var(graph$cc,yedata) set $ye + } + + 5.2 { + set var(graph$cc,dim) xyey + set var(graph$cc,xedata) {} + set var(graph$cc,yedata) $yedata + + global $var(graph$cc,yedata) + blt::vector create $var(graph$cc,yedata) + + for {set ii 0} {$ii<$ll} {incr ii 5} { + lappend x [lindex $data $ii] + lappend y [lindex $data [expr $ii+3]] + lappend ye [lindex $data [expr $ii+4]] + } + $var(graph$cc,xdata) set $x + $var(graph$cc,ydata) set $y + $var(graph$cc,yedata) set $ye + } + } + + set var(graph$cc,$nn,manage) 1 + set var(graph$cc,$nn,dim) $var(graph$cc,dim) + + set var(graph$cc,$nn,xdata) $var(graph$cc,xdata) + set var(graph$cc,$nn,ydata) $var(graph$cc,ydata) + set var(graph$cc,$nn,xedata) $var(graph$cc,xedata) + set var(graph$cc,$nn,yedata) $var(graph$cc,yedata) + + PlotGetVar $varname $nn + + # update data set menu + $var(mb).graph.select add radiobutton -label "$var(graph$cc,name)" \ + -variable ${varname}(graph$cc,data,current) -value $nn \ + -command [list PlotCurrentData $varname] + + PlotAddData $varname + $var(proc,updateelement) $varname +} + +proc PlotDupData {varname mm} { + upvar #0 $varname var + global $varname + + set tt $var(graph,total) + set cc $var(graph,current) + + if {$var(graph$cc,data,total) == 0} { + return + } + + # incr count + incr ${varname}(graph$cc,data,total) + set nn $var(graph$cc,data,total) + set pp [expr $nn-1] + + # new vector names + set var(graph$cc,$nn,name) "Dataset $nn" + set var(graph$cc,$nn,xdata) ap${varname}xx${nn} + set var(graph$cc,$nn,ydata) ap${varname}yy${nn} + set var(graph$cc,$nn,xedata) ap${varname}xe${nn} + set var(graph$cc,$nn,yedata) ap${varname}ye${nn} + global $var(graph$cc,$mm,xdata) $var(graph$cc,$mm,ydata) \ + $var(graph$cc,$mm,xedata) $var(graph$cc,$mm,yedata) + global $var(graph$cc,$nn,xdata) $var(graph$cc,$nn,ydata) \ + $var(graph$cc,$nn,xedata) $var(graph$cc,$nn,yedata) + + $var(graph$cc,$mm,xdata) dup $var(graph$cc,$nn,xdata) + $var(graph$cc,$mm,ydata) dup $var(graph$cc,$nn,ydata) + if {$var(graph$cc,$mm,xedata) != {}} { + $var(graph$cc,$mm,xedata) dup $var(graph$cc,$nn,xedata) + } else { + set var(graph$cc,$nn,xedata) {} + } + if {$var(graph$cc,$mm,yedata) != {}} { + $var(graph$cc,$mm,yedata) dup $var(graph$cc,$nn,yedata) + } else { + set var(graph$cc,$nn,yedata) {} + } + + set var(graph$cc,$nn,manage) 1 + set var(graph$cc,$nn,dim) $var(graph$cc,$mm,dim) + + set var(graph$cc,$nn,show) $var(graph$cc,$mm,show) + set var(graph$cc,$nn,shape,symbol) $var(graph$cc,$mm,shape,symbol) + set var(graph$cc,$nn,shape,fill) $var(graph$cc,$mm,shape,fill) + set var(graph$cc,$nn,shape,color) $var(graph$cc,$mm,shape,color) + set var(graph$cc,$nn,smooth) $var(graph$cc,$mm,smooth) + set var(graph$cc,$nn,color) [PlotNextColor $var(graph$cc,$mm,color)] + set var(graph$cc,$nn,fill) $var(graph$cc,$mm,fill) + set var(graph$cc,$nn,fill,color) \ + [PlotNextColor $var(graph$cc,$mm,fill,color)] + set var(graph$cc,$nn,width) $var(graph$cc,$mm,width) + set var(graph$cc,$nn,dash) $var(graph$cc,$mm,dash) + + set var(graph$cc,$nn,error) $var(graph$cc,$mm,error) + set var(graph$cc,$nn,error,cap) $var(graph$cc,$mm,error,cap) + set var(graph$cc,$nn,error,color) $var(graph$cc,$mm,error,color) + set var(graph$cc,$nn,error,width) $var(graph$cc,$mm,error,width) + + set var(graph$cc,$nn,bar,relief) $var(graph$cc,$mm,bar,relief) + + # update data set menu + $var(mb).graph.select add radiobutton -label "$var(graph$cc,$nn,name)" \ + -variable ${varname}(graph$cc,data,current) -value $nn \ + -command [list PlotCurrentData $varname] + + # make current + set var(graph$cc,data,current) $nn + + set var(graph$cc,manage) $var(graph$cc,$nn,manage) + set var(graph$cc,dim) $var(graph$cc,$nn,dim) + + set var(graph$cc,xdata) $var(graph$cc,$nn,xdata) + set var(graph$cc,ydata) $var(graph$cc,$nn,ydata) + set var(graph$cc,xedata) $var(graph$cc,$nn,xedata) + set var(graph$cc,yedata) $var(graph$cc,$nn,yedata) + + PlotSetVar $varname $nn + + PlotAddData $varname + $var(proc,updateelement) $varname + $var(proc,updategraph) $varname + PlotStats $varname + PlotList $varname +} + diff --git a/ds9/library/plotdialog.tcl b/ds9/library/plotdialog.tcl index 1054014..c4383e6 100644 --- a/ds9/library/plotdialog.tcl +++ b/ds9/library/plotdialog.tcl @@ -27,20 +27,10 @@ proc PlotDialog {varname wtt title xaxis yaxis} { set var(mode) zoom set var(callback) {} - set var(data,total) 0 - set var(data,current) 0 + set var(graph,total) 0 + set var(graph,current) 0 - set var(name) {} - set var(xdata) {} - set var(ydata) {} - set var(xedata) {} - set var(yedata) {} - - array set $varname [array get pap] - - set var(graph,title) "$title" - set var(axis,x,title) "$xaxis" - set var(axis,y,title) "$yaxis" + PlotTitle $varname $title $xaxis $yaxis # can be turned off for external line plots set var(graph,format) 1 @@ -50,17 +40,18 @@ proc PlotDialog {varname wtt title xaxis yaxis} { $var(mb) add cascade -label [msgcat::mc {File}] -menu $var(mb).file $var(mb) add cascade -label [msgcat::mc {Edit}] -menu $var(mb).edit + $var(mb) add cascade -label [msgcat::mc {Canvas}] -menu $var(mb).canvas $var(mb) add cascade -label [msgcat::mc {Graph}] -menu $var(mb).graph - $var(mb) add cascade -label [msgcat::mc {Dataset}] -menu $var(mb).dataset - $var(mb) add cascade -label [msgcat::mc {Select}] -menu $var(mb).select + $var(mb) add cascade -label [msgcat::mc {Data}] -menu $var(mb).data + # File menu $var(mb).file $var(mb).file add command -label "[msgcat::mc {Load Data}]..." \ -command [list PlotLoadData $varname] $var(mb).file add command -label "[msgcat::mc {Save Data}]..." \ -command [list PlotSaveData $varname] $var(mb).file add command -label [msgcat::mc {Clear Data}] \ - -command [list PlotClearData $varname] + -command [list PlotDeleteData $varname] $var(mb).file add command -label [msgcat::mc {Duplicate Data}] \ -command [list PlotDupData $varname 1] $var(mb).file add separator @@ -99,7 +90,6 @@ proc PlotDialog {varname wtt title xaxis yaxis} { $var(mb).file add command -label [msgcat::mc {Close}] \ -command [list PlotDestroy $varname] - # Export Menu menu $var(mb).file.export $var(mb).file.export add command -label {GIF...} \ -command [list PlotExportDialog $varname gif] @@ -127,19 +117,60 @@ proc PlotDialog {varname wtt title xaxis yaxis} { -variable ${varname}(mode) -value zoom \ -command [list PlotChangeMode $varname] + # Canvas + menu $var(mb).canvas + + $var(mb).canvas add cascade -label [msgcat::mc {Select Graph}] \ + -menu $var(mb).canvas.select + $var(mb).canvas add separator + $var(mb).canvas add command -label [msgcat::mc {Add Graph}] \ + -command [list PlotAddGraph $varname] + $var(mb).canvas add command -label [msgcat::mc {Delete Graph}] \ + -command [list PlotDeleteGraph $varname] + $var(mb).canvas add separator + menu $var(mb).canvas.select + + $var(mb).canvas add cascade -label [msgcat::mc {Font}] \ + -menu $var(mb).canvas.font + $var(mb).canvas add cascade -label [msgcat::mc {Background}] \ + -menu $var(mb).canvas.bg + + menu $var(mb).canvas.font + $var(mb).canvas.font add cascade -label [msgcat::mc {Title}] \ + -menu $var(mb).canvas.font.title + $var(mb).canvas.font add cascade -label [msgcat::mc {Axes Title}] \ + -menu $var(mb).canvas.font.textlab + $var(mb).canvas.font add cascade -label [msgcat::mc {Axes Number}] \ + -menu $var(mb).canvas.font.numlab + $var(mb).canvas.font add cascade -label [msgcat::mc {Legend Title}] \ + -menu $var(mb).canvas.font.legendtitle + $var(mb).canvas.font add cascade -label [msgcat::mc {Legend}] \ + -menu $var(mb).canvas.font.legend + + FontMenu $var(mb).canvas.font.title $varname graph,title,family graph,title,size graph,title,weight graph,title,slant [list $var(proc,updategraph) $varname] + FontMenu $var(mb).canvas.font.textlab $varname axis,title,family axis,title,size axis,title,weight axis,title,slant [list $var(proc,updategraph) $varname] + FontMenu $var(mb).canvas.font.numlab $varname axis,font,family axis,font,size axis,font,weight axis,font,slant [list $var(proc,updategraph) $varname] + FontMenu $var(mb).canvas.font.legendtitle $varname legend,title,family legend,title,size legend,title,weight legend,title,slant [list $var(proc,updategraph) $varname] + FontMenu $var(mb).canvas.font.legend $varname legend,font,family legend,font,size legend,font,weight legend,font,slant [list $var(proc,updategraph) $varname] + + PlotColorMenu $var(mb).canvas.bg $varname graph,bg \ + [list $var(proc,updategraph) $varname] + # Graph menu $var(mb).graph + + $var(mb).graph add cascade -label [msgcat::mc {Select Dataset}] \ + -menu $var(mb).graph.select + $var(mb).graph add separator + menu $var(mb).graph.select + $var(mb).graph add cascade -label [msgcat::mc {Axes}] \ -menu $var(mb).graph.axes $var(mb).graph add cascade -label [msgcat::mc {Legend}] \ -menu $var(mb).graph.legend - $var(mb).graph add cascade -label [msgcat::mc {Font}] \ - -menu $var(mb).graph.font - $var(mb).graph add cascade -label [msgcat::mc {Background}] \ - -menu $var(mb).graph.bg $var(mb).graph add separator - $var(mb).graph add command -label "[msgcat::mc {Title}]..." \ - -command [list PlotTitleDialog $varname] + $var(mb).graph add command -label "[msgcat::mc {Titles}]..." \ + -command [list PlotGraphTitleDialog $varname] menu $var(mb).graph.axes $var(mb).graph.axes add checkbutton -label [msgcat::mc {X Grid}] \ @@ -183,49 +214,11 @@ proc PlotDialog {varname wtt title xaxis yaxis} { -variable ${varname}(legend,position) -value bottom \ -command [list $var(proc,updategraph) $varname] - menu $var(mb).graph.font - $var(mb).graph.font add cascade -label [msgcat::mc {Title}] \ - -menu $var(mb).graph.font.title - $var(mb).graph.font add cascade -label [msgcat::mc {Axes Title}] \ - -menu $var(mb).graph.font.textlab - $var(mb).graph.font add cascade -label [msgcat::mc {Axes Number}] \ - -menu $var(mb).graph.font.numlab - $var(mb).graph.font add cascade -label [msgcat::mc {Legend Title}] \ - -menu $var(mb).graph.font.legendtitle - $var(mb).graph.font add cascade -label [msgcat::mc {Legend}] \ - -menu $var(mb).graph.font.legend - - FontMenu $var(mb).graph.font.title $varname graph,title,family graph,title,size graph,title,weight graph,title,slant [list $var(proc,updategraph) $varname] - FontMenu $var(mb).graph.font.textlab $varname axis,title,family axis,title,size axis,title,weight axis,title,slant [list $var(proc,updategraph) $varname] - FontMenu $var(mb).graph.font.numlab $varname axis,font,family axis,font,size axis,font,weight axis,font,slant [list $var(proc,updategraph) $varname] - FontMenu $var(mb).graph.font.legendtitle $varname legend,title,family legend,title,size legend,title,weight legend,title,slant [list $var(proc,updategraph) $varname] - FontMenu $var(mb).graph.font.legend $varname legend,font,family legend,font,size legend,font,weight legend,font,slant [list $var(proc,updategraph) $varname] - - PlotColorMenu $var(mb).graph.bg $varname graph,bg [list $var(proc,updategraph) $varname] - # dataset - menu $var(mb).dataset + menu $var(mb).data - # select - menu $var(mb).select -} - -proc PlotChangeMode {varname} { - upvar #0 $varname var - global $varname - - global ds9 - - switch $var(mode) { - pointer { - blt::RemoveBindTag $var(graph) zoom-$var(graph) - bind $var(graph) <1> [list PlotButton $varname %x %y] - } - zoom { - bind $var(graph) <1> {} - blt::AddBindTag $var(graph) zoom-$var(graph) - } - } + set var(canvas) [ttk::frame $var(top).fr] + pack $var(canvas) -expand yes -fill both } proc PlotDataFormatDialog {xarname} { @@ -365,12 +358,12 @@ proc PlotRangeDialog {varname} { return $rr } -proc PlotTitleDialog {varname} { +proc PlotGraphTitleDialog {varname} { upvar #0 $varname var global $varname global ed - set w {.aptitle} + set w {.applottitle} set ed(ok) 0 set ed(graph,title) $var(graph,title) @@ -382,7 +375,7 @@ proc PlotTitleDialog {varname} { # Param set f [ttk::frame $w.param] - ttk::label $f.label -text [msgcat::mc {Plot Title}] + ttk::label $f.label -text [msgcat::mc {Title}] ttk::entry $f.title -textvariable ed(graph,title) -width 30 ttk::label $f.xlabel -text [msgcat::mc {X Axis Title}] ttk::entry $f.xtitle -textvariable ed(axis,x,title) -width 30 @@ -434,12 +427,15 @@ proc DatasetNameDialog {varname} { global $varname global ed + set tt $var(graph,total) + set cc $var(graph,current) + set w {.aptitle} set ed(ok) 0 - set ed(name) $var(name) + set ed(name) $var(graph$cc,name) - DialogCreate $w [msgcat::mc {Dataset}] ed(ok) + DialogCreate $w [msgcat::mc {Data}] ed(ok) # Param set f [ttk::frame $w.param] @@ -468,8 +464,9 @@ proc DatasetNameDialog {varname} { DialogDismiss $w if {$ed(ok)} { - $var(mb).select entryconfig "$var(name)" -label "$ed(name)" - set var(name) $ed(name) + $var(mb).graph.select entryconfig "$var(graph$cc,name)" \ + -label "$ed(name)" + set var(graph$cc,name) $ed(name) $var(proc,updateelement) $varname } @@ -509,21 +506,97 @@ proc PlotLineShapeMenu {which var} { -variable $var -value arrow } -proc PlotLineSmoothMenu {which var} { - menu $which - $which add radiobutton -label [msgcat::mc {Step}] \ - -variable $var -value step - $which add radiobutton -label [msgcat::mc {Linear}] \ - -variable $var -value linear - $which add radiobutton -label [msgcat::mc {Cubic}] \ - -variable $var -value cubic - $which add radiobutton -label [msgcat::mc {Quadratic}] \ - -variable $var -value quadratic - $which add radiobutton -label [msgcat::mc {Catrom}] \ - -variable $var -value catrom +proc PlotShapeMenu {varname} { + upvar #0 $varname var + global $varname + + set tt $var(graph,total) + set cc $var(graph,current) + + # Shape + menu $var(mb).data.shape + $var(mb).data.shape add radiobutton \ + -label [msgcat::mc {None}] \ + -variable ${varname}(graph$cc,shape,symbol) -value none \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.shape add radiobutton \ + -label [msgcat::mc {Circle}] \ + -variable ${varname}(graph$cc,shape,symbol) -value circle \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.shape add radiobutton \ + -label [msgcat::mc {Square}] \ + -variable ${varname}(graph$cc,shape,symbol) -value square \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.shape add radiobutton \ + -label [msgcat::mc {Diamond}] \ + -variable ${varname}(graph$cc,shape,symbol) -value diamond \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.shape add radiobutton \ + -label [msgcat::mc {Plus}] \ + -variable ${varname}(graph$cc,shape,symbol) -value plus \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.shape add radiobutton \ + -label [msgcat::mc {Cross}] \ + -variable ${varname}(graph$cc,shape,symbol) -value cross \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.shape add radiobutton \ + -label [msgcat::mc {Simple Plus}] \ + -variable ${varname}(graph$cc,shape,symbol) -value splus \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.shape add radiobutton \ + -label [msgcat::mc {Simple Cross}] \ + -variable ${varname}(graph$cc,shape,symbol) -value scross \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.shape add radiobutton \ + -label [msgcat::mc {Triangle}] \ + -variable ${varname}(graph$cc,shape,symbol) -value triangle \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.shape add radiobutton \ + -label [msgcat::mc {Arrow}] \ + -variable ${varname}(graph$cc,shape,symbol) -value arrow \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.shape add separator + $var(mb).data.shape add checkbutton \ + -label [msgcat::mc {Fill}] \ + -variable ${varname}(graph$cc,shape,fill) \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.shape add cascade -label [msgcat::mc {Color}] \ + -menu $var(mb).data.shape.color + + PlotColorMenu $var(mb).data.shape.color $varname graph$cc,shape,color \ + [list $var(proc,updateelement) $varname] +} + +proc PlotErrorMenu {varname} { + upvar #0 $varname var + global $varname + + set tt $var(graph,total) + set cc $var(graph,current) + + menu $var(mb).data.error + $var(mb).data.error add checkbutton -label [msgcat::mc {Show}] \ + -variable ${varname}(graph$cc,error) \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.error add checkbutton -label [msgcat::mc {Cap}] \ + -variable ${varname}(graph$cc,error,cap) \ + -command [list $var(proc,updateelement) $varname] + $var(mb).data.error add separator + $var(mb).data.error add cascade -label [msgcat::mc {Color}] \ + -menu $var(mb).data.error.color + $var(mb).data.error add cascade -label [msgcat::mc {Width}] \ + -menu $var(mb).data.error.width + + PlotColorMenu $var(mb).data.error.color $varname graph$cc,error,color \ + [list $var(proc,updateelement) $varname] + WidthDashMenu $var(mb).data.error.width $varname graph$cc,error,width {} \ + [list $var(proc,updateelement) $varname] {} } proc PlotExportDialog {varname format} { + upvar #0 $varname var + global $varname + global giffbox global jpegfbox global tifffbox @@ -566,7 +639,7 @@ proc PlotExport {varname fn format} { # besure we are on top raise $var(top) - set rr [catch {image create photo -format window -data $var(graph)} ph] + set rr [catch {image create photo -format window -data $var(canvas)} ph] if {$rr} { Error $iap(error) return diff --git a/ds9/library/plotline.tcl b/ds9/library/plotline.tcl index 7ad08cc..5f21f07 100644 --- a/ds9/library/plotline.tcl +++ b/ds9/library/plotline.tcl @@ -7,6 +7,7 @@ package provide DS9 1.0 # used by backup proc PlotLineTool {} { global iap + PlotLine $iap(tt) [msgcat::mc {Line Plot Tool}] {} {} {} 2 {} } @@ -29,9 +30,7 @@ proc PlotLine {tt wtt title xaxis yaxis dim data} { upvar #0 $varname var global $varname - PlotLineProc $varname - PlotDialog $varname $wtt $title $xaxis $yaxis - PlotDialogLine $varname + PlotLineDialog $varname $wtt $title $xaxis $yaxis PlotDataSet $varname $dim $data $var(proc,updategraph) $varname @@ -43,251 +42,176 @@ proc PlotLineDialog {varname wtt title xaxis yaxis} { upvar #0 $varname var global $varname - PlotLineProc $varname - PlotDialog $varname $wtt $title $xaxis $yaxis - PlotDialogLine $varname -} - -proc PlotLineProc {varname} { - upvar #0 $varname var - global $varname - + set var(proc,addgraph) PlotLineAddGraph set var(proc,updategraph) PlotUpdateGraph set var(proc,updateelement) PlotLineUpdateElement set var(proc,highlite) PlotLineHighliteElement set var(proc,button) PlotLineButton -} -proc PlotDialogLine {varname} { - upvar #0 $varname var - global $varname - - global ds9 - - # Dataset - $var(mb).dataset add checkbutton -label [msgcat::mc {Show}] \ - -variable ${varname}(show) \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset add separator - $var(mb).dataset add cascade -label [msgcat::mc {Shape}] \ - -menu $var(mb).dataset.shape - $var(mb).dataset add cascade -label [msgcat::mc {Smooth}] \ - -menu $var(mb).dataset.smooth - $var(mb).dataset add cascade -label [msgcat::mc {Color}] \ - -menu $var(mb).dataset.color - $var(mb).dataset add cascade -label [msgcat::mc {Width}] \ - -menu $var(mb).dataset.width - $var(mb).dataset add cascade -label [msgcat::mc {Fill}] \ - -menu $var(mb).dataset.fill - $var(mb).dataset add cascade -label [msgcat::mc {Error}] \ - -menu $var(mb).dataset.error - $var(mb).dataset add separator - $var(mb).dataset add command -label "[msgcat::mc {Name}]..." \ + PlotDialog $varname $wtt $title $xaxis $yaxis + PlotAddGraph $varname + + set tt $var(graph,total) + set cc $var(graph,current) + + # Data + $var(mb).data add checkbutton -label [msgcat::mc {Show}] \ + -variable ${varname}(graph$cc,show) \ + -command [list PlotLineUpdateElement $varname] + $var(mb).data add separator + $var(mb).data add cascade -label [msgcat::mc {Shape}] \ + -menu $var(mb).data.shape + $var(mb).data add cascade -label [msgcat::mc {Smooth}] \ + -menu $var(mb).data.smooth + $var(mb).data add cascade -label [msgcat::mc {Color}] \ + -menu $var(mb).data.color + $var(mb).data add cascade -label [msgcat::mc {Width}] \ + -menu $var(mb).data.width + $var(mb).data add cascade -label [msgcat::mc {Fill}] \ + -menu $var(mb).data.fill + $var(mb).data add cascade -label [msgcat::mc {Error}] \ + -menu $var(mb).data.error + $var(mb).data add separator + $var(mb).data add command -label "[msgcat::mc {Name}]..." \ -command [list DatasetNameDialog $varname] # Shape - menu $var(mb).dataset.shape - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {None}] \ - -variable ${varname}(shape,symbol) -value none \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Circle}] \ - -variable ${varname}(shape,symbol) -value circle \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Square}] \ - -variable ${varname}(shape,symbol) -value square \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Diamond}] \ - -variable ${varname}(shape,symbol) -value diamond \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Plus}] \ - -variable ${varname}(shape,symbol) -value plus \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Cross}] \ - -variable ${varname}(shape,symbol) -value cross \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Simple Plus}] \ - -variable ${varname}(shape,symbol) -value splus \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Simple Cross}] \ - -variable ${varname}(shape,symbol) -value scross \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Triangle}] \ - -variable ${varname}(shape,symbol) -value triangle \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Arrow}] \ - -variable ${varname}(shape,symbol) -value arrow \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.shape add separator - $var(mb).dataset.shape add checkbutton \ - -label [msgcat::mc {Fill}] \ - -variable ${varname}(shape,fill) \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.shape add cascade -label [msgcat::mc {Color}] \ - -menu $var(mb).dataset.shape.color - - PlotColorMenu $var(mb).dataset.shape.color $varname shape,color \ - [list PlotLineUpdateElement $varname] + PlotShapeMenu $varname # Smooth - menu $var(mb).dataset.smooth - $var(mb).dataset.smooth add radiobutton \ + menu $var(mb).data.smooth + $var(mb).data.smooth add radiobutton \ -label [msgcat::mc {Step}] \ - -variable ${varname}(smooth) -value step \ + -variable ${varname}(graph$cc,smooth) -value step \ -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.smooth add radiobutton \ + $var(mb).data.smooth add radiobutton \ -label [msgcat::mc {Linear}] \ - -variable ${varname}(smooth) -value linear \ + -variable ${varname}(graph$cc,smooth) -value linear \ -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.smooth add radiobutton \ + $var(mb).data.smooth add radiobutton \ -label [msgcat::mc {Cubic}] \ - -variable ${varname}(smooth) -value cubic \ + -variable ${varname}(graph$cc,smooth) -value cubic \ -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.smooth add radiobutton \ + $var(mb).data.smooth add radiobutton \ -label [msgcat::mc {Quadratic}] \ - -variable ${varname}(smooth) -value quadratic \ + -variable ${varname}(graph$cc,smooth) -value quadratic \ -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.smooth add radiobutton \ + $var(mb).data.smooth add radiobutton \ -label [msgcat::mc {Catrom}] \ - -variable ${varname}(smooth) -value catrom \ + -variable ${varname}(graph$cc,smooth) -value catrom \ -command [list PlotLineUpdateElement $varname] # Color - PlotColorMenu $var(mb).dataset.color $varname color \ + PlotColorMenu $var(mb).data.color $varname graph$cc,color \ [list PlotLineUpdateElement $varname] # Width - menu $var(mb).dataset.width - $var(mb).dataset.width add radiobutton \ - -label {0} -variable ${varname}(width) \ + menu $var(mb).data.width + $var(mb).data.width add radiobutton \ + -label {0} -variable ${varname}(graph$cc,width) \ -value 0 -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.width add radiobutton \ - -label {1} -variable ${varname}(width) \ + $var(mb).data.width add radiobutton \ + -label {1} -variable ${varname}(graph$cc,width) \ -value 1 -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.width add radiobutton \ - -label {2} -variable ${varname}(width) \ + $var(mb).data.width add radiobutton \ + -label {2} -variable ${varname}(graph$cc,width) \ -value 2 -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.width add radiobutton \ - -label {3} -variable ${varname}(width) \ + $var(mb).data.width add radiobutton \ + -label {3} -variable ${varname}(graph$cc,width) \ -value 3 -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.width add radiobutton \ - -label {4} -variable ${varname}(width) \ + $var(mb).data.width add radiobutton \ + -label {4} -variable ${varname}(graph$cc,width) \ -value 4 -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.width add separator - $var(mb).dataset.width add checkbutton \ - -label [msgcat::mc {Dash}] -variable ${varname}(dash) \ + $var(mb).data.width add separator + $var(mb).data.width add checkbutton \ + -label [msgcat::mc {Dash}] -variable ${varname}(graph$cc,dash) \ -command [list PlotLineUpdateElement $varname] # Fill - menu $var(mb).dataset.fill - $var(mb).dataset.fill add checkbutton \ + menu $var(mb).data.fill + $var(mb).data.fill add checkbutton \ -label [msgcat::mc {Show}] \ - -variable ${varname}(fill) \ + -variable ${varname}(graph$cc,fill) \ -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.fill add separator - $var(mb).dataset.fill add cascade -label [msgcat::mc {Color}] \ - -menu $var(mb).dataset.fill.color + $var(mb).data.fill add separator + $var(mb).data.fill add cascade -label [msgcat::mc {Color}] \ + -menu $var(mb).data.fill.color - PlotColorMenu $var(mb).dataset.fill.color $varname fill,color \ + PlotColorMenu $var(mb).data.fill.color $varname graph$cc,fill,color \ [list PlotLineUpdateElement $varname] # Error - menu $var(mb).dataset.error - $var(mb).dataset.error add checkbutton -label [msgcat::mc {Show}] \ - -variable ${varname}(error) \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.error add checkbutton -label [msgcat::mc {Cap}] \ - -variable ${varname}(error,cap) \ - -command [list PlotLineUpdateElement $varname] - $var(mb).dataset.error add separator - $var(mb).dataset.error add cascade -label [msgcat::mc {Color}] \ - -menu $var(mb).dataset.error.color - $var(mb).dataset.error add cascade -label [msgcat::mc {Width}] \ - -menu $var(mb).dataset.error.width + PlotErrorMenu $varname +} - PlotColorMenu $var(mb).dataset.error.color $varname error,color \ - [list PlotLineUpdateElement $varname] - WidthDashMenu $var(mb).dataset.error.width $varname error,width {} \ - [list PlotLineUpdateElement $varname] {} - - # graph - set var(type) line - set var(graph) [blt::graph $var(top).line \ - -width 600 \ - -height 500 \ - -highlightthickness 0 \ - ] - - pack $var(graph) -expand yes -fill both - - # set up zoom stack, assuming mode is zoom - switch $ds9(wm) { - x11 - - win32 {Blt_ZoomStack $var(graph) -mode release} - aqua {Blt_ZoomStack $var(graph) -mode release -button "ButtonPress-2"} - } +proc PlotLineAddGraph {varname} { + upvar #0 $varname var + global $varname + + set cc $var(graph,current) + + set var(type$cc) line + set var(graph$cc) [blt::graph $var(canvas).gr$cc \ + -width 600 \ + -height 500 \ + -highlightthickness 0 \ + ] } proc PlotLineUpdateElement {varname} { upvar #0 $varname var global $varname + set tt $var(graph,total) + set cc $var(graph,current) + # warning: uses current vars - if {$var(data,total) == 0} { + if {$var(graph$cc,data,total) == 0} { return } - set nn $var(data,current) + set nn $var(graph$cc,data,current) PlotGetVar $varname $nn - if {$var(fill)} { - set fillClr $var(fill,color) + if {$var(graph$cc,fill)} { + set fillClr $var(graph$cc,fill,color) } else { set fillClr {} } - if {$var(shape,fill)} { - set clr $var(shape,color) + if {$var(graph$cc,shape,fill)} { + set clr $var(graph$cc,shape,color) } else { set clr {} } - if {$var(dash)} { + if {$var(graph$cc,dash)} { set dash {8 3} } else { set dash { } } - if {$var(error)} { + if {$var(graph$cc,error)} { set show both } else { set show none } - if {$var(error,cap)} { - set cap [expr $var(error,width)+3] + if {$var(graph$cc,error,cap)} { + set cap [expr $var(graph$cc,error,width)+3] } else { set cap 0 } - $var(graph) element configure "d-${nn}" \ - -label $var(name) -hide [expr !$var(show)] \ - -symbol $var(shape,symbol) -fill $clr -scalesymbols no \ - -pixels 5 -outline $var(shape,color) \ - -smooth $var(smooth) \ - -color $var(color) -areabackground $fillClr \ - -linewidth $var(width) -dashes $dash \ - -showerrorbars $show -errorbarcolor $var(error,color) \ - -errorbarwidth $var(error,width) -errorbarcap $cap + $var(graph$cc) element configure "d-${nn}" \ + -label $var(graph$cc,name) -hide [expr !$var(graph$cc,show)] \ + -symbol $var(graph$cc,shape,symbol) -fill $clr -scalesymbols no \ + -pixels 5 -outline $var(graph$cc,shape,color) \ + -smooth $var(graph$cc,smooth) \ + -color $var(graph$cc,color) -areabackground $fillClr \ + -linewidth $var(graph$cc,width) -dashes $dash \ + -showerrorbars $show -errorbarcolor $var(graph$cc,error,color) \ + -errorbarwidth $var(graph$cc,error,width) -errorbarcap $cap } proc PlotLineButton {varname x y} { diff --git a/ds9/library/plotprint.tcl b/ds9/library/plotprint.tcl index 8d6c98c..1407c6a 100644 --- a/ds9/library/plotprint.tcl +++ b/ds9/library/plotprint.tcl @@ -19,101 +19,106 @@ proc PlotPostScript {varname} { upvar #0 $varname var global $varname + set tt $var(graph,total) + set cc $var(graph,current) + global ps global ds9 - # set postscript fonts - $var(graph) configure \ - -font "$var(graph,title,family) $var(graph,title,size) $var(graph,title,weight) $var(graph,title,slant)" + for {set ii 1} {$ii<=$tt} {incr ii} { + # set postscript fonts + $var(graph$ii) configure \ + -font "$var(graph,title,family) $var(graph,title,size) $var(graph,title,weight) $var(graph,title,slant)" - $var(graph) xaxis configure \ - -tickfont "$var(axis,font,family) $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ - -titlefont "$var(axis,title,family) $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" + $var(graph$ii) xaxis configure \ + -tickfont "$var(axis,font,family) $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ + -titlefont "$var(axis,title,family) $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" - $var(graph) yaxis configure \ - -tickfont "$var(axis,font,family) $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ - -titlefont "$var(axis,title,family) $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" + $var(graph$ii) yaxis configure \ + -tickfont "$var(axis,font,family) $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ + -titlefont "$var(axis,title,family) $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" - $var(graph) legend configure \ - -font "$var(legend,font,family) $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" \ - -titlefont "$var(legend,title,family) $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)" + $var(graph$ii) legend configure \ + -font "$var(legend,font,family) $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" \ + -titlefont "$var(legend,title,family) $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)" - set options "-decorations false" + set options "-decorations false" - # Color - switch -- $ps(color) { - rgb - - cmyk {append options " -greyscale no"} - gray {append options " -greyscale yes"} - } + # Color + switch -- $ps(color) { + rgb - + cmyk {append options " -greyscale no"} + gray {append options " -greyscale yes"} + } - # can't trust 'tk scaling' - switch $ds9(wm) { - x11 - - win32 { - set scaling [tk scaling] - if {$scaling == Inf} { - set scaling 1.334 + # can't trust 'tk scaling' + switch $ds9(wm) { + x11 - + win32 { + set scaling [tk scaling] + if {$scaling == Inf} { + set scaling 1.334 + } } + aqua {set scaling 1.4} } - aqua {set scaling 1.4} - } - # Size - set ww [expr [winfo width $var(top)]*$ps(scale)/100./$scaling] - set hh [expr [winfo height $var(top)]*$ps(scale)/100./$scaling] - append options " -width $ww -height $hh" - - # Page size - switch -- $ps(size) { - letter {append options " -paperwidth 8.5i -paperheight 11.i"} - legal {append options " -paperwidth 8.5i -paperheight 14.i"} - tabloid {append options " -paperwidth 11i -paperheight 17.i"} - poster {append options " -paperwidth 36.i -paperheight 48.i"} - a4 {append options " -paperwidth 195m -paperheight 282m"} - other { - if {$ps(width) != {} && $ps(height) != {}} { - set pgww "[append ps(width) i]" - set pghh "[append ps(height) i]" - append options " -paperwidth $pgww -paperheight pghh" - } - } - othermm { - if {$ps(width) != {} && $ps(height) != {}} { - set pgww "[append ps(width) m]" - set pghh "[append ps(height) m]" - append options " -paperwidth $pgww -paperheight pghh" - } - } - } + # Size + set ww [expr [winfo width $var(top)]*$ps(scale)/100./$scaling] + set hh [expr [winfo height $var(top)]*$ps(scale)/100./$scaling] + append options " -width $ww -height $hh" + + # Page size + switch -- $ps(size) { + letter {append options " -paperwidth 8.5i -paperheight 11.i"} + legal {append options " -paperwidth 8.5i -paperheight 14.i"} + tabloid {append options " -paperwidth 11i -paperheight 17.i"} + poster {append options " -paperwidth 36.i -paperheight 48.i"} + a4 {append options " -paperwidth 195m -paperheight 282m"} + other { + if {$ps(width) != {} && $ps(height) != {}} { + set pgww "[append ps(width) i]" + set pghh "[append ps(height) i]" + append options " -paperwidth $pgww -paperheight pghh" + } + } + othermm { + if {$ps(width) != {} && $ps(height) != {}} { + set pgww "[append ps(width) m]" + set pghh "[append ps(height) m]" + append options " -paperwidth $pgww -paperheight pghh" + } + } + } - # Orientation - switch -- $ps(orient) { - portrait {append options " -landscape false"} - landscape {append options " -landscape true"} - } + # Orientation + switch -- $ps(orient) { + portrait {append options " -landscape false"} + landscape {append options " -landscape true"} + } - if {$ps(dest) == "file" && $ps(filename) != {}} { - eval $var(graph) postscript output $ps(filename) $options - } else { - set ch [open "| $ps(cmd)" w] - puts $ch [eval $var(graph) postscript output $options] - close $ch - } + if {$ps(dest) == "file" && $ps(filename) != {}} { + eval $var(graph$ii) postscript output $ps(filename) $options + } else { + set ch [open "| $ps(cmd)" w] + puts $ch [eval $var(graph$ii) postscript output $options] + close $ch + } - # reset fonts - $var(graph) configure \ - -font "{$ds9($var(graph,title,family))} $var(graph,title,size) $var(graph,title,weight) $var(graph,title,slant)" + # reset fonts + $var(graph$ii) configure \ + -font "{$ds9($var(graph,title,family))} $var(graph,title,size) $var(graph,title,weight) $var(graph,title,slant)" - $var(graph) xaxis configure \ - -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ - -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" + $var(graph$ii) xaxis configure \ + -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ + -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" - $var(graph) yaxis configure \ - -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ - -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" + $var(graph$ii) yaxis configure \ + -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ + -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" - $var(graph) legend configure \ - -font "{$ds9($var(legend,font,family))} $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" \ - -titlefont "{$ds9($var(legend,title,family))} $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)" + $var(graph$ii) legend configure \ + -font "{$ds9($var(legend,font,family))} $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" \ + -titlefont "{$ds9($var(legend,title,family))} $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)" + } } diff --git a/ds9/library/plotprocess.tcl b/ds9/library/plotprocess.tcl index f21ccc3..ba9044b 100644 --- a/ds9/library/plotprocess.tcl +++ b/ds9/library/plotprocess.tcl @@ -53,8 +53,8 @@ proc PrefsDialogPlot {} { grid $f.ttextlab $f.textlab -padx 2 -pady 2 -sticky w grid $f.tnumlab $f.numlab -padx 2 -pady 2 -sticky w - # Dataset - set f [ttk::labelframe $w.plot.dataset -text [msgcat::mc {Dataset}]] + # Data + set f [ttk::labelframe $w.plot.data -text [msgcat::mc {Dataset}]] # Show ttk::checkbutton $f.show -text [msgcat::mc {Show}] -variable pap(show) @@ -75,7 +75,17 @@ proc PrefsDialogPlot {} { ttk::label $f.smoothtitle -text [msgcat::mc {Smooth}] ttk::menubutton $f.smooth -textvariable pap(smooth) \ -menu $f.smooth.menu - PlotLineSmoothMenu $f.smooth.menu pap(smooth) + menu $f.smooth.menu + $f.smooth.menu add radiobutton -label [msgcat::mc {Step}] \ + -variable pap(smooth) -value step + $f.smooth.menu add radiobutton -label [msgcat::mc {Linear}] \ + -variable pap(smooth) -value linear + $f.smooth.menu add radiobutton -label [msgcat::mc {Cubic}] \ + -variable pap(smooth) -value cubic + $f.smooth.menu add radiobutton -label [msgcat::mc {Quadratic}] \ + -variable pap(smooth) -value quadratic + $f.smooth.menu add radiobutton -label [msgcat::mc {Catrom}] \ + -variable pap(smooth) -value catrom grid $f.smoothtitle $f.smooth -padx 2 -pady 2 -sticky w # Color @@ -102,7 +112,7 @@ proc PrefsDialogPlot {} { grid $f.errortitle $f.error $f.errorcap $f.errorcolor $f.errorwidth \ -padx 2 -pady 2 -sticky w - pack $w.plot.graph $w.plot.grid $w.plot.axis $w.plot.dataset \ + pack $w.plot.graph $w.plot.grid $w.plot.axis $w.plot.data \ -side top -fill both -expand true } @@ -190,6 +200,11 @@ proc PlotCmdScatter {title xaxis yaxis dim} { PlotScatter $parse(tt) {} $title $xaxis $yaxis $dim $parse(buf) } +proc PlotCmdStrip {title xaxis yaxis dim} { + global parse + PlotStrip $parse(tt) {} $title $xaxis $yaxis $dim $parse(buf) +} + proc PlotCmdAnalysisPlotStdin {which} { global parse AnalysisPlotStdin $which $parse(tt) {} $parse(buf) @@ -311,6 +326,18 @@ proc PlotCmdExport {format fn} { PlotExport $cvarname $fn $format } +proc PlotCmdSelectData {which} { + global cvarname + upvar #0 $cvarname cvar + + set tt $cvar(graph,total) + set cc $cvar(graph,current) + + set cvar(graph$cc,data,current) $which + + PlotCurrentData $cvarname +} + proc ProcessSendPlotCmd {proc id param {sock {}} {fn {}}} { global iap global parse @@ -326,3 +353,26 @@ proc ProcessSendPlotCmd {proc id param {sock {}} {fn {}}} { plotsend::yy_scan_string $param plotsend::yyparse } + +proc PlotSendCmdCVARGet {key} { + global cvarname + upvar #0 $cvarname cvar + + set tt $cvar(graph,total) + set cc $cvar(graph,current) + + global parse + $parse(proc) $parse(id) "$cvar(graph$cc,$key)\n" +} + +proc PlotSendCmdCVARYesNo {key} { + global cvarname + upvar #0 $cvarname cvar + + set tt $cvar(graph,total) + set cc $cvar(graph,current) + + global parse + $parse(proc) $parse(id) [ToYesNo $cvar(graph$cc,$key)] +} + diff --git a/ds9/library/plotscatter.tcl b/ds9/library/plotscatter.tcl index a9b7fc5..342a04e 100644 --- a/ds9/library/plotscatter.tcl +++ b/ds9/library/plotscatter.tcl @@ -7,6 +7,7 @@ package provide DS9 1.0 # used by backup proc PlotScatterTool {} { global iap + PlotScatter $iap(tt) [msgcat::mc {Scatter Plot Tool}] {} {} {} 2 {} } @@ -29,10 +30,8 @@ proc PlotScatter {tt wtt title xaxis yaxis dim data} { upvar #0 $varname var global $varname - PlotScatterProc $varname - PlotDialog $varname $wtt $title $xaxis $yaxis - PlotDialogScatter $varname - + PlotScatterDialog $varname $wtt $title $xaxis $yaxis + PlotDataSet $varname $dim $data $var(proc,updategraph) $varname PlotStats $varname @@ -43,181 +42,112 @@ proc PlotScatterDialog {varname wtt title xaxis yaxis} { upvar #0 $varname var global $varname - PlotScatterProc $varname - PlotDialog $varname $wtt $title $xaxis $yaxis - PlotDialogScatter $varname -} - -proc PlotScatterProc {varname} { - upvar #0 $varname var - global $varname - + set var(proc,addgraph) PlotScatterAddGraph set var(proc,updategraph) PlotUpdateGraph set var(proc,updateelement) PlotScatterUpdateElement set var(proc,highlite) PlotScatterHighliteElement set var(proc,button) PlotScatterButton -} -proc PlotDialogScatter {varname} { - upvar #0 $varname var - global $varname + PlotDialog $varname $wtt $title $xaxis $yaxis + PlotAddGraph $varname - global ds9 + set tt $var(graph,total) + set cc $var(graph,current) - # Dataset - $var(mb).dataset add checkbutton -label [msgcat::mc {Show}] \ - -variable ${varname}(show) \ + # Data + $var(mb).data add checkbutton -label [msgcat::mc {Show}] \ + -variable ${varname}(graph$cc,show) \ -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset add separator - $var(mb).dataset add cascade -label [msgcat::mc {Shape}] \ - -menu $var(mb).dataset.shape - $var(mb).dataset add cascade -label [msgcat::mc {Error}] \ - -menu $var(mb).dataset.error - $var(mb).dataset add separator - $var(mb).dataset add command -label "[msgcat::mc {Name}]..." \ + $var(mb).data add separator + $var(mb).data add cascade -label [msgcat::mc {Shape}] \ + -menu $var(mb).data.shape + $var(mb).data add cascade -label [msgcat::mc {Error}] \ + -menu $var(mb).data.error + $var(mb).data add separator + $var(mb).data add command -label "[msgcat::mc {Name}]..." \ -command [list DatasetNameDialog $varname] # Shape - menu $var(mb).dataset.shape - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Circle}] \ - -variable ${varname}(shape,symbol) -value circle \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Square}] \ - -variable ${varname}(shape,symbol) -value square \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Diamond}] \ - -variable ${varname}(shape,symbol) -value diamond \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Plus}] \ - -variable ${varname}(shape,symbol) -value plus \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Cross}] \ - -variable ${varname}(shape,symbol) -value cross \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Simple Plus}] \ - -variable ${varname}(shape,symbol) -value splus \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Simple Cross}] \ - -variable ${varname}(shape,symbol) -value scross \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Triangle}] \ - -variable ${varname}(shape,symbol) -value triangle \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.shape add radiobutton \ - -label [msgcat::mc {Arrow}] \ - -variable ${varname}(shape,symbol) -value arrow \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.shape add separator - $var(mb).dataset.shape add checkbutton \ - -label [msgcat::mc {Fill}] \ - -variable ${varname}(shape,fill) \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.shape add cascade -label [msgcat::mc {Color}] \ - -menu $var(mb).dataset.shape.color - - # Color - PlotColorMenu $var(mb).dataset.shape.color $varname shape,color \ - [list PlotScatterUpdateElement $varname] + PlotShapeMenu $varname # Error - menu $var(mb).dataset.error - $var(mb).dataset.error add checkbutton -label [msgcat::mc {Show}] \ - -variable ${varname}(error) \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.error add checkbutton -label [msgcat::mc {Cap}] \ - -variable ${varname}(error,cap) \ - -command [list PlotScatterUpdateElement $varname] - $var(mb).dataset.error add separator - $var(mb).dataset.error add cascade -label [msgcat::mc {Color}] \ - -menu $var(mb).dataset.error.color - $var(mb).dataset.error add cascade -label [msgcat::mc {Width}] \ - -menu $var(mb).dataset.error.width - - PlotColorMenu $var(mb).dataset.error.color $varname error,color \ - [list PlotScatterUpdateElement $varname] - WidthDashMenu $var(mb).dataset.error.width $varname error,width {} \ - [list PlotScatterUpdateElement $varname] {} - - # graph - set var(type) scatter - set var(graph) [blt::graph $var(top).scatter \ - -width 600 \ - -height 500 \ - -highlightthickness 0 \ - ] - - pack $var(graph) -expand yes -fill both - - # set up zoom stack, assuming mode is zoom - switch $ds9(wm) { - x11 - - win32 {Blt_ZoomStack $var(graph) -mode release} - aqua {Blt_ZoomStack $var(graph) -mode release -button "ButtonPress-2"} - } + PlotErrorMenu $varname +} + +proc PlotScatterAddGraph {varname} { + upvar #0 $varname var + global $varname + + set cc $var(graph,current) + + set var(type$cc) scatter + set var(graph$cc) [blt::graph $var(canvas).gr$cc \ + -width 600 \ + -height 500 \ + -highlightthickness 0 \ + ] } proc PlotScatterUpdateElement {varname} { upvar #0 $varname var global $varname + set tt $var(graph,total) + set cc $var(graph,current) + # warning: uses current vars - if {$var(data,total) == 0} { + if {$var(graph$cc,data,total) == 0} { return } - set nn $var(data,current) + set nn $var(graph$cc,data,current) PlotGetVar $varname $nn - if {$var(shape,symbol) == "none"} { - set var(shape,symbol) circle + if {$var(graph$cc,shape,symbol) == "none"} { + set var(graph$cc,shape,symbol) circle } - if {$var(shape,fill)} { - set clr $var(shape,color) + if {$var(graph$cc,shape,fill)} { + set clr $var(graph$cc,shape,color) } else { set clr {} } - if {$var(error)} { + if {$var(graph$cc,error)} { set show both } else { set show none } - if {$var(error,cap)} { - set cap [expr $var(error,width)+3] + if {$var(graph$cc,error,cap)} { + set cap [expr $var(graph$cc,error,width)+3] } else { set cap 0 } - $var(graph) element configure "d-${nn}" \ - -label $var(name) -hide [expr !$var(show)] \ - -symbol $var(shape,symbol) -fill $clr -scalesymbols no \ - -outline $var(shape,color) \ + $var(graph$cc) element configure "d-${nn}" \ + -label $var(graph$cc,name) -hide [expr !$var(graph$cc,show)] \ + -symbol $var(graph$cc,shape,symbol) -fill $clr -scalesymbols no \ + -outline $var(graph$cc,shape,color) \ -linewidth 0 -pixels 5 \ - -showerrorbars $show -errorbarcolor $var(error,color) \ - -errorbarwidth $var(error,width) -errorbarcap $cap + -showerrorbars $show -errorbarcolor $var(graph$cc,error,color) \ + -errorbarwidth $var(graph$cc,error,width) -errorbarcap $cap - $var(graph) pen configure active -color blue \ - -symbol $var(shape,symbol) \ + $var(graph$cc) pen configure active -color blue \ + -symbol $var(graph$cc,shape,symbol) \ -linewidth 0 -pixels 5 \ - -showerrorbars $show -errorbarcolor $var(error,color) \ - -errorbarwidth $var(error,width) -errorbarcap $cap + -showerrorbars $show -errorbarcolor $var(graph$cc,error,color) \ + -errorbarwidth $var(graph$cc,error,width) -errorbarcap $cap } proc PlotScatterButton {varname x y} { upvar #0 $varname var global $varname - if {$var(data,total) == 0} { + set tt $var(graph,total) + set cc $var(graph,current) + + if {$var(graph$cc,data,total) == 0} { return } @@ -225,18 +155,18 @@ proc PlotScatterButton {varname x y} { return } - set rr [$var(graph) element closest $x $y] + set rr [$var(graph$cc) element closest $x $y] set elem [lindex $rr 1] set row [lindex $rr 3] if {$elem != {}} { if {$row != {}} { - $var(graph) element deactivate $elem - $var(graph) element activate $elem $row + $var(graph$cc) element deactivate $elem + $var(graph$cc) element activate $elem $row # rows start at 1 eval "$var(callback) [expr $row+1]" } else { - $var(graph) element deactivate $elem + $var(graph$cc) element deactivate $elem eval "$var(callback) {}" } } @@ -246,15 +176,18 @@ proc PlotScatterHighliteElement {varname rowlist} { upvar #0 $varname var global $varname - if {$var(data,total) == 0} { + set tt $var(graph,total) + set cc $var(graph,current) + + if {$var(graph$cc,data,total) == 0} { return } - if {$var(show)} { - $var(graph) element deactivate d-1 + if {$var(graph$cc,show)} { + $var(graph$cc) element deactivate d-1 if {$rowlist != {}} { # can have multiple rows - eval "$var(graph) element activate d-1 $rowlist" + eval "$var(graph$cc) element activate d-1 $rowlist" } } } |