📄 xgsetup.tcl
字号:
set WinData($Window,color) $color set WinData($Window,grid) $grid set WinData($Window,xlabel) $xlabel set WinData($Window,ylabel) $ylabel set SaveFile $DumpFile AddToList $Window if { $State == "open" } { set WinData($Window,created) 1 CreateWindow $Window set WinData($Window,open) 1 lput $Window } else { set WinData($Window,created) 0 }}proc Set3dCross { WinName xstart xend ystart yend } \{ global WinData append Window . [string tolower $WinName]#C_printf $xend#C_printf $xstart $Window.middle.x.scale configure -from $xstart $Window.middle.x.scale configure -to [expr $xend - 1] if { [lindex [$Window.middle.x.scale configure -from ] 4] < $xstart } { $Window.middle.x.scale set $xstart } elseif {[lindex [$Window.middle.x.scale configure -to] 4] >= $xend} { $Window.middle.x.scale set [expr $xend - 1] } $Window.middle.y.scale configure -from $ystart $Window.middle.y.scale configure -to [expr $yend - 1] if { [lindex [$Window.middle.y.scale configure -from ] 4] < $ystart } { $Window.middle.y.scale set $ystart } elseif {[lindex [$Window.middle.y.scale configure -to] 4] >= $yend} { $Window.middle.y.scale set [expr $yend - 1] }} ################################### Procedure to popup diagnostics proc PopupDiag { } \{ global WinData #C_printf [selection own] if { [selection own] == "" } { return } #C_printf [selection get] set WindowsList [ split [selection get] \n] foreach WinName $WindowsList { set WinName [string trimright [string trimleft \ $WinName \{] \}] set Window "" append Window . [string tolower $WinName] #C_printf $Window Open $Window }}##################################### Procedure to close diagnosticsproc CloseDiag { } \{ global WinData if { [selection own] == "" } { return } set Window [selection get] set WinName [string trimright [string trimleft $Window \{] \}] append WinPath . [string tolower $WinName] Close $WinPath} ###################################### Adds a diagnostic to the listboxproc AddToList { Window } \{ global WinData set index [Search $Window] set Title $WinData($Window,title) .list.lframe.listbox insert $index $Title .list.lframe.openbox insert end " " set WinData($Window,index) $index set End [expr [.list.lframe.listbox size] - 1] for {set i [expr $index + 1]} {$i<=$End} {incr i} { set Window "" append Window . [string tolower [.list.lframe.listbox get $i]] incr WinData($Window,index) }}proc Search { Window } \{ global WinData set Begin 0 set End [expr [.list.lframe.listbox size] - 1] set Title $WinData($Window,title) while { $Begin <= $End } { set Middle [expr ($End+$Begin)/2] switch \"[string compare $Title [.list.lframe.listbox get $Middle]]\" { \"-1\" { set End [expr $Middle - 1] } \"0\" { return $Begin } \"1\" { set Begin [expr $Middle + 1] } } } return $Begin}######################### Create the Tk Window proc CreateWindow { Window } \{ global WinData global XGrafixIcon global ThreeD global windowsList ######################################## # Create and place the toplevel window set Type $WinData($Window,type) lappend windowsList $Window toplevel $Window wm minsize $Window 100 100 wm title $Window $WinData($Window,title) wm geometry $Window $WinData($Window,geometry) wm iconbitmap $Window $XGrafixIcon #tkwait visibility $Window ###################### # Create the buttons frame $Window.bframe -relief raised -bd 2 button $Window.bframe.close -padx 0 -pady 0 -highlightthickness 0 -text Close -command \ [ list Close $Window ] button $Window.bframe.rescale -padx 0 -pady 0 -highlightthickness 0 -text Rescale -command \ [ list PopupRescale $Window ] if { $Type != $ThreeD } { button $Window.bframe.trace -padx 0 -pady 0 -highlightthickness 0 -text Trace -command \ [list Trace $Window] if { $WinData($Window,xAuto) == 1 || $WinData($Window,yAuto) == 1 } { $Window.bframe.trace configure -state disabled } } button $Window.bframe.print -padx 0 -pady 0 -highlightthickness 0 -text Print -command \ [list PopupPrint $Window] button $Window.bframe.crosshair -padx 0 -pady 0 -highlightthickness 0 -text "Crosshair" -command \ [list PopupCrosshair $Window] if { $Type != $ThreeD } { frame $Window.bottom -bd 2 -relief raised frame $Window.bottom.xframe -relief ridge -bd 2 label $Window.bottom.xframe.x1 -text \ "$WinData($Window,xlabel):" -anchor w label $Window.bottom.xframe.x2 -textvariable \ WinData($Window,xCoord) -anchor w frame $Window.bottom.yframe -relief ridge -bd 2 label $Window.bottom.yframe.y1 -text "Y:" -anchor w label $Window.bottom.yframe.y2 -textvariable \ WinData($Window,yCoord) -anchor w pack $Window.bframe.close $Window.bframe.rescale \ $Window.bframe.trace $Window.bframe.print \ $Window.bframe.crosshair \ -side left -ipadx 3 -ipady 3 \ -padx 3 -pady 3 pack $Window.bottom.xframe.x1 $Window.bottom.xframe.x2 \ -side left -padx 3 pack $Window.bottom.yframe.y1 $Window.bottom.yframe.y2 \ -side left -padx 3 pack $Window.bottom.yframe $Window.bottom.xframe -side right \ -padx 3 -pady 3 } if { $Type == $ThreeD } { button $Window.bframe.3dview -padx 0 -pady 0 -highlightthickness 0 -text "3D View" -command \ [list Popup3d $Window] pack $Window.bframe.close $Window.bframe.rescale \ $Window.bframe.print $Window.bframe.3dview \ $Window.bframe.crosshair -side left -ipadx 3 \ -ipady 3 -padx 3 -pady 3 } pack $Window.bframe -fill x ############################################ # Create the label where the plot is to be frame $Window.middle if { $Type != $ThreeD } { label $Window.middle.label -background gray30 -cursor crosshair bind $Window.middle.label <1> [list UpdateCrosshair \ $Window %x %y] bind $Window.middle.label <B1-Motion> [list UpdateCrosshair \ $Window %x %y] bind $Window.middle.label <2> [list MiddleDown $Window %x %y ] bind $Window.middle.label <B2-Motion> [list StretchBox \ $Window %x %y ] bind $Window.middle.label <ButtonRelease-2> [list MiddleUp \ $Window %x %y ] bind $Window.middle.label <3> [list RestoreWinParams $Window ] } else { label $Window.middle.label -background gray30 } pack $Window.middle.label -fill both -expand true -side left pack $Window.middle -fill both -expand true if { $Type == $ThreeD } { frame $Window.middle.x -relief raised -bd 2 label $Window.middle.x.label -text "X Axis" scale $Window.middle.x.scale -highlightthickness 0 -showvalue 0 -command \ [list Update3dCrosshair $Window ] pack $Window.middle.x.label -fill x pack $Window.middle.x.scale -fill y -expand true -pady 3 frame $Window.middle.y -relief raised -bd 2 label $Window.middle.y.label -text "Y Axis" scale $Window.middle.y.scale -highlightthickness 0 -showvalue 0 -command \ [list Update3dCrosshair $Window ] pack $Window.middle.y.label -fill x pack $Window.middle.y.scale -fill y -expand true -pady 3 frame $Window.bottom -relief raised -bd 2 frame $Window.bottom.x -relief ridge -bd 2 label $Window.bottom.x.label1 -text \ "$WinData($Window,xlabel):" -anchor w label $Window.bottom.x.label2 -textvariable \ WinData($Window,xCoord) -anchor w pack $Window.bottom.x.label1 -side left pack $Window.bottom.x.label2 -fill x -expand true -side left pack $Window.bottom.x -fill x -expand true -side left \ -padx 3 -pady 3 frame $Window.bottom.y -relief ridge -bd 2 label $Window.bottom.y.label1 -text \ "$WinData($Window,ylabel):" -anchor w label $Window.bottom.y.label2 -textvariable \ WinData($Window,yCoord) -anchor w pack $Window.bottom.y.label1 -side left pack $Window.bottom.y.label2 -fill x -expand true -side left pack $Window.bottom.y -fill x -expand true -side left \ -padx 3 -pady 3 frame $Window.bottom.z -relief ridge -bd 2 label $Window.bottom.z.label1 -text "Z:" -anchor w label $Window.bottom.z.label2 -textvariable \ WinData($Window,zCoord) -anchor w pack $Window.bottom.z.label1 -side left pack $Window.bottom.z.label2 -fill x -expand true -side left pack $Window.bottom.z -fill x -expand true -side left \ -padx 3 -pady 3 bind $Window <Enter> { focus %W; break } bind $Window <Left> { \ set pathname [string trimleft %W "."] set rootname [string range $pathname 0 [expr \ [string first "." $pathname] -1] ] set rootname .$rootname $rootname.middle.x.scale set [expr \ [$rootname.middle.x.scale get ] - 1 ]; break } bind $Window <Right> { \ set pathname [string trimleft %W "."] set rootname [string range $pathname 0 [expr \ [string first "." $pathname] -1] ] set rootname .$rootname $rootname.middle.x.scale set [expr \ [$rootname.middle.x.scale get ] + 1 ]; break } bind $Window <Up> { \ set pathname [string trimleft %W "."] set rootname [string range $pathname 0 [expr \ [string first "." $pathname] -1] ] set rootname .$rootname $rootname.middle.y.scale set [expr \ [$rootname.middle.y.scale get ] - 1 ]; break } bind $Window <Down> { \ set pathname [string trimleft %W "."] set rootname [string range $pathname 0 [expr \ [string first "." $pathname] -1] ] set rootname .$rootname $rootname.middle.y.scale set [expr \ [$rootname.middle.y.scale get ] + 1 ]; break } } else { bind $Window <Enter> { focus .list.top.entry; break } }}proc StretchBox { Window x y } \{ global WinData #if { $WinData($Window,type) == $ThreeD } { # set coords [ C_UpdateCrosshair $WinData($Window,index) $x $y ] # set xTemp2 [lindex $coords 0] # set yTemp2 [lindex $coords 1] # # C_StretchBox $WinData($Window,index) $xTemp2 $yTemp2 #} #else { set coords [ C_UpdateCrosshair $WinData($Window,index) $x $y ] set xTemp2 [lindex $coords 0] set yTemp2 [lindex $coords 1] C_StretchBox $WinData($Window,index) $xTemp2 $yTemp2 #}}proc MiddleDown { Window x y } \{ global WinData global xTemp1 global yTemp1 C_SetCrosshairParameters $WinData($Window,index) set coords [ C_UpdateCrosshair $WinData($Window,index) $x $y ] if { $coords == "" } { set xTemp1 0 set yTemp1 0 } else { set xTemp1 [lindex $coords 0] set yTemp1 [lindex $coords 1] } C_DefineUL $WinData($Window,index) $xTemp1 $yTemp1}proc MiddleUp { Window x y } \{ global WinData global xTemp1 global yTemp1 global xTemp2 global yTemp2 set coords [ C_UpdateCrosshair $WinData($Window,index) $x $y ] set xTemp2 [lindex $coords 0] set yTemp2 [lindex $coords 1] if { $xTemp1 < $xTemp2 } { set WinData($Window,xMin) $xTemp1 set WinData($Window,xMax) $xTemp2 } elseif { $xTemp1 > $xTemp2 } { set WinData($Window,xMin) $xTemp2 set WinData($Window,xMax) $xTemp1 } else { return } if { $yTemp1 < $yTemp2 } { set WinData($Window,yMin) $yTemp1 set WinData($Window,yMax) $yTemp2 } elseif { $yTemp1 > $yTemp2 } { set WinData($Window,yMin) $yTemp2 set WinData($Window,yMax) $yTemp1 } else { return } set WinData($Window,xAuto) 0 set WinData($Window,yAuto) 0 $Window.bframe.trace configure -state normal C_Rescale $WinData($Window,index) $WinData($Window,xMin) \ $WinData($Window,xMax) $WinData($Window,xAuto) \ $WinData($Window,xLinLog) $WinData($Window,yMin) \ $WinData($Window,yMax) $WinData($Window,yAuto) \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -