From 4aff0a130bb5cf0e52b841ce86323c319df0fc0e Mon Sep 17 00:00:00 2001 From: William Joye Date: Wed, 24 Jul 2019 11:49:46 -0400 Subject: support multiple graphs per plot --- ds9/library/catplot.tcl | 94 +++++++++++++++++++++++++++++++++++++--------- ds9/library/plot.tcl | 13 +++---- ds9/library/plotdialog.tcl | 11 ++---- 3 files changed, 85 insertions(+), 33 deletions(-) diff --git a/ds9/library/catplot.tcl b/ds9/library/catplot.tcl index c42d29b..3290be3 100644 --- a/ds9/library/catplot.tcl +++ b/ds9/library/catplot.tcl @@ -45,7 +45,30 @@ proc CATPlotGenerate {varname} { set nrows [starbase_nrows $var(tbldb)] set cols [starbase_columns $var(tbldb)] - set rr {} + set vvarname plot${varname} + upvar #0 $vvarname vvar + global $vvarname + + set xdata ${vvarname}xx + set ydata ${vvarname}yy + set xedata ${vvarname}xe + set yedata ${vvarname}ye + global $xdata $ydata $xedata $yedata + + if {[info command $xdata] == {}} { + blt::vector create $xdata $ydata + switch $dim { + xy {} + xyex {blt::vector create $xedata} + xyey {blt::vector create $yedata} + xyexey {blt::vector create $xedata $yedata} + } + } + + set xx {} + set yy {} + set xe {} + set ye {} for {set ii 1} {$ii <= $nrows} {incr ii} { foreach col $cols { set val [starbase_get $var(tbldb) $ii \ @@ -59,37 +82,72 @@ proc CATPlotGenerate {varname} { } switch $dim { - xy {append rr [subst "$var(plot,x), $var(plot,y)\n"]} - xyex {append rr [subst "$var(plot,x), $var(plot,y), $var(plot,xerr)\n"]} - xyey {append rr [subst "$var(plot,x), $var(plot,y), $var(plot,yerr)\n"]} - xyexey {append rr [subst "$var(plot,x), $var(plot,y), $var(plot,xerr), $var(plot,yerr)\n"]} + xy { + append xx [subst "$var(plot,x) "] + append yy [subst "$var(plot,y) "] + } + xyex { + append xx [subst "$var(plot,x) "] + append yy [subst "$var(plot,y) "] + append xe [subst "$var(plot,xerr) "] + } + xyey { + append xx [subst "$var(plot,x) "] + append yy [subst "$var(plot,y) "] + append ye [subst "$var(plot,yerr) "] + } + xyexey { + append xx [subst "$var(plot,x) "] + append yy [subst "$var(plot,y) "] + append xe [subst "$var(plot,xerr) "] + append ye [subst "$var(plot,yerr) "] + } } } - set xtitle [regsub -all {\$*} $var(plot,x) {}] - set ytitle [regsub -all {\$*} $var(plot,y) {}] - - set vvarname plot${varname} - upvar #0 $vvarname vvar - global $vvarname - - set ping [PlotPing $vvarname] + $xdata set $xx + $ydata set $yy + switch $dim { + xy {} + xyex {$xedata set $xe} + xyey {$yedata set $ye} + xyexey { + $xedata set $xe + $yedata set $ye + } + } - if {!$ping} { + if {![PlotPing $vvarname]} { PlotDialog $vvarname $var(title) PlotAddGraph $vvarname scatter - PlotTitle $vvarname $var(title) $xtitle $ytitle set vvar(mode) pointer PlotChangeMode $vvarname - set vvar(callback) "CATSelectRows $varname plot" set var(plot) 1 set var(plot,var) $vvarname + + set vvar(callback) "CATSelectRows $varname plot" + set vvar(graph,ds,xdata) $xdata + set vvar(graph,ds,ydata) $ydata + switch $dim { + xy {} + xyex {set vvar(graph,ds,xedata) $xedata} + xyey {set vvar(graph,ds,yedata) $yedata} + xyexey { + set vvar(graph,ds,xedata) $xedata + set vvar(graph,ds,yedata) $yedata + } + } + + PlotExternal $vvarname $dim } - PlotDeleteDataSetAll $vvarname - PlotAddDataSet $vvarname $dim $rr + # colnames can change + set xtitle [regsub -all {\$*} $var(plot,x) {}] + set ytitle [regsub -all {\$*} $var(plot,y) {}] + PlotTitle $vvarname $var(title) $xtitle $ytitle + PlotStats $vvarname PlotList $vvarname } diff --git a/ds9/library/plot.tcl b/ds9/library/plot.tcl index 0f00da8..75fd2a4 100644 --- a/ds9/library/plot.tcl +++ b/ds9/library/plot.tcl @@ -181,8 +181,7 @@ proc PlotAddGraph {varname type} { PlotUpdateGraph $varname PlotUpdateCanvas $varname - PlotUpdateGraphMenu $varname - PlotUpdateDataMenu $varname + PlotUpdateMenus $varname PlotStats $varname PlotList $varname @@ -258,8 +257,7 @@ proc PlotDeleteGraph {varname} { PlotLayoutCanvas $varname - PlotUpdateGraphMenu $varname - PlotUpdateDataMenu $varname + PlotUpdateMenus $varname PlotStats $varname PlotList $varname @@ -289,7 +287,7 @@ proc PlotAddElement {varname} { # update menus $var(graph,proc,updateelement) $varname - PlotUpdateGraphMenu $varname + PlotUpdateMenus $varname PlotStats $varname PlotList $varname @@ -366,7 +364,7 @@ proc PlotDeleteDataSet {varname} { # update menus $var(graph,proc,updateelement) $varname - PlotUpdateGraphMenu $varname + PlotUpdateMenus $varname PlotStats $varname PlotList $varname @@ -382,8 +380,7 @@ proc PlotCurrentGraph {varname} { PlotRestoreState $varname - PlotUpdateGraphMenu $varname - PlotUpdateDataMenu $varname + PlotUpdateMenus $varname PlotStats $varname PlotList $varname diff --git a/ds9/library/plotdialog.tcl b/ds9/library/plotdialog.tcl index 878adfc..87ad63b 100644 --- a/ds9/library/plotdialog.tcl +++ b/ds9/library/plotdialog.tcl @@ -615,10 +615,11 @@ proc PlotExport {varname fn format} { DarwinPhotoRestore $var(top) $geom } -proc PlotUpdateGraphMenu {varname} { +proc PlotUpdateMenus {varname} { upvar #0 $varname var global $varname +# Graph if {[llength $var(graph,dss)] == 0} { $var(mb).graph entryconfig [msgcat::mc {Duplicate Dataset}] \ -state disabled @@ -647,18 +648,14 @@ proc PlotUpdateGraphMenu {varname} { -variable ${varname}(graph,ds,current) -value $nn \ -command [list PlotCurrentDataSet $varname] } -} - -proc PlotUpdateDataMenu {varname} { - upvar #0 $varname var - global $varname +# Data $var(mb) delete [msgcat::mc {Data}] switch $var(graph,type) { line { $var(mb) add cascade -label [msgcat::mc {Data}] \ -menu $var(mb).dataline - $var(mb).graph entryconfig Mode -state disabled + $var(mb).graph entryconfig [msgcat::mc {Mode}] -state disabled } bar { $var(mb) add cascade -label [msgcat::mc {Data}] \ -- cgit v0.12