Attachment "plotchart.tcl" to
ticket [1891251fff]
added by
relaxmike
2008-02-11 23:24:32.
0000: 23 20 70 6c 6f 74 63 68 61 72 74 2e 74 63 6c 20 # plotchart.tcl
0010: 2d 2d 0d 0a 23 20 20 20 20 46 61 63 69 6c 69 74 --..# Facilit
0020: 69 65 73 20 74 6f 20 64 72 61 77 20 73 69 6d 70 ies to draw simp
0030: 6c 65 20 70 6c 6f 74 73 20 69 6e 20 61 20 64 65 le plots in a de
0040: 64 69 63 61 74 65 64 20 63 61 6e 76 61 73 0d 0a dicated canvas..
0050: 23 0d 0a 23 20 4e 6f 74 65 3a 0d 0a 23 20 20 20 #..# Note:..#
0060: 20 54 68 69 73 20 73 6f 75 72 63 65 20 66 69 6c This source fil
0070: 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 e contains the p
0080: 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 73 2e ublic functions.
0090: 0d 0a 23 20 20 20 20 54 68 65 20 6f 74 68 65 72 ..# The other
00a0: 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 s are contained
00b0: 69 6e 20 22 70 6c 6f 74 70 72 69 76 2e 74 63 6c in "plotpriv.tcl
00c0: 22 0d 0a 23 0d 0a 70 61 63 6b 61 67 65 20 72 65 "..#..package re
00d0: 71 75 69 72 65 20 54 63 6c 20 38 2e 33 0d 0a 70 quire Tcl 8.3..p
00e0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 54 ackage require T
00f0: 6b 0d 0a 0d 0a 23 20 50 6c 6f 74 63 68 61 72 74 k....# Plotchart
0100: 20 2d 2d 0d 0a 23 20 20 20 20 4e 61 6d 65 73 70 --..# Namesp
0110: 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 ace to hold the
0120: 70 72 6f 63 65 64 75 72 65 73 20 61 6e 64 20 74 procedures and t
0130: 68 65 20 70 72 69 76 61 74 65 20 64 61 74 61 0d he private data.
0140: 0a 23 0d 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 .#..namespace ev
0150: 61 6c 20 3a 3a 50 6c 6f 74 63 68 61 72 74 20 7b al ::Plotchart {
0160: 0d 0a 20 20 20 76 61 72 69 61 62 6c 65 20 73 65 .. variable se
0170: 74 74 69 6e 67 73 0d 0a 20 20 20 76 61 72 69 61 ttings.. varia
0180: 62 6c 65 20 6c 65 67 65 6e 64 0d 0a 20 20 20 76 ble legend.. v
0190: 61 72 69 61 62 6c 65 20 73 63 61 6c 69 6e 67 0d ariable scaling.
01a0: 0a 20 20 20 76 61 72 69 61 62 6c 65 20 6d 65 74 . variable met
01b0: 68 6f 64 50 72 6f 63 0d 0a 20 20 20 76 61 72 69 hodProc.. vari
01c0: 61 62 6c 65 20 64 61 74 61 5f 73 65 72 69 65 73 able data_series
01d0: 0d 0a 0d 0a 20 20 20 6e 61 6d 65 73 70 61 63 65 .... namespace
01e0: 20 65 78 70 6f 72 74 20 77 6f 72 6c 64 43 6f 6f export worldCoo
01f0: 72 64 69 6e 61 74 65 73 20 76 69 65 77 50 6f 72 rdinates viewPor
0200: 74 20 63 6f 6f 72 64 73 54 6f 50 69 78 65 6c 20 t coordsToPixel
0210: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \..
0220: 20 20 20 20 20 20 20 70 6f 6c 61 72 43 6f 6f 72 polarCoor
0230: 64 69 6e 61 74 65 73 20 73 65 74 5a 6f 6f 6d 50 dinates setZoomP
0240: 61 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 an \..
0250: 20 20 20 20 20 20 20 20 20 20 77 6f 72 6c 64 33 world3
0260: 44 43 6f 6f 72 64 69 6e 61 74 65 73 20 63 6f 6f DCoordinates coo
0270: 72 64 73 54 6f 50 69 78 65 6c 20 5c 0d 0a 20 20 rdsToPixel \..
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0290: 20 20 63 6f 6f 72 64 73 33 44 54 6f 50 69 78 65 coords3DToPixe
02a0: 6c 20 70 6f 6c 61 72 54 6f 50 69 78 65 6c 20 5c l polarToPixel \
02b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
02c0: 20 20 20 20 20 20 70 69 78 65 6c 54 6f 43 6f 6f pixelToCoo
02d0: 72 64 73 20 70 69 78 65 6c 54 6f 49 6e 64 65 78 rds pixelToIndex
02e0: 20 64 65 74 65 72 6d 69 6e 65 53 63 61 6c 65 20 determineScale
02f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \..
0300: 20 20 20 20 20 20 20 63 72 65 61 74 65 58 59 50 createXYP
0310: 6c 6f 74 20 63 72 65 61 74 65 50 6f 6c 61 72 50 lot createPolarP
0320: 6c 6f 74 20 63 72 65 61 74 65 50 69 65 63 68 61 lot createPiecha
0330: 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 rt \..
0340: 20 20 20 20 20 20 20 20 20 20 63 72 65 61 74 65 create
0350: 42 61 72 63 68 61 72 74 20 63 72 65 61 74 65 48 Barchart createH
0360: 6f 72 69 7a 6f 6e 74 61 6c 42 61 72 63 68 61 72 orizontalBarchar
0370: 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \..
0380: 20 20 20 20 20 20 20 20 20 63 72 65 61 74 65 54 createT
0390: 69 6d 65 63 68 61 72 74 20 63 72 65 61 74 65 53 imechart createS
03a0: 74 72 69 70 63 68 61 72 74 20 5c 0d 0a 20 20 20 tripchart \..
03b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03c0: 20 63 72 65 61 74 65 49 73 6f 6d 65 74 72 69 63 createIsometric
03d0: 50 6c 6f 74 20 63 72 65 61 74 65 33 44 50 6c 6f Plot create3DPlo
03e0: 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \..
03f0: 20 20 20 20 20 20 20 20 20 63 72 65 61 74 65 47 createG
0400: 61 6e 74 74 43 68 61 72 74 20 63 72 65 61 74 65 anttChart create
0410: 48 69 73 74 6f 67 72 61 6d 20 63 6f 6c 6f 72 4d Histogram colorM
0420: 61 70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ap \..
0430: 20 20 20 20 20 20 20 20 20 20 63 72 65 61 74 65 create
0440: 33 44 42 61 72 73 20 63 72 65 61 74 65 52 61 64 3DBars createRad
0450: 69 61 6c 63 68 61 72 74 20 5c 0d 0a 20 20 20 20 ialchart \..
0460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0470: 63 72 65 61 74 65 54 58 50 6c 6f 74 20 63 72 65 createTXPlot cre
0480: 61 74 65 52 69 67 68 74 41 78 69 73 20 5c 0d 0a ateRightAxis \..
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
04a0: 20 20 20 20 63 72 65 61 74 65 33 44 52 69 62 62 create3DRibb
04b0: 6f 6e 43 68 61 72 74 0d 0a 0d 0a 20 20 20 23 0d onChart.... #.
04c0: 0a 20 20 20 23 20 41 72 72 61 79 20 6c 69 6e 6b . # Array link
04d0: 69 6e 67 20 70 72 6f 63 65 64 75 72 65 73 20 77 ing procedures w
04e0: 69 74 68 20 6d 65 74 68 6f 64 73 0d 0a 20 20 20 ith methods..
04f0: 23 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 #.. set method
0500: 50 72 6f 63 28 78 79 70 6c 6f 74 2c 74 69 74 6c Proc(xyplot,titl
0510: 65 29 20 20 20 20 20 20 20 20 20 20 44 72 61 77 e) Draw
0520: 54 69 74 6c 65 0d 0a 20 20 20 73 65 74 20 6d 65 Title.. set me
0530: 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c thodProc(xyplot,
0540: 78 74 65 78 74 29 20 20 20 20 20 20 20 20 20 20 xtext)
0550: 44 72 61 77 58 74 65 78 74 0d 0a 20 20 20 73 65 DrawXtext.. se
0560: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 70 t methodProc(xyp
0570: 6c 6f 74 2c 79 74 65 78 74 29 20 20 20 20 20 20 lot,ytext)
0580: 20 20 20 20 44 72 61 77 59 74 65 78 74 0d 0a 20 DrawYtext..
0590: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
05a0: 28 78 79 70 6c 6f 74 2c 70 6c 6f 74 29 20 20 20 (xyplot,plot)
05b0: 20 20 20 20 20 20 20 20 44 72 61 77 44 61 74 61 DrawData
05c0: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
05d0: 72 6f 63 28 78 79 70 6c 6f 74 2c 64 6f 74 29 20 roc(xyplot,dot)
05e0: 20 20 20 20 20 20 20 20 20 20 20 44 72 61 77 44 DrawD
05f0: 6f 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f ot.. set metho
0600: 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c 64 6f 74 dProc(xyplot,dot
0610: 63 6f 6e 66 69 67 29 20 20 20 20 20 20 44 6f 74 config) Dot
0620: 43 6f 6e 66 69 67 75 72 65 0d 0a 20 20 20 73 65 Configure.. se
0630: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 70 t methodProc(xyp
0640: 6c 6f 74 2c 69 6e 74 65 72 76 61 6c 29 20 20 20 lot,interval)
0650: 20 20 20 20 44 72 61 77 49 6e 74 65 72 76 61 6c DrawInterval
0660: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
0670: 72 6f 63 28 78 79 70 6c 6f 74 2c 74 72 65 6e 64 roc(xyplot,trend
0680: 29 20 20 20 20 20 20 20 20 20 20 44 72 61 77 54 ) DrawT
0690: 72 65 6e 64 4c 69 6e 65 0d 0a 20 20 20 73 65 74 rendLine.. set
06a0: 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 70 6c methodProc(xypl
06b0: 6f 74 2c 76 65 63 74 6f 72 29 20 20 20 20 20 20 ot,vector)
06c0: 20 20 20 44 72 61 77 56 65 63 74 6f 72 0d 0a 20 DrawVector..
06d0: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
06e0: 28 78 79 70 6c 6f 74 2c 76 65 63 74 6f 72 63 6f (xyplot,vectorco
06f0: 6e 66 69 67 29 20 20 20 56 65 63 74 6f 72 43 6f nfig) VectorCo
0700: 6e 66 69 67 75 72 65 0d 0a 20 20 20 73 65 74 20 nfigure.. set
0710: 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f methodProc(xyplo
0720: 74 2c 72 63 68 61 72 74 29 20 20 20 20 20 20 20 t,rchart)
0730: 20 20 44 72 61 77 52 63 68 61 72 74 0d 0a 20 20 DrawRchart..
0740: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
0750: 78 79 70 6c 6f 74 2c 67 72 69 64 29 20 20 20 20 xyplot,grid)
0760: 20 20 20 20 20 20 20 44 72 61 77 47 72 69 64 0d DrawGrid.
0770: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
0780: 6f 63 28 78 79 70 6c 6f 74 2c 63 6f 6e 74 6f 75 oc(xyplot,contou
0790: 72 6c 69 6e 65 73 29 20 20 20 44 72 61 77 49 73 rlines) DrawIs
07a0: 6f 6c 69 6e 65 73 0d 0a 20 20 20 73 65 74 20 6d olines.. set m
07b0: 65 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 ethodProc(xyplot
07c0: 2c 63 6f 6e 74 6f 75 72 66 69 6c 6c 29 20 20 20 ,contourfill)
07d0: 20 44 72 61 77 53 68 61 64 65 73 0d 0a 20 20 20 DrawShades..
07e0: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 set methodProc(x
07f0: 79 70 6c 6f 74 2c 63 6f 6e 74 6f 75 72 62 6f 78 yplot,contourbox
0800: 29 20 20 20 20 20 44 72 61 77 42 6f 78 0d 0a 20 ) DrawBox..
0810: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
0820: 28 78 79 70 6c 6f 74 2c 73 61 76 65 70 6c 6f 74 (xyplot,saveplot
0830: 29 20 20 20 20 20 20 20 53 61 76 65 50 6c 6f 74 ) SavePlot
0840: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
0850: 72 6f 63 28 78 79 70 6c 6f 74 2c 64 61 74 61 63 roc(xyplot,datac
0860: 6f 6e 66 69 67 29 20 20 20 20 20 44 61 74 61 43 onfig) DataC
0870: 6f 6e 66 69 67 0d 0a 20 20 20 73 65 74 20 6d 65 onfig.. set me
0880: 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c thodProc(xyplot,
0890: 78 63 6f 6e 66 69 67 29 20 20 20 20 20 20 20 20 xconfig)
08a0: 58 43 6f 6e 66 69 67 0d 0a 20 20 20 73 65 74 20 XConfig.. set
08b0: 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f methodProc(xyplo
08c0: 74 2c 79 63 6f 6e 66 69 67 29 20 20 20 20 20 20 t,yconfig)
08d0: 20 20 59 43 6f 6e 66 69 67 0d 0a 20 20 20 73 65 YConfig.. se
08e0: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 70 t methodProc(xyp
08f0: 6c 6f 74 2c 78 74 69 63 6b 6c 69 6e 65 73 29 20 lot,xticklines)
0900: 20 20 20 20 44 72 61 77 58 54 69 63 6b 6c 69 6e DrawXTicklin
0910: 65 73 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f es.. set metho
0920: 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c 79 74 69 dProc(xyplot,yti
0930: 63 6b 6c 69 6e 65 73 29 20 20 20 20 20 44 72 61 cklines) Dra
0940: 77 59 54 69 63 6b 6c 69 6e 65 73 0d 0a 20 20 20 wYTicklines..
0950: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 set methodProc(x
0960: 79 70 6c 6f 74 2c 62 61 63 6b 67 72 6f 75 6e 64 yplot,background
0970: 29 20 20 20 20 20 42 61 63 6b 67 72 6f 75 6e 64 ) Background
0980: 43 6f 6c 6f 75 72 0d 0a 20 20 20 73 65 74 20 6d Colour.. set m
0990: 65 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 ethodProc(xyplot
09a0: 2c 6c 65 67 65 6e 64 63 6f 6e 66 69 67 29 20 20 ,legendconfig)
09b0: 20 4c 65 67 65 6e 64 43 6f 6e 66 69 67 75 72 65 LegendConfigure
09c0: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
09d0: 72 6f 63 28 78 79 70 6c 6f 74 2c 6c 65 67 65 6e roc(xyplot,legen
09e0: 64 29 20 20 20 20 20 20 20 20 20 44 72 61 77 4c d) DrawL
09f0: 65 67 65 6e 64 0d 0a 20 20 20 73 65 74 20 6d 65 egend.. set me
0a00: 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c thodProc(xyplot,
0a10: 62 61 6c 6c 6f 6f 6e 29 20 20 20 20 20 20 20 20 balloon)
0a20: 44 72 61 77 42 61 6c 6c 6f 6f 6e 0d 0a 20 20 20 DrawBalloon..
0a30: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 set methodProc(x
0a40: 79 70 6c 6f 74 2c 62 61 6c 6c 6f 6f 6e 63 6f 6e yplot,ballooncon
0a50: 66 69 67 29 20 20 43 6f 6e 66 69 67 42 61 6c 6c fig) ConfigBall
0a60: 6f 6f 6e 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 oon.. set meth
0a70: 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c 70 6c odProc(xyplot,pl
0a80: 61 69 6e 74 65 78 74 29 20 20 20 20 20 20 44 72 aintext) Dr
0a90: 61 77 50 6c 61 69 6e 54 65 78 74 0d 0a 20 20 20 awPlainText..
0aa0: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 set methodProc(p
0ab0: 69 65 63 68 61 72 74 2c 74 69 74 6c 65 29 20 20 iechart,title)
0ac0: 20 20 20 20 20 20 44 72 61 77 54 69 74 6c 65 0d DrawTitle.
0ad0: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
0ae0: 6f 63 28 70 69 65 63 68 61 72 74 2c 70 6c 6f 74 oc(piechart,plot
0af0: 29 20 20 20 20 20 20 20 20 20 44 72 61 77 50 69 ) DrawPi
0b00: 65 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 e.. set method
0b10: 50 72 6f 63 28 70 69 65 63 68 61 72 74 2c 73 61 Proc(piechart,sa
0b20: 76 65 70 6c 6f 74 29 20 20 20 20 20 53 61 76 65 veplot) Save
0b30: 50 6c 6f 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 Plot.. set met
0b40: 68 6f 64 50 72 6f 63 28 70 69 65 63 68 61 72 74 hodProc(piechart
0b50: 2c 62 61 6c 6c 6f 6f 6e 29 20 20 20 20 20 20 44 ,balloon) D
0b60: 72 61 77 42 61 6c 6c 6f 6f 6e 0d 0a 20 20 20 73 rawBalloon.. s
0b70: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 69 et methodProc(pi
0b80: 65 63 68 61 72 74 2c 62 61 6c 6c 6f 6f 6e 63 6f echart,balloonco
0b90: 6e 66 69 67 29 20 43 6f 6e 66 69 67 42 61 6c 6c nfig) ConfigBall
0ba0: 6f 6f 6e 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 oon.. set meth
0bb0: 6f 64 50 72 6f 63 28 70 69 65 63 68 61 72 74 2c odProc(piechart,
0bc0: 70 6c 61 69 6e 74 65 78 74 29 20 20 20 20 44 72 plaintext) Dr
0bd0: 61 77 50 6c 61 69 6e 54 65 78 74 0d 0a 20 20 20 awPlainText..
0be0: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 set methodProc(p
0bf0: 6f 6c 61 72 70 6c 6f 74 2c 74 69 74 6c 65 29 20 olarplot,title)
0c00: 20 20 20 20 20 20 44 72 61 77 54 69 74 6c 65 0d DrawTitle.
0c10: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
0c20: 6f 63 28 70 6f 6c 61 72 70 6c 6f 74 2c 70 6c 6f oc(polarplot,plo
0c30: 74 29 20 20 20 20 20 20 20 20 44 72 61 77 50 6f t) DrawPo
0c40: 6c 61 72 44 61 74 61 0d 0a 20 20 20 73 65 74 20 larData.. set
0c50: 6d 65 74 68 6f 64 50 72 6f 63 28 70 6f 6c 61 72 methodProc(polar
0c60: 70 6c 6f 74 2c 73 61 76 65 70 6c 6f 74 29 20 20 plot,saveplot)
0c70: 20 20 53 61 76 65 50 6c 6f 74 0d 0a 20 20 20 73 SavePlot.. s
0c80: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 6f et methodProc(po
0c90: 6c 61 72 70 6c 6f 74 2c 64 61 74 61 63 6f 6e 66 larplot,dataconf
0ca0: 69 67 29 20 20 44 61 74 61 43 6f 6e 66 69 67 0d ig) DataConfig.
0cb0: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
0cc0: 6f 63 28 70 6f 6c 61 72 70 6c 6f 74 2c 62 61 63 oc(polarplot,bac
0cd0: 6b 67 72 6f 75 6e 64 29 20 20 42 61 63 6b 67 72 kground) Backgr
0ce0: 6f 75 6e 64 43 6f 6c 6f 75 72 0d 0a 20 20 20 73 oundColour.. s
0cf0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 6f et methodProc(po
0d00: 6c 61 72 70 6c 6f 74 2c 6c 65 67 65 6e 64 63 6f larplot,legendco
0d10: 6e 66 69 67 29 20 4c 65 67 65 6e 64 43 6f 6e 66 nfig) LegendConf
0d20: 69 67 75 72 65 0d 0a 20 20 20 73 65 74 20 6d 65 igure.. set me
0d30: 74 68 6f 64 50 72 6f 63 28 70 6f 6c 61 72 70 6c thodProc(polarpl
0d40: 6f 74 2c 6c 65 67 65 6e 64 29 20 20 20 20 20 20 ot,legend)
0d50: 44 72 61 77 4c 65 67 65 6e 64 0d 0a 20 20 20 73 DrawLegend.. s
0d60: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 6f et methodProc(po
0d70: 6c 61 72 70 6c 6f 74 2c 62 61 6c 6c 6f 6f 6e 29 larplot,balloon)
0d80: 20 20 20 20 20 44 72 61 77 42 61 6c 6c 6f 6f 6e DrawBalloon
0d90: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
0da0: 72 6f 63 28 70 6f 6c 61 72 70 6c 6f 74 2c 62 61 roc(polarplot,ba
0db0: 6c 6c 6f 6f 6e 63 6f 6e 66 69 67 29 20 43 6f 6e lloonconfig) Con
0dc0: 66 69 67 42 61 6c 6c 6f 6f 6e 0d 0a 20 20 20 73 figBalloon.. s
0dd0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 6f et methodProc(po
0de0: 6c 61 72 70 6c 6f 74 2c 70 6c 61 69 6e 74 65 78 larplot,plaintex
0df0: 74 29 20 20 20 44 72 61 77 50 6c 61 69 6e 54 65 t) DrawPlainTe
0e00: 78 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f xt.. set metho
0e10: 64 50 72 6f 63 28 68 69 73 74 6f 67 72 61 6d 2c dProc(histogram,
0e20: 74 69 74 6c 65 29 20 20 20 20 20 20 20 44 72 61 title) Dra
0e30: 77 54 69 74 6c 65 0d 0a 20 20 20 73 65 74 20 6d wTitle.. set m
0e40: 65 74 68 6f 64 50 72 6f 63 28 68 69 73 74 6f 67 ethodProc(histog
0e50: 72 61 6d 2c 78 74 65 78 74 29 20 20 20 20 20 20 ram,xtext)
0e60: 20 44 72 61 77 58 74 65 78 74 0d 0a 20 20 20 73 DrawXtext.. s
0e70: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 69 et methodProc(hi
0e80: 73 74 6f 67 72 61 6d 2c 79 74 65 78 74 29 20 20 stogram,ytext)
0e90: 20 20 20 20 20 44 72 61 77 59 74 65 78 74 0d 0a DrawYtext..
0ea0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
0eb0: 63 28 68 69 73 74 6f 67 72 61 6d 2c 70 6c 6f 74 c(histogram,plot
0ec0: 29 20 20 20 20 20 20 20 20 44 72 61 77 48 69 73 ) DrawHis
0ed0: 74 6f 67 72 61 6d 44 61 74 61 0d 0a 20 20 20 73 togramData.. s
0ee0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 69 et methodProc(hi
0ef0: 73 74 6f 67 72 61 6d 2c 73 61 76 65 70 6c 6f 74 stogram,saveplot
0f00: 29 20 20 20 20 53 61 76 65 50 6c 6f 74 0d 0a 20 ) SavePlot..
0f10: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
0f20: 28 68 69 73 74 6f 67 72 61 6d 2c 64 61 74 61 63 (histogram,datac
0f30: 6f 6e 66 69 67 29 20 20 44 61 74 61 43 6f 6e 66 onfig) DataConf
0f40: 69 67 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f ig.. set metho
0f50: 64 50 72 6f 63 28 68 69 73 74 6f 67 72 61 6d 2c dProc(histogram,
0f60: 78 63 6f 6e 66 69 67 29 20 20 20 20 20 58 43 6f xconfig) XCo
0f70: 6e 66 69 67 0d 0a 20 20 20 73 65 74 20 6d 65 74 nfig.. set met
0f80: 68 6f 64 50 72 6f 63 28 68 69 73 74 6f 67 72 61 hodProc(histogra
0f90: 6d 2c 79 63 6f 6e 66 69 67 29 20 20 20 20 20 59 m,yconfig) Y
0fa0: 43 6f 6e 66 69 67 0d 0a 20 20 20 73 65 74 20 6d Config.. set m
0fb0: 65 74 68 6f 64 50 72 6f 63 28 68 69 73 74 6f 67 ethodProc(histog
0fc0: 72 61 6d 2c 79 74 69 63 6b 6c 69 6e 65 73 29 20 ram,yticklines)
0fd0: 20 44 72 61 77 59 54 69 63 6b 6c 69 6e 65 73 0d DrawYTicklines.
0fe0: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
0ff0: 6f 63 28 68 69 73 74 6f 67 72 61 6d 2c 62 61 63 oc(histogram,bac
1000: 6b 67 72 6f 75 6e 64 29 20 20 42 61 63 6b 67 72 kground) Backgr
1010: 6f 75 6e 64 43 6f 6c 6f 75 72 0d 0a 20 20 20 73 oundColour.. s
1020: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 69 et methodProc(hi
1030: 73 74 6f 67 72 61 6d 2c 6c 65 67 65 6e 64 63 6f stogram,legendco
1040: 6e 66 69 67 29 20 4c 65 67 65 6e 64 43 6f 6e 66 nfig) LegendConf
1050: 69 67 75 72 65 0d 0a 20 20 20 73 65 74 20 6d 65 igure.. set me
1060: 74 68 6f 64 50 72 6f 63 28 68 69 73 74 6f 67 72 thodProc(histogr
1070: 61 6d 2c 6c 65 67 65 6e 64 29 20 20 20 20 20 20 am,legend)
1080: 44 72 61 77 4c 65 67 65 6e 64 0d 0a 20 20 20 73 DrawLegend.. s
1090: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 69 et methodProc(hi
10a0: 73 74 6f 67 72 61 6d 2c 62 61 6c 6c 6f 6f 6e 29 stogram,balloon)
10b0: 20 20 20 20 20 44 72 61 77 42 61 6c 6c 6f 6f 6e DrawBalloon
10c0: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
10d0: 72 6f 63 28 68 69 73 74 6f 67 72 61 6d 2c 62 61 roc(histogram,ba
10e0: 6c 6c 6f 6f 6e 63 6f 6e 66 69 67 29 20 43 6f 6e lloonconfig) Con
10f0: 66 69 67 42 61 6c 6c 6f 6f 6e 0d 0a 20 20 20 73 figBalloon.. s
1100: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 69 et methodProc(hi
1110: 73 74 6f 67 72 61 6d 2c 70 6c 61 69 6e 74 65 78 stogram,plaintex
1120: 74 29 20 20 20 44 72 61 77 50 6c 61 69 6e 54 65 t) DrawPlainTe
1130: 78 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f xt.. set metho
1140: 64 50 72 6f 63 28 68 6f 72 69 7a 62 61 72 73 2c dProc(horizbars,
1150: 74 69 74 6c 65 29 20 20 20 20 20 20 20 44 72 61 title) Dra
1160: 77 54 69 74 6c 65 0d 0a 20 20 20 73 65 74 20 6d wTitle.. set m
1170: 65 74 68 6f 64 50 72 6f 63 28 68 6f 72 69 7a 62 ethodProc(horizb
1180: 61 72 73 2c 78 74 65 78 74 29 20 20 20 20 20 20 ars,xtext)
1190: 20 44 72 61 77 58 74 65 78 74 0d 0a 20 20 20 73 DrawXtext.. s
11a0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 6f et methodProc(ho
11b0: 72 69 7a 62 61 72 73 2c 79 74 65 78 74 29 20 20 rizbars,ytext)
11c0: 20 20 20 20 20 44 72 61 77 59 74 65 78 74 0d 0a DrawYtext..
11d0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
11e0: 63 28 68 6f 72 69 7a 62 61 72 73 2c 70 6c 6f 74 c(horizbars,plot
11f0: 29 20 20 20 20 20 20 20 20 44 72 61 77 48 6f 72 ) DrawHor
1200: 69 7a 42 61 72 44 61 74 61 0d 0a 20 20 20 73 65 izBarData.. se
1210: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 6f 72 t methodProc(hor
1220: 69 7a 62 61 72 73 2c 78 74 69 63 6b 6c 69 6e 65 izbars,xtickline
1230: 73 29 20 20 44 72 61 77 58 54 69 63 6b 6c 69 6e s) DrawXTicklin
1240: 65 73 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f es.. set metho
1250: 64 50 72 6f 63 28 68 6f 72 69 7a 62 61 72 73 2c dProc(horizbars,
1260: 62 61 63 6b 67 72 6f 75 6e 64 29 20 20 42 61 63 background) Bac
1270: 6b 67 72 6f 75 6e 64 43 6f 6c 6f 75 72 0d 0a 20 kgroundColour..
1280: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
1290: 28 68 6f 72 69 7a 62 61 72 73 2c 73 61 76 65 70 (horizbars,savep
12a0: 6c 6f 74 29 20 20 20 20 53 61 76 65 50 6c 6f 74 lot) SavePlot
12b0: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
12c0: 72 6f 63 28 68 6f 72 69 7a 62 61 72 73 2c 63 6f roc(horizbars,co
12d0: 6c 6f 75 72 73 29 20 20 20 20 20 53 65 74 43 6f lours) SetCo
12e0: 6c 6f 75 72 73 0d 0a 20 20 20 73 65 74 20 6d 65 lours.. set me
12f0: 74 68 6f 64 50 72 6f 63 28 68 6f 72 69 7a 62 61 thodProc(horizba
1300: 72 73 2c 63 6f 6c 6f 72 73 29 20 20 20 20 20 20 rs,colors)
1310: 53 65 74 43 6f 6c 6f 75 72 73 0d 0a 20 20 20 73 SetColours.. s
1320: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 6f et methodProc(ho
1330: 72 69 7a 62 61 72 73 2c 78 63 6f 6e 66 69 67 29 rizbars,xconfig)
1340: 20 20 20 20 20 58 43 6f 6e 66 69 67 0d 0a 20 20 XConfig..
1350: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
1360: 68 6f 72 69 7a 62 61 72 73 2c 6c 65 67 65 6e 64 horizbars,legend
1370: 63 6f 6e 66 69 67 29 20 4c 65 67 65 6e 64 43 6f config) LegendCo
1380: 6e 66 69 67 75 72 65 0d 0a 20 20 20 73 65 74 20 nfigure.. set
1390: 6d 65 74 68 6f 64 50 72 6f 63 28 68 6f 72 69 7a methodProc(horiz
13a0: 62 61 72 73 2c 6c 65 67 65 6e 64 29 20 20 20 20 bars,legend)
13b0: 20 20 44 72 61 77 4c 65 67 65 6e 64 0d 0a 20 20 DrawLegend..
13c0: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
13d0: 68 6f 72 69 7a 62 61 72 73 2c 62 61 6c 6c 6f 6f horizbars,balloo
13e0: 6e 29 20 20 20 20 20 44 72 61 77 42 61 6c 6c 6f n) DrawBallo
13f0: 6f 6e 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f on.. set metho
1400: 64 50 72 6f 63 28 68 6f 72 69 7a 62 61 72 73 2c dProc(horizbars,
1410: 62 61 6c 6c 6f 6f 6e 63 6f 6e 66 69 67 29 20 43 balloonconfig) C
1420: 6f 6e 66 69 67 42 61 6c 6c 6f 6f 6e 0d 0a 20 20 onfigBalloon..
1430: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
1440: 68 6f 72 69 7a 62 61 72 73 2c 70 6c 61 69 6e 74 horizbars,plaint
1450: 65 78 74 29 20 20 20 44 72 61 77 50 6c 61 69 6e ext) DrawPlain
1460: 54 65 78 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 Text.. set met
1470: 68 6f 64 50 72 6f 63 28 76 65 72 74 62 61 72 73 hodProc(vertbars
1480: 2c 74 69 74 6c 65 29 20 20 20 20 20 20 20 20 44 ,title) D
1490: 72 61 77 54 69 74 6c 65 0d 0a 20 20 20 73 65 74 rawTitle.. set
14a0: 20 6d 65 74 68 6f 64 50 72 6f 63 28 76 65 72 74 methodProc(vert
14b0: 62 61 72 73 2c 78 74 65 78 74 29 20 20 20 20 20 bars,xtext)
14c0: 20 20 20 44 72 61 77 58 74 65 78 74 0d 0a 20 20 DrawXtext..
14d0: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
14e0: 76 65 72 74 62 61 72 73 2c 79 74 65 78 74 29 20 vertbars,ytext)
14f0: 20 20 20 20 20 20 20 44 72 61 77 59 74 65 78 74 DrawYtext
1500: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
1510: 72 6f 63 28 76 65 72 74 62 61 72 73 2c 70 6c 6f roc(vertbars,plo
1520: 74 29 20 20 20 20 20 20 20 20 20 44 72 61 77 56 t) DrawV
1530: 65 72 74 42 61 72 44 61 74 61 0d 0a 20 20 20 73 ertBarData.. s
1540: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 76 65 et methodProc(ve
1550: 72 74 62 61 72 73 2c 62 61 63 6b 67 72 6f 75 6e rtbars,backgroun
1560: 64 29 20 20 20 42 61 63 6b 67 72 6f 75 6e 64 43 d) BackgroundC
1570: 6f 6c 6f 75 72 0d 0a 20 20 20 73 65 74 20 6d 65 olour.. set me
1580: 74 68 6f 64 50 72 6f 63 28 76 65 72 74 62 61 72 thodProc(vertbar
1590: 73 2c 79 74 69 63 6b 6c 69 6e 65 73 29 20 20 20 s,yticklines)
15a0: 44 72 61 77 59 54 69 63 6b 6c 69 6e 65 73 0d 0a DrawYTicklines..
15b0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
15c0: 63 28 76 65 72 74 62 61 72 73 2c 73 61 76 65 70 c(vertbars,savep
15d0: 6c 6f 74 29 20 20 20 20 20 53 61 76 65 50 6c 6f lot) SavePlo
15e0: 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 t.. set method
15f0: 50 72 6f 63 28 76 65 72 74 62 61 72 73 2c 63 6f Proc(vertbars,co
1600: 6c 6f 75 72 73 29 20 20 20 20 20 20 53 65 74 43 lours) SetC
1610: 6f 6c 6f 75 72 73 0d 0a 20 20 20 73 65 74 20 6d olours.. set m
1620: 65 74 68 6f 64 50 72 6f 63 28 76 65 72 74 62 61 ethodProc(vertba
1630: 72 73 2c 63 6f 6c 6f 72 73 29 20 20 20 20 20 20 rs,colors)
1640: 20 53 65 74 43 6f 6c 6f 75 72 73 0d 0a 20 20 20 SetColours..
1650: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 76 set methodProc(v
1660: 65 72 74 62 61 72 73 2c 79 63 6f 6e 66 69 67 29 ertbars,yconfig)
1670: 20 20 20 20 20 20 59 43 6f 6e 66 69 67 0d 0a 20 YConfig..
1680: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
1690: 28 76 65 72 74 62 61 72 73 2c 6c 65 67 65 6e 64 (vertbars,legend
16a0: 63 6f 6e 66 69 67 29 20 4c 65 67 65 6e 64 43 6f config) LegendCo
16b0: 6e 66 69 67 75 72 65 0d 0a 20 20 20 73 65 74 20 nfigure.. set
16c0: 6d 65 74 68 6f 64 50 72 6f 63 28 76 65 72 74 62 methodProc(vertb
16d0: 61 72 73 2c 6c 65 67 65 6e 64 29 20 20 20 20 20 ars,legend)
16e0: 20 20 44 72 61 77 4c 65 67 65 6e 64 0d 0a 20 20 DrawLegend..
16f0: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
1700: 76 65 72 74 62 61 72 73 2c 62 61 6c 6c 6f 6f 6e vertbars,balloon
1710: 29 20 20 20 20 20 20 44 72 61 77 42 61 6c 6c 6f ) DrawBallo
1720: 6f 6e 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f on.. set metho
1730: 64 50 72 6f 63 28 76 65 72 74 62 61 72 73 2c 62 dProc(vertbars,b
1740: 61 6c 6c 6f 6f 6e 63 6f 6e 66 69 67 29 20 43 6f alloonconfig) Co
1750: 6e 66 69 67 42 61 6c 6c 6f 6f 6e 0d 0a 20 20 20 nfigBalloon..
1760: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 76 set methodProc(v
1770: 65 72 74 62 61 72 73 2c 70 6c 61 69 6e 74 65 78 ertbars,plaintex
1780: 74 29 20 20 20 20 44 72 61 77 50 6c 61 69 6e 54 t) DrawPlainT
1790: 65 78 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 ext.. set meth
17a0: 6f 64 50 72 6f 63 28 74 69 6d 65 63 68 61 72 74 odProc(timechart
17b0: 2c 74 69 74 6c 65 29 20 20 20 20 20 20 20 44 72 ,title) Dr
17c0: 61 77 54 69 74 6c 65 0d 0a 20 20 20 73 65 74 20 awTitle.. set
17d0: 6d 65 74 68 6f 64 50 72 6f 63 28 74 69 6d 65 63 methodProc(timec
17e0: 68 61 72 74 2c 70 65 72 69 6f 64 29 20 20 20 20 hart,period)
17f0: 20 20 44 72 61 77 54 69 6d 65 50 65 72 69 6f 64 DrawTimePeriod
1800: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
1810: 72 6f 63 28 74 69 6d 65 63 68 61 72 74 2c 6d 69 roc(timechart,mi
1820: 6c 65 73 74 6f 6e 65 29 20 20 20 44 72 61 77 54 lestone) DrawT
1830: 69 6d 65 4d 69 6c 65 73 74 6f 6e 65 0d 0a 20 20 imeMilestone..
1840: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
1850: 74 69 6d 65 63 68 61 72 74 2c 76 65 72 74 6c 69 timechart,vertli
1860: 6e 65 29 20 20 20 20 44 72 61 77 54 69 6d 65 56 ne) DrawTimeV
1870: 65 72 74 4c 69 6e 65 0d 0a 20 20 20 73 65 74 20 ertLine.. set
1880: 6d 65 74 68 6f 64 50 72 6f 63 28 74 69 6d 65 63 methodProc(timec
1890: 68 61 72 74 2c 73 61 76 65 70 6c 6f 74 29 20 20 hart,saveplot)
18a0: 20 20 53 61 76 65 50 6c 6f 74 0d 0a 20 20 20 73 SavePlot.. s
18b0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 69 et methodProc(ti
18c0: 6d 65 63 68 61 72 74 2c 62 61 63 6b 67 72 6f 75 mechart,backgrou
18d0: 6e 64 29 20 20 42 61 63 6b 67 72 6f 75 6e 64 43 nd) BackgroundC
18e0: 6f 6c 6f 75 72 0d 0a 20 20 20 73 65 74 20 6d 65 olour.. set me
18f0: 74 68 6f 64 50 72 6f 63 28 74 69 6d 65 63 68 61 thodProc(timecha
1900: 72 74 2c 62 61 6c 6c 6f 6f 6e 29 20 20 20 20 20 rt,balloon)
1910: 44 72 61 77 42 61 6c 6c 6f 6f 6e 0d 0a 20 20 20 DrawBalloon..
1920: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 set methodProc(t
1930: 69 6d 65 63 68 61 72 74 2c 62 61 6c 6c 6f 6f 6e imechart,balloon
1940: 63 6f 6e 66 69 67 29 20 43 6f 6e 66 69 67 42 61 config) ConfigBa
1950: 6c 6c 6f 6f 6e 0d 0a 20 20 20 73 65 74 20 6d 65 lloon.. set me
1960: 74 68 6f 64 50 72 6f 63 28 74 69 6d 65 63 68 61 thodProc(timecha
1970: 72 74 2c 70 6c 61 69 6e 74 65 78 74 29 20 20 20 rt,plaintext)
1980: 44 72 61 77 50 6c 61 69 6e 54 65 78 74 0d 0a 20 DrawPlainText..
1990: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
19a0: 28 67 61 6e 74 74 63 68 61 72 74 2c 74 69 74 6c (ganttchart,titl
19b0: 65 29 20 20 20 20 20 20 44 72 61 77 54 69 74 6c e) DrawTitl
19c0: 65 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 e.. set method
19d0: 50 72 6f 63 28 67 61 6e 74 74 63 68 61 72 74 2c Proc(ganttchart,
19e0: 70 65 72 69 6f 64 29 20 20 20 20 20 44 72 61 77 period) Draw
19f0: 47 61 6e 74 74 50 65 72 69 6f 64 0d 0a 20 20 20 GanttPeriod..
1a00: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 67 set methodProc(g
1a10: 61 6e 74 74 63 68 61 72 74 2c 74 61 73 6b 29 20 anttchart,task)
1a20: 20 20 20 20 20 20 44 72 61 77 47 61 6e 74 74 50 DrawGanttP
1a30: 65 72 69 6f 64 0d 0a 20 20 20 73 65 74 20 6d 65 eriod.. set me
1a40: 74 68 6f 64 50 72 6f 63 28 67 61 6e 74 74 63 68 thodProc(ganttch
1a50: 61 72 74 2c 6d 69 6c 65 73 74 6f 6e 65 29 20 20 art,milestone)
1a60: 44 72 61 77 47 61 6e 74 74 4d 69 6c 65 73 74 6f DrawGanttMilesto
1a70: 6e 65 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f ne.. set metho
1a80: 64 50 72 6f 63 28 67 61 6e 74 74 63 68 61 72 74 dProc(ganttchart
1a90: 2c 76 65 72 74 6c 69 6e 65 29 20 20 20 44 72 61 ,vertline) Dra
1aa0: 77 47 61 6e 74 74 56 65 72 74 4c 69 6e 65 0d 0a wGanttVertLine..
1ab0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
1ac0: 63 28 67 61 6e 74 74 63 68 61 72 74 2c 73 61 76 c(ganttchart,sav
1ad0: 65 70 6c 6f 74 29 20 20 20 53 61 76 65 50 6c 6f eplot) SavePlo
1ae0: 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 t.. set method
1af0: 50 72 6f 63 28 67 61 6e 74 74 63 68 61 72 74 2c Proc(ganttchart,
1b00: 63 6f 6c 6f 72 29 20 20 20 20 20 20 47 61 6e 74 color) Gant
1b10: 74 43 6f 6c 6f 72 0d 0a 20 20 20 73 65 74 20 6d tColor.. set m
1b20: 65 74 68 6f 64 50 72 6f 63 28 67 61 6e 74 74 63 ethodProc(ganttc
1b30: 68 61 72 74 2c 63 6f 6c 6f 75 72 29 20 20 20 20 hart,colour)
1b40: 20 47 61 6e 74 74 43 6f 6c 6f 72 0d 0a 20 20 20 GanttColor..
1b50: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 67 set methodProc(g
1b60: 61 6e 74 74 63 68 61 72 74 2c 66 6f 6e 74 29 20 anttchart,font)
1b70: 20 20 20 20 20 20 47 61 6e 74 74 46 6f 6e 74 0d GanttFont.
1b80: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
1b90: 6f 63 28 67 61 6e 74 74 63 68 61 72 74 2c 63 6f oc(ganttchart,co
1ba0: 6e 6e 65 63 74 29 20 20 20 20 44 72 61 77 47 61 nnect) DrawGa
1bb0: 6e 74 74 43 6f 6e 6e 65 63 74 0d 0a 20 20 20 73 nttConnect.. s
1bc0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 67 61 et methodProc(ga
1bd0: 6e 74 74 63 68 61 72 74 2c 73 75 6d 6d 61 72 79 nttchart,summary
1be0: 29 20 20 20 20 44 72 61 77 47 61 6e 74 74 53 75 ) DrawGanttSu
1bf0: 6d 6d 61 72 79 0d 0a 20 20 20 73 65 74 20 6d 65 mmary.. set me
1c00: 74 68 6f 64 50 72 6f 63 28 67 61 6e 74 74 63 68 thodProc(ganttch
1c10: 61 72 74 2c 62 61 63 6b 67 72 6f 75 6e 64 29 20 art,background)
1c20: 42 61 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f 75 72 BackgroundColour
1c30: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
1c40: 72 6f 63 28 67 61 6e 74 74 63 68 61 72 74 2c 62 roc(ganttchart,b
1c50: 61 6c 6c 6f 6f 6e 29 20 20 20 20 20 44 72 61 77 alloon) Draw
1c60: 42 61 6c 6c 6f 6f 6e 0d 0a 20 20 20 73 65 74 20 Balloon.. set
1c70: 6d 65 74 68 6f 64 50 72 6f 63 28 67 61 6e 74 74 methodProc(gantt
1c80: 63 68 61 72 74 2c 62 61 6c 6c 6f 6f 6e 63 6f 6e chart,ballooncon
1c90: 66 69 67 29 20 43 6f 6e 66 69 67 42 61 6c 6c 6f fig) ConfigBallo
1ca0: 6f 6e 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f on.. set metho
1cb0: 64 50 72 6f 63 28 67 61 6e 74 74 63 68 61 72 74 dProc(ganttchart
1cc0: 2c 70 6c 61 69 6e 74 65 78 74 29 20 20 44 72 61 ,plaintext) Dra
1cd0: 77 50 6c 61 69 6e 54 65 78 74 0d 0a 20 20 20 73 wPlainText.. s
1ce0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 73 74 et methodProc(st
1cf0: 72 69 70 63 68 61 72 74 2c 74 69 74 6c 65 29 20 ripchart,title)
1d00: 20 20 20 20 20 44 72 61 77 54 69 74 6c 65 0d 0a DrawTitle..
1d10: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
1d20: 63 28 73 74 72 69 70 63 68 61 72 74 2c 78 74 65 c(stripchart,xte
1d30: 78 74 29 20 20 20 20 20 20 44 72 61 77 58 74 65 xt) DrawXte
1d40: 78 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f xt.. set metho
1d50: 64 50 72 6f 63 28 73 74 72 69 70 63 68 61 72 74 dProc(stripchart
1d60: 2c 79 74 65 78 74 29 20 20 20 20 20 20 44 72 61 ,ytext) Dra
1d70: 77 59 74 65 78 74 0d 0a 20 20 20 73 65 74 20 6d wYtext.. set m
1d80: 65 74 68 6f 64 50 72 6f 63 28 73 74 72 69 70 63 ethodProc(stripc
1d90: 68 61 72 74 2c 70 6c 6f 74 29 20 20 20 20 20 20 hart,plot)
1da0: 20 44 72 61 77 53 74 72 69 70 44 61 74 61 0d 0a DrawStripData..
1db0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
1dc0: 63 28 73 74 72 69 70 63 68 61 72 74 2c 73 61 76 c(stripchart,sav
1dd0: 65 70 6c 6f 74 29 20 20 20 53 61 76 65 50 6c 6f eplot) SavePlo
1de0: 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 t.. set method
1df0: 50 72 6f 63 28 73 74 72 69 70 63 68 61 72 74 2c Proc(stripchart,
1e00: 64 61 74 61 63 6f 6e 66 69 67 29 20 44 61 74 61 dataconfig) Data
1e10: 43 6f 6e 66 69 67 0d 0a 20 20 20 73 65 74 20 6d Config.. set m
1e20: 65 74 68 6f 64 50 72 6f 63 28 73 74 72 69 70 63 ethodProc(stripc
1e30: 68 61 72 74 2c 78 63 6f 6e 66 69 67 29 20 20 20 hart,xconfig)
1e40: 20 58 43 6f 6e 66 69 67 0d 0a 20 20 20 73 65 74 XConfig.. set
1e50: 20 6d 65 74 68 6f 64 50 72 6f 63 28 73 74 72 69 methodProc(stri
1e60: 70 63 68 61 72 74 2c 79 63 6f 6e 66 69 67 29 20 pchart,yconfig)
1e70: 20 20 20 59 43 6f 6e 66 69 67 0d 0a 20 20 20 73 YConfig.. s
1e80: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 73 74 et methodProc(st
1e90: 72 69 70 63 68 61 72 74 2c 79 74 69 63 6b 6c 69 ripchart,ytickli
1ea0: 6e 65 73 29 20 44 72 61 77 59 54 69 63 6b 6c 69 nes) DrawYTickli
1eb0: 6e 65 73 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 nes.. set meth
1ec0: 6f 64 50 72 6f 63 28 73 74 72 69 70 63 68 61 72 odProc(stripchar
1ed0: 74 2c 62 61 63 6b 67 72 6f 75 6e 64 29 20 42 61 t,background) Ba
1ee0: 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f 75 72 0d 0a ckgroundColour..
1ef0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
1f00: 63 28 73 74 72 69 70 63 68 61 72 74 2c 6c 65 67 c(stripchart,leg
1f10: 65 6e 64 63 6f 6e 66 69 67 29 20 4c 65 67 65 6e endconfig) Legen
1f20: 64 43 6f 6e 66 69 67 75 72 65 0d 0a 20 20 20 73 dConfigure.. s
1f30: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 73 74 et methodProc(st
1f40: 72 69 70 63 68 61 72 74 2c 6c 65 67 65 6e 64 29 ripchart,legend)
1f50: 20 20 20 20 20 44 72 61 77 4c 65 67 65 6e 64 0d DrawLegend.
1f60: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
1f70: 6f 63 28 73 74 72 69 70 63 68 61 72 74 2c 62 61 oc(stripchart,ba
1f80: 6c 6c 6f 6f 6e 29 20 20 20 20 44 72 61 77 42 61 lloon) DrawBa
1f90: 6c 6c 6f 6f 6e 0d 0a 20 20 20 73 65 74 20 6d 65 lloon.. set me
1fa0: 74 68 6f 64 50 72 6f 63 28 73 74 72 69 70 63 68 thodProc(stripch
1fb0: 61 72 74 2c 62 61 6c 6c 6f 6f 6e 63 6f 6e 66 69 art,balloonconfi
1fc0: 67 29 20 43 6f 6e 66 69 67 42 61 6c 6c 6f 6f 6e g) ConfigBalloon
1fd0: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
1fe0: 72 6f 63 28 73 74 72 69 70 63 68 61 72 74 2c 70 roc(stripchart,p
1ff0: 6c 61 69 6e 74 65 78 74 29 20 20 44 72 61 77 50 laintext) DrawP
2000: 6c 61 69 6e 54 65 78 74 0d 0a 20 20 20 73 65 74 lainText.. set
2010: 20 6d 65 74 68 6f 64 50 72 6f 63 28 69 73 6f 6d methodProc(isom
2020: 65 74 72 69 63 2c 74 69 74 6c 65 29 20 20 20 20 etric,title)
2030: 20 20 20 44 72 61 77 54 69 74 6c 65 0d 0a 20 20 DrawTitle..
2040: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
2050: 69 73 6f 6d 65 74 72 69 63 2c 78 74 65 78 74 29 isometric,xtext)
2060: 20 20 20 20 20 20 20 44 72 61 77 58 74 65 78 74 DrawXtext
2070: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
2080: 72 6f 63 28 69 73 6f 6d 65 74 72 69 63 2c 79 74 roc(isometric,yt
2090: 65 78 74 29 20 20 20 20 20 20 20 44 72 61 77 59 ext) DrawY
20a0: 74 65 78 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 text.. set met
20b0: 68 6f 64 50 72 6f 63 28 69 73 6f 6d 65 74 72 69 hodProc(isometri
20c0: 63 2c 70 6c 6f 74 29 20 20 20 20 20 20 20 20 44 c,plot) D
20d0: 72 61 77 49 73 6f 6d 65 74 72 69 63 44 61 74 61 rawIsometricData
20e0: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
20f0: 72 6f 63 28 69 73 6f 6d 65 74 72 69 63 2c 73 61 roc(isometric,sa
2100: 76 65 70 6c 6f 74 29 20 20 20 20 53 61 76 65 50 veplot) SaveP
2110: 6c 6f 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 lot.. set meth
2120: 6f 64 50 72 6f 63 28 69 73 6f 6d 65 74 72 69 63 odProc(isometric
2130: 2c 62 61 63 6b 67 72 6f 75 6e 64 29 20 20 42 61 ,background) Ba
2140: 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f 75 72 0d 0a ckgroundColour..
2150: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
2160: 63 28 69 73 6f 6d 65 74 72 69 63 2c 62 61 6c 6c c(isometric,ball
2170: 6f 6f 6e 29 20 20 20 20 20 44 72 61 77 42 61 6c oon) DrawBal
2180: 6c 6f 6f 6e 0d 0a 20 20 20 73 65 74 20 6d 65 74 loon.. set met
2190: 68 6f 64 50 72 6f 63 28 69 73 6f 6d 65 74 72 69 hodProc(isometri
21a0: 63 2c 62 61 6c 6c 6f 6f 6e 63 6f 6e 66 69 67 29 c,balloonconfig)
21b0: 20 43 6f 6e 66 69 67 42 61 6c 6c 6f 6f 6e 0d 0a ConfigBalloon..
21c0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
21d0: 63 28 69 73 6f 6d 65 74 72 69 63 2c 70 6c 61 69 c(isometric,plai
21e0: 6e 74 65 78 74 29 20 20 20 44 72 61 77 50 6c 61 ntext) DrawPla
21f0: 69 6e 54 65 78 74 0d 0a 20 20 20 73 65 74 20 6d inText.. set m
2200: 65 74 68 6f 64 50 72 6f 63 28 33 64 70 6c 6f 74 ethodProc(3dplot
2210: 2c 74 69 74 6c 65 29 20 20 20 20 20 20 20 20 20 ,title)
2220: 20 44 72 61 77 54 69 74 6c 65 0d 0a 20 20 20 73 DrawTitle.. s
2230: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 et methodProc(3d
2240: 70 6c 6f 74 2c 70 6c 6f 74 66 75 6e 63 29 20 20 plot,plotfunc)
2250: 20 20 20 20 20 44 72 61 77 33 44 46 75 6e 63 74 Draw3DFunct
2260: 69 6f 6e 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 ion.. set meth
2270: 6f 64 50 72 6f 63 28 33 64 70 6c 6f 74 2c 70 6c odProc(3dplot,pl
2280: 6f 74 64 61 74 61 29 20 20 20 20 20 20 20 44 72 otdata) Dr
2290: 61 77 33 44 44 61 74 61 0d 0a 20 20 20 73 65 74 aw3DData.. set
22a0: 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 70 6c methodProc(3dpl
22b0: 6f 74 2c 70 6c 6f 74 6c 69 6e 65 29 20 20 20 20 ot,plotline)
22c0: 20 20 20 44 72 61 77 33 44 4c 69 6e 65 46 72 6f Draw3DLineFro
22d0: 6d 33 44 63 6f 6f 72 64 69 6e 61 74 65 73 0d 0a m3Dcoordinates..
22e0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
22f0: 63 28 33 64 70 6c 6f 74 2c 67 72 69 64 73 69 7a c(3dplot,gridsiz
2300: 65 29 20 20 20 20 20 20 20 47 72 69 64 53 69 7a e) GridSiz
2310: 65 33 44 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 e3D.. set meth
2320: 6f 64 50 72 6f 63 28 33 64 70 6c 6f 74 2c 73 61 odProc(3dplot,sa
2330: 76 65 70 6c 6f 74 29 20 20 20 20 20 20 20 53 61 veplot) Sa
2340: 76 65 50 6c 6f 74 0d 0a 20 20 20 73 65 74 20 6d vePlot.. set m
2350: 65 74 68 6f 64 50 72 6f 63 28 33 64 70 6c 6f 74 ethodProc(3dplot
2360: 2c 63 6f 6c 6f 75 72 29 20 20 20 20 20 20 20 20 ,colour)
2370: 20 53 65 74 43 6f 6c 6f 75 72 73 0d 0a 20 20 20 SetColours..
2380: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 set methodProc(3
2390: 64 70 6c 6f 74 2c 63 6f 6c 6f 72 29 20 20 20 20 dplot,color)
23a0: 20 20 20 20 20 20 53 65 74 43 6f 6c 6f 75 72 73 SetColours
23b0: 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 .. set methodP
23c0: 72 6f 63 28 33 64 70 6c 6f 74 2c 78 63 6f 6e 66 roc(3dplot,xconf
23d0: 69 67 29 20 20 20 20 20 20 20 20 58 43 6f 6e 66 ig) XConf
23e0: 69 67 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f ig.. set metho
23f0: 64 50 72 6f 63 28 33 64 70 6c 6f 74 2c 79 63 6f dProc(3dplot,yco
2400: 6e 66 69 67 29 20 20 20 20 20 20 20 20 59 43 6f nfig) YCo
2410: 6e 66 69 67 0d 0a 20 20 20 73 65 74 20 6d 65 74 nfig.. set met
2420: 68 6f 64 50 72 6f 63 28 33 64 70 6c 6f 74 2c 7a hodProc(3dplot,z
2430: 63 6f 6e 66 69 67 29 20 20 20 20 20 20 20 20 5a config) Z
2440: 43 6f 6e 66 69 67 0d 0a 20 20 20 73 65 74 20 6d Config.. set m
2450: 65 74 68 6f 64 50 72 6f 63 28 33 64 70 6c 6f 74 ethodProc(3dplot
2460: 2c 70 6c 6f 74 66 75 6e 63 6f 6e 74 29 20 20 20 ,plotfuncont)
2470: 20 44 72 61 77 33 44 46 75 6e 63 74 69 6f 6e 43 Draw3DFunctionC
2480: 6f 6e 74 6f 75 72 0d 0a 20 20 20 73 65 74 20 6d ontour.. set m
2490: 65 74 68 6f 64 50 72 6f 63 28 33 64 70 6c 6f 74 ethodProc(3dplot
24a0: 2c 62 61 63 6b 67 72 6f 75 6e 64 29 20 20 20 20 ,background)
24b0: 20 42 61 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f 75 BackgroundColou
24c0: 72 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 r.. set method
24d0: 50 72 6f 63 28 33 64 62 61 72 73 2c 74 69 74 6c Proc(3dbars,titl
24e0: 65 29 20 20 20 20 20 20 20 20 20 20 44 72 61 77 e) Draw
24f0: 54 69 74 6c 65 0d 0a 20 20 20 73 65 74 20 6d 65 Title.. set me
2500: 74 68 6f 64 50 72 6f 63 28 33 64 62 61 72 73 2c thodProc(3dbars,
2510: 70 6c 6f 74 29 20 20 20 20 20 20 20 20 20 20 20 plot)
2520: 44 72 61 77 33 44 42 61 72 0d 0a 20 20 20 73 65 Draw3DBar.. se
2530: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 62 t methodProc(3db
2540: 61 72 73 2c 79 63 6f 6e 66 69 67 29 20 20 20 20 ars,yconfig)
2550: 20 20 20 20 59 43 6f 6e 66 69 67 0d 0a 20 20 20 YConfig..
2560: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 set methodProc(3
2570: 64 62 61 72 73 2c 73 61 76 65 70 6c 6f 74 29 20 dbars,saveplot)
2580: 20 20 20 20 20 20 53 61 76 65 50 6c 6f 74 0d 0a SavePlot..
2590: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
25a0: 63 28 33 64 62 61 72 73 2c 63 6f 6e 66 69 67 29 c(3dbars,config)
25b0: 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 33 Config3
25c0: 44 42 61 72 73 0d 0a 20 20 20 73 65 74 20 6d 65 DBars.. set me
25d0: 74 68 6f 64 50 72 6f 63 28 33 64 62 61 72 73 2c thodProc(3dbars,
25e0: 62 61 6c 6c 6f 6f 6e 29 20 20 20 20 20 20 20 20 balloon)
25f0: 44 72 61 77 42 61 6c 6c 6f 6f 6e 0d 0a 20 20 20 DrawBalloon..
2600: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 set methodProc(3
2610: 64 62 61 72 73 2c 62 61 6c 6c 6f 6f 6e 63 6f 6e dbars,ballooncon
2620: 66 69 67 29 20 20 43 6f 6e 66 69 67 42 61 6c 6c fig) ConfigBall
2630: 6f 6f 6e 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 oon.. set meth
2640: 6f 64 50 72 6f 63 28 33 64 62 61 72 73 2c 70 6c odProc(3dbars,pl
2650: 61 69 6e 74 65 78 74 29 20 20 20 20 20 20 44 72 aintext) Dr
2660: 61 77 50 6c 61 69 6e 54 65 78 74 0d 0a 20 20 20 awPlainText..
2670: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 72 set methodProc(r
2680: 61 64 69 61 6c 63 68 61 72 74 2c 74 69 74 6c 65 adialchart,title
2690: 29 20 20 20 20 20 44 72 61 77 54 69 74 6c 65 0d ) DrawTitle.
26a0: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
26b0: 6f 63 28 72 61 64 69 61 6c 63 68 61 72 74 2c 70 oc(radialchart,p
26c0: 6c 6f 74 29 20 20 20 20 20 20 44 72 61 77 52 61 lot) DrawRa
26d0: 64 69 61 6c 0d 0a 20 20 20 73 65 74 20 6d 65 74 dial.. set met
26e0: 68 6f 64 50 72 6f 63 28 72 61 64 69 61 6c 63 68 hodProc(radialch
26f0: 61 72 74 2c 73 61 76 65 70 6c 6f 74 29 20 20 53 art,saveplot) S
2700: 61 76 65 50 6c 6f 74 0d 0a 20 20 20 73 65 74 20 avePlot.. set
2710: 6d 65 74 68 6f 64 50 72 6f 63 28 72 61 64 69 61 methodProc(radia
2720: 6c 63 68 61 72 74 2c 62 61 6c 6c 6f 6f 6e 29 20 lchart,balloon)
2730: 20 20 44 72 61 77 42 61 6c 6c 6f 6f 6e 0d 0a 20 DrawBalloon..
2740: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
2750: 28 72 61 64 69 61 6c 63 68 61 72 74 2c 70 6c 61 (radialchart,pla
2760: 69 6e 74 65 78 74 29 20 44 72 61 77 50 6c 61 69 intext) DrawPlai
2770: 6e 54 65 78 74 0d 0a 20 20 20 73 65 74 20 6d 65 nText.. set me
2780: 74 68 6f 64 50 72 6f 63 28 74 78 70 6c 6f 74 2c thodProc(txplot,
2790: 74 69 74 6c 65 29 20 20 20 20 20 20 20 20 20 20 title)
27a0: 44 72 61 77 54 69 74 6c 65 0d 0a 20 20 20 73 65 DrawTitle.. se
27b0: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 78 70 t methodProc(txp
27c0: 6c 6f 74 2c 78 74 65 78 74 29 20 20 20 20 20 20 lot,xtext)
27d0: 20 20 20 20 44 72 61 77 58 74 65 78 74 0d 0a 20 DrawXtext..
27e0: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
27f0: 28 74 78 70 6c 6f 74 2c 79 74 65 78 74 29 20 20 (txplot,ytext)
2800: 20 20 20 20 20 20 20 20 44 72 61 77 59 74 65 78 DrawYtex
2810: 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 t.. set method
2820: 50 72 6f 63 28 74 78 70 6c 6f 74 2c 70 6c 6f 74 Proc(txplot,plot
2830: 29 20 20 20 20 20 20 20 20 20 20 20 44 72 61 77 ) Draw
2840: 54 69 6d 65 44 61 74 61 0d 0a 20 20 20 73 65 74 TimeData.. set
2850: 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 78 70 6c methodProc(txpl
2860: 6f 74 2c 69 6e 74 65 72 76 61 6c 29 20 20 20 20 ot,interval)
2870: 20 20 20 44 72 61 77 49 6e 74 65 72 76 61 6c 0d DrawInterval.
2880: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
2890: 6f 63 28 74 78 70 6c 6f 74 2c 73 61 76 65 70 6c oc(txplot,savepl
28a0: 6f 74 29 20 20 20 20 20 20 20 53 61 76 65 50 6c ot) SavePl
28b0: 6f 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f ot.. set metho
28c0: 64 50 72 6f 63 28 74 78 70 6c 6f 74 2c 64 61 74 dProc(txplot,dat
28d0: 61 63 6f 6e 66 69 67 29 20 20 20 20 20 44 61 74 aconfig) Dat
28e0: 61 43 6f 6e 66 69 67 0d 0a 20 20 20 73 65 74 20 aConfig.. set
28f0: 6d 65 74 68 6f 64 50 72 6f 63 28 74 78 70 6c 6f methodProc(txplo
2900: 74 2c 78 63 6f 6e 66 69 67 29 20 20 20 20 20 20 t,xconfig)
2910: 20 20 58 43 6f 6e 66 69 67 0d 0a 20 20 20 73 65 XConfig.. se
2920: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 78 70 t methodProc(txp
2930: 6c 6f 74 2c 79 63 6f 6e 66 69 67 29 20 20 20 20 lot,yconfig)
2940: 20 20 20 20 59 43 6f 6e 66 69 67 0d 0a 20 20 20 YConfig..
2950: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 set methodProc(t
2960: 78 70 6c 6f 74 2c 78 74 69 63 6b 6c 69 6e 65 73 xplot,xticklines
2970: 29 20 20 20 20 20 44 72 61 77 58 54 69 63 6b 6c ) DrawXTickl
2980: 69 6e 65 73 0d 0a 20 20 20 73 65 74 20 6d 65 74 ines.. set met
2990: 68 6f 64 50 72 6f 63 28 74 78 70 6c 6f 74 2c 79 hodProc(txplot,y
29a0: 74 69 63 6b 6c 69 6e 65 73 29 20 20 20 20 20 44 ticklines) D
29b0: 72 61 77 59 54 69 63 6b 6c 69 6e 65 73 0d 0a 20 rawYTicklines..
29c0: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
29d0: 28 74 78 70 6c 6f 74 2c 62 61 63 6b 67 72 6f 75 (txplot,backgrou
29e0: 6e 64 29 20 20 20 20 20 42 61 63 6b 67 72 6f 75 nd) Backgrou
29f0: 6e 64 43 6f 6c 6f 75 72 0d 0a 20 20 20 73 65 74 ndColour.. set
2a00: 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 78 70 6c methodProc(txpl
2a10: 6f 74 2c 6c 65 67 65 6e 64 63 6f 6e 66 69 67 29 ot,legendconfig)
2a20: 20 20 20 4c 65 67 65 6e 64 43 6f 6e 66 69 67 75 LegendConfigu
2a30: 72 65 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f re.. set metho
2a40: 64 50 72 6f 63 28 74 78 70 6c 6f 74 2c 6c 65 67 dProc(txplot,leg
2a50: 65 6e 64 29 20 20 20 20 20 20 20 20 20 44 72 61 end) Dra
2a60: 77 4c 65 67 65 6e 64 0d 0a 20 20 20 73 65 74 20 wLegend.. set
2a70: 6d 65 74 68 6f 64 50 72 6f 63 28 74 78 70 6c 6f methodProc(txplo
2a80: 74 2c 62 61 6c 6c 6f 6f 6e 29 20 20 20 20 20 20 t,balloon)
2a90: 20 20 44 72 61 77 42 61 6c 6c 6f 6f 6e 0d 0a 20 DrawBalloon..
2aa0: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
2ab0: 28 74 78 70 6c 6f 74 2c 62 61 6c 6c 6f 6f 6e 63 (txplot,balloonc
2ac0: 6f 6e 66 69 67 29 20 20 43 6f 6e 66 69 67 42 61 onfig) ConfigBa
2ad0: 6c 6c 6f 6f 6e 0d 0a 20 20 20 73 65 74 20 6d 65 lloon.. set me
2ae0: 74 68 6f 64 50 72 6f 63 28 74 78 70 6c 6f 74 2c thodProc(txplot,
2af0: 70 6c 61 69 6e 74 65 78 74 29 20 20 20 20 20 20 plaintext)
2b00: 44 72 61 77 50 6c 61 69 6e 54 65 78 74 0d 0a 20 DrawPlainText..
2b10: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
2b20: 28 33 64 72 69 62 62 6f 6e 2c 74 69 74 6c 65 29 (3dribbon,title)
2b30: 20 20 20 20 20 20 20 20 44 72 61 77 54 69 74 6c DrawTitl
2b40: 65 0d 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 e.. set method
2b50: 50 72 6f 63 28 33 64 72 69 62 62 6f 6e 2c 73 61 Proc(3dribbon,sa
2b60: 76 65 70 6c 6f 74 29 20 20 20 20 20 53 61 76 65 veplot) Save
2b70: 50 6c 6f 74 0d 0a 20 20 20 73 65 74 20 6d 65 74 Plot.. set met
2b80: 68 6f 64 50 72 6f 63 28 33 64 72 69 62 62 6f 6e hodProc(3dribbon
2b90: 2c 6c 69 6e 65 29 20 20 20 20 20 20 20 20 20 44 ,line) D
2ba0: 72 61 77 33 44 4c 69 6e 65 0d 0a 20 20 20 73 65 raw3DLine.. se
2bb0: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 72 t methodProc(3dr
2bc0: 69 62 62 6f 6e 2c 61 72 65 61 29 20 20 20 20 20 ibbon,area)
2bd0: 20 20 20 20 44 72 61 77 33 44 41 72 65 61 0d 0a Draw3DArea..
2be0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
2bf0: 63 28 33 64 72 69 62 62 6f 6e 2c 62 61 63 6b 67 c(3dribbon,backg
2c00: 72 6f 75 6e 64 29 20 20 20 42 61 63 6b 67 72 6f round) Backgro
2c10: 75 6e 64 43 6f 6c 6f 75 72 0d 0a 0d 0a 20 20 20 undColour....
2c20: 23 0d 0a 20 20 20 23 20 41 75 78 69 6c 69 61 72 #.. # Auxiliar
2c30: 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 y parameters..
2c40: 20 23 0d 0a 20 20 20 76 61 72 69 61 62 6c 65 20 #.. variable
2c50: 74 6f 72 61 64 0d 0a 20 20 20 73 65 74 20 74 6f torad.. set to
2c60: 72 61 64 20 5b 65 78 70 72 20 7b 33 2e 31 34 31 rad [expr {3.141
2c70: 35 39 32 36 2f 31 38 30 2e 30 7d 5d 0d 0a 0d 0a 5926/180.0}]....
2c80: 20 20 20 76 61 72 69 61 62 6c 65 20 6f 70 74 69 variable opti
2c90: 6f 6e 73 0d 0a 20 20 20 76 61 72 69 61 62 6c 65 ons.. variable
2ca0: 20 6f 70 74 69 6f 6e 5f 6b 65 79 73 0d 0a 20 20 option_keys..
2cb0: 20 76 61 72 69 61 62 6c 65 20 6f 70 74 69 6f 6e variable option
2cc0: 5f 76 61 6c 75 65 73 0d 0a 20 20 20 73 65 74 20 _values.. set
2cd0: 6f 70 74 69 6f 6e 73 20 20 20 20 20 20 20 7b 2d options {-
2ce0: 63 6f 6c 6f 75 72 20 2d 63 6f 6c 6f 72 20 20 2d colour -color -
2cf0: 73 79 6d 62 6f 6c 20 2d 74 79 70 65 20 2d 66 69 symbol -type -fi
2d00: 6c 6c 65 64 20 2d 66 69 6c 6c 63 6f 6c 6f 75 72 lled -fillcolour
2d10: 7d 0d 0a 20 20 20 73 65 74 20 6f 70 74 69 6f 6e }.. set option
2d20: 5f 6b 65 79 73 20 20 20 7b 2d 63 6f 6c 6f 75 72 _keys {-colour
2d30: 20 2d 63 6f 6c 6f 75 72 20 2d 73 79 6d 62 6f 6c -colour -symbol
2d40: 20 2d 74 79 70 65 20 2d 66 69 6c 6c 65 64 20 2d -type -filled -
2d50: 66 69 6c 6c 63 6f 6c 6f 75 72 7d 0d 0a 20 20 20 fillcolour}..
2d60: 73 65 74 20 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 set option_value
2d70: 73 20 7b 2d 63 6f 6c 6f 75 72 20 7b 2e 2e 2e 7d s {-colour {...}
2d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2d90: 20 20 20 20 20 20 20 20 2d 73 79 6d 62 6f 6c 20 -symbol
2da0: 7b 70 6c 75 73 20 63 72 6f 73 73 20 63 69 72 63 {plus cross circ
2db0: 6c 65 20 75 70 20 64 6f 77 6e 20 64 6f 74 20 75 le up down dot u
2dc0: 70 66 69 6c 6c 65 64 20 64 6f 77 6e 66 69 6c 6c pfilled downfill
2dd0: 65 64 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ed}..
2de0: 20 20 20 20 20 20 20 20 20 20 20 2d 74 79 70 65 -type
2df0: 20 7b 6c 69 6e 65 20 73 79 6d 62 6f 6c 20 62 6f {line symbol bo
2e00: 74 68 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 th}..
2e10: 20 20 20 20 20 20 20 20 20 20 20 2d 66 69 6c 6c -fill
2e20: 65 64 20 7b 6e 6f 20 75 70 20 64 6f 77 6e 7d 0d ed {no up down}.
2e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2e40: 20 20 20 20 20 20 20 2d 66 69 6c 6c 63 6f 6c 6f -fillcolo
2e50: 75 72 20 7b 2e 2e 2e 7d 0d 0a 20 20 20 20 20 20 ur {...}..
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
2e70: 0d 0a 0d 0a 20 20 20 76 61 72 69 61 62 6c 65 20 .... variable
2e80: 61 78 69 73 5f 6f 70 74 69 6f 6e 73 0d 0a 20 20 axis_options..
2e90: 20 76 61 72 69 61 62 6c 65 20 61 78 69 73 5f 6f variable axis_o
2ea0: 70 74 69 6f 6e 5f 63 6c 65 61 72 0d 0a 20 20 20 ption_clear..
2eb0: 76 61 72 69 61 62 6c 65 20 61 78 69 73 5f 6f 70 variable axis_op
2ec0: 74 69 6f 6e 5f 76 61 6c 75 65 73 0d 0a 20 20 20 tion_values..
2ed0: 73 65 74 20 61 78 69 73 5f 6f 70 74 69 6f 6e 73 set axis_options
2ee0: 20 20 20 20 20 20 20 7b 2d 66 6f 72 6d 61 74 20 {-format
2ef0: 2d 74 69 63 6b 6c 65 6e 67 74 68 20 2d 74 69 63 -ticklength -tic
2f00: 6b 6c 69 6e 65 73 20 2d 73 63 61 6c 65 7d 0d 0a klines -scale}..
2f10: 20 20 20 73 65 74 20 61 78 69 73 5f 6f 70 74 69 set axis_opti
2f20: 6f 6e 5f 63 6c 65 61 72 20 20 7b 20 30 20 20 20 on_clear { 0
2f30: 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 0
2f40: 30 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 0 1
2f50: 7d 0d 0a 20 20 20 73 65 74 20 61 78 69 73 5f 6f }.. set axis_o
2f60: 70 74 69 6f 6e 5f 76 61 6c 75 65 73 20 7b 2d 66 ption_values {-f
2f70: 6f 72 6d 61 74 20 20 20 20 20 7b 2e 2e 2e 7d 0d ormat {...}.
2f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2f90: 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 69 63 -tic
2fa0: 6b 6c 65 6e 67 74 68 20 7b 2e 2e 2e 7d 0d 0a 20 klength {...}..
2fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fc0: 20 20 20 20 20 20 20 20 20 20 2d 74 69 63 6b 6c -tickl
2fd0: 69 6e 65 73 20 20 7b 30 20 31 7d 0d 0a 20 20 20 ines {0 1}..
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ff0: 20 20 20 20 20 20 20 20 2d 73 63 61 6c 65 20 20 -scale
3000: 20 20 20 20 7b 2e 2e 2e 7d 0d 0a 20 20 20 20 20 {...}..
3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3020: 20 20 20 20 20 7d 0d 0a 20 20 20 76 61 72 69 61 }.. varia
3030: 62 6c 65 20 63 6f 6e 74 6f 75 72 5f 6f 70 74 69 ble contour_opti
3040: 6f 6e 73 0d 0a 7d 0d 0a 0d 0a 23 20 73 65 74 5a ons..}....# setZ
3050: 6f 6f 6d 50 61 6e 20 2d 2d 0d 0a 23 20 20 20 20 oomPan --..#
3060: 53 65 74 20 75 70 20 74 68 65 20 62 69 6e 64 69 Set up the bindi
3070: 6e 67 73 20 66 6f 72 20 7a 6f 6f 6d 69 6e 67 20 ngs for zooming
3080: 61 6e 64 20 70 61 6e 6e 69 6e 67 0d 0a 23 20 41 and panning..# A
3090: 72 67 75 6d 65 6e 74 73 3a 0d 0a 23 20 20 20 20 rguments:..#
30a0: 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 w Name
30b0: 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 20 77 of the canvas w
30c0: 69 6e 64 6f 77 0d 0a 23 20 52 65 73 75 6c 74 3a indow..# Result:
30d0: 0d 0a 23 20 20 20 20 4e 6f 6e 65 0d 0a 23 20 53 ..# None..# S
30e0: 69 64 65 20 65 66 66 65 63 74 3a 0d 0a 23 20 20 ide effect:..#
30f0: 20 20 42 69 6e 64 69 6e 67 73 20 73 65 74 20 75 Bindings set u
3100: 70 0d 0a 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f p..#..proc ::Plo
3110: 74 63 68 61 72 74 3a 3a 73 65 74 5a 6f 6f 6d 50 tchart::setZoomP
3120: 61 6e 20 7b 20 77 20 7d 20 7b 0d 0a 20 20 20 73 an { w } {.. s
3130: 65 74 20 73 71 72 74 32 20 20 5b 65 78 70 72 20 et sqrt2 [expr
3140: 7b 73 71 72 74 28 32 2e 30 29 7d 5d 0d 0a 20 20 {sqrt(2.0)}]..
3150: 20 73 65 74 20 73 71 72 74 30 35 20 5b 65 78 70 set sqrt05 [exp
3160: 72 20 7b 73 71 72 74 28 30 2e 35 29 7d 5d 0d 0a r {sqrt(0.5)}]..
3170: 0d 0a 20 20 20 62 69 6e 64 20 24 77 20 3c 43 6f .. bind $w <Co
3180: 6e 74 72 6f 6c 2d 42 75 74 74 6f 6e 2d 31 3e 20 ntrol-Button-1>
3190: 5b 6c 69 73 74 20 3a 3a 50 6c 6f 74 63 68 61 72 [list ::Plotchar
31a0: 74 3a 3a 53 63 61 6c 65 49 74 65 6d 73 20 24 77 t::ScaleItems $w
31b0: 20 25 78 20 25 79 20 24 73 71 72 74 32 5d 0d 0a %x %y $sqrt2]..
31c0: 20 20 20 62 69 6e 64 20 24 77 20 3c 43 6f 6e 74 bind $w <Cont
31d0: 72 6f 6c 2d 50 72 69 6f 72 3e 20 20 20 20 5b 6c rol-Prior> [l
31e0: 69 73 74 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a ist ::Plotchart:
31f0: 3a 53 63 61 6c 65 49 74 65 6d 73 20 24 77 20 25 :ScaleItems $w %
3200: 78 20 25 79 20 24 73 71 72 74 32 5d 0d 0a 20 20 x %y $sqrt2]..
3210: 20 62 69 6e 64 20 24 77 20 3c 43 6f 6e 74 72 6f bind $w <Contro
3220: 6c 2d 42 75 74 74 6f 6e 2d 32 3e 20 5b 6c 69 73 l-Button-2> [lis
3230: 74 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 53 t ::Plotchart::S
3240: 63 61 6c 65 49 74 65 6d 73 20 24 77 20 25 78 20 caleItems $w %x
3250: 25 79 20 24 73 71 72 74 30 35 5d 0d 0a 20 20 20 %y $sqrt05]..
3260: 62 69 6e 64 20 24 77 20 3c 43 6f 6e 74 72 6f 6c bind $w <Control
3270: 2d 42 75 74 74 6f 6e 2d 33 3e 20 5b 6c 69 73 74 -Button-3> [list
3280: 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 53 63 ::Plotchart::Sc
3290: 61 6c 65 49 74 65 6d 73 20 24 77 20 25 78 20 25 aleItems $w %x %
32a0: 79 20 24 73 71 72 74 30 35 5d 0d 0a 20 20 20 62 y $sqrt05].. b
32b0: 69 6e 64 20 24 77 20 3c 43 6f 6e 74 72 6f 6c 2d ind $w <Control-
32c0: 4e 65 78 74 3e 20 20 20 20 20 5b 6c 69 73 74 20 Next> [list
32d0: 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 53 63 61 ::Plotchart::Sca
32e0: 6c 65 49 74 65 6d 73 20 24 77 20 25 78 20 25 79 leItems $w %x %y
32f0: 20 24 73 71 72 74 30 35 5d 0d 0a 20 20 20 62 69 $sqrt05].. bi
3300: 6e 64 20 24 77 20 3c 43 6f 6e 74 72 6f 6c 2d 55 nd $w <Control-U
3310: 70 3e 20 20 20 20 20 20 20 5b 6c 69 73 74 20 3a p> [list :
3320: 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 4d 6f 76 65 :Plotchart::Move
3330: 49 74 65 6d 73 20 20 24 77 20 20 20 30 20 2d 34 Items $w 0 -4
3340: 30 5d 0d 0a 20 20 20 62 69 6e 64 20 24 77 20 3c 0].. bind $w <
3350: 43 6f 6e 74 72 6f 6c 2d 44 6f 77 6e 3e 20 20 20 Control-Down>
3360: 20 20 5b 6c 69 73 74 20 3a 3a 50 6c 6f 74 63 68 [list ::Plotch
3370: 61 72 74 3a 3a 4d 6f 76 65 49 74 65 6d 73 20 20 art::MoveItems
3380: 24 77 20 20 20 30 20 20 34 30 5d 0d 0a 20 20 20 $w 0 40]..
3390: 62 69 6e 64 20 24 77 20 3c 43 6f 6e 74 72 6f 6c bind $w <Control
33a0: 2d 4c 65 66 74 3e 20 20 20 20 20 5b 6c 69 73 74 -Left> [list
33b0: 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 4d 6f ::Plotchart::Mo
33c0: 76 65 49 74 65 6d 73 20 20 24 77 20 2d 34 30 20 veItems $w -40
33d0: 20 20 30 5d 0d 0a 20 20 20 62 69 6e 64 20 24 77 0].. bind $w
33e0: 20 3c 43 6f 6e 74 72 6f 6c 2d 52 69 67 68 74 3e <Control-Right>
33f0: 20 20 20 20 5b 6c 69 73 74 20 3a 3a 50 6c 6f 74 [list ::Plot
3400: 63 68 61 72 74 3a 3a 4d 6f 76 65 49 74 65 6d 73 chart::MoveItems
3410: 20 20 24 77 20 20 34 30 20 20 20 30 5d 0d 0a 20 $w 40 0]..
3420: 20 20 66 6f 63 75 73 20 24 77 0d 0a 7d 0d 0a 0d focus $w..}...
3430: 0a 23 20 76 69 65 77 50 6f 72 74 20 2d 2d 0d 0a .# viewPort --..
3440: 23 20 20 20 20 53 65 74 20 74 68 65 20 70 69 78 # Set the pix
3450: 65 6c 20 65 78 74 72 65 6d 65 73 20 66 6f 72 20 el extremes for
3460: 74 68 65 20 67 72 61 70 68 0d 0a 23 20 41 72 67 the graph..# Arg
3470: 75 6d 65 6e 74 73 3a 0d 0a 23 20 20 20 20 77 20 uments:..# w
3480: 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 20 6f Name o
3490: 66 20 74 68 65 20 63 61 6e 76 61 73 20 77 69 6e f the canvas win
34a0: 64 6f 77 0d 0a 23 20 20 20 20 70 78 6d 69 6e 20 dow..# pxmin
34b0: 20 20 20 20 20 20 4d 69 6e 69 6d 75 6d 20 58 2d Minimum X-
34c0: 63 6f 6f 72 64 69 6e 61 74 65 0d 0a 23 20 20 20 coordinate..#
34d0: 20 70 79 6d 69 6e 20 20 20 20 20 20 20 4d 69 6e pymin Min
34e0: 69 6d 75 6d 20 59 2d 63 6f 6f 72 64 69 6e 61 74 imum Y-coordinat
34f0: 65 0d 0a 23 20 20 20 20 70 78 6d 61 78 20 20 20 e..# pxmax
3500: 20 20 20 20 4d 61 78 69 6d 75 6d 20 58 2d 63 6f Maximum X-co
3510: 6f 72 64 69 6e 61 74 65 0d 0a 23 20 20 20 20 70 ordinate..# p
3520: 79 6d 61 78 20 20 20 20 20 20 20 4d 61 78 69 6d ymax Maxim
3530: 75 6d 20 59 2d 63 6f 6f 72 64 69 6e 61 74 65 0d um Y-coordinate.
3540: 0a 23 20 52 65 73 75 6c 74 3a 0d 0a 23 20 20 20 .# Result:..#
3550: 20 4e 6f 6e 65 0d 0a 23 20 53 69 64 65 20 65 66 None..# Side ef
3560: 66 65 63 74 3a 0d 0a 23 20 20 20 20 41 72 72 61 fect:..# Arra
3570: 79 20 73 63 61 6c 69 6e 67 20 66 69 6c 6c 65 64 y scaling filled
3580: 0d 0a 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 ..#..proc ::Plot
3590: 63 68 61 72 74 3a 3a 76 69 65 77 50 6f 72 74 20 chart::viewPort
35a0: 7b 20 77 20 70 78 6d 69 6e 20 70 79 6d 69 6e 20 { w pxmin pymin
35b0: 70 78 6d 61 78 20 70 79 6d 61 78 20 7d 20 7b 0d pxmax pymax } {.
35c0: 0a 20 20 20 76 61 72 69 61 62 6c 65 20 73 63 61 . variable sca
35d0: 6c 69 6e 67 0d 0a 0d 0a 20 20 20 69 66 20 7b 20 ling.... if {
35e0: 24 70 78 6d 69 6e 20 3e 3d 20 24 70 78 6d 61 78 $pxmin >= $pxmax
35f0: 20 7c 7c 20 24 70 79 6d 69 6e 20 3e 3d 20 24 70 || $pymin >= $p
3600: 79 6d 61 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ymax } {..
3610: 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 return -code err
3620: 6f 72 20 22 49 6e 63 6f 6e 73 69 73 74 65 6e 74 or "Inconsistent
3630: 20 62 6f 75 6e 64 73 20 66 6f 72 20 76 69 65 77 bounds for view
3640: 70 6f 72 74 22 0d 0a 20 20 20 7d 0d 0a 0d 0a 23 port".. }....#
3650: 20 3c 4d 42 3e 0d 0a 20 20 20 73 65 74 20 73 63 <MB>.. set sc
3660: 61 6c 69 6e 67 28 24 77 2c 70 78 6d 69 6e 29 20 aling($w,pxmin)
3670: 20 20 20 24 70 78 6d 69 6e 0d 0a 20 20 20 73 65 $pxmin.. se
3680: 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 70 79 6d t scaling($w,pym
3690: 69 6e 29 20 20 20 20 24 70 79 6d 69 6e 0d 0a 20 in) $pymin..
36a0: 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 set scaling($w
36b0: 2c 70 78 6d 61 78 29 20 20 20 20 24 70 78 6d 61 ,pxmax) $pxma
36c0: 78 0d 0a 20 20 20 73 65 74 20 73 63 61 6c 69 6e x.. set scalin
36d0: 67 28 24 77 2c 70 79 6d 61 78 29 20 20 20 20 24 g($w,pymax) $
36e0: 70 79 6d 61 78 0d 0a 20 20 20 73 65 74 20 73 63 pymax.. set sc
36f0: 61 6c 69 6e 67 28 24 77 2c 6e 65 77 29 20 20 20 aling($w,new)
3700: 20 20 20 31 0d 0a 7d 0d 0a 0d 0a 23 20 77 6f 72 1..}....# wor
3710: 6c 64 43 6f 6f 72 64 69 6e 61 74 65 73 20 2d 2d ldCoordinates --
3720: 0d 0a 23 20 20 20 20 53 65 74 20 74 68 65 20 65 ..# Set the e
3730: 78 74 72 65 6d 65 73 20 66 6f 72 20 74 68 65 20 xtremes for the
3740: 77 6f 72 6c 64 20 63 6f 6f 72 64 69 6e 61 74 65 world coordinate
3750: 73 0d 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a 0d s..# Arguments:.
3760: 0a 23 20 20 20 20 77 20 20 20 20 20 20 20 20 20 .# w
3770: 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 61 Name of the ca
3780: 6e 76 61 73 20 77 69 6e 64 6f 77 0d 0a 23 20 20 nvas window..#
3790: 20 20 78 6d 69 6e 20 20 20 20 20 20 20 20 4d 69 xmin Mi
37a0: 6e 69 6d 75 6d 20 58 2d 63 6f 6f 72 64 69 6e 61 nimum X-coordina
37b0: 74 65 0d 0a 23 20 20 20 20 79 6d 69 6e 20 20 20 te..# ymin
37c0: 20 20 20 20 20 4d 69 6e 69 6d 75 6d 20 59 2d 63 Minimum Y-c
37d0: 6f 6f 72 64 69 6e 61 74 65 0d 0a 23 20 20 20 20 oordinate..#
37e0: 78 6d 61 78 20 20 20 20 20 20 20 20 4d 61 78 69 xmax Maxi
37f0: 6d 75 6d 20 58 2d 63 6f 6f 72 64 69 6e 61 74 65 mum X-coordinate
3800: 0d 0a 23 20 20 20 20 79 6d 61 78 20 20 20 20 20 ..# ymax
3810: 20 20 20 4d 61 78 69 6d 75 6d 20 59 2d 63 6f 6f Maximum Y-coo
3820: 72 64 69 6e 61 74 65 0d 0a 23 20 52 65 73 75 6c rdinate..# Resul
3830: 74 3a 0d 0a 23 20 20 20 20 4e 6f 6e 65 0d 0a 23 t:..# None..#
3840: 20 53 69 64 65 20 65 66 66 65 63 74 3a 0d 0a 23 Side effect:..#
3850: 20 20 20 20 41 72 72 61 79 20 73 63 61 6c 69 6e Array scalin
3860: 67 20 66 69 6c 6c 65 64 0d 0a 23 0d 0a 70 72 6f g filled..#..pro
3870: 63 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 77 c ::Plotchart::w
3880: 6f 72 6c 64 43 6f 6f 72 64 69 6e 61 74 65 73 20 orldCoordinates
3890: 7b 20 77 20 78 6d 69 6e 20 79 6d 69 6e 20 78 6d { w xmin ymin xm
38a0: 61 78 20 79 6d 61 78 20 7d 20 7b 0d 0a 20 20 20 ax ymax } {..
38b0: 76 61 72 69 61 62 6c 65 20 73 63 61 6c 69 6e 67 variable scaling
38c0: 0d 0a 0d 0a 20 20 20 69 66 20 7b 20 24 78 6d 69 .... if { $xmi
38d0: 6e 20 3d 3d 20 24 78 6d 61 78 20 7c 7c 20 24 79 n == $xmax || $y
38e0: 6d 69 6e 20 3d 3d 20 24 79 6d 61 78 20 7d 20 7b min == $ymax } {
38f0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d .. return -
3900: 63 6f 64 65 20 65 72 72 6f 72 20 22 4d 69 6e 69 code error "Mini
3910: 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 mum and maximum
3920: 6d 75 73 74 20 64 69 66 66 65 72 20 66 6f 72 20 must differ for
3930: 77 6f 72 6c 64 20 63 6f 6f 72 64 69 6e 61 74 65 world coordinate
3940: 73 22 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 73 s".. }.... s
3950: 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 78 6d et scaling($w,xm
3960: 69 6e 29 20 20 20 20 5b 65 78 70 72 20 7b 64 6f in) [expr {do
3970: 75 62 6c 65 28 24 78 6d 69 6e 29 7d 5d 0d 0a 20 uble($xmin)}]..
3980: 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 set scaling($w
3990: 2c 79 6d 69 6e 29 20 20 20 20 5b 65 78 70 72 20 ,ymin) [expr
39a0: 7b 64 6f 75 62 6c 65 28 24 79 6d 69 6e 29 7d 5d {double($ymin)}]
39b0: 0d 0a 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 .. set scaling
39c0: 28 24 77 2c 78 6d 61 78 29 20 20 20 20 5b 65 78 ($w,xmax) [ex
39d0: 70 72 20 7b 64 6f 75 62 6c 65 28 24 78 6d 61 78 pr {double($xmax
39e0: 29 7d 5d 0d 0a 20 20 20 73 65 74 20 73 63 61 6c )}].. set scal
39f0: 69 6e 67 28 24 77 2c 79 6d 61 78 29 20 20 20 20 ing($w,ymax)
3a00: 5b 65 78 70 72 20 7b 64 6f 75 62 6c 65 28 24 79 [expr {double($y
3a10: 6d 61 78 29 7d 5d 0d 0a 0d 0a 20 20 20 73 65 74 max)}].... set
3a20: 20 73 63 61 6c 69 6e 67 28 24 77 2c 6e 65 77 29 scaling($w,new)
3a30: 20 20 20 20 20 31 0d 0a 7d 0d 0a 0d 0a 23 20 70 1..}....# p
3a40: 6f 6c 61 72 43 6f 6f 72 64 69 6e 61 74 65 73 20 olarCoordinates
3a50: 2d 2d 0d 0a 23 20 20 20 20 53 65 74 20 74 68 65 --..# Set the
3a60: 20 65 78 74 72 65 6d 65 73 20 66 6f 72 20 74 68 extremes for th
3a70: 65 20 70 6f 6c 61 72 20 63 6f 6f 72 64 69 6e 61 e polar coordina
3a80: 74 65 73 0d 0a 23 20 41 72 67 75 6d 65 6e 74 73 tes..# Arguments
3a90: 3a 0d 0a 23 20 20 20 20 77 20 20 20 20 20 20 20 :..# w
3aa0: 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 Name of the
3ab0: 63 61 6e 76 61 73 20 77 69 6e 64 6f 77 0d 0a 23 canvas window..#
3ac0: 20 20 20 20 72 61 64 6d 61 78 20 20 20 20 20 20 radmax
3ad0: 4d 61 78 69 6d 75 6d 20 72 61 64 69 75 73 0d 0a Maximum radius..
3ae0: 23 20 52 65 73 75 6c 74 3a 0d 0a 23 20 20 20 20 # Result:..#
3af0: 4e 6f 6e 65 0d 0a 23 20 53 69 64 65 20 65 66 66 None..# Side eff
3b00: 65 63 74 3a 0d 0a 23 20 20 20 20 41 72 72 61 79 ect:..# Array
3b10: 20 73 63 61 6c 69 6e 67 20 66 69 6c 6c 65 64 0d scaling filled.
3b20: 0a 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 .#..proc ::Plotc
3b30: 68 61 72 74 3a 3a 70 6f 6c 61 72 43 6f 6f 72 64 hart::polarCoord
3b40: 69 6e 61 74 65 73 20 7b 20 77 20 72 61 64 6d 61 inates { w radma
3b50: 78 20 7d 20 7b 0d 0a 20 20 20 76 61 72 69 61 62 x } {.. variab
3b60: 6c 65 20 73 63 61 6c 69 6e 67 0d 0a 0d 0a 20 20 le scaling....
3b70: 20 69 66 20 7b 20 24 72 61 64 6d 61 78 20 3c 3d if { $radmax <=
3b80: 20 30 2e 30 20 7d 20 7b 0d 0a 20 20 20 20 20 20 0.0 } {..
3b90: 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 return -code err
3ba0: 6f 72 20 22 4d 61 78 69 6d 75 6d 20 72 61 64 69 or "Maximum radi
3bb0: 75 73 20 6d 75 73 74 20 62 65 20 70 6f 73 69 74 us must be posit
3bc0: 69 76 65 22 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 ive".. }....
3bd0: 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c set scaling($w,
3be0: 78 6d 69 6e 29 20 20 20 20 5b 65 78 70 72 20 7b xmin) [expr {
3bf0: 2d 64 6f 75 62 6c 65 28 24 72 61 64 6d 61 78 29 -double($radmax)
3c00: 7d 5d 0d 0a 20 20 20 73 65 74 20 73 63 61 6c 69 }].. set scali
3c10: 6e 67 28 24 77 2c 79 6d 69 6e 29 20 20 20 20 5b ng($w,ymin) [
3c20: 65 78 70 72 20 7b 2d 64 6f 75 62 6c 65 28 24 72 expr {-double($r
3c30: 61 64 6d 61 78 29 7d 5d 0d 0a 20 20 20 73 65 74 admax)}].. set
3c40: 20 73 63 61 6c 69 6e 67 28 24 77 2c 78 6d 61 78 scaling($w,xmax
3c50: 29 20 20 20 20 5b 65 78 70 72 20 7b 64 6f 75 62 ) [expr {doub
3c60: 6c 65 28 24 72 61 64 6d 61 78 29 7d 5d 0d 0a 20 le($radmax)}]..
3c70: 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 set scaling($w
3c80: 2c 79 6d 61 78 29 20 20 20 20 5b 65 78 70 72 20 ,ymax) [expr
3c90: 7b 64 6f 75 62 6c 65 28 24 72 61 64 6d 61 78 29 {double($radmax)
3ca0: 7d 5d 0d 0a 0d 0a 20 20 20 73 65 74 20 73 63 61 }].... set sca
3cb0: 6c 69 6e 67 28 24 77 2c 6e 65 77 29 20 20 20 20 ling($w,new)
3cc0: 20 31 0d 0a 7d 0d 0a 0d 0a 23 20 77 6f 72 6c 64 1..}....# world
3cd0: 33 44 43 6f 6f 72 64 69 6e 61 74 65 73 20 2d 2d 3DCoordinates --
3ce0: 0d 0a 23 20 20 20 20 53 65 74 20 74 68 65 20 65 ..# Set the e
3cf0: 78 74 72 65 6d 65 73 20 66 6f 72 20 74 68 65 20 xtremes for the
3d00: 77 6f 72 6c 64 20 63 6f 6f 72 64 69 6e 61 74 65 world coordinate
3d10: 73 20 69 6e 20 33 44 20 70 6c 6f 74 73 0d 0a 23 s in 3D plots..#
3d20: 20 41 72 67 75 6d 65 6e 74 73 3a 0d 0a 23 20 20 Arguments:..#
3d30: 20 20 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 w Na
3d40: 6d 65 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 me of the canvas
3d50: 20 77 69 6e 64 6f 77 0d 0a 23 20 20 20 20 78 6d window..# xm
3d60: 69 6e 20 20 20 20 20 20 20 20 4d 69 6e 69 6d 75 in Minimu
3d70: 6d 20 58 2d 63 6f 6f 72 64 69 6e 61 74 65 0d 0a m X-coordinate..
3d80: 23 20 20 20 20 79 6d 69 6e 20 20 20 20 20 20 20 # ymin
3d90: 20 4d 69 6e 69 6d 75 6d 20 59 2d 63 6f 6f 72 64 Minimum Y-coord
3da0: 69 6e 61 74 65 0d 0a 23 20 20 20 20 7a 6d 69 6e inate..# zmin
3db0: 20 20 20 20 20 20 20 20 4d 69 6e 69 6d 75 6d 20 Minimum
3dc0: 5a 2d 63 6f 6f 72 64 69 6e 61 74 65 0d 0a 23 20 Z-coordinate..#
3dd0: 20 20 20 78 6d 61 78 20 20 20 20 20 20 20 20 4d xmax M
3de0: 61 78 69 6d 75 6d 20 58 2d 63 6f 6f 72 64 69 6e aximum X-coordin
3df0: 61 74 65 0d 0a 23 20 20 20 20 79 6d 61 78 20 20 ate..# ymax
3e00: 20 20 20 20 20 20 4d 61 78 69 6d 75 6d 20 59 2d Maximum Y-
3e10: 63 6f 6f 72 64 69 6e 61 74 65 0d 0a 23 20 20 20 coordinate..#
3e20: 20 7a 6d 61 78 20 20 20 20 20 20 20 20 4d 61 78 zmax Max
3e30: 69 6d 75 6d 20 5a 2d 63 6f 6f 72 64 69 6e 61 74 imum Z-coordinat
3e40: 65 0d 0a 23 20 52 65 73 75 6c 74 3a 0d 0a 23 20 e..# Result:..#
3e50: 20 20 20 4e 6f 6e 65 0d 0a 23 20 53 69 64 65 20 None..# Side
3e60: 65 66 66 65 63 74 3a 0d 0a 23 20 20 20 20 41 72 effect:..# Ar
3e70: 72 61 79 20 73 63 61 6c 69 6e 67 20 66 69 6c 6c ray scaling fill
3e80: 65 64 0d 0a 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c ed..#..proc ::Pl
3e90: 6f 74 63 68 61 72 74 3a 3a 77 6f 72 6c 64 33 44 otchart::world3D
3ea0: 43 6f 6f 72 64 69 6e 61 74 65 73 20 7b 20 77 20 Coordinates { w
3eb0: 78 6d 69 6e 20 79 6d 69 6e 20 7a 6d 69 6e 20 78 xmin ymin zmin x
3ec0: 6d 61 78 20 79 6d 61 78 20 7a 6d 61 78 20 7d 20 max ymax zmax }
3ed0: 7b 0d 0a 20 20 20 76 61 72 69 61 62 6c 65 20 73 {.. variable s
3ee0: 63 61 6c 69 6e 67 0d 0a 0d 0a 20 20 20 69 66 20 caling.... if
3ef0: 7b 20 24 78 6d 69 6e 20 3d 3d 20 24 78 6d 61 78 { $xmin == $xmax
3f00: 20 7c 7c 20 24 79 6d 69 6e 20 3d 3d 20 24 79 6d || $ymin == $ym
3f10: 61 78 20 7c 7c 20 24 7a 6d 69 6e 20 3d 3d 20 24 ax || $zmin == $
3f20: 7a 6d 61 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 zmax } {..
3f30: 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 return -code err
3f40: 6f 72 20 22 4d 69 6e 69 6d 75 6d 20 61 6e 64 20 or "Minimum and
3f50: 6d 61 78 69 6d 75 6d 20 6d 75 73 74 20 64 69 66 maximum must dif
3f60: 66 65 72 20 66 6f 72 20 77 6f 72 6c 64 20 63 6f fer for world co
3f70: 6f 72 64 69 6e 61 74 65 73 22 0d 0a 20 20 20 7d ordinates".. }
3f80: 0d 0a 0d 0a 20 20 20 73 65 74 20 73 63 61 6c 69 .... set scali
3f90: 6e 67 28 24 77 2c 78 6d 69 6e 29 20 20 20 20 5b ng($w,xmin) [
3fa0: 65 78 70 72 20 7b 64 6f 75 62 6c 65 28 24 78 6d expr {double($xm
3fb0: 69 6e 29 7d 5d 0d 0a 20 20 20 73 65 74 20 73 63 in)}].. set sc
3fc0: 61 6c 69 6e 67 28 24 77 2c 79 6d 69 6e 29 20 20 aling($w,ymin)
3fd0: 20 20 5b 65 78 70 72 20 7b 64 6f 75 62 6c 65 28 [expr {double(
3fe0: 24 79 6d 69 6e 29 7d 5d 0d 0a 20 20 20 73 65 74 $ymin)}].. set
3ff0: 20 73 63 61 6c 69 6e 67 28 24 77 2c 7a 6d 69 6e scaling($w,zmin
4000: 29 20 20 20 20 5b 65 78 70 72 20 7b 64 6f 75 62 ) [expr {doub
4010: 6c 65 28 24 7a 6d 69 6e 29 7d 5d 0d 0a 20 20 20 le($zmin)}]..
4020: 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 78 set scaling($w,x
4030: 6d 61 78 29 20 20 20 20 5b 65 78 70 72 20 7b 64 max) [expr {d
4040: 6f 75 62 6c 65 28 24 78 6d 61 78 29 7d 5d 0d 0a ouble($xmax)}]..
4050: 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 set scaling($
4060: 77 2c 79 6d 61 78 29 20 20 20 20 5b 65 78 70 72 w,ymax) [expr
4070: 20 7b 64 6f 75 62 6c 65 28 24 79 6d 61 78 29 7d {double($ymax)}
4080: 5d 0d 0a 20 20 20 73 65 74 20 73 63 61 6c 69 6e ].. set scalin
4090: 67 28 24 77 2c 7a 6d 61 78 29 20 20 20 20 5b 65 g($w,zmax) [e
40a0: 78 70 72 20 7b 64 6f 75 62 6c 65 28 24 7a 6d 61 xpr {double($zma
40b0: 78 29 7d 5d 0d 0a 0d 0a 20 20 20 73 65 74 20 73 x)}].... set s
40c0: 63 61 6c 69 6e 67 28 24 77 2c 6e 65 77 29 20 20 caling($w,new)
40d0: 20 20 20 31 0d 0a 7d 0d 0a 0d 0a 23 20 63 6f 6f 1..}....# coo
40e0: 72 64 73 54 6f 50 69 78 65 6c 20 2d 2d 0d 0a 23 rdsToPixel --..#
40f0: 20 20 20 20 43 6f 6e 76 65 72 74 20 77 6f 72 6c Convert worl
4100: 64 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 74 6f d coordinates to
4110: 20 70 69 78 65 6c 20 63 6f 6f 72 64 69 6e 61 74 pixel coordinat
4120: 65 73 0d 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a es..# Arguments:
4130: 0d 0a 23 20 20 20 20 77 20 20 20 20 20 20 20 20 ..# w
4140: 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 Name of the c
4150: 61 6e 76 61 73 0d 0a 23 20 20 20 20 78 63 72 64 anvas..# xcrd
4160: 20 20 20 20 20 20 20 20 58 2d 63 6f 6f 72 64 69 X-coordi
4170: 6e 61 74 65 0d 0a 23 20 20 20 20 79 63 72 64 20 nate..# ycrd
4180: 20 20 20 20 20 20 20 59 2d 63 6f 6f 72 64 69 6e Y-coordin
4190: 61 74 65 0d 0a 23 20 52 65 73 75 6c 74 3a 0d 0a ate..# Result:..
41a0: 23 20 20 20 20 4c 69 73 74 20 6f 66 20 74 77 6f # List of two
41b0: 20 65 6c 65 6d 65 6e 74 73 2c 20 78 2d 20 61 6e elements, x- an
41c0: 64 20 79 2d 63 6f 6f 72 64 69 6e 61 74 65 73 20 d y-coordinates
41d0: 69 6e 20 70 69 78 65 6c 73 0d 0a 23 0d 0a 70 72 in pixels..#..pr
41e0: 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a oc ::Plotchart::
41f0: 63 6f 6f 72 64 73 54 6f 50 69 78 65 6c 20 7b 20 coordsToPixel {
4200: 77 20 78 63 72 64 20 79 63 72 64 20 7d 20 7b 0d w xcrd ycrd } {.
4210: 0a 20 20 20 76 61 72 69 61 62 6c 65 20 73 63 61 . variable sca
4220: 6c 69 6e 67 0d 0a 0d 0a 20 20 20 69 66 20 7b 20 ling.... if {
4230: 24 73 63 61 6c 69 6e 67 28 24 77 2c 6e 65 77 29 $scaling($w,new)
4240: 20 3d 3d 20 31 20 7d 20 7b 0d 0a 20 20 20 20 20 == 1 } {..
4250: 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c set scaling($w,
4260: 6e 65 77 29 20 20 20 20 20 30 0d 0a 20 20 20 20 new) 0..
4270: 20 20 73 65 74 20 77 69 64 74 68 20 20 20 20 20 set width
4280: 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 [expr
4290: 7b 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 78 6d {$scaling($w,pxm
42a0: 61 78 29 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c ax)-$scaling($w,
42b0: 70 78 6d 69 6e 29 7d 5d 0d 0a 20 20 20 20 20 20 pxmin)}]..
42c0: 73 65 74 20 68 65 69 67 68 74 20 20 20 20 20 20 set height
42d0: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 [expr {$
42e0: 73 63 61 6c 69 6e 67 28 24 77 2c 70 79 6d 61 78 scaling($w,pymax
42f0: 29 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 79 )-$scaling($w,py
4300: 6d 69 6e 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 min)}]....
4310: 73 65 74 20 64 78 20 20 20 20 20 20 20 20 20 20 set dx
4320: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 [expr {$
4330: 73 63 61 6c 69 6e 67 28 24 77 2c 78 6d 61 78 29 scaling($w,xmax)
4340: 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c 78 6d 69 -$scaling($w,xmi
4350: 6e 29 7d 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 n)}].. set
4360: 64 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20 dy
4370: 20 20 20 20 5b 65 78 70 72 20 7b 24 73 63 61 6c [expr {$scal
4380: 69 6e 67 28 24 77 2c 79 6d 61 78 29 2d 24 73 63 ing($w,ymax)-$sc
4390: 61 6c 69 6e 67 28 24 77 2c 79 6d 69 6e 29 7d 5d aling($w,ymin)}]
43a0: 0d 0a 20 20 20 20 20 20 73 65 74 20 73 63 61 6c .. set scal
43b0: 69 6e 67 28 24 77 2c 78 66 61 63 74 6f 72 29 20 ing($w,xfactor)
43c0: 5b 65 78 70 72 20 7b 24 77 69 64 74 68 2f 24 64 [expr {$width/$d
43d0: 78 7d 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 73 x}].. set s
43e0: 63 61 6c 69 6e 67 28 24 77 2c 79 66 61 63 74 6f caling($w,yfacto
43f0: 72 29 20 5b 65 78 70 72 20 7b 24 68 65 69 67 68 r) [expr {$heigh
4400: 74 2f 24 64 79 7d 5d 0d 0a 20 20 20 7d 0d 0a 0d t/$dy}].. }...
4410: 0a 20 20 20 73 65 74 20 78 70 69 78 20 5b 65 78 . set xpix [ex
4420: 70 72 20 7b 24 73 63 61 6c 69 6e 67 28 24 77 2c pr {$scaling($w,
4430: 70 78 6d 69 6e 29 2b 28 24 78 63 72 64 2d 24 73 pxmin)+($xcrd-$s
4440: 63 61 6c 69 6e 67 28 24 77 2c 78 6d 69 6e 29 29 caling($w,xmin))
4450: 2a 24 73 63 61 6c 69 6e 67 28 24 77 2c 78 66 61 *$scaling($w,xfa
4460: 63 74 6f 72 29 7d 5d 0d 0a 20 20 20 73 65 74 20 ctor)}].. set
4470: 79 70 69 78 20 5b 65 78 70 72 20 7b 24 73 63 61 ypix [expr {$sca
4480: 6c 69 6e 67 28 24 77 2c 70 79 6d 69 6e 29 2b 28 ling($w,pymin)+(
4490: 24 73 63 61 6c 69 6e 67 28 24 77 2c 79 6d 61 78 $scaling($w,ymax
44a0: 29 2d 24 79 63 72 64 29 2a 24 73 63 61 6c 69 6e )-$ycrd)*$scalin
44b0: 67 28 24 77 2c 79 66 61 63 74 6f 72 29 7d 5d 0d g($w,yfactor)}].
44c0: 0a 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 . return [list
44d0: 20 24 78 70 69 78 20 24 79 70 69 78 5d 0d 0a 7d $xpix $ypix]..}
44e0: 0d 0a 0d 0a 23 20 63 6f 6f 72 64 73 33 44 54 6f ....# coords3DTo
44f0: 50 69 78 65 6c 20 2d 2d 0d 0a 23 20 20 20 20 43 Pixel --..# C
4500: 6f 6e 76 65 72 74 20 77 6f 72 6c 64 20 63 6f 6f onvert world coo
4510: 72 64 69 6e 61 74 65 73 20 74 6f 20 70 69 78 65 rdinates to pixe
4520: 6c 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 28 33 l coordinates (3
4530: 44 20 70 6c 6f 74 73 29 0d 0a 23 20 41 72 67 75 D plots)..# Argu
4540: 6d 65 6e 74 73 3a 0d 0a 23 20 20 20 20 77 20 20 ments:..# w
4550: 20 20 20 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 Name of
4560: 20 74 68 65 20 63 61 6e 76 61 73 0d 0a 23 20 20 the canvas..#
4570: 20 20 78 63 72 64 20 20 20 20 20 20 20 20 58 2d xcrd X-
4580: 63 6f 6f 72 64 69 6e 61 74 65 0d 0a 23 20 20 20 coordinate..#
4590: 20 79 63 72 64 20 20 20 20 20 20 20 20 59 2d 63 ycrd Y-c
45a0: 6f 6f 72 64 69 6e 61 74 65 0d 0a 23 20 20 20 20 oordinate..#
45b0: 7a 63 72 64 20 20 20 20 20 20 20 20 5a 2d 63 6f zcrd Z-co
45c0: 6f 72 64 69 6e 61 74 65 0d 0a 23 20 52 65 73 75 ordinate..# Resu
45d0: 6c 74 3a 0d 0a 23 20 20 20 20 4c 69 73 74 20 6f lt:..# List o
45e0: 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 2c 20 f two elements,
45f0: 78 2d 20 61 6e 64 20 79 2d 63 6f 6f 72 64 69 6e x- and y-coordin
4600: 61 74 65 73 20 69 6e 20 70 69 78 65 6c 73 0d 0a ates in pixels..
4610: 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 #..proc ::Plotch
4620: 61 72 74 3a 3a 63 6f 6f 72 64 73 33 44 54 6f 50 art::coords3DToP
4630: 69 78 65 6c 20 7b 20 77 20 78 63 72 64 20 79 63 ixel { w xcrd yc
4640: 72 64 20 7a 63 72 64 20 7d 20 7b 0d 0a 20 20 20 rd zcrd } {..
4650: 76 61 72 69 61 62 6c 65 20 73 63 61 6c 69 6e 67 variable scaling
4660: 0d 0a 0d 0a 20 20 20 69 66 20 7b 20 24 73 63 61 .... if { $sca
4670: 6c 69 6e 67 28 24 77 2c 6e 65 77 29 20 3d 3d 20 ling($w,new) ==
4680: 31 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 1 } {.. set
4690: 20 73 63 61 6c 69 6e 67 28 24 77 2c 6e 65 77 29 scaling($w,new)
46a0: 20 20 20 20 20 20 30 0d 0a 20 20 20 20 20 20 73 0.. s
46b0: 65 74 20 77 69 64 74 68 20 20 20 20 20 20 20 20 et width
46c0: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 [expr {$
46d0: 73 63 61 6c 69 6e 67 28 24 77 2c 70 78 6d 61 78 scaling($w,pxmax
46e0: 29 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 78 )-$scaling($w,px
46f0: 6d 69 6e 29 7d 5d 0d 0a 20 20 20 20 20 20 73 65 min)}].. se
4700: 74 20 68 65 69 67 68 74 20 20 20 20 20 20 20 20 t height
4710: 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 73 [expr {$s
4720: 63 61 6c 69 6e 67 28 24 77 2c 70 79 6d 61 78 29 caling($w,pymax)
4730: 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 79 6d -$scaling($w,pym
4740: 69 6e 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 73 in)}].... s
4750: 65 74 20 64 78 20 20 20 20 20 20 20 20 20 20 20 et dx
4760: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 [expr {$
4770: 73 63 61 6c 69 6e 67 28 24 77 2c 78 6d 61 78 29 scaling($w,xmax)
4780: 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c 78 6d 69 -$scaling($w,xmi
4790: 6e 29 7d 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 n)}].. set
47a0: 64 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20 dy
47b0: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 73 63 61 [expr {$sca
47c0: 6c 69 6e 67 28 24 77 2c 79 6d 61 78 29 2d 24 73 ling($w,ymax)-$s
47d0: 63 61 6c 69 6e 67 28 24 77 2c 79 6d 69 6e 29 7d caling($w,ymin)}
47e0: 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 64 7a 20 ].. set dz
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4800: 20 20 5b 65 78 70 72 20 7b 24 73 63 61 6c 69 6e [expr {$scalin
4810: 67 28 24 77 2c 7a 6d 61 78 29 2d 24 73 63 61 6c g($w,zmax)-$scal
4820: 69 6e 67 28 24 77 2c 7a 6d 69 6e 29 7d 5d 0d 0a ing($w,zmin)}]..
4830: 20 20 20 20 20 20 73 65 74 20 73 63 61 6c 69 6e set scalin
4840: 67 28 24 77 2c 78 79 66 61 63 74 6f 72 29 20 5b g($w,xyfactor) [
4850: 65 78 70 72 20 7b 24 73 63 61 6c 69 6e 67 28 24 expr {$scaling($
4860: 77 2c 79 66 72 61 63 74 29 2a 24 77 69 64 74 68 w,yfract)*$width
4870: 2f 24 64 78 7d 5d 0d 0a 20 20 20 20 20 20 73 65 /$dx}].. se
4880: 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 78 7a 66 t scaling($w,xzf
4890: 61 63 74 6f 72 29 20 5b 65 78 70 72 20 7b 24 73 actor) [expr {$s
48a0: 63 61 6c 69 6e 67 28 24 77 2c 7a 66 72 61 63 74 caling($w,zfract
48b0: 29 2a 24 68 65 69 67 68 74 2f 24 64 78 7d 5d 0d )*$height/$dx}].
48c0: 0a 20 20 20 20 20 20 73 65 74 20 73 63 61 6c 69 . set scali
48d0: 6e 67 28 24 77 2c 79 66 61 63 74 6f 72 29 20 20 ng($w,yfactor)
48e0: 5b 65 78 70 72 20 7b 24 77 69 64 74 68 2f 24 64 [expr {$width/$d
48f0: 79 7d 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 73 y}].. set s
4900: 63 61 6c 69 6e 67 28 24 77 2c 7a 66 61 63 74 6f caling($w,zfacto
4910: 72 29 20 20 5b 65 78 70 72 20 7b 24 68 65 69 67 r) [expr {$heig
4920: 68 74 2f 24 64 7a 7d 5d 0d 0a 20 20 20 7d 0d 0a ht/$dz}].. }..
4930: 0d 0a 20 20 20 23 0d 0a 20 20 20 23 20 54 68 65 .. #.. # The
4940: 20 76 61 6c 75 65 73 20 66 6f 72 20 78 63 72 64 values for xcrd
4950: 20 3d 20 78 6d 61 78 0d 0a 20 20 20 23 0d 0a 20 = xmax.. #..
4960: 20 20 73 65 74 20 78 70 69 78 20 5b 65 78 70 72 set xpix [expr
4970: 20 7b 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 78 {$scaling($w,px
4980: 6d 69 6e 29 2b 28 24 79 63 72 64 2d 24 73 63 61 min)+($ycrd-$sca
4990: 6c 69 6e 67 28 24 77 2c 79 6d 69 6e 29 29 2a 24 ling($w,ymin))*$
49a0: 73 63 61 6c 69 6e 67 28 24 77 2c 79 66 61 63 74 scaling($w,yfact
49b0: 6f 72 29 7d 5d 0d 0a 20 20 20 73 65 74 20 79 70 or)}].. set yp
49c0: 69 78 20 5b 65 78 70 72 20 7b 24 73 63 61 6c 69 ix [expr {$scali
49d0: 6e 67 28 24 77 2c 70 79 6d 69 6e 29 2b 28 24 73 ng($w,pymin)+($s
49e0: 63 61 6c 69 6e 67 28 24 77 2c 7a 6d 61 78 29 2d caling($w,zmax)-
49f0: 24 7a 63 72 64 29 2a 24 73 63 61 6c 69 6e 67 28 $zcrd)*$scaling(
4a00: 24 77 2c 7a 66 61 63 74 6f 72 29 7d 5d 0d 0a 0d $w,zfactor)}]...
4a10: 0a 20 20 20 23 0d 0a 20 20 20 23 20 41 64 64 20 . #.. # Add
4a20: 74 68 65 20 73 68 69 66 74 20 64 75 65 20 74 6f the shift due to
4a30: 20 78 63 72 64 2d 78 6d 61 78 0d 0a 20 20 20 23 xcrd-xmax.. #
4a40: 0d 0a 20 20 20 73 65 74 20 78 70 69 78 20 5b 65 .. set xpix [e
4a50: 78 70 72 20 7b 24 78 70 69 78 20 2b 20 24 73 63 xpr {$xpix + $sc
4a60: 61 6c 69 6e 67 28 24 77 2c 78 79 66 61 63 74 6f aling($w,xyfacto
4a70: 72 29 2a 28 24 78 63 72 64 2d 24 73 63 61 6c 69 r)*($xcrd-$scali
4a80: 6e 67 28 24 77 2c 78 6d 61 78 29 29 7d 5d 0d 0a ng($w,xmax))}]..
4a90: 20 20 20 73 65 74 20 79 70 69 78 20 5b 65 78 70 set ypix [exp
4aa0: 72 20 7b 24 79 70 69 78 20 2d 20 24 73 63 61 6c r {$ypix - $scal
4ab0: 69 6e 67 28 24 77 2c 78 7a 66 61 63 74 6f 72 29 ing($w,xzfactor)
4ac0: 2a 28 24 78 63 72 64 2d 24 73 63 61 6c 69 6e 67 *($xcrd-$scaling
4ad0: 28 24 77 2c 78 6d 61 78 29 29 7d 5d 0d 0a 0d 0a ($w,xmax))}]....
4ae0: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list
4af0: 24 78 70 69 78 20 24 79 70 69 78 5d 0d 0a 7d 0d $xpix $ypix]..}.
4b00: 0a 0d 0a 23 20 70 69 78 65 6c 54 6f 43 6f 6f 72 ...# pixelToCoor
4b10: 64 73 20 2d 2d 0d 0a 23 20 20 20 20 43 6f 6e 76 ds --..# Conv
4b20: 65 72 74 20 70 69 78 65 6c 20 63 6f 6f 72 64 69 ert pixel coordi
4b30: 6e 61 74 65 73 20 74 6f 20 77 6f 72 6c 64 20 63 nates to world c
4b40: 6f 6f 72 64 69 6e 61 74 65 73 0d 0a 23 20 41 72 oordinates..# Ar
4b50: 67 75 6d 65 6e 74 73 3a 0d 0a 23 20 20 20 20 77 guments:..# w
4b60: 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 20 Name
4b70: 6f 66 20 74 68 65 20 63 61 6e 76 61 73 0d 0a 23 of the canvas..#
4b80: 20 20 20 20 78 70 69 78 20 20 20 20 20 20 20 20 xpix
4b90: 58 2d 63 6f 6f 72 64 69 6e 61 74 65 20 28 70 69 X-coordinate (pi
4ba0: 78 65 6c 29 0d 0a 23 20 20 20 20 79 70 69 78 20 xel)..# ypix
4bb0: 20 20 20 20 20 20 20 59 2d 63 6f 6f 72 64 69 6e Y-coordin
4bc0: 61 74 65 20 28 70 69 78 65 6c 29 0d 0a 23 20 52 ate (pixel)..# R
4bd0: 65 73 75 6c 74 3a 0d 0a 23 20 20 20 20 4c 69 73 esult:..# Lis
4be0: 74 20 6f 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74 t of two element
4bf0: 73 2c 20 78 2d 20 61 6e 64 20 79 2d 63 6f 6f 72 s, x- and y-coor
4c00: 64 69 6e 61 74 65 73 20 69 6e 20 77 6f 72 6c 64 dinates in world
4c10: 20 63 6f 6f 72 64 69 6e 61 74 65 20 73 79 73 74 coordinate syst
4c20: 65 6d 0d 0a 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c em..#..proc ::Pl
4c30: 6f 74 63 68 61 72 74 3a 3a 70 69 78 65 6c 54 6f otchart::pixelTo
4c40: 43 6f 6f 72 64 73 20 7b 20 77 20 78 70 69 78 20 Coords { w xpix
4c50: 79 70 69 78 20 7d 20 7b 0d 0a 20 20 20 76 61 72 ypix } {.. var
4c60: 69 61 62 6c 65 20 73 63 61 6c 69 6e 67 0d 0a 0d iable scaling...
4c70: 0a 20 20 20 69 66 20 7b 20 24 73 63 61 6c 69 6e . if { $scalin
4c80: 67 28 24 77 2c 6e 65 77 29 20 3d 3d 20 31 20 7d g($w,new) == 1 }
4c90: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 63 {.. set sc
4ca0: 61 6c 69 6e 67 28 24 77 2c 6e 65 77 29 20 20 20 aling($w,new)
4cb0: 20 20 30 0d 0a 20 20 20 20 20 20 73 65 74 20 77 0.. set w
4cc0: 69 64 74 68 20 20 20 20 20 20 20 20 20 20 20 20 idth
4cd0: 20 20 20 5b 65 78 70 72 20 7b 24 73 63 61 6c 69 [expr {$scali
4ce0: 6e 67 28 24 77 2c 70 78 6d 61 78 29 2d 24 73 63 ng($w,pxmax)-$sc
4cf0: 61 6c 69 6e 67 28 24 77 2c 70 78 6d 69 6e 29 7d aling($w,pxmin)}
4d00: 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 68 65 69 ].. set hei
4d10: 67 68 74 20 20 20 20 20 20 20 20 20 20 20 20 20 ght
4d20: 20 5b 65 78 70 72 20 7b 24 73 63 61 6c 69 6e 67 [expr {$scaling
4d30: 28 24 77 2c 70 79 6d 61 78 29 2d 24 73 63 61 6c ($w,pymax)-$scal
4d40: 69 6e 67 28 24 77 2c 70 79 6d 69 6e 29 7d 5d 0d ing($w,pymin)}].
4d50: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 64 78 20 ... set dx
4d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4d70: 20 5b 65 78 70 72 20 7b 24 73 63 61 6c 69 6e 67 [expr {$scaling
4d80: 28 24 77 2c 78 6d 61 78 29 2d 24 73 63 61 6c 69 ($w,xmax)-$scali
4d90: 6e 67 28 24 77 2c 78 6d 69 6e 29 7d 5d 0d 0a 20 ng($w,xmin)}]..
4da0: 20 20 20 20 20 73 65 74 20 64 79 20 20 20 20 20 set dy
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 [ex
4dc0: 70 72 20 7b 24 73 63 61 6c 69 6e 67 28 24 77 2c pr {$scaling($w,
4dd0: 79 6d 61 78 29 2d 24 73 63 61 6c 69 6e 67 28 24 ymax)-$scaling($
4de0: 77 2c 79 6d 69 6e 29 7d 5d 0d 0a 20 20 20 20 20 w,ymin)}]..
4df0: 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c set scaling($w,
4e00: 78 66 61 63 74 6f 72 29 20 5b 65 78 70 72 20 7b xfactor) [expr {
4e10: 24 77 69 64 74 68 2f 24 64 78 7d 5d 0d 0a 20 20 $width/$dx}]..
4e20: 20 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 set scaling(
4e30: 24 77 2c 79 66 61 63 74 6f 72 29 20 5b 65 78 70 $w,yfactor) [exp
4e40: 72 20 7b 24 68 65 69 67 68 74 2f 24 64 79 7d 5d r {$height/$dy}]
4e50: 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 73 65 74 .. }.... set
4e60: 20 78 63 72 64 20 5b 65 78 70 72 20 7b 24 73 63 xcrd [expr {$sc
4e70: 61 6c 69 6e 67 28 24 77 2c 78 6d 69 6e 29 2b 28 aling($w,xmin)+(
4e80: 24 78 70 69 78 2d 24 73 63 61 6c 69 6e 67 28 24 $xpix-$scaling($
4e90: 77 2c 70 78 6d 69 6e 29 29 2f 24 73 63 61 6c 69 w,pxmin))/$scali
4ea0: 6e 67 28 24 77 2c 78 66 61 63 74 6f 72 29 7d 5d ng($w,xfactor)}]
4eb0: 0d 0a 20 20 20 73 65 74 20 79 63 72 64 20 5b 65 .. set ycrd [e
4ec0: 78 70 72 20 7b 24 73 63 61 6c 69 6e 67 28 24 77 xpr {$scaling($w
4ed0: 2c 79 6d 61 78 29 2d 28 24 79 70 69 78 2d 24 73 ,ymax)-($ypix-$s
4ee0: 63 61 6c 69 6e 67 28 24 77 2c 70 79 6d 69 6e 29 caling($w,pymin)
4ef0: 29 2f 24 73 63 61 6c 69 6e 67 28 24 77 2c 79 66 )/$scaling($w,yf
4f00: 61 63 74 6f 72 29 7d 5d 0d 0a 20 20 20 72 65 74 actor)}].. ret
4f10: 75 72 6e 20 5b 6c 69 73 74 20 24 78 63 72 64 20 urn [list $xcrd
4f20: 24 79 63 72 64 5d 0d 0a 7d 0d 0a 0d 0a 23 20 70 $ycrd]..}....# p
4f30: 69 78 65 6c 54 6f 49 6e 64 65 78 20 2d 2d 0d 0a ixelToIndex --..
4f40: 23 20 20 20 20 43 6f 6e 76 65 72 74 20 70 69 78 # Convert pix
4f50: 65 6c 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 74 el coordinates t
4f60: 6f 20 65 6c 65 6d 65 6e 74 73 20 6c 69 73 74 20 o elements list
4f70: 69 6e 64 65 78 0d 0a 23 20 41 72 67 75 6d 65 6e index..# Argumen
4f80: 74 73 3a 0d 0a 23 20 20 20 20 77 20 20 20 20 20 ts:..# w
4f90: 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 Name of th
4fa0: 65 20 63 61 6e 76 61 73 0d 0a 23 20 20 20 20 78 e canvas..# x
4fb0: 70 69 78 20 20 20 20 20 20 20 20 58 2d 63 6f 6f pix X-coo
4fc0: 72 64 69 6e 61 74 65 20 28 70 69 78 65 6c 29 0d rdinate (pixel).
4fd0: 0a 23 20 20 20 20 79 70 69 78 20 20 20 20 20 20 .# ypix
4fe0: 20 20 59 2d 63 6f 6f 72 64 69 6e 61 74 65 20 28 Y-coordinate (
4ff0: 70 69 78 65 6c 29 0d 0a 23 20 52 65 73 75 6c 74 pixel)..# Result
5000: 3a 0d 0a 23 20 20 20 20 45 6c 65 6d 65 6e 74 73 :..# Elements
5010: 20 6c 69 73 74 20 69 6e 64 65 78 0d 0a 23 0d 0a list index..#..
5020: 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 74 proc ::Plotchart
5030: 3a 3a 70 69 78 65 6c 54 6f 49 6e 64 65 78 20 7b ::pixelToIndex {
5040: 20 77 20 78 70 69 78 20 79 70 69 78 20 7d 20 7b w xpix ypix } {
5050: 0d 0a 20 20 20 76 61 72 69 61 62 6c 65 20 73 63 .. variable sc
5060: 61 6c 69 6e 67 0d 0a 20 20 20 76 61 72 69 61 62 aling.. variab
5070: 6c 65 20 74 6f 72 61 64 0d 0a 0d 0a 20 20 20 73 le torad.... s
5080: 65 74 20 69 64 78 20 2d 31 0d 0a 20 20 20 73 65 et idx -1.. se
5090: 74 20 72 61 64 69 75 73 20 5b 65 78 70 72 20 7b t radius [expr {
50a0: 28 24 73 63 61 6c 69 6e 67 28 24 7b 77 7d 2c 70 ($scaling(${w},p
50b0: 78 6d 61 78 29 20 2d 20 24 73 63 61 6c 69 6e 67 xmax) - $scaling
50c0: 28 24 7b 77 7d 2c 70 78 6d 69 6e 29 29 20 2f 20 (${w},pxmin)) /
50d0: 32 7d 5d 0d 0a 20 20 20 73 65 74 20 78 72 65 6c 2}].. set xrel
50e0: 20 5b 65 78 70 72 20 7b 24 7b 78 70 69 78 7d 20 [expr {${xpix}
50f0: 2d 20 24 73 63 61 6c 69 6e 67 28 24 7b 77 7d 2c - $scaling(${w},
5100: 70 78 6d 69 6e 29 20 2d 20 24 7b 72 61 64 69 75 pxmin) - ${radiu
5110: 73 7d 7d 5d 0d 0a 20 20 20 73 65 74 20 79 72 65 s}}].. set yre
5120: 6c 20 5b 65 78 70 72 20 7b 2d 24 7b 79 70 69 78 l [expr {-${ypix
5130: 7d 20 2b 20 24 73 63 61 6c 69 6e 67 28 24 7b 77 } + $scaling(${w
5140: 7d 2c 70 79 6d 69 6e 29 20 2b 20 24 7b 72 61 64 },pymin) + ${rad
5150: 69 75 73 7d 7d 5d 0d 0a 20 20 20 69 66 20 7b 5b ius}}].. if {[
5160: 65 78 70 72 20 7b 70 6f 77 28 24 7b 72 61 64 69 expr {pow(${radi
5170: 75 73 7d 2c 32 29 20 3c 20 28 70 6f 77 28 24 7b us},2) < (pow(${
5180: 78 72 65 6c 7d 2c 32 29 20 2b 20 70 6f 77 28 24 xrel},2) + pow($
5190: 7b 79 72 65 6c 7d 2c 32 29 29 7d 5d 7d 20 7b 0d {yrel},2))}]} {.
51a0: 0a 20 20 20 20 20 20 20 23 20 64 6f 20 6e 6f 74 . # do not
51b0: 68 69 6e 67 20 6f 75 74 20 6f 66 20 70 69 65 20 hing out of pie
51c0: 63 68 61 72 74 0d 0a 20 20 20 7d 20 65 6c 73 65 chart.. } else
51d0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists
51e0: 20 73 63 61 6c 69 6e 67 28 24 7b 77 7d 2c 61 6e scaling(${w},an
51f0: 67 6c 65 73 29 5d 7d 20 7b 0d 0a 20 20 20 20 20 gles)]} {..
5200: 20 20 73 65 74 20 78 79 5f 61 6e 67 6c 65 20 5b set xy_angle [
5210: 65 78 70 72 20 7b 28 33 36 30 20 2b 20 72 6f 75 expr {(360 + rou
5220: 6e 64 28 61 74 61 6e 32 28 24 7b 79 72 65 6c 7d nd(atan2(${yrel}
5230: 2c 24 7b 78 72 65 6c 7d 29 2f 24 7b 74 6f 72 61 ,${xrel})/${tora
5240: 64 7d 29 29 20 25 20 33 36 30 7d 5d 0d 0a 20 20 d})) % 360}]..
5250: 20 20 20 20 20 66 6f 72 65 61 63 68 20 61 6e 67 foreach ang
5260: 6c 65 20 24 73 63 61 6c 69 6e 67 28 24 7b 77 7d le $scaling(${w}
5270: 2c 61 6e 67 6c 65 73 29 20 7b 0d 0a 20 20 20 20 ,angles) {..
5280: 20 20 20 69 66 20 7b 24 7b 78 79 5f 61 6e 67 6c if {${xy_angl
5290: 65 7d 20 3c 3d 20 24 7b 61 6e 67 6c 65 7d 7d 20 e} <= ${angle}}
52a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 62 72 {.. br
52b0: 65 61 6b 0d 0a 20 20 20 20 20 20 20 7d 0d 0a 20 eak.. }..
52c0: 20 20 20 20 20 20 69 6e 63 72 20 69 64 78 0d 0a incr idx..
52d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 7d 0d 0a }.. }..
52e0: 20 20 20 72 65 74 75 72 6e 20 24 7b 69 64 78 7d return ${idx}
52f0: 0d 0a 7d 0d 0a 0d 0a 23 20 70 6f 6c 61 72 54 6f ..}....# polarTo
5300: 50 69 78 65 6c 20 2d 2d 0d 0a 23 20 20 20 20 43 Pixel --..# C
5310: 6f 6e 76 65 72 74 20 70 6f 6c 61 72 20 63 6f 6f onvert polar coo
5320: 72 64 69 6e 61 74 65 73 20 74 6f 20 70 69 78 65 rdinates to pixe
5330: 6c 20 63 6f 6f 72 64 69 6e 61 74 65 73 0d 0a 23 l coordinates..#
5340: 20 41 72 67 75 6d 65 6e 74 73 3a 0d 0a 23 20 20 Arguments:..#
5350: 20 20 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 w Na
5360: 6d 65 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 me of the canvas
5370: 0d 0a 23 20 20 20 20 72 61 64 20 20 20 20 20 20 ..# rad
5380: 20 20 20 52 61 64 69 75 73 20 6f 66 20 74 68 65 Radius of the
5390: 20 70 6f 69 6e 74 0d 0a 23 20 20 20 20 70 68 69 point..# phi
53a0: 20 20 20 20 20 20 20 20 20 41 6e 67 6c 65 20 6f Angle o
53b0: 66 20 74 68 65 20 70 6f 69 6e 74 20 28 64 65 67 f the point (deg
53c0: 72 65 65 73 29 0d 0a 23 20 52 65 73 75 6c 74 3a rees)..# Result:
53d0: 0d 0a 23 20 20 20 20 4c 69 73 74 20 6f 66 20 74 ..# List of t
53e0: 77 6f 20 65 6c 65 6d 65 6e 74 73 2c 20 78 2d 20 wo elements, x-
53f0: 61 6e 64 20 79 2d 63 6f 6f 72 64 69 6e 61 74 65 and y-coordinate
5400: 73 20 69 6e 20 70 69 78 65 6c 73 0d 0a 23 0d 0a s in pixels..#..
5410: 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 74 proc ::Plotchart
5420: 3a 3a 70 6f 6c 61 72 54 6f 50 69 78 65 6c 20 7b ::polarToPixel {
5430: 20 77 20 72 61 64 20 70 68 69 20 7d 20 7b 0d 0a w rad phi } {..
5440: 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f 72 61 variable tora
5450: 64 0d 0a 0d 0a 20 20 20 73 65 74 20 78 63 72 64 d.... set xcrd
5460: 20 5b 65 78 70 72 20 7b 24 72 61 64 2a 63 6f 73 [expr {$rad*cos
5470: 28 24 70 68 69 2a 24 74 6f 72 61 64 29 7d 5d 0d ($phi*$torad)}].
5480: 0a 20 20 20 73 65 74 20 79 63 72 64 20 5b 65 78 . set ycrd [ex
5490: 70 72 20 7b 24 72 61 64 2a 73 69 6e 28 24 70 68 pr {$rad*sin($ph
54a0: 69 2a 24 74 6f 72 61 64 29 7d 5d 0d 0a 0d 0a 20 i*$torad)}]....
54b0: 20 20 63 6f 6f 72 64 73 54 6f 50 69 78 65 6c 20 coordsToPixel
54c0: 24 77 20 24 78 63 72 64 20 24 79 63 72 64 0d 0a $w $xcrd $ycrd..
54d0: 7d 0d 0a 0d 0a 23 20 63 72 65 61 74 65 58 59 50 }....# createXYP
54e0: 6c 6f 74 20 2d 2d 0d 0a 23 20 20 20 20 43 72 65 lot --..# Cre
54f0: 61 74 65 20 61 20 63 6f 6d 6d 61 6e 64 20 66 6f ate a command fo
5500: 72 20 64 72 61 77 69 6e 67 20 61 6e 20 58 59 20 r drawing an XY
5510: 70 6c 6f 74 0d 0a 23 20 41 72 67 75 6d 65 6e 74 plot..# Argument
5520: 73 3a 0d 0a 23 20 20 20 20 77 20 20 20 20 20 20 s:..# w
5530: 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 Name of the
5540: 20 63 61 6e 76 61 73 0d 0a 23 20 20 20 20 78 73 canvas..# xs
5550: 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d 75 cale Minimu
5560: 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 73 m, maximum and s
5570: 74 65 70 20 66 6f 72 20 78 2d 61 78 69 73 20 28 tep for x-axis (
5580: 69 6e 69 74 69 61 6c 29 0d 0a 23 20 20 20 20 79 initial)..# y
5590: 73 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d scale Minim
55a0: 75 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 um, maximum and
55b0: 73 74 65 70 20 66 6f 72 20 79 2d 61 78 69 73 0d step for y-axis.
55c0: 0a 23 20 52 65 73 75 6c 74 3a 0d 0a 23 20 20 20 .# Result:..#
55d0: 20 4e 61 6d 65 20 6f 66 20 61 20 6e 65 77 20 63 Name of a new c
55e0: 6f 6d 6d 61 6e 64 0d 0a 23 20 4e 6f 74 65 3a 0d ommand..# Note:.
55f0: 0a 23 20 20 20 20 54 68 65 20 65 6e 74 69 72 65 .# The entire
5600: 20 63 61 6e 76 61 73 20 77 69 6c 6c 20 62 65 20 canvas will be
5610: 64 65 64 69 63 61 74 65 64 20 74 6f 20 74 68 65 dedicated to the
5620: 20 58 59 20 70 6c 6f 74 2e 0d 0a 23 20 20 20 20 XY plot...#
5630: 54 68 65 20 70 6c 6f 74 20 77 69 6c 6c 20 62 65 The plot will be
5640: 20 64 72 61 77 6e 20 77 69 74 68 20 61 78 65 73 drawn with axes
5650: 0d 0a 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 ..#..proc ::Plot
5660: 63 68 61 72 74 3a 3a 63 72 65 61 74 65 58 59 50 chart::createXYP
5670: 6c 6f 74 20 7b 20 77 20 78 73 63 61 6c 65 20 79 lot { w xscale y
5680: 73 63 61 6c 65 20 7d 20 7b 0d 0a 20 20 20 76 61 scale } {.. va
5690: 72 69 61 62 6c 65 20 64 61 74 61 5f 73 65 72 69 riable data_seri
56a0: 65 73 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 es.... foreach
56b0: 20 73 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 s [array names
56c0: 64 61 74 61 5f 73 65 72 69 65 73 20 22 24 77 2c data_series "$w,
56d0: 2a 22 5d 20 7b 0d 0a 20 20 20 20 20 20 75 6e 73 *"] {.. uns
56e0: 65 74 20 64 61 74 61 5f 73 65 72 69 65 73 28 24 et data_series($
56f0: 73 29 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 73 s).. }.... s
5700: 65 74 20 6e 65 77 63 68 61 72 74 20 22 78 79 70 et newchart "xyp
5710: 6c 6f 74 5f 24 77 22 0d 0a 20 20 20 69 6e 74 65 lot_$w".. inte
5720: 72 70 20 61 6c 69 61 73 20 7b 7d 20 24 6e 65 77 rp alias {} $new
5730: 63 68 61 72 74 20 7b 7d 20 3a 3a 50 6c 6f 74 63 chart {} ::Plotc
5740: 68 61 72 74 3a 3a 50 6c 6f 74 48 61 6e 64 6c 65 hart::PlotHandle
5750: 72 20 78 79 70 6c 6f 74 20 24 77 0d 0a 0d 0a 20 r xyplot $w....
5760: 20 20 66 6f 72 65 61 63 68 20 7b 70 78 6d 69 6e foreach {pxmin
5770: 20 70 79 6d 69 6e 20 70 78 6d 61 78 20 70 79 6d pymin pxmax pym
5780: 61 78 7d 20 5b 4d 61 72 67 69 6e 73 52 65 63 74 ax} [MarginsRect
5790: 61 6e 67 6c 65 20 24 77 5d 20 7b 62 72 65 61 6b angle $w] {break
57a0: 7d 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 }.... foreach
57b0: 7b 78 6d 69 6e 20 78 6d 61 78 20 78 64 65 6c 74 {xmin xmax xdelt
57c0: 7d 20 24 78 73 63 61 6c 65 20 7b 62 72 65 61 6b } $xscale {break
57d0: 7d 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 7b 79 }.. foreach {y
57e0: 6d 69 6e 20 79 6d 61 78 20 79 64 65 6c 74 7d 20 min ymax ydelt}
57f0: 24 79 73 63 61 6c 65 20 7b 62 72 65 61 6b 7d 0d $yscale {break}.
5800: 0a 0d 0a 20 20 20 69 66 20 7b 20 24 78 64 65 6c ... if { $xdel
5810: 74 20 3d 3d 20 30 2e 30 20 7c 7c 20 24 79 64 65 t == 0.0 || $yde
5820: 6c 74 20 3d 3d 20 30 2e 30 20 7d 20 7b 0d 0a 20 lt == 0.0 } {..
5830: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 return -cod
5840: 65 20 65 72 72 6f 72 20 22 53 74 65 70 20 73 69 e error "Step si
5850: 7a 65 20 63 61 6e 20 6e 6f 74 20 62 65 20 7a 65 ze can not be ze
5860: 72 6f 22 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 ro".. }....
5870: 69 66 20 7b 20 28 24 78 6d 61 78 2d 24 78 6d 69 if { ($xmax-$xmi
5880: 6e 29 2a 24 78 64 65 6c 74 20 3c 20 30 2e 30 20 n)*$xdelt < 0.0
5890: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 78 } {.. set x
58a0: 64 65 6c 74 20 5b 65 78 70 72 20 7b 2d 24 78 64 delt [expr {-$xd
58b0: 65 6c 74 7d 5d 0d 0a 20 20 20 7d 0d 0a 20 20 20 elt}].. }..
58c0: 69 66 20 7b 20 28 24 79 6d 61 78 2d 24 79 6d 69 if { ($ymax-$ymi
58d0: 6e 29 2a 24 79 64 65 6c 74 20 3c 20 30 2e 30 20 n)*$ydelt < 0.0
58e0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 79 } {.. set y
58f0: 64 65 6c 74 20 5b 65 78 70 72 20 7b 2d 24 79 64 delt [expr {-$yd
5900: 65 6c 74 7d 5d 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 elt}].. }....
5910: 20 20 76 69 65 77 50 6f 72 74 20 20 20 20 20 20 viewPort
5920: 20 20 20 24 77 20 24 70 78 6d 69 6e 20 24 70 79 $w $pxmin $py
5930: 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 79 6d 61 min $pxmax $pyma
5940: 78 0d 0a 20 20 20 77 6f 72 6c 64 43 6f 6f 72 64 x.. worldCoord
5950: 69 6e 61 74 65 73 20 24 77 20 24 78 6d 69 6e 20 inates $w $xmin
5960: 20 24 79 6d 69 6e 20 20 24 78 6d 61 78 20 20 24 $ymin $xmax $
5970: 79 6d 61 78 0d 0a 0d 0a 20 20 20 44 72 61 77 59 ymax.... DrawY
5980: 61 78 69 73 20 20 20 20 20 20 20 20 24 77 20 24 axis $w $
5990: 79 6d 69 6e 20 20 24 79 6d 61 78 20 20 24 79 64 ymin $ymax $yd
59a0: 65 6c 74 0d 0a 20 20 20 44 72 61 77 58 61 78 69 elt.. DrawXaxi
59b0: 73 20 20 20 20 20 20 20 20 24 77 20 24 78 6d 69 s $w $xmi
59c0: 6e 20 20 24 78 6d 61 78 20 20 24 78 64 65 6c 74 n $xmax $xdelt
59d0: 0d 0a 20 20 20 44 72 61 77 4d 61 73 6b 20 20 20 .. DrawMask
59e0: 20 20 20 20 20 20 24 77 0d 0a 20 20 20 44 65 66 $w.. Def
59f0: 61 75 6c 74 4c 65 67 65 6e 64 20 20 20 20 24 77 aultLegend $w
5a00: 0d 0a 20 20 20 44 65 66 61 75 6c 74 42 61 6c 6c .. DefaultBall
5a10: 6f 6f 6e 20 20 20 24 77 0d 0a 0d 0a 20 20 20 72 oon $w.... r
5a20: 65 74 75 72 6e 20 24 6e 65 77 63 68 61 72 74 0d eturn $newchart.
5a30: 0a 7d 0d 0a 0d 0a 23 20 63 72 65 61 74 65 53 74 .}....# createSt
5a40: 72 69 70 63 68 61 72 74 20 2d 2d 0d 0a 23 20 20 ripchart --..#
5a50: 20 20 43 72 65 61 74 65 20 61 20 63 6f 6d 6d 61 Create a comma
5a60: 6e 64 20 66 6f 72 20 64 72 61 77 69 6e 67 20 61 nd for drawing a
5a70: 20 73 74 72 69 70 20 63 68 61 72 74 0d 0a 23 20 strip chart..#
5a80: 41 72 67 75 6d 65 6e 74 73 3a 0d 0a 23 20 20 20 Arguments:..#
5a90: 20 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d w Nam
5aa0: 65 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 0d e of the canvas.
5ab0: 0a 23 20 20 20 20 78 73 63 61 6c 65 20 20 20 20 .# xscale
5ac0: 20 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d Minimum, maxim
5ad0: 75 6d 20 61 6e 64 20 73 74 65 70 20 66 6f 72 20 um and step for
5ae0: 78 2d 61 78 69 73 20 28 69 6e 69 74 69 61 6c 29 x-axis (initial)
5af0: 0d 0a 23 20 20 20 20 79 73 63 61 6c 65 20 20 20 ..# yscale
5b00: 20 20 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 Minimum, maxi
5b10: 6d 75 6d 20 61 6e 64 20 73 74 65 70 20 66 6f 72 mum and step for
5b20: 20 79 2d 61 78 69 73 0d 0a 23 20 52 65 73 75 6c y-axis..# Resul
5b30: 74 3a 0d 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 t:..# Name of
5b40: 20 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0d 0a a new command..
5b50: 23 20 4e 6f 74 65 3a 0d 0a 23 20 20 20 20 54 68 # Note:..# Th
5b60: 65 20 65 6e 74 69 72 65 20 63 61 6e 76 61 73 20 e entire canvas
5b70: 77 69 6c 6c 20 62 65 20 64 65 64 69 63 61 74 65 will be dedicate
5b80: 64 20 74 6f 20 74 68 65 20 73 74 72 69 70 63 68 d to the stripch
5b90: 61 72 74 2e 0d 0a 23 20 20 20 20 54 68 65 20 73 art...# The s
5ba0: 74 72 69 70 63 68 61 72 74 20 77 69 6c 6c 20 62 tripchart will b
5bb0: 65 20 64 72 61 77 6e 20 77 69 74 68 20 61 78 65 e drawn with axe
5bc0: 73 0d 0a 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f s..#..proc ::Plo
5bd0: 74 63 68 61 72 74 3a 3a 63 72 65 61 74 65 53 74 tchart::createSt
5be0: 72 69 70 63 68 61 72 74 20 7b 20 77 20 78 73 63 ripchart { w xsc
5bf0: 61 6c 65 20 79 73 63 61 6c 65 20 7d 20 7b 0d 0a ale yscale } {..
5c00: 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 74 61 variable data
5c10: 5f 73 65 72 69 65 73 0d 0a 0d 0a 20 20 20 73 65 _series.... se
5c20: 74 20 6e 65 77 63 68 61 72 74 20 5b 63 72 65 61 t newchart [crea
5c30: 74 65 58 59 50 6c 6f 74 20 24 77 20 24 78 73 63 teXYPlot $w $xsc
5c40: 61 6c 65 20 24 79 73 63 61 6c 65 5d 0d 0a 0d 0a ale $yscale]....
5c50: 20 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 interp alias
5c60: 7b 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 0d {} $newchart {}.
5c70: 0a 0d 0a 20 20 20 73 65 74 20 6e 65 77 63 68 61 ... set newcha
5c80: 72 74 20 22 73 74 72 69 70 63 68 61 72 74 5f 24 rt "stripchart_$
5c90: 77 22 0d 0a 20 20 20 69 6e 74 65 72 70 20 61 6c w".. interp al
5ca0: 69 61 73 20 7b 7d 20 24 6e 65 77 63 68 61 72 74 ias {} $newchart
5cb0: 20 7b 7d 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a {} ::Plotchart:
5cc0: 3a 50 6c 6f 74 48 61 6e 64 6c 65 72 20 73 74 72 :PlotHandler str
5cd0: 69 70 63 68 61 72 74 20 24 77 0d 0a 0d 0a 20 20 ipchart $w....
5ce0: 20 72 65 74 75 72 6e 20 24 6e 65 77 63 68 61 72 return $newchar
5cf0: 74 0d 0a 7d 0d 0a 0d 0a 23 20 63 72 65 61 74 65 t..}....# create
5d00: 49 73 6f 6d 65 74 72 69 63 50 6c 6f 74 20 2d 2d IsometricPlot --
5d10: 0d 0a 23 20 20 20 20 43 72 65 61 74 65 20 61 20 ..# Create a
5d20: 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 61 77 command for draw
5d30: 69 6e 67 20 61 6e 20 22 69 73 6f 6d 65 74 72 69 ing an "isometri
5d40: 63 22 20 70 6c 6f 74 0d 0a 23 20 41 72 67 75 6d c" plot..# Argum
5d50: 65 6e 74 73 3a 0d 0a 23 20 20 20 20 77 20 20 20 ents:..# w
5d60: 20 20 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 Name of
5d70: 74 68 65 20 63 61 6e 76 61 73 0d 0a 23 20 20 20 the canvas..#
5d80: 20 78 73 63 61 6c 65 20 20 20 20 20 20 4d 69 6e xscale Min
5d90: 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d imum and maximum
5da0: 20 66 6f 72 20 78 2d 61 78 69 73 0d 0a 23 20 20 for x-axis..#
5db0: 20 20 79 73 63 61 6c 65 20 20 20 20 20 20 4d 69 yscale Mi
5dc0: 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 nimum and maximu
5dd0: 6d 20 66 6f 72 20 79 2d 61 78 69 73 0d 0a 23 20 m for y-axis..#
5de0: 20 20 20 73 74 65 70 73 69 7a 65 20 20 20 20 53 stepsize S
5df0: 74 65 70 20 73 69 7a 65 20 66 6f 72 20 6e 75 6d tep size for num
5e00: 62 65 72 73 20 6f 6e 20 74 68 65 20 61 78 65 73 bers on the axes
5e10: 20 6f 72 20 22 6e 6f 61 78 65 73 22 0d 0a 23 20 or "noaxes"..#
5e20: 52 65 73 75 6c 74 3a 0d 0a 23 20 20 20 20 4e 61 Result:..# Na
5e30: 6d 65 20 6f 66 20 61 20 6e 65 77 20 63 6f 6d 6d me of a new comm
5e40: 61 6e 64 0d 0a 23 20 4e 6f 74 65 3a 0d 0a 23 20 and..# Note:..#
5e50: 20 20 20 54 68 65 20 65 6e 74 69 72 65 20 63 61 The entire ca
5e60: 6e 76 61 73 20 77 69 6c 6c 20 62 65 20 64 65 64 nvas will be ded
5e70: 69 63 61 74 65 64 20 74 6f 20 74 68 65 20 70 6c icated to the pl
5e80: 6f 74 0d 0a 23 20 20 20 20 54 68 65 20 70 6c 6f ot..# The plo
5e90: 74 20 77 69 6c 6c 20 62 65 20 64 72 61 77 6e 20 t will be drawn
5ea0: 77 69 74 68 20 6f 72 20 77 69 74 68 6f 75 74 20 with or without
5eb0: 61 78 65 73 0d 0a 23 0d 0a 70 72 6f 63 20 3a 3a axes..#..proc ::
5ec0: 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 65 61 74 Plotchart::creat
5ed0: 65 49 73 6f 6d 65 74 72 69 63 50 6c 6f 74 20 7b eIsometricPlot {
5ee0: 20 77 20 78 73 63 61 6c 65 20 79 73 63 61 6c 65 w xscale yscale
5ef0: 20 73 74 65 70 73 69 7a 65 20 7d 20 7b 0d 0a 20 stepsize } {..
5f00: 20 20 76 61 72 69 61 62 6c 65 20 64 61 74 61 5f variable data_
5f10: 73 65 72 69 65 73 0d 0a 0d 0a 20 20 20 66 6f 72 series.... for
5f20: 65 61 63 68 20 73 20 5b 61 72 72 61 79 20 6e 61 each s [array na
5f30: 6d 65 73 20 64 61 74 61 5f 73 65 72 69 65 73 20 mes data_series
5f40: 22 24 77 2c 2a 22 5d 20 7b 0d 0a 20 20 20 20 20 "$w,*"] {..
5f50: 20 75 6e 73 65 74 20 64 61 74 61 5f 73 65 72 69 unset data_seri
5f60: 65 73 28 24 73 29 0d 0a 20 20 20 7d 0d 0a 0d 0a es($s).. }....
5f70: 20 20 20 73 65 74 20 6e 65 77 63 68 61 72 74 20 set newchart
5f80: 22 69 73 6f 6d 65 74 72 69 63 5f 24 77 22 0d 0a "isometric_$w"..
5f90: 20 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 interp alias
5fa0: 7b 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 {} $newchart {}
5fb0: 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f ::Plotchart::Plo
5fc0: 74 48 61 6e 64 6c 65 72 20 69 73 6f 6d 65 74 72 tHandler isometr
5fd0: 69 63 20 24 77 0d 0a 0d 0a 20 20 20 69 66 20 7b ic $w.... if {
5fe0: 20 24 73 74 65 70 73 69 7a 65 20 21 3d 20 22 6e $stepsize != "n
5ff0: 6f 61 78 65 73 22 20 7d 20 7b 0d 0a 20 20 20 20 oaxes" } {..
6000: 20 20 66 6f 72 65 61 63 68 20 7b 70 78 6d 69 6e foreach {pxmin
6010: 20 70 79 6d 69 6e 20 70 78 6d 61 78 20 70 79 6d pymin pxmax pym
6020: 61 78 7d 20 5b 4d 61 72 67 69 6e 73 52 65 63 74 ax} [MarginsRect
6030: 61 6e 67 6c 65 20 24 77 5d 20 7b 62 72 65 61 6b angle $w] {break
6040: 7d 0d 0a 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a }.. } else {..
6050: 20 20 20 20 20 20 73 65 74 20 70 78 6d 69 6e 20 set pxmin
6060: 30 0d 0a 20 20 20 20 20 20 73 65 74 20 70 79 6d 0.. set pym
6070: 69 6e 20 30 0d 0a 20 20 20 20 20 20 23 73 65 74 in 0.. #set
6080: 20 70 78 6d 61 78 20 5b 24 77 20 63 67 65 74 20 pxmax [$w cget
6090: 2d 77 69 64 74 68 5d 0d 0a 20 20 20 20 20 20 23 -width].. #
60a0: 73 65 74 20 70 79 6d 61 78 20 5b 24 77 20 63 67 set pymax [$w cg
60b0: 65 74 20 2d 68 65 69 67 68 74 5d 0d 0a 20 20 20 et -height]..
60c0: 20 20 20 73 65 74 20 70 78 6d 61 78 20 5b 57 69 set pxmax [Wi
60d0: 64 74 68 43 61 6e 76 61 73 20 24 77 5d 0d 0a 20 dthCanvas $w]..
60e0: 20 20 20 20 20 73 65 74 20 70 79 6d 61 78 20 5b set pymax [
60f0: 48 65 69 67 68 74 43 61 6e 76 61 73 20 24 77 5d HeightCanvas $w]
6100: 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 66 6f 72 .. }.... for
6110: 65 61 63 68 20 7b 78 6d 69 6e 20 78 6d 61 78 7d each {xmin xmax}
6120: 20 24 78 73 63 61 6c 65 20 7b 62 72 65 61 6b 7d $xscale {break}
6130: 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 7b 79 6d .. foreach {ym
6140: 69 6e 20 79 6d 61 78 7d 20 24 79 73 63 61 6c 65 in ymax} $yscale
6150: 20 7b 62 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 69 {break}.... i
6160: 66 20 7b 20 24 78 6d 69 6e 20 3d 3d 20 24 78 6d f { $xmin == $xm
6170: 61 78 20 7c 7c 20 24 79 6d 69 6e 20 3d 3d 20 24 ax || $ymin == $
6180: 79 6d 61 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ymax } {..
6190: 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 return -code err
61a0: 6f 72 20 22 45 78 74 72 65 6d 65 73 20 66 6f 72 or "Extremes for
61b0: 20 61 78 65 73 20 6d 75 73 74 20 62 65 20 64 69 axes must be di
61c0: 66 66 65 72 65 6e 74 22 0d 0a 20 20 20 7d 0d 0a fferent".. }..
61d0: 0d 0a 20 20 20 76 69 65 77 50 6f 72 74 20 20 20 .. viewPort
61e0: 20 20 20 20 20 20 24 77 20 24 70 78 6d 69 6e 20 $w $pxmin
61f0: 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 $pymin $pxmax $p
6200: 79 6d 61 78 0d 0a 20 20 20 53 63 61 6c 65 49 73 ymax.. ScaleIs
6210: 6f 6d 65 74 72 69 63 20 20 20 24 77 20 24 78 6d ometric $w $xm
6220: 69 6e 20 20 24 79 6d 69 6e 20 20 24 78 6d 61 78 in $ymin $xmax
6230: 20 20 24 79 6d 61 78 0d 0a 0d 0a 20 20 20 69 66 $ymax.... if
6240: 20 7b 20 24 73 74 65 70 73 69 7a 65 20 21 3d 20 { $stepsize !=
6250: 22 6e 6f 61 78 65 73 22 20 7d 20 7b 0d 0a 20 20 "noaxes" } {..
6260: 20 20 20 20 44 72 61 77 59 61 78 69 73 20 20 20 DrawYaxis
6270: 20 20 20 20 20 24 77 20 24 79 6d 69 6e 20 20 24 $w $ymin $
6280: 79 6d 61 78 20 20 24 79 64 65 6c 74 0d 0a 20 20 ymax $ydelt..
6290: 20 20 20 20 44 72 61 77 58 61 78 69 73 20 20 20 DrawXaxis
62a0: 20 20 20 20 20 24 77 20 24 78 6d 69 6e 20 20 24 $w $xmin $
62b0: 78 6d 61 78 20 20 24 78 64 65 6c 74 0d 0a 20 20 xmax $xdelt..
62c0: 20 20 20 20 44 72 61 77 4d 61 73 6b 20 20 20 20 DrawMask
62d0: 20 20 20 20 20 24 77 0d 0a 20 20 20 7d 0d 0a 20 $w.. }..
62e0: 20 20 44 65 66 61 75 6c 74 4c 65 67 65 6e 64 20 DefaultLegend
62f0: 20 24 77 0d 0a 20 20 20 44 65 66 61 75 6c 74 42 $w.. DefaultB
6300: 61 6c 6c 6f 6f 6e 20 24 77 0d 0a 0d 0a 20 20 20 alloon $w....
6310: 72 65 74 75 72 6e 20 24 6e 65 77 63 68 61 72 74 return $newchart
6320: 0d 0a 7d 0d 0a 0d 0a 23 20 63 72 65 61 74 65 48 ..}....# createH
6330: 69 73 74 6f 67 72 61 6d 20 2d 2d 0d 0a 23 20 20 istogram --..#
6340: 20 20 43 72 65 61 74 65 20 61 20 63 6f 6d 6d 61 Create a comma
6350: 6e 64 20 66 6f 72 20 64 72 61 77 69 6e 67 20 61 nd for drawing a
6360: 20 68 69 73 74 6f 67 72 61 6d 0d 0a 23 20 41 72 histogram..# Ar
6370: 67 75 6d 65 6e 74 73 3a 0d 0a 23 20 20 20 20 77 guments:..# w
6380: 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 20 Name
6390: 6f 66 20 74 68 65 20 63 61 6e 76 61 73 0d 0a 23 of the canvas..#
63a0: 20 20 20 20 78 73 63 61 6c 65 20 20 20 20 20 20 xscale
63b0: 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d Minimum, maximum
63c0: 20 61 6e 64 20 73 74 65 70 20 66 6f 72 20 78 2d and step for x-
63d0: 61 78 69 73 20 28 69 6e 69 74 69 61 6c 29 0d 0a axis (initial)..
63e0: 23 20 20 20 20 79 73 63 61 6c 65 20 20 20 20 20 # yscale
63f0: 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 Minimum, maximu
6400: 6d 20 61 6e 64 20 73 74 65 70 20 66 6f 72 20 79 m and step for y
6410: 2d 61 78 69 73 0d 0a 23 20 52 65 73 75 6c 74 3a -axis..# Result:
6420: 0d 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 20 61 ..# Name of a
6430: 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0d 0a 23 20 new command..#
6440: 4e 6f 74 65 3a 0d 0a 23 20 20 20 20 54 68 65 20 Note:..# The
6450: 65 6e 74 69 72 65 20 63 61 6e 76 61 73 20 77 69 entire canvas wi
6460: 6c 6c 20 62 65 20 64 65 64 69 63 61 74 65 64 20 ll be dedicated
6470: 74 6f 20 74 68 65 20 68 69 73 74 6f 67 72 61 6d to the histogram
6480: 2e 0d 0a 23 20 20 20 20 54 68 65 20 70 6c 6f 74 ...# The plot
6490: 20 77 69 6c 6c 20 62 65 20 64 72 61 77 6e 20 77 will be drawn w
64a0: 69 74 68 20 61 78 65 73 0d 0a 23 20 20 20 20 54 ith axes..# T
64b0: 68 69 73 20 69 73 20 61 6c 6d 6f 73 74 20 74 68 his is almost th
64c0: 65 20 73 61 6d 65 20 63 6f 64 65 20 61 73 20 66 e same code as f
64d0: 6f 72 20 61 6e 20 58 59 20 70 6c 6f 74 0d 0a 23 or an XY plot..#
64e0: 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 ..proc ::Plotcha
64f0: 72 74 3a 3a 63 72 65 61 74 65 48 69 73 74 6f 67 rt::createHistog
6500: 72 61 6d 20 7b 20 77 20 78 73 63 61 6c 65 20 79 ram { w xscale y
6510: 73 63 61 6c 65 20 7d 20 7b 0d 0a 20 20 20 76 61 scale } {.. va
6520: 72 69 61 62 6c 65 20 64 61 74 61 5f 73 65 72 69 riable data_seri
6530: 65 73 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 es.... foreach
6540: 20 73 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 s [array names
6550: 64 61 74 61 5f 73 65 72 69 65 73 20 22 24 77 2c data_series "$w,
6560: 2a 22 5d 20 7b 0d 0a 20 20 20 20 20 20 75 6e 73 *"] {.. uns
6570: 65 74 20 64 61 74 61 5f 73 65 72 69 65 73 28 24 et data_series($
6580: 73 29 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 73 s).. }.... s
6590: 65 74 20 6e 65 77 63 68 61 72 74 20 22 68 69 73 et newchart "his
65a0: 74 6f 67 72 61 6d 5f 24 77 22 0d 0a 20 20 20 69 togram_$w".. i
65b0: 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 24 nterp alias {} $
65c0: 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a 3a 50 6c newchart {} ::Pl
65d0: 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 48 61 6e otchart::PlotHan
65e0: 64 6c 65 72 20 68 69 73 74 6f 67 72 61 6d 20 24 dler histogram $
65f0: 77 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 w.... foreach
6600: 7b 70 78 6d 69 6e 20 70 79 6d 69 6e 20 70 78 6d {pxmin pymin pxm
6610: 61 78 20 70 79 6d 61 78 7d 20 5b 4d 61 72 67 69 ax pymax} [Margi
6620: 6e 73 52 65 63 74 61 6e 67 6c 65 20 24 77 5d 20 nsRectangle $w]
6630: 7b 62 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 66 6f {break}.... fo
6640: 72 65 61 63 68 20 7b 78 6d 69 6e 20 78 6d 61 78 reach {xmin xmax
6650: 20 78 64 65 6c 74 7d 20 24 78 73 63 61 6c 65 20 xdelt} $xscale
6660: 7b 62 72 65 61 6b 7d 0d 0a 20 20 20 66 6f 72 65 {break}.. fore
6670: 61 63 68 20 7b 79 6d 69 6e 20 79 6d 61 78 20 79 ach {ymin ymax y
6680: 64 65 6c 74 7d 20 24 79 73 63 61 6c 65 20 7b 62 delt} $yscale {b
6690: 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 69 66 20 7b reak}.... if {
66a0: 20 24 78 64 65 6c 74 20 3d 3d 20 30 2e 30 20 7c $xdelt == 0.0 |
66b0: 7c 20 24 79 64 65 6c 74 20 3d 3d 20 30 2e 30 20 | $ydelt == 0.0
66c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 } {.. retur
66d0: 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 53 n -code error "S
66e0: 74 65 70 20 73 69 7a 65 20 63 61 6e 20 6e 6f 74 tep size can not
66f0: 20 62 65 20 7a 65 72 6f 22 0d 0a 20 20 20 7d 0d be zero".. }.
6700: 0a 0d 0a 20 20 20 69 66 20 7b 20 28 24 78 6d 61 ... if { ($xma
6710: 78 2d 24 78 6d 69 6e 29 2a 24 78 64 65 6c 74 20 x-$xmin)*$xdelt
6720: 3c 20 30 2e 30 20 7d 20 7b 0d 0a 20 20 20 20 20 < 0.0 } {..
6730: 20 73 65 74 20 78 64 65 6c 74 20 5b 65 78 70 72 set xdelt [expr
6740: 20 7b 2d 24 78 64 65 6c 74 7d 5d 0d 0a 20 20 20 {-$xdelt}]..
6750: 7d 0d 0a 20 20 20 69 66 20 7b 20 28 24 79 6d 61 }.. if { ($yma
6760: 78 2d 24 79 6d 69 6e 29 2a 24 79 64 65 6c 74 20 x-$ymin)*$ydelt
6770: 3c 20 30 2e 30 20 7d 20 7b 0d 0a 20 20 20 20 20 < 0.0 } {..
6780: 20 73 65 74 20 79 64 65 6c 74 20 5b 65 78 70 72 set ydelt [expr
6790: 20 7b 2d 24 79 64 65 6c 74 7d 5d 0d 0a 20 20 20 {-$ydelt}]..
67a0: 7d 0d 0a 0d 0a 20 20 20 76 69 65 77 50 6f 72 74 }.... viewPort
67b0: 20 20 20 20 20 20 20 20 20 24 77 20 24 70 78 6d $w $pxm
67c0: 69 6e 20 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 in $pymin $pxmax
67d0: 20 24 70 79 6d 61 78 0d 0a 20 20 20 77 6f 72 6c $pymax.. worl
67e0: 64 43 6f 6f 72 64 69 6e 61 74 65 73 20 24 77 20 dCoordinates $w
67f0: 24 78 6d 69 6e 20 20 24 79 6d 69 6e 20 20 24 78 $xmin $ymin $x
6800: 6d 61 78 20 20 24 79 6d 61 78 0d 0a 0d 0a 20 20 max $ymax....
6810: 20 44 72 61 77 59 61 78 69 73 20 20 20 20 20 20 DrawYaxis
6820: 20 20 24 77 20 24 79 6d 69 6e 20 20 24 79 6d 61 $w $ymin $yma
6830: 78 20 20 24 79 64 65 6c 74 0d 0a 20 20 20 44 72 x $ydelt.. Dr
6840: 61 77 58 61 78 69 73 20 20 20 20 20 20 20 20 24 awXaxis $
6850: 77 20 24 78 6d 69 6e 20 20 24 78 6d 61 78 20 20 w $xmin $xmax
6860: 24 78 64 65 6c 74 0d 0a 20 20 20 44 72 61 77 4d $xdelt.. DrawM
6870: 61 73 6b 20 20 20 20 20 20 20 20 20 24 77 0d 0a ask $w..
6880: 20 20 20 44 65 66 61 75 6c 74 4c 65 67 65 6e 64 DefaultLegend
6890: 20 20 20 20 24 77 0d 0a 20 20 20 44 65 66 61 75 $w.. Defau
68a0: 6c 74 42 61 6c 6c 6f 6f 6e 20 20 20 24 77 0d 0a ltBalloon $w..
68b0: 0d 0a 20 20 20 72 65 74 75 72 6e 20 24 6e 65 77 .. return $new
68c0: 63 68 61 72 74 0d 0a 7d 0d 0a 0d 0a 23 20 63 72 chart..}....# cr
68d0: 65 61 74 65 50 69 65 63 68 61 72 74 20 2d 2d 0d eatePiechart --.
68e0: 0a 23 20 20 20 20 43 72 65 61 74 65 20 61 20 63 .# Create a c
68f0: 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 61 77 69 ommand for drawi
6900: 6e 67 20 61 20 70 69 65 20 63 68 61 72 74 0d 0a ng a pie chart..
6910: 23 20 41 72 67 75 6d 65 6e 74 73 3a 0d 0a 23 20 # Arguments:..#
6920: 20 20 20 77 20 20 20 20 20 20 20 20 20 20 20 4e w N
6930: 61 6d 65 20 6f 66 20 74 68 65 20 63 61 6e 76 61 ame of the canva
6940: 73 0d 0a 23 20 52 65 73 75 6c 74 3a 0d 0a 23 20 s..# Result:..#
6950: 20 20 20 4e 61 6d 65 20 6f 66 20 61 20 6e 65 77 Name of a new
6960: 20 63 6f 6d 6d 61 6e 64 0d 0a 23 20 4e 6f 74 65 command..# Note
6970: 3a 0d 0a 23 20 20 20 20 54 68 65 20 65 6e 74 69 :..# The enti
6980: 72 65 20 63 61 6e 76 61 73 20 77 69 6c 6c 20 62 re canvas will b
6990: 65 20 64 65 64 69 63 61 74 65 64 20 74 6f 20 74 e dedicated to t
69a0: 68 65 20 70 69 65 20 63 68 61 72 74 2e 0d 0a 23 he pie chart...#
69b0: 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 ..proc ::Plotcha
69c0: 72 74 3a 3a 63 72 65 61 74 65 50 69 65 63 68 61 rt::createPiecha
69d0: 72 74 20 7b 20 77 20 7d 20 7b 0d 0a 20 20 20 76 rt { w } {.. v
69e0: 61 72 69 61 62 6c 65 20 64 61 74 61 5f 73 65 72 ariable data_ser
69f0: 69 65 73 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 ies.... foreac
6a00: 68 20 73 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 h s [array names
6a10: 20 64 61 74 61 5f 73 65 72 69 65 73 20 22 24 77 data_series "$w
6a20: 2c 2a 22 5d 20 7b 0d 0a 20 20 20 20 20 20 75 6e ,*"] {.. un
6a30: 73 65 74 20 64 61 74 61 5f 73 65 72 69 65 73 28 set data_series(
6a40: 24 73 29 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 $s).. }....
6a50: 73 65 74 20 6e 65 77 63 68 61 72 74 20 22 70 69 set newchart "pi
6a60: 65 63 68 61 72 74 5f 24 77 22 0d 0a 20 20 20 69 echart_$w".. i
6a70: 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 24 nterp alias {} $
6a80: 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a 3a 50 6c newchart {} ::Pl
6a90: 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 48 61 6e otchart::PlotHan
6aa0: 64 6c 65 72 20 70 69 65 63 68 61 72 74 20 24 77 dler piechart $w
6ab0: 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 7b .... foreach {
6ac0: 70 78 6d 69 6e 20 70 79 6d 69 6e 20 70 78 6d 61 pxmin pymin pxma
6ad0: 78 20 70 79 6d 61 78 7d 20 5b 4d 61 72 67 69 6e x pymax} [Margin
6ae0: 73 43 69 72 63 6c 65 20 24 77 5d 20 7b 62 72 65 sCircle $w] {bre
6af0: 61 6b 7d 0d 0a 0d 0a 20 20 20 76 69 65 77 50 6f ak}.... viewPo
6b00: 72 74 20 24 77 20 24 70 78 6d 69 6e 20 24 70 79 rt $w $pxmin $py
6b10: 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 79 6d 61 min $pxmax $pyma
6b20: 78 0d 0a 20 20 20 24 77 20 63 72 65 61 74 65 20 x.. $w create
6b30: 6f 76 61 6c 20 24 70 78 6d 69 6e 20 24 70 79 6d oval $pxmin $pym
6b40: 69 6e 20 24 70 78 6d 61 78 20 24 70 79 6d 61 78 in $pxmax $pymax
6b50: 0d 0a 0d 0a 20 20 20 53 65 74 43 6f 6c 6f 75 72 .... SetColour
6b60: 73 20 24 77 20 62 6c 75 65 20 6c 69 67 68 74 62 s $w blue lightb
6b70: 6c 75 65 20 67 72 65 65 6e 20 79 65 6c 6c 6f 77 lue green yellow
6b80: 20 6f 72 61 6e 67 65 20 72 65 64 20 6d 61 67 65 orange red mage
6b90: 6e 74 61 20 62 72 6f 77 6e 0d 0a 20 20 20 44 65 nta brown.. De
6ba0: 66 61 75 6c 74 4c 65 67 65 6e 64 20 20 24 77 0d faultLegend $w.
6bb0: 0a 20 20 20 44 65 66 61 75 6c 74 42 61 6c 6c 6f . DefaultBallo
6bc0: 6f 6e 20 24 77 0d 0a 0d 0a 20 20 20 72 65 74 75 on $w.... retu
6bd0: 72 6e 20 24 6e 65 77 63 68 61 72 74 0d 0a 7d 0d rn $newchart..}.
6be0: 0a 0d 0a 23 20 63 72 65 61 74 65 50 6f 6c 61 72 ...# createPolar
6bf0: 70 6c 6f 74 20 2d 2d 0d 0a 23 20 20 20 20 43 72 plot --..# Cr
6c00: 65 61 74 65 20 61 20 63 6f 6d 6d 61 6e 64 20 66 eate a command f
6c10: 6f 72 20 64 72 61 77 69 6e 67 20 61 20 70 6f 6c or drawing a pol
6c20: 61 72 20 70 6c 6f 74 0d 0a 23 20 41 72 67 75 6d ar plot..# Argum
6c30: 65 6e 74 73 3a 0d 0a 23 20 20 20 20 77 20 20 20 ents:..# w
6c40: 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 20 6f Name o
6c50: 66 20 74 68 65 20 63 61 6e 76 61 73 0d 0a 23 20 f the canvas..#
6c60: 20 20 20 72 61 64 69 75 73 5f 64 61 74 61 20 20 radius_data
6c70: 20 4d 61 78 69 6d 75 6d 20 72 61 64 69 75 73 20 Maximum radius
6c80: 61 6e 64 20 73 74 65 70 0d 0a 23 20 52 65 73 75 and step..# Resu
6c90: 6c 74 3a 0d 0a 23 20 20 20 20 4e 61 6d 65 20 6f lt:..# Name o
6ca0: 66 20 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0d f a new command.
6cb0: 0a 23 20 4e 6f 74 65 3a 0d 0a 23 20 20 20 20 54 .# Note:..# T
6cc0: 68 65 20 65 6e 74 69 72 65 20 63 61 6e 76 61 73 he entire canvas
6cd0: 20 77 69 6c 6c 20 62 65 20 64 65 64 69 63 61 74 will be dedicat
6ce0: 65 64 20 74 6f 20 74 68 65 20 70 6f 6c 61 72 20 ed to the polar
6cf0: 70 6c 6f 74 0d 0a 23 20 20 20 20 50 6f 73 73 69 plot..# Possi
6d00: 62 6c 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 61 ble additional a
6d10: 72 67 75 6d 65 6e 74 73 20 28 6f 70 74 69 6f 6e rguments (option
6d20: 61 6c 29 3a 20 6e 61 75 74 69 63 61 6c 2f 6d 61 al): nautical/ma
6d30: 74 68 65 6d 61 74 69 63 61 6c 0d 0a 23 20 20 20 thematical..#
6d40: 20 73 74 65 70 20 69 6e 20 70 68 69 0d 0a 23 0d step in phi..#.
6d50: 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 .proc ::Plotchar
6d60: 74 3a 3a 63 72 65 61 74 65 50 6f 6c 61 72 70 6c t::createPolarpl
6d70: 6f 74 20 7b 20 77 20 72 61 64 69 75 73 5f 64 61 ot { w radius_da
6d80: 74 61 20 7d 20 7b 0d 0a 20 20 20 76 61 72 69 61 ta } {.. varia
6d90: 62 6c 65 20 64 61 74 61 5f 73 65 72 69 65 73 0d ble data_series.
6da0: 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 73 20 ... foreach s
6db0: 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 64 61 74 [array names dat
6dc0: 61 5f 73 65 72 69 65 73 20 22 24 77 2c 2a 22 5d a_series "$w,*"]
6dd0: 20 7b 0d 0a 20 20 20 20 20 20 75 6e 73 65 74 20 {.. unset
6de0: 64 61 74 61 5f 73 65 72 69 65 73 28 24 73 29 0d data_series($s).
6df0: 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 73 65 74 20 . }.... set
6e00: 6e 65 77 63 68 61 72 74 20 22 70 6f 6c 61 72 70 newchart "polarp
6e10: 6c 6f 74 5f 24 77 22 0d 0a 20 20 20 69 6e 74 65 lot_$w".. inte
6e20: 72 70 20 61 6c 69 61 73 20 7b 7d 20 24 6e 65 77 rp alias {} $new
6e30: 63 68 61 72 74 20 7b 7d 20 3a 3a 50 6c 6f 74 63 chart {} ::Plotc
6e40: 68 61 72 74 3a 3a 50 6c 6f 74 48 61 6e 64 6c 65 hart::PlotHandle
6e50: 72 20 70 6f 6c 61 72 70 6c 6f 74 20 24 77 0d 0a r polarplot $w..
6e60: 0d 0a 20 20 20 73 65 74 20 72 61 64 5f 6d 61 78 .. set rad_max
6e70: 20 20 20 5b 6c 69 6e 64 65 78 20 24 72 61 64 69 [lindex $radi
6e80: 75 73 5f 64 61 74 61 20 30 5d 0d 0a 20 20 20 73 us_data 0].. s
6e90: 65 74 20 72 61 64 5f 73 74 65 70 20 20 5b 6c 69 et rad_step [li
6ea0: 6e 64 65 78 20 24 72 61 64 69 75 73 5f 64 61 74 ndex $radius_dat
6eb0: 61 20 31 5d 0d 0a 0d 0a 20 20 20 69 66 20 7b 20 a 1].... if {
6ec0: 24 72 61 64 5f 73 74 65 70 20 3c 3d 20 30 2e 30 $rad_step <= 0.0
6ed0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 } {.. retu
6ee0: 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 rn -code error "
6ef0: 53 74 65 70 20 73 69 7a 65 20 63 61 6e 20 6e 6f Step size can no
6f00: 74 20 62 65 20 7a 65 72 6f 20 6f 72 20 6e 65 67 t be zero or neg
6f10: 61 74 69 76 65 22 0d 0a 20 20 20 7d 0d 0a 20 20 ative".. }..
6f20: 20 69 66 20 7b 20 24 72 61 64 5f 6d 61 78 20 3c if { $rad_max <
6f30: 3d 20 30 2e 30 20 7d 20 7b 0d 0a 20 20 20 20 20 = 0.0 } {..
6f40: 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 return -code er
6f50: 72 6f 72 20 22 4d 61 78 69 6d 75 6d 20 72 61 64 ror "Maximum rad
6f60: 69 75 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 7a ius can not be z
6f70: 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 22 ero or negative"
6f80: 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 66 6f 72 .. }.... for
6f90: 65 61 63 68 20 7b 70 78 6d 69 6e 20 70 79 6d 69 each {pxmin pymi
6fa0: 6e 20 70 78 6d 61 78 20 70 79 6d 61 78 7d 20 5b n pxmax pymax} [
6fb0: 4d 61 72 67 69 6e 73 43 69 72 63 6c 65 20 24 77 MarginsCircle $w
6fc0: 5d 20 7b 62 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 ] {break}....
6fd0: 76 69 65 77 50 6f 72 74 20 20 20 20 20 20 20 20 viewPort
6fe0: 20 24 77 20 24 70 78 6d 69 6e 20 20 20 20 20 24 $w $pxmin $
6ff0: 70 79 6d 69 6e 20 20 20 20 20 24 70 78 6d 61 78 pymin $pxmax
7000: 20 20 20 24 70 79 6d 61 78 0d 0a 20 20 20 70 6f $pymax.. po
7010: 6c 61 72 43 6f 6f 72 64 69 6e 61 74 65 73 20 24 larCoordinates $
7020: 77 20 24 72 61 64 5f 6d 61 78 0d 0a 20 20 20 44 w $rad_max.. D
7030: 72 61 77 50 6f 6c 61 72 41 78 65 73 20 20 20 20 rawPolarAxes
7040: 24 77 20 24 72 61 64 5f 6d 61 78 20 20 20 24 72 $w $rad_max $r
7050: 61 64 5f 73 74 65 70 0d 0a 20 20 20 44 65 66 61 ad_step.. Defa
7060: 75 6c 74 4c 65 67 65 6e 64 20 20 20 20 24 77 0d ultLegend $w.
7070: 0a 20 20 20 44 65 66 61 75 6c 74 42 61 6c 6c 6f . DefaultBallo
7080: 6f 6e 20 20 20 24 77 0d 0a 0d 0a 20 20 20 72 65 on $w.... re
7090: 74 75 72 6e 20 24 6e 65 77 63 68 61 72 74 0d 0a turn $newchart..
70a0: 7d 0d 0a 0d 0a 23 20 63 72 65 61 74 65 42 61 72 }....# createBar
70b0: 63 68 61 72 74 20 2d 2d 0d 0a 23 20 20 20 20 43 chart --..# C
70c0: 72 65 61 74 65 20 61 20 63 6f 6d 6d 61 6e 64 20 reate a command
70d0: 66 6f 72 20 64 72 61 77 69 6e 67 20 61 20 62 61 for drawing a ba
70e0: 72 63 68 61 72 74 20 77 69 74 68 20 76 65 72 74 rchart with vert
70f0: 69 63 61 6c 20 62 61 72 73 0d 0a 23 20 41 72 67 ical bars..# Arg
7100: 75 6d 65 6e 74 73 3a 0d 0a 23 20 20 20 20 77 20 uments:..# w
7110: 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 20 6f Name o
7120: 66 20 74 68 65 20 63 61 6e 76 61 73 0d 0a 23 20 f the canvas..#
7130: 20 20 20 78 6c 61 62 65 6c 73 20 20 20 20 20 4c xlabels L
7140: 69 73 74 20 6f 66 20 6c 61 62 65 6c 73 20 66 6f ist of labels fo
7150: 72 20 78 2d 61 78 69 73 0d 0a 23 20 20 20 20 79 r x-axis..# y
7160: 73 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d scale Minim
7170: 75 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 um, maximum and
7180: 73 74 65 70 20 66 6f 72 20 79 2d 61 78 69 73 0d step for y-axis.
7190: 0a 23 20 20 20 20 6e 6f 73 65 72 69 65 73 20 20 .# noseries
71a0: 20 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 72 69 Number of seri
71b0: 65 73 20 6f 72 20 74 68 65 20 6b 65 79 77 6f 72 es or the keywor
71c0: 64 20 22 73 74 61 63 6b 65 64 22 0d 0a 23 20 52 d "stacked"..# R
71d0: 65 73 75 6c 74 3a 0d 0a 23 20 20 20 20 4e 61 6d esult:..# Nam
71e0: 65 20 6f 66 20 61 20 6e 65 77 20 63 6f 6d 6d 61 e of a new comma
71f0: 6e 64 0d 0a 23 20 4e 6f 74 65 3a 0d 0a 23 20 20 nd..# Note:..#
7200: 20 20 54 68 65 20 65 6e 74 69 72 65 20 63 61 6e The entire can
7210: 76 61 73 20 77 69 6c 6c 20 62 65 20 64 65 64 69 vas will be dedi
7220: 63 61 74 65 64 20 74 6f 20 74 68 65 20 62 61 72 cated to the bar
7230: 63 68 61 72 74 2e 0d 0a 23 0d 0a 70 72 6f 63 20 chart...#..proc
7240: 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 65 ::Plotchart::cre
7250: 61 74 65 42 61 72 63 68 61 72 74 20 7b 20 77 20 ateBarchart { w
7260: 78 6c 61 62 65 6c 73 20 79 73 63 61 6c 65 20 6e xlabels yscale n
7270: 6f 73 65 72 69 65 73 20 7d 20 7b 0d 0a 20 20 20 oseries } {..
7280: 76 61 72 69 61 62 6c 65 20 64 61 74 61 5f 73 65 variable data_se
7290: 72 69 65 73 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 ries.... forea
72a0: 63 68 20 73 20 5b 61 72 72 61 79 20 6e 61 6d 65 ch s [array name
72b0: 73 20 64 61 74 61 5f 73 65 72 69 65 73 20 22 24 s data_series "$
72c0: 77 2c 2a 22 5d 20 7b 0d 0a 20 20 20 20 20 20 75 w,*"] {.. u
72d0: 6e 73 65 74 20 64 61 74 61 5f 73 65 72 69 65 73 nset data_series
72e0: 28 24 73 29 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 ($s).. }....
72f0: 20 73 65 74 20 6e 65 77 63 68 61 72 74 20 22 62 set newchart "b
7300: 61 72 63 68 61 72 74 5f 24 77 22 0d 0a 20 20 20 archart_$w"..
7310: 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 interp alias {}
7320: 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a 3a 50 $newchart {} ::P
7330: 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 48 61 lotchart::PlotHa
7340: 6e 64 6c 65 72 20 76 65 72 74 62 61 72 73 20 24 ndler vertbars $
7350: 77 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 w.... foreach
7360: 7b 70 78 6d 69 6e 20 70 79 6d 69 6e 20 70 78 6d {pxmin pymin pxm
7370: 61 78 20 70 79 6d 61 78 7d 20 5b 4d 61 72 67 69 ax pymax} [Margi
7380: 6e 73 52 65 63 74 61 6e 67 6c 65 20 24 77 5d 20 nsRectangle $w]
7390: 7b 62 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 73 65 {break}.... se
73a0: 74 20 78 6d 69 6e 20 20 30 2e 30 0d 0a 20 20 20 t xmin 0.0..
73b0: 73 65 74 20 78 6d 61 78 20 20 5b 65 78 70 72 20 set xmax [expr
73c0: 7b 5b 6c 6c 65 6e 67 74 68 20 24 78 6c 61 62 65 {[llength $xlabe
73d0: 6c 73 5d 20 2b 20 30 2e 31 7d 5d 0d 0a 0d 0a 20 ls] + 0.1}]....
73e0: 20 20 66 6f 72 65 61 63 68 20 7b 79 6d 69 6e 20 foreach {ymin
73f0: 79 6d 61 78 20 79 64 65 6c 74 7d 20 24 79 73 63 ymax ydelt} $ysc
7400: 61 6c 65 20 7b 62 72 65 61 6b 7d 0d 0a 0d 0a 20 ale {break}....
7410: 20 20 69 66 20 7b 20 24 79 64 65 6c 74 20 3d 3d if { $ydelt ==
7420: 20 30 2e 30 20 7d 20 7b 0d 0a 20 20 20 20 20 20 0.0 } {..
7430: 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 return -code err
7440: 6f 72 20 22 53 74 65 70 20 73 69 7a 65 20 63 61 or "Step size ca
7450: 6e 20 6e 6f 74 20 62 65 20 7a 65 72 6f 22 0d 0a n not be zero"..
7460: 20 20 20 7d 0d 0a 0d 0a 20 20 20 69 66 20 7b 20 }.... if {
7470: 28 24 79 6d 61 78 2d 24 79 6d 69 6e 29 2a 24 79 ($ymax-$ymin)*$y
7480: 64 65 6c 74 20 3c 20 30 2e 30 20 7d 20 7b 0d 0a delt < 0.0 } {..
7490: 20 20 20 20 20 20 73 65 74 20 79 64 65 6c 74 20 set ydelt
74a0: 5b 65 78 70 72 20 7b 2d 24 79 64 65 6c 74 7d 5d [expr {-$ydelt}]
74b0: 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 76 69 65 .. }.... vie
74c0: 77 50 6f 72 74 20 20 20 20 20 20 20 20 20 24 77 wPort $w
74d0: 20 24 70 78 6d 69 6e 20 24 70 79 6d 69 6e 20 24 $pxmin $pymin $
74e0: 70 78 6d 61 78 20 24 70 79 6d 61 78 0d 0a 20 20 pxmax $pymax..
74f0: 20 77 6f 72 6c 64 43 6f 6f 72 64 69 6e 61 74 65 worldCoordinate
7500: 73 20 24 77 20 24 78 6d 69 6e 20 20 24 79 6d 69 s $w $xmin $ymi
7510: 6e 20 20 24 78 6d 61 78 20 20 24 79 6d 61 78 0d n $xmax $ymax.
7520: 0a 0d 0a 20 20 20 44 72 61 77 59 61 78 69 73 20 ... DrawYaxis
7530: 20 20 20 20 20 20 20 24 77 20 24 79 6d 69 6e 20 $w $ymin
7540: 20 24 79 6d 61 78 20 20 24 79 64 65 6c 74 0d 0a $ymax $ydelt..
7550: 20 20 20 44 72 61 77 58 6c 61 62 65 6c 73 20 20 DrawXlabels
7560: 20 20 20 20 24 77 20 24 78 6c 61 62 65 6c 73 20 $w $xlabels
7570: 24 6e 6f 73 65 72 69 65 73 0d 0a 20 20 20 44 72 $noseries.. Dr
7580: 61 77 4d 61 73 6b 20 20 20 20 20 20 20 20 20 24 awMask $
7590: 77 0d 0a 20 20 20 44 65 66 61 75 6c 74 4c 65 67 w.. DefaultLeg
75a0: 65 6e 64 20 20 20 20 24 77 0d 0a 20 20 20 73 65 end $w.. se
75b0: 74 20 64 61 74 61 5f 73 65 72 69 65 73 28 24 77 t data_series($w
75c0: 2c 6c 65 67 65 6e 64 74 79 70 65 29 20 22 72 65 ,legendtype) "re
75d0: 63 74 61 6e 67 6c 65 22 0d 0a 20 20 20 44 65 66 ctangle".. Def
75e0: 61 75 6c 74 42 61 6c 6c 6f 6f 6e 20 20 20 24 77 aultBalloon $w
75f0: 0d 0a 0d 0a 20 20 20 53 65 74 43 6f 6c 6f 75 72 .... SetColour
7600: 73 20 24 77 20 62 6c 75 65 20 6c 69 67 68 74 62 s $w blue lightb
7610: 6c 75 65 20 67 72 65 65 6e 20 79 65 6c 6c 6f 77 lue green yellow
7620: 20 6f 72 61 6e 67 65 20 72 65 64 20 6d 61 67 65 orange red mage
7630: 6e 74 61 20 62 72 6f 77 6e 0d 0a 0d 0a 20 20 20 nta brown....
7640: 72 65 74 75 72 6e 20 24 6e 65 77 63 68 61 72 74 return $newchart
7650: 0d 0a 7d 0d 0a 0d 0a 23 20 63 72 65 61 74 65 48 ..}....# createH
7660: 6f 72 69 7a 6f 6e 74 61 6c 42 61 72 63 68 61 72 orizontalBarchar
7670: 74 20 2d 2d 0d 0a 23 20 20 20 20 43 72 65 61 74 t --..# Creat
7680: 65 20 61 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 e a command for
7690: 64 72 61 77 69 6e 67 20 61 20 62 61 72 63 68 61 drawing a barcha
76a0: 72 74 20 77 69 74 68 20 68 6f 72 69 7a 6f 6e 74 rt with horizont
76b0: 61 6c 20 62 61 72 73 0d 0a 23 20 41 72 67 75 6d al bars..# Argum
76c0: 65 6e 74 73 3a 0d 0a 23 20 20 20 20 77 20 20 20 ents:..# w
76d0: 20 20 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 Name of
76e0: 74 68 65 20 63 61 6e 76 61 73 0d 0a 23 20 20 20 the canvas..#
76f0: 20 78 73 63 61 6c 65 20 20 20 20 20 20 4d 69 6e xscale Min
7700: 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e imum, maximum an
7710: 64 20 73 74 65 70 20 66 6f 72 20 78 2d 61 78 69 d step for x-axi
7720: 73 0d 0a 23 20 20 20 20 79 6c 61 62 65 6c 73 20 s..# ylabels
7730: 20 20 20 20 4c 69 73 74 20 6f 66 20 6c 61 62 65 List of labe
7740: 6c 73 20 66 6f 72 20 79 2d 61 78 69 73 0d 0a 23 ls for y-axis..#
7750: 20 20 20 20 6e 6f 73 65 72 69 65 73 20 20 20 20 noseries
7760: 4e 75 6d 62 65 72 20 6f 66 20 73 65 72 69 65 73 Number of series
7770: 20 6f 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20 or the keyword
7780: 22 73 74 61 63 6b 65 64 22 0d 0a 23 20 52 65 73 "stacked"..# Res
7790: 75 6c 74 3a 0d 0a 23 20 20 20 20 4e 61 6d 65 20 ult:..# Name
77a0: 6f 66 20 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 of a new command
77b0: 0d 0a 23 20 4e 6f 74 65 3a 0d 0a 23 20 20 20 20 ..# Note:..#
77c0: 54 68 65 20 65 6e 74 69 72 65 20 63 61 6e 76 61 The entire canva
77d0: 73 20 77 69 6c 6c 20 62 65 20 64 65 64 69 63 61 s will be dedica
77e0: 74 65 64 20 74 6f 20 74 68 65 20 62 61 72 63 68 ted to the barch
77f0: 61 72 74 2e 0d 0a 23 0d 0a 70 72 6f 63 20 3a 3a art...#..proc ::
7800: 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 65 61 74 Plotchart::creat
7810: 65 48 6f 72 69 7a 6f 6e 74 61 6c 42 61 72 63 68 eHorizontalBarch
7820: 61 72 74 20 7b 20 77 20 78 73 63 61 6c 65 20 79 art { w xscale y
7830: 6c 61 62 65 6c 73 20 6e 6f 73 65 72 69 65 73 20 labels noseries
7840: 7d 20 7b 0d 0a 20 20 20 76 61 72 69 61 62 6c 65 } {.. variable
7850: 20 64 61 74 61 5f 73 65 72 69 65 73 0d 0a 0d 0a data_series....
7860: 20 20 20 66 6f 72 65 61 63 68 20 73 20 5b 61 72 foreach s [ar
7870: 72 61 79 20 6e 61 6d 65 73 20 64 61 74 61 5f 73 ray names data_s
7880: 65 72 69 65 73 20 22 24 77 2c 2a 22 5d 20 7b 0d eries "$w,*"] {.
7890: 0a 20 20 20 20 20 20 75 6e 73 65 74 20 64 61 74 . unset dat
78a0: 61 5f 73 65 72 69 65 73 28 24 73 29 0d 0a 20 20 a_series($s)..
78b0: 20 7d 0d 0a 0d 0a 20 20 20 73 65 74 20 6e 65 77 }.... set new
78c0: 63 68 61 72 74 20 22 68 62 61 72 63 68 61 72 74 chart "hbarchart
78d0: 5f 24 77 22 0d 0a 20 20 20 69 6e 74 65 72 70 20 _$w".. interp
78e0: 61 6c 69 61 73 20 7b 7d 20 24 6e 65 77 63 68 61 alias {} $newcha
78f0: 72 74 20 7b 7d 20 3a 3a 50 6c 6f 74 63 68 61 72 rt {} ::Plotchar
7900: 74 3a 3a 50 6c 6f 74 48 61 6e 64 6c 65 72 20 68 t::PlotHandler h
7910: 6f 72 69 7a 62 61 72 73 20 24 77 0d 0a 0d 0a 20 orizbars $w....
7920: 20 20 73 65 74 20 6e 6f 74 65 78 74 20 32 2e 30 set notext 2.0
7930: 0d 0a 20 20 20 73 65 74 20 74 65 78 74 5f 77 69 .. set text_wi
7940: 64 74 68 20 38 0d 0a 20 20 20 23 0d 0a 20 20 20 dth 8.. #..
7950: 23 20 43 6f 6d 70 75 74 65 20 74 68 65 20 6d 61 # Compute the ma
7960: 78 69 6d 75 6d 20 77 69 64 74 68 20 6f 66 20 74 ximum width of t
7970: 68 65 20 6c 61 62 65 6c 73 0d 0a 20 20 20 23 20 he labels.. #
7980: 3c 4d 42 3e 0d 0a 20 20 20 23 0d 0a 20 20 20 6c <MB>.. #.. l
7990: 61 62 65 6c 20 2e 69 6e 76 69 73 69 62 6c 65 4c abel .invisibleL
79a0: 61 62 65 6c 0d 0a 20 20 20 73 65 74 20 66 6f 6e abel.. set fon
79b0: 74 6e 61 6d 65 20 5b 2e 69 6e 76 69 73 69 62 6c tname [.invisibl
79c0: 65 4c 61 62 65 6c 20 63 67 65 74 20 2d 66 6f 6e eLabel cget -fon
79d0: 74 5d 0d 0a 20 20 20 64 65 73 74 72 6f 79 20 2e t].. destroy .
79e0: 69 6e 76 69 73 69 62 6c 65 4c 61 62 65 6c 0d 0a invisibleLabel..
79f0: 20 20 20 0d 0a 20 20 20 73 65 74 20 78 73 70 61 .. set xspa
7a00: 63 65 6d 61 78 20 30 0d 0a 20 20 20 66 6f 72 65 cemax 0.. fore
7a10: 61 63 68 20 79 6c 61 62 20 24 79 6c 61 62 65 6c ach ylab $ylabel
7a20: 73 20 7b 0d 0a 20 20 20 20 20 20 20 73 65 74 20 s {.. set
7a30: 78 73 70 61 63 65 20 5b 66 6f 6e 74 20 6d 65 61 xspace [font mea
7a40: 73 75 72 65 20 24 66 6f 6e 74 6e 61 6d 65 20 24 sure $fontname $
7a50: 79 6c 61 62 5d 0d 0a 20 20 20 20 20 20 20 69 66 ylab].. if
7a60: 20 7b 24 78 73 70 61 63 65 3e 20 24 78 73 70 61 {$xspace> $xspa
7a70: 63 65 6d 61 78 7d 20 74 68 65 6e 20 7b 0d 0a 20 cemax} then {..
7a80: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 78 73 set xs
7a90: 70 61 63 65 6d 61 78 20 24 78 73 70 61 63 65 0d pacemax $xspace.
7aa0: 0a 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 7d 0d . }.. }.
7ab0: 0a 20 20 20 73 65 74 20 74 65 78 74 5f 77 69 64 . set text_wid
7ac0: 74 68 20 5b 65 78 70 72 20 7b 69 6e 74 20 28 20 th [expr {int (
7ad0: 24 78 73 70 61 63 65 6d 61 78 20 2f 20 31 30 2e $xspacemax / 10.
7ae0: 29 20 2b 20 31 7d 5d 0d 0a 0d 0a 20 20 20 66 6f ) + 1}].... fo
7af0: 72 65 61 63 68 20 7b 70 78 6d 69 6e 20 70 79 6d reach {pxmin pym
7b00: 69 6e 20 70 78 6d 61 78 20 70 79 6d 61 78 7d 20 in pxmax pymax}
7b10: 5b 4d 61 72 67 69 6e 73 52 65 63 74 61 6e 67 6c [MarginsRectangl
7b20: 65 20 24 77 20 24 6e 6f 74 65 78 74 20 24 74 65 e $w $notext $te
7b30: 78 74 5f 77 69 64 74 68 5d 20 7b 62 72 65 61 6b xt_width] {break
7b40: 7d 0d 0a 0d 0a 20 20 20 73 65 74 20 79 6d 69 6e }.... set ymin
7b50: 20 20 30 2e 30 0d 0a 20 20 20 73 65 74 20 79 6d 0.0.. set ym
7b60: 61 78 20 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e ax [expr {[llen
7b70: 67 74 68 20 24 79 6c 61 62 65 6c 73 5d 20 2b 20 gth $ylabels] +
7b80: 30 2e 31 7d 5d 0d 0a 0d 0a 20 20 20 66 6f 72 65 0.1}].... fore
7b90: 61 63 68 20 7b 78 6d 69 6e 20 78 6d 61 78 20 78 ach {xmin xmax x
7ba0: 64 65 6c 74 7d 20 24 78 73 63 61 6c 65 20 7b 62 delt} $xscale {b
7bb0: 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 69 66 20 7b reak}.... if {
7bc0: 20 24 78 64 65 6c 74 20 3d 3d 20 30 2e 30 20 7d $xdelt == 0.0 }
7bd0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e {.. return
7be0: 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 53 74 -code error "St
7bf0: 65 70 20 73 69 7a 65 20 63 61 6e 20 6e 6f 74 20 ep size can not
7c00: 62 65 20 7a 65 72 6f 22 0d 0a 20 20 20 7d 0d 0a be zero".. }..
7c10: 0d 0a 20 20 20 69 66 20 7b 20 28 24 78 6d 61 78 .. if { ($xmax
7c20: 2d 24 78 6d 69 6e 29 2a 24 78 64 65 6c 74 20 3c -$xmin)*$xdelt <
7c30: 20 30 2e 30 20 7d 20 7b 0d 0a 20 20 20 20 20 20 0.0 } {..
7c40: 73 65 74 20 78 64 65 6c 74 20 5b 65 78 70 72 20 set xdelt [expr
7c50: 7b 2d 24 78 64 65 6c 74 7d 5d 0d 0a 20 20 20 7d {-$xdelt}].. }
7c60: 0d 0a 0d 0a 20 20 20 76 69 65 77 50 6f 72 74 20 .... viewPort
7c70: 20 20 20 20 20 20 20 20 24 77 20 24 70 78 6d 69 $w $pxmi
7c80: 6e 20 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 20 n $pymin $pxmax
7c90: 24 70 79 6d 61 78 0d 0a 20 20 20 77 6f 72 6c 64 $pymax.. world
7ca0: 43 6f 6f 72 64 69 6e 61 74 65 73 20 24 77 20 24 Coordinates $w $
7cb0: 78 6d 69 6e 20 20 24 79 6d 69 6e 20 20 24 78 6d xmin $ymin $xm
7cc0: 61 78 20 20 24 79 6d 61 78 0d 0a 0d 0a 20 20 20 ax $ymax....
7cd0: 44 72 61 77 58 61 78 69 73 20 20 20 20 20 20 20 DrawXaxis
7ce0: 20 24 77 20 24 78 6d 69 6e 20 20 24 78 6d 61 78 $w $xmin $xmax
7cf0: 20 20 24 78 64 65 6c 74 0d 0a 20 20 20 44 72 61 $xdelt.. Dra
7d00: 77 59 6c 61 62 65 6c 73 20 20 20 20 20 20 24 77 wYlabels $w
7d10: 20 24 79 6c 61 62 65 6c 73 20 24 6e 6f 73 65 72 $ylabels $noser
7d20: 69 65 73 0d 0a 20 20 20 44 72 61 77 4d 61 73 6b ies.. DrawMask
7d30: 20 20 20 20 20 20 20 20 20 24 77 0d 0a 20 20 20 $w..
7d40: 44 65 66 61 75 6c 74 4c 65 67 65 6e 64 20 20 20 DefaultLegend
7d50: 20 24 77 0d 0a 20 20 20 73 65 74 20 64 61 74 61 $w.. set data
7d60: 5f 73 65 72 69 65 73 28 24 77 2c 6c 65 67 65 6e _series($w,legen
7d70: 64 74 79 70 65 29 20 22 72 65 63 74 61 6e 67 6c dtype) "rectangl
7d80: 65 22 0d 0a 20 20 20 44 65 66 61 75 6c 74 42 61 e".. DefaultBa
7d90: 6c 6c 6f 6f 6e 20 20 20 24 77 0d 0a 0d 0a 20 20 lloon $w....
7da0: 20 53 65 74 43 6f 6c 6f 75 72 73 20 24 77 20 62 SetColours $w b
7db0: 6c 75 65 20 6c 69 67 68 74 62 6c 75 65 20 67 72 lue lightblue gr
7dc0: 65 65 6e 20 79 65 6c 6c 6f 77 20 6f 72 61 6e 67 een yellow orang
7dd0: 65 20 72 65 64 20 6d 61 67 65 6e 74 61 20 62 72 e red magenta br
7de0: 6f 77 6e 0d 0a 0d 0a 20 20 20 72 65 74 75 72 6e own.... return
7df0: 20 24 6e 65 77 63 68 61 72 74 0d 0a 7d 0d 0a 0d $newchart..}...
7e00: 0a 23 20 63 72 65 61 74 65 54 69 6d 65 63 68 61 .# createTimecha
7e10: 72 74 20 2d 2d 0d 0a 23 20 20 20 20 43 72 65 61 rt --..# Crea
7e20: 74 65 20 61 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 te a command for
7e30: 20 64 72 61 77 69 6e 67 20 61 20 73 69 6d 70 6c drawing a simpl
7e40: 65 20 74 69 6d 65 63 68 61 72 74 0d 0a 23 20 41 e timechart..# A
7e50: 72 67 75 6d 65 6e 74 73 3a 0d 0a 23 20 20 20 20 rguments:..#
7e60: 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 w Name
7e70: 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 0d 0a of the canvas..
7e80: 23 20 20 20 20 74 69 6d 65 5f 62 65 67 69 6e 20 # time_begin
7e90: 20 53 74 61 72 74 20 74 69 6d 65 20 28 69 6e 20 Start time (in
7ea0: 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20 64 61 the form of a da
7eb0: 74 65 2f 74 69 6d 65 29 0d 0a 23 20 20 20 20 74 te/time)..# t
7ec0: 69 6d 65 5f 65 6e 64 20 20 20 20 45 6e 64 20 74 ime_end End t
7ed0: 69 6d 65 20 28 69 6e 20 74 68 65 20 66 6f 72 6d ime (in the form
7ee0: 20 6f 66 20 61 20 64 61 74 65 2f 74 69 6d 65 29 of a date/time)
7ef0: 0d 0a 23 20 20 20 20 6e 6f 69 74 65 6d 73 20 20 ..# noitems
7f00: 20 20 20 4e 75 6d 62 65 72 20 6f 66 20 69 74 65 Number of ite
7f10: 6d 73 20 74 6f 20 62 65 20 73 68 6f 77 6e 20 28 ms to be shown (
7f20: 64 65 74 65 72 6d 69 6e 65 73 20 73 70 61 63 69 determines spaci
7f30: 6e 67 29 0d 0a 23 20 52 65 73 75 6c 74 3a 0d 0a ng)..# Result:..
7f40: 23 20 20 20 20 4e 61 6d 65 20 6f 66 20 61 20 6e # Name of a n
7f50: 65 77 20 63 6f 6d 6d 61 6e 64 0d 0a 23 20 4e 6f ew command..# No
7f60: 74 65 3a 0d 0a 23 20 20 20 20 54 68 65 20 65 6e te:..# The en
7f70: 74 69 72 65 20 63 61 6e 76 61 73 20 77 69 6c 6c tire canvas will
7f80: 20 62 65 20 64 65 64 69 63 61 74 65 64 20 74 6f be dedicated to
7f90: 20 74 68 65 20 74 69 6d 65 63 68 61 72 74 2e 0d the timechart..
7fa0: 0a 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 .#..proc ::Plotc
7fb0: 68 61 72 74 3a 3a 63 72 65 61 74 65 54 69 6d 65 hart::createTime
7fc0: 63 68 61 72 74 20 7b 20 77 20 74 69 6d 65 5f 62 chart { w time_b
7fd0: 65 67 69 6e 20 74 69 6d 65 5f 65 6e 64 20 6e 6f egin time_end no
7fe0: 69 74 65 6d 73 20 7d 20 7b 0d 0a 20 20 20 76 61 items } {.. va
7ff0: 72 69 61 62 6c 65 20 64 61 74 61 5f 73 65 72 69 riable data_seri
8000: 65 73 0d 0a 20 20 20 76 61 72 69 61 62 6c 65 20 es.. variable
8010: 73 63 61 6c 69 6e 67 0d 0a 0d 0a 20 20 20 66 6f scaling.... fo
8020: 72 65 61 63 68 20 73 20 5b 61 72 72 61 79 20 6e reach s [array n
8030: 61 6d 65 73 20 64 61 74 61 5f 73 65 72 69 65 73 ames data_series
8040: 20 22 24 77 2c 2a 22 5d 20 7b 0d 0a 20 20 20 20 "$w,*"] {..
8050: 20 20 75 6e 73 65 74 20 64 61 74 61 5f 73 65 72 unset data_ser
8060: 69 65 73 28 24 73 29 0d 0a 20 20 20 7d 0d 0a 0d ies($s).. }...
8070: 0a 20 20 20 73 65 74 20 6e 65 77 63 68 61 72 74 . set newchart
8080: 20 22 74 69 6d 65 63 68 61 72 74 5f 24 77 22 0d "timechart_$w".
8090: 0a 20 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 . interp alias
80a0: 20 7b 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d {} $newchart {}
80b0: 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c ::Plotchart::Pl
80c0: 6f 74 48 61 6e 64 6c 65 72 20 74 69 6d 65 63 68 otHandler timech
80d0: 61 72 74 20 24 77 0d 0a 0d 0a 20 20 20 66 6f 72 art $w.... for
80e0: 65 61 63 68 20 7b 70 78 6d 69 6e 20 70 79 6d 69 each {pxmin pymi
80f0: 6e 20 70 78 6d 61 78 20 70 79 6d 61 78 7d 20 5b n pxmax pymax} [
8100: 4d 61 72 67 69 6e 73 52 65 63 74 61 6e 67 6c 65 MarginsRectangle
8110: 20 24 77 20 33 5d 20 7b 62 72 65 61 6b 7d 0d 0a $w 3] {break}..
8120: 0d 0a 20 20 20 73 65 74 20 79 6d 69 6e 20 20 30 .. set ymin 0
8130: 2e 30 0d 0a 20 20 20 73 65 74 20 79 6d 61 78 20 .0.. set ymax
8140: 20 24 6e 6f 69 74 65 6d 73 0d 0a 0d 0a 20 20 20 $noitems....
8150: 73 65 74 20 78 6d 69 6e 20 20 5b 65 78 70 72 20 set xmin [expr
8160: 7b 31 2e 30 2a 5b 63 6c 6f 63 6b 20 73 63 61 6e {1.0*[clock scan
8170: 20 24 74 69 6d 65 5f 62 65 67 69 6e 5d 7d 5d 0d $time_begin]}].
8180: 0a 20 20 20 73 65 74 20 78 6d 61 78 20 20 5b 65 . set xmax [e
8190: 78 70 72 20 7b 31 2e 30 2a 5b 63 6c 6f 63 6b 20 xpr {1.0*[clock
81a0: 73 63 61 6e 20 24 74 69 6d 65 5f 65 6e 64 5d 7d scan $time_end]}
81b0: 5d 0d 0a 0d 0a 20 20 20 76 69 65 77 50 6f 72 74 ].... viewPort
81c0: 20 20 20 20 20 20 20 20 20 24 77 20 24 70 78 6d $w $pxm
81d0: 69 6e 20 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 in $pymin $pxmax
81e0: 20 24 70 79 6d 61 78 0d 0a 20 20 20 77 6f 72 6c $pymax.. worl
81f0: 64 43 6f 6f 72 64 69 6e 61 74 65 73 20 24 77 20 dCoordinates $w
8200: 24 78 6d 69 6e 20 20 24 79 6d 69 6e 20 20 24 78 $xmin $ymin $x
8210: 6d 61 78 20 20 24 79 6d 61 78 0d 0a 0d 0a 20 20 max $ymax....
8220: 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c set scaling($w,
8230: 63 75 72 72 65 6e 74 29 20 24 79 6d 61 78 0d 0a current) $ymax..
8240: 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 set scaling($
8250: 77 2c 64 79 29 20 20 20 20 20 20 2d 30 2e 37 0d w,dy) -0.7.
8260: 0a 0d 0a 20 20 20 72 65 74 75 72 6e 20 24 6e 65 ... return $ne
8270: 77 63 68 61 72 74 0d 0a 7d 0d 0a 0d 0a 23 20 63 wchart..}....# c
8280: 72 65 61 74 65 47 61 6e 74 74 63 68 61 72 74 20 reateGanttchart
8290: 2d 2d 0d 0a 23 20 20 20 20 43 72 65 61 74 65 20 --..# Create
82a0: 61 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 a command for dr
82b0: 61 77 69 6e 67 20 61 20 47 61 6e 74 74 20 28 70 awing a Gantt (p
82c0: 6c 61 6e 6e 69 6e 67 29 20 63 68 61 72 74 0d 0a lanning) chart..
82d0: 23 20 41 72 67 75 6d 65 6e 74 73 3a 0d 0a 23 20 # Arguments:..#
82e0: 20 20 20 77 20 20 20 20 20 20 20 20 20 20 20 4e w N
82f0: 61 6d 65 20 6f 66 20 74 68 65 20 63 61 6e 76 61 ame of the canva
8300: 73 0d 0a 23 20 20 20 20 74 69 6d 65 5f 62 65 67 s..# time_beg
8310: 69 6e 20 20 53 74 61 72 74 20 74 69 6d 65 20 28 in Start time (
8320: 69 6e 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 in the form of a
8330: 20 64 61 74 65 2f 74 69 6d 65 29 0d 0a 23 20 20 date/time)..#
8340: 20 20 74 69 6d 65 5f 65 6e 64 20 20 20 20 45 6e time_end En
8350: 64 20 74 69 6d 65 20 28 69 6e 20 74 68 65 20 66 d time (in the f
8360: 6f 72 6d 20 6f 66 20 61 20 64 61 74 65 2f 74 69 orm of a date/ti
8370: 6d 65 29 0d 0a 23 20 20 20 20 6e 6f 69 74 65 6d me)..# noitem
8380: 73 20 20 20 20 20 4e 75 6d 62 65 72 20 6f 66 20 s Number of
8390: 69 74 65 6d 73 20 74 6f 20 62 65 20 73 68 6f 77 items to be show
83a0: 6e 20 28 64 65 74 65 72 6d 69 6e 65 73 20 73 70 n (determines sp
83b0: 61 63 69 6e 67 29 0d 0a 23 20 20 20 20 74 65 78 acing)..# tex
83c0: 74 5f 77 69 64 74 68 20 20 45 73 74 69 6d 61 74 t_width Estimat
83d0: 65 64 20 6d 61 78 69 6d 75 6d 20 6c 65 6e 67 74 ed maximum lengt
83e0: 68 20 6f 66 20 74 65 78 74 20 28 64 65 66 61 75 h of text (defau
83f0: 6c 74 3a 20 32 30 29 0d 0a 23 20 52 65 73 75 6c lt: 20)..# Resul
8400: 74 3a 0d 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 t:..# Name of
8410: 20 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0d 0a a new command..
8420: 23 20 4e 6f 74 65 3a 0d 0a 23 20 20 20 20 54 68 # Note:..# Th
8430: 65 20 65 6e 74 69 72 65 20 63 61 6e 76 61 73 20 e entire canvas
8440: 77 69 6c 6c 20 62 65 20 64 65 64 69 63 61 74 65 will be dedicate
8450: 64 20 74 6f 20 74 68 65 20 47 61 6e 74 74 20 63 d to the Gantt c
8460: 68 61 72 74 2e 0d 0a 23 20 20 20 20 4d 6f 73 74 hart...# Most
8470: 20 63 6f 6d 6d 61 6e 64 73 20 74 61 6b 65 6e 20 commands taken
8480: 66 72 6f 6d 20 74 69 6d 65 20 63 68 61 72 74 73 from time charts
8490: 2e 0d 0a 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f ...#..proc ::Plo
84a0: 74 63 68 61 72 74 3a 3a 63 72 65 61 74 65 47 61 tchart::createGa
84b0: 6e 74 74 63 68 61 72 74 20 7b 20 77 20 74 69 6d nttchart { w tim
84c0: 65 5f 62 65 67 69 6e 20 74 69 6d 65 5f 65 6e 64 e_begin time_end
84d0: 20 6e 6f 69 74 65 6d 73 0d 0a 20 20 20 20 20 20 noitems..
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
8500: 74 65 78 74 5f 77 69 64 74 68 20 32 30 7d 20 7d text_width 20} }
8510: 20 7b 0d 0a 0d 0a 20 20 20 76 61 72 69 61 62 6c {.... variabl
8520: 65 20 64 61 74 61 5f 73 65 72 69 65 73 0d 0a 20 e data_series..
8530: 20 20 76 61 72 69 61 62 6c 65 20 73 63 61 6c 69 variable scali
8540: 6e 67 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 ng.... foreach
8550: 20 73 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 s [array names
8560: 64 61 74 61 5f 73 65 72 69 65 73 20 22 24 77 2c data_series "$w,
8570: 2a 22 5d 20 7b 0d 0a 20 20 20 20 20 20 75 6e 73 *"] {.. uns
8580: 65 74 20 64 61 74 61 5f 73 65 72 69 65 73 28 24 et data_series($
8590: 73 29 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 73 s).. }.... s
85a0: 65 74 20 6e 65 77 63 68 61 72 74 20 22 67 61 6e et newchart "gan
85b0: 74 74 63 68 61 72 74 5f 24 77 22 0d 0a 20 20 20 ttchart_$w"..
85c0: 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 interp alias {}
85d0: 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a 3a 50 $newchart {} ::P
85e0: 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 48 61 lotchart::PlotHa
85f0: 6e 64 6c 65 72 20 67 61 6e 74 74 63 68 61 72 74 ndler ganttchart
8600: 20 24 77 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 $w.... foreac
8610: 68 20 7b 70 78 6d 69 6e 20 70 79 6d 69 6e 20 70 h {pxmin pymin p
8620: 78 6d 61 78 20 70 79 6d 61 78 7d 20 5b 4d 61 72 xmax pymax} [Mar
8630: 67 69 6e 73 52 65 63 74 61 6e 67 6c 65 20 24 77 ginsRectangle $w
8640: 20 33 20 24 74 65 78 74 5f 77 69 64 74 68 5d 20 3 $text_width]
8650: 7b 62 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 73 65 {break}.... se
8660: 74 20 79 6d 69 6e 20 20 30 2e 30 0d 0a 20 20 20 t ymin 0.0..
8670: 73 65 74 20 79 6d 61 78 20 20 24 6e 6f 69 74 65 set ymax $noite
8680: 6d 73 0d 0a 0d 0a 20 20 20 73 65 74 20 78 6d 69 ms.... set xmi
8690: 6e 20 20 5b 65 78 70 72 20 7b 31 2e 30 2a 5b 63 n [expr {1.0*[c
86a0: 6c 6f 63 6b 20 73 63 61 6e 20 24 74 69 6d 65 5f lock scan $time_
86b0: 62 65 67 69 6e 5d 7d 5d 0d 0a 20 20 20 73 65 74 begin]}].. set
86c0: 20 78 6d 61 78 20 20 5b 65 78 70 72 20 7b 31 2e xmax [expr {1.
86d0: 30 2a 5b 63 6c 6f 63 6b 20 73 63 61 6e 20 24 74 0*[clock scan $t
86e0: 69 6d 65 5f 65 6e 64 5d 7d 5d 0d 0a 0d 0a 20 20 ime_end]}]....
86f0: 20 76 69 65 77 50 6f 72 74 20 20 20 20 20 20 20 viewPort
8700: 20 20 24 77 20 24 70 78 6d 69 6e 20 24 70 79 6d $w $pxmin $pym
8710: 69 6e 20 24 70 78 6d 61 78 20 24 70 79 6d 61 78 in $pxmax $pymax
8720: 0d 0a 20 20 20 77 6f 72 6c 64 43 6f 6f 72 64 69 .. worldCoordi
8730: 6e 61 74 65 73 20 24 77 20 24 78 6d 69 6e 20 20 nates $w $xmin
8740: 24 79 6d 69 6e 20 20 24 78 6d 61 78 20 20 24 79 $ymin $xmax $y
8750: 6d 61 78 0d 0a 0d 0a 20 20 20 73 65 74 20 73 63 max.... set sc
8760: 61 6c 69 6e 67 28 24 77 2c 63 75 72 72 65 6e 74 aling($w,current
8770: 29 20 24 79 6d 61 78 0d 0a 20 20 20 73 65 74 20 ) $ymax.. set
8780: 73 63 61 6c 69 6e 67 28 24 77 2c 64 79 29 20 20 scaling($w,dy)
8790: 20 20 20 20 2d 30 2e 37 0d 0a 0d 0a 20 20 20 23 -0.7.... #
87a0: 0d 0a 20 20 20 23 20 44 72 61 77 20 74 68 65 20 .. # Draw the
87b0: 62 61 63 6b 67 72 6f 75 6e 64 73 20 28 62 6f 74 backgrounds (bot
87c0: 68 20 69 6e 20 74 68 65 20 74 65 78 74 20 70 61 h in the text pa
87d0: 72 74 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 23 rt and the.. #
87e0: 20 67 72 61 70 68 69 63 61 6c 20 70 61 72 74 3b graphical part;
87f0: 20 74 68 65 20 74 65 78 74 20 70 61 72 74 20 68 the text part h
8800: 61 73 20 74 68 65 20 22 73 70 65 63 69 61 6c 22 as the "special"
8810: 20 74 61 67 0d 0a 20 20 20 23 20 22 45 64 69 74 tag.. # "Edit
8820: 22 20 74 6f 20 65 6e 61 62 6c 65 20 61 20 47 55 " to enable a GU
8830: 49 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69 6e I to change thin
8840: 67 73 29 0d 0a 20 20 20 23 0d 0a 20 20 20 73 65 gs).. #.. se
8850: 74 20 79 65 6e 64 20 30 2e 30 0d 0a 20 20 20 66 t yend 0.0.. f
8860: 6f 72 20 7b 20 73 65 74 20 69 20 30 20 7d 20 7b or { set i 0 } {
8870: 20 24 69 20 3c 20 24 6e 6f 69 74 65 6d 73 20 7d $i < $noitems }
8880: 20 7b 20 69 6e 63 72 20 69 20 7d 20 7b 0d 0a 20 { incr i } {..
8890: 20 20 20 20 20 20 73 65 74 20 79 62 65 67 69 6e set ybegin
88a0: 20 24 79 65 6e 64 0d 0a 20 20 20 20 20 20 20 73 $yend.. s
88b0: 65 74 20 79 65 6e 64 20 20 20 5b 65 78 70 72 20 et yend [expr
88c0: 7b 24 79 62 65 67 69 6e 2b 31 2e 30 7d 5d 0d 0a {$ybegin+1.0}]..
88d0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 7b foreach {
88e0: 78 31 20 79 31 7d 20 5b 63 6f 6f 72 64 73 54 6f x1 y1} [coordsTo
88f0: 50 69 78 65 6c 20 24 77 20 24 78 6d 69 6e 20 24 Pixel $w $xmin $
8900: 79 62 65 67 69 6e 5d 20 7b 62 72 65 61 6b 7d 0d ybegin] {break}.
8910: 0a 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 . foreach
8920: 7b 78 32 20 79 32 7d 20 5b 63 6f 6f 72 64 73 54 {x2 y2} [coordsT
8930: 6f 50 69 78 65 6c 20 24 77 20 24 78 6d 61 78 20 oPixel $w $xmax
8940: 24 79 65 6e 64 20 20 5d 20 7b 62 72 65 61 6b 7d $yend ] {break}
8950: 0d 0a 0d 0a 20 20 20 20 20 20 20 69 66 20 7b 20 .... if {
8960: 24 69 25 32 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 $i%2 == 0 } {..
8970: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 61 set ta
8980: 67 20 6f 64 64 0d 0a 20 20 20 20 20 20 20 7d 20 g odd.. }
8990: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {..
89a0: 20 20 20 73 65 74 20 74 61 67 20 65 76 65 6e 0d set tag even.
89b0: 0a 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 . }..
89c0: 20 20 24 77 20 63 72 65 61 74 65 20 72 65 63 74 $w create rect
89d0: 61 6e 67 6c 65 20 30 20 20 20 24 79 31 20 24 78 angle 0 $y1 $x
89e0: 31 20 24 79 32 20 2d 66 69 6c 6c 20 77 68 69 74 1 $y2 -fill whit
89f0: 65 20 2d 74 61 67 20 45 64 69 74 20 2d 6f 75 74 e -tag Edit -out
8a00: 6c 69 6e 65 20 77 68 69 74 65 0d 0a 20 20 20 20 line white..
8a10: 20 20 20 24 77 20 63 72 65 61 74 65 20 72 65 63 $w create rec
8a20: 74 61 6e 67 6c 65 20 24 78 31 20 24 79 31 20 24 tangle $x1 $y1 $
8a30: 78 32 20 24 79 32 20 2d 66 69 6c 6c 20 77 68 69 x2 $y2 -fill whi
8a40: 74 65 20 2d 74 61 67 20 24 74 61 67 20 2d 6f 75 te -tag $tag -ou
8a50: 74 6c 69 6e 65 20 77 68 69 74 65 0d 0a 20 20 20 tline white..
8a60: 7d 0d 0a 0d 0a 20 20 20 23 0d 0a 20 20 20 23 20 }.... #.. #
8a70: 44 65 66 61 75 6c 74 20 63 6f 6c 6f 75 72 73 20 Default colours
8a80: 61 6e 64 20 66 6f 6e 74 73 0d 0a 20 20 20 23 0d and fonts.. #.
8a90: 0a 20 20 20 47 61 6e 74 74 43 6f 6c 6f 72 20 24 . GanttColor $
8aa0: 77 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62 6c w description bl
8ab0: 61 63 6b 0d 0a 20 20 20 47 61 6e 74 74 43 6f 6c ack.. GanttCol
8ac0: 6f 72 20 24 77 20 63 6f 6d 70 6c 65 74 65 64 20 or $w completed
8ad0: 20 20 6c 69 67 68 74 62 6c 75 65 0d 0a 20 20 20 lightblue..
8ae0: 47 61 6e 74 74 43 6f 6c 6f 72 20 24 77 20 6c 65 GanttColor $w le
8af0: 66 74 20 20 20 20 20 20 20 20 77 68 69 74 65 0d ft white.
8b00: 0a 20 20 20 47 61 6e 74 74 43 6f 6c 6f 72 20 24 . GanttColor $
8b10: 77 20 6f 64 64 20 20 20 20 20 20 20 20 20 77 68 w odd wh
8b20: 69 74 65 0d 0a 20 20 20 47 61 6e 74 74 43 6f 6c ite.. GanttCol
8b30: 6f 72 20 24 77 20 65 76 65 6e 20 20 20 20 20 20 or $w even
8b40: 20 20 6c 69 67 68 74 67 72 65 79 0d 0a 20 20 20 lightgrey..
8b50: 47 61 6e 74 74 43 6f 6c 6f 72 20 24 77 20 73 75 GanttColor $w su
8b60: 6d 6d 61 72 79 20 20 20 20 20 62 6c 61 63 6b 0d mmary black.
8b70: 0a 20 20 20 47 61 6e 74 74 43 6f 6c 6f 72 20 24 . GanttColor $
8b80: 77 20 73 75 6d 6d 61 72 79 62 61 72 20 20 62 6c w summarybar bl
8b90: 61 63 6b 0d 0a 20 20 20 47 61 6e 74 74 46 6f 6e ack.. GanttFon
8ba0: 74 20 20 24 77 20 64 65 73 63 72 69 70 74 69 6f t $w descriptio
8bb0: 6e 20 22 74 69 6d 65 73 20 31 30 22 0d 0a 20 20 n "times 10"..
8bc0: 20 47 61 6e 74 74 46 6f 6e 74 20 20 24 77 20 73 GanttFont $w s
8bd0: 75 6d 6d 61 72 79 20 20 20 20 20 22 74 69 6d 65 ummary "time
8be0: 73 20 31 30 20 62 6f 6c 64 22 0d 0a 20 20 20 47 s 10 bold".. G
8bf0: 61 6e 74 74 46 6f 6e 74 20 20 24 77 20 73 63 61 anttFont $w sca
8c00: 6c 65 20 20 20 20 20 20 20 22 74 69 6d 65 73 20 le "times
8c10: 37 22 0d 0a 20 20 20 44 65 66 61 75 6c 74 42 61 7".. DefaultBa
8c20: 6c 6c 6f 6f 6e 20 24 77 0d 0a 0d 0a 20 20 20 72 lloon $w.... r
8c30: 65 74 75 72 6e 20 24 6e 65 77 63 68 61 72 74 0d eturn $newchart.
8c40: 0a 7d 0d 0a 0d 0a 23 20 63 72 65 61 74 65 33 44 .}....# create3D
8c50: 50 6c 6f 74 20 2d 2d 0d 0a 23 20 20 20 20 43 72 Plot --..# Cr
8c60: 65 61 74 65 20 61 20 73 69 6d 70 6c 65 20 33 44 eate a simple 3D
8c70: 20 70 6c 6f 74 0d 0a 23 20 41 72 67 75 6d 65 6e plot..# Argumen
8c80: 74 73 3a 0d 0a 23 20 20 20 20 77 20 20 20 20 20 ts:..# w
8c90: 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 Name of th
8ca0: 65 20 63 61 6e 76 61 73 0d 0a 23 20 20 20 20 78 e canvas..# x
8cb0: 73 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d scale Minim
8cc0: 75 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 um, maximum and
8cd0: 73 74 65 70 20 66 6f 72 20 78 2d 61 78 69 73 20 step for x-axis
8ce0: 28 69 6e 69 74 69 61 6c 29 0d 0a 23 20 20 20 20 (initial)..#
8cf0: 79 73 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 yscale Mini
8d00: 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e 64 mum, maximum and
8d10: 20 73 74 65 70 20 66 6f 72 20 79 2d 61 78 69 73 step for y-axis
8d20: 0d 0a 23 20 20 20 20 7a 73 63 61 6c 65 20 20 20 ..# zscale
8d30: 20 20 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 Minimum, maxi
8d40: 6d 75 6d 20 61 6e 64 20 73 74 65 70 20 66 6f 72 mum and step for
8d50: 20 7a 2d 61 78 69 73 0d 0a 23 20 52 65 73 75 6c z-axis..# Resul
8d60: 74 3a 0d 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 t:..# Name of
8d70: 20 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0d 0a a new command..
8d80: 23 20 4e 6f 74 65 3a 0d 0a 23 20 20 20 20 54 68 # Note:..# Th
8d90: 65 20 65 6e 74 69 72 65 20 63 61 6e 76 61 73 20 e entire canvas
8da0: 77 69 6c 6c 20 62 65 20 64 65 64 69 63 61 74 65 will be dedicate
8db0: 64 20 74 6f 20 74 68 65 20 33 44 20 70 6c 6f 74 d to the 3D plot
8dc0: 0d 0a 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 ..#..proc ::Plot
8dd0: 63 68 61 72 74 3a 3a 63 72 65 61 74 65 33 44 50 chart::create3DP
8de0: 6c 6f 74 20 7b 20 77 20 78 73 63 61 6c 65 20 79 lot { w xscale y
8df0: 73 63 61 6c 65 20 7a 73 63 61 6c 65 20 7d 20 7b scale zscale } {
8e00: 0d 0a 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 .. variable da
8e10: 74 61 5f 73 65 72 69 65 73 0d 0a 0d 0a 20 20 20 ta_series....
8e20: 66 6f 72 65 61 63 68 20 73 20 5b 61 72 72 61 79 foreach s [array
8e30: 20 6e 61 6d 65 73 20 64 61 74 61 5f 73 65 72 69 names data_seri
8e40: 65 73 20 22 24 77 2c 2a 22 5d 20 7b 0d 0a 20 20 es "$w,*"] {..
8e50: 20 20 20 20 75 6e 73 65 74 20 64 61 74 61 5f 73 unset data_s
8e60: 65 72 69 65 73 28 24 73 29 0d 0a 20 20 20 7d 0d eries($s).. }.
8e70: 0a 0d 0a 20 20 20 73 65 74 20 6e 65 77 63 68 61 ... set newcha
8e80: 72 74 20 22 33 64 70 6c 6f 74 5f 24 77 22 0d 0a rt "3dplot_$w"..
8e90: 20 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 interp alias
8ea0: 7b 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 {} $newchart {}
8eb0: 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f ::Plotchart::Plo
8ec0: 74 48 61 6e 64 6c 65 72 20 33 64 70 6c 6f 74 20 tHandler 3dplot
8ed0: 24 77 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 $w.... foreach
8ee0: 20 7b 70 78 6d 69 6e 20 70 79 6d 69 6e 20 70 78 {pxmin pymin px
8ef0: 6d 61 78 20 70 79 6d 61 78 7d 20 5b 4d 61 72 67 max pymax} [Marg
8f00: 69 6e 73 33 44 50 6c 6f 74 20 24 77 5d 20 7b 62 ins3DPlot $w] {b
8f10: 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 66 6f 72 65 reak}.... fore
8f20: 61 63 68 20 7b 78 6d 69 6e 20 78 6d 61 78 20 78 ach {xmin xmax x
8f30: 73 74 65 70 7d 20 24 78 73 63 61 6c 65 20 7b 62 step} $xscale {b
8f40: 72 65 61 6b 7d 0d 0a 20 20 20 66 6f 72 65 61 63 reak}.. foreac
8f50: 68 20 7b 79 6d 69 6e 20 79 6d 61 78 20 79 73 74 h {ymin ymax yst
8f60: 65 70 7d 20 24 79 73 63 61 6c 65 20 7b 62 72 65 ep} $yscale {bre
8f70: 61 6b 7d 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 ak}.. foreach
8f80: 7b 7a 6d 69 6e 20 7a 6d 61 78 20 7a 73 74 65 70 {zmin zmax zstep
8f90: 7d 20 24 7a 73 63 61 6c 65 20 7b 62 72 65 61 6b } $zscale {break
8fa0: 7d 0d 0a 0d 0a 20 20 20 76 69 65 77 50 6f 72 74 }.... viewPort
8fb0: 20 20 20 20 20 20 20 20 20 20 20 24 77 20 24 70 $w $p
8fc0: 78 6d 69 6e 20 24 70 79 6d 69 6e 20 24 70 78 6d xmin $pymin $pxm
8fd0: 61 78 20 24 70 79 6d 61 78 0d 0a 20 20 20 77 6f ax $pymax.. wo
8fe0: 72 6c 64 33 44 43 6f 6f 72 64 69 6e 61 74 65 73 rld3DCoordinates
8ff0: 20 24 77 20 24 78 6d 69 6e 20 20 24 79 6d 69 6e $w $xmin $ymin
9000: 20 20 24 7a 6d 69 6e 20 20 24 78 6d 61 78 20 20 $zmin $xmax
9010: 24 79 6d 61 78 20 24 7a 6d 61 78 0d 0a 0d 0a 20 $ymax $zmax....
9020: 20 20 44 72 61 77 33 44 41 78 65 73 20 20 20 20 Draw3DAxes
9030: 20 20 20 20 20 24 77 20 24 78 6d 69 6e 20 20 24 $w $xmin $
9040: 79 6d 69 6e 20 20 24 7a 6d 69 6e 20 20 24 78 6d ymin $zmin $xm
9050: 61 78 20 20 24 79 6d 61 78 20 24 7a 6d 61 78 20 ax $ymax $zmax
9060: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \..
9070: 20 20 20 20 20 20 20 20 20 20 20 20 24 78 73 74 $xst
9080: 65 70 20 24 79 73 74 65 70 20 24 7a 73 74 65 70 ep $ystep $zstep
9090: 0d 0a 20 20 20 44 65 66 61 75 6c 74 4c 65 67 65 .. DefaultLege
90a0: 6e 64 20 20 20 20 20 20 24 77 0d 0a 20 20 20 44 nd $w.. D
90b0: 65 66 61 75 6c 74 42 61 6c 6c 6f 6f 6e 20 20 20 efaultBalloon
90c0: 20 20 24 77 0d 0a 0d 0a 20 20 20 53 65 74 43 6f $w.... SetCo
90d0: 6c 6f 75 72 73 20 24 77 20 67 72 65 79 20 62 6c lours $w grey bl
90e0: 61 63 6b 0d 0a 0d 0a 20 20 20 72 65 74 75 72 6e ack.... return
90f0: 20 24 6e 65 77 63 68 61 72 74 0d 0a 7d 0d 0a 0d $newchart..}...
9100: 0a 23 20 63 72 65 61 74 65 33 44 42 61 72 63 68 .# create3DBarch
9110: 61 72 74 20 2d 2d 0d 0a 23 20 20 20 20 43 72 65 art --..# Cre
9120: 61 74 65 20 61 20 63 6f 6d 6d 61 6e 64 20 66 6f ate a command fo
9130: 72 20 64 72 61 77 69 6e 67 20 61 20 62 61 72 63 r drawing a barc
9140: 68 61 72 74 20 77 69 74 68 20 76 65 72 74 69 63 hart with vertic
9150: 61 6c 20 33 44 20 62 61 72 73 0d 0a 23 20 41 72 al 3D bars..# Ar
9160: 67 75 6d 65 6e 74 73 3a 0d 0a 23 20 20 20 20 77 guments:..# w
9170: 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 20 Name
9180: 6f 66 20 74 68 65 20 63 61 6e 76 61 73 0d 0a 23 of the canvas..#
9190: 20 20 20 20 79 73 63 61 6c 65 20 20 20 20 20 20 yscale
91a0: 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d Minimum, maximum
91b0: 20 61 6e 64 20 73 74 65 70 20 66 6f 72 20 79 2d and step for y-
91c0: 61 78 69 73 0d 0a 23 20 20 20 20 6e 6f 62 61 72 axis..# nobar
91d0: 73 20 20 20 20 20 20 4e 75 6d 62 65 72 20 6f 66 s Number of
91e0: 20 62 61 72 73 20 74 6f 20 62 65 20 64 72 61 77 bars to be draw
91f0: 6e 0d 0a 23 20 52 65 73 75 6c 74 3a 0d 0a 23 20 n..# Result:..#
9200: 20 20 20 4e 61 6d 65 20 6f 66 20 61 20 6e 65 77 Name of a new
9210: 20 63 6f 6d 6d 61 6e 64 0d 0a 23 20 4e 6f 74 65 command..# Note
9220: 3a 0d 0a 23 20 20 20 20 54 68 65 20 65 6e 74 69 :..# The enti
9230: 72 65 20 63 61 6e 76 61 73 20 77 69 6c 6c 20 62 re canvas will b
9240: 65 20 64 65 64 69 63 61 74 65 64 20 74 6f 20 74 e dedicated to t
9250: 68 65 20 62 61 72 63 68 61 72 74 2e 0d 0a 23 0d he barchart...#.
9260: 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 .proc ::Plotchar
9270: 74 3a 3a 63 72 65 61 74 65 33 44 42 61 72 63 68 t::create3DBarch
9280: 61 72 74 20 7b 20 77 20 79 73 63 61 6c 65 20 6e art { w yscale n
9290: 6f 62 61 72 73 20 7d 20 7b 0d 0a 20 20 20 76 61 obars } {.. va
92a0: 72 69 61 62 6c 65 20 64 61 74 61 5f 73 65 72 69 riable data_seri
92b0: 65 73 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 es.... foreach
92c0: 20 73 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 s [array names
92d0: 64 61 74 61 5f 73 65 72 69 65 73 20 22 24 77 2c data_series "$w,
92e0: 2a 22 5d 20 7b 0d 0a 20 20 20 20 20 20 75 6e 73 *"] {.. uns
92f0: 65 74 20 64 61 74 61 5f 73 65 72 69 65 73 28 24 et data_series($
9300: 73 29 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 73 s).. }.... s
9310: 65 74 20 6e 65 77 63 68 61 72 74 20 22 33 64 62 et newchart "3db
9320: 61 72 63 68 61 72 74 5f 24 77 22 0d 0a 20 20 20 archart_$w"..
9330: 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 interp alias {}
9340: 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a 3a 50 $newchart {} ::P
9350: 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 48 61 lotchart::PlotHa
9360: 6e 64 6c 65 72 20 33 64 62 61 72 73 20 24 77 0d ndler 3dbars $w.
9370: 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 7b 70 ... foreach {p
9380: 78 6d 69 6e 20 70 79 6d 69 6e 20 70 78 6d 61 78 xmin pymin pxmax
9390: 20 70 79 6d 61 78 7d 20 5b 4d 61 72 67 69 6e 73 pymax} [Margins
93a0: 52 65 63 74 61 6e 67 6c 65 20 24 77 20 34 5d 20 Rectangle $w 4]
93b0: 7b 62 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 73 65 {break}.... se
93c0: 74 20 78 6d 69 6e 20 20 30 2e 30 0d 0a 20 20 20 t xmin 0.0..
93d0: 73 65 74 20 78 6d 61 78 20 20 5b 65 78 70 72 20 set xmax [expr
93e0: 7b 24 6e 6f 62 61 72 73 20 2b 20 30 2e 31 7d 5d {$nobars + 0.1}]
93f0: 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 7b .... foreach {
9400: 79 6d 69 6e 20 79 6d 61 78 20 79 64 65 6c 74 7d ymin ymax ydelt}
9410: 20 24 79 73 63 61 6c 65 20 7b 62 72 65 61 6b 7d $yscale {break}
9420: 0d 0a 0d 0a 20 20 20 69 66 20 7b 20 24 79 64 65 .... if { $yde
9430: 6c 74 20 3d 3d 20 30 2e 30 20 7d 20 7b 0d 0a 20 lt == 0.0 } {..
9440: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 return -cod
9450: 65 20 65 72 72 6f 72 20 22 53 74 65 70 20 73 69 e error "Step si
9460: 7a 65 20 63 61 6e 20 6e 6f 74 20 62 65 20 7a 65 ze can not be ze
9470: 72 6f 22 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 ro".. }....
9480: 69 66 20 7b 20 28 24 79 6d 61 78 2d 24 79 6d 69 if { ($ymax-$ymi
9490: 6e 29 2a 24 79 64 65 6c 74 20 3c 20 30 2e 30 20 n)*$ydelt < 0.0
94a0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 79 } {.. set y
94b0: 64 65 6c 74 20 5b 65 78 70 72 20 7b 2d 24 79 64 delt [expr {-$yd
94c0: 65 6c 74 7d 5d 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 elt}].. }....
94d0: 20 20 76 69 65 77 50 6f 72 74 20 20 20 20 20 20 viewPort
94e0: 20 20 20 24 77 20 24 70 78 6d 69 6e 20 24 70 79 $w $pxmin $py
94f0: 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 79 6d 61 min $pxmax $pyma
9500: 78 0d 0a 20 20 20 77 6f 72 6c 64 43 6f 6f 72 64 x.. worldCoord
9510: 69 6e 61 74 65 73 20 24 77 20 24 78 6d 69 6e 20 inates $w $xmin
9520: 20 24 79 6d 69 6e 20 20 24 78 6d 61 78 20 20 24 $ymin $xmax $
9530: 79 6d 61 78 0d 0a 0d 0a 20 20 20 44 72 61 77 59 ymax.... DrawY
9540: 61 78 69 73 20 20 20 20 20 20 20 20 24 77 20 24 axis $w $
9550: 79 6d 69 6e 20 20 24 79 6d 61 78 20 20 24 79 64 ymin $ymax $yd
9560: 65 6c 74 0d 0a 20 20 23 44 72 61 77 4d 61 73 6b elt.. #DrawMask
9570: 20 20 20 20 20 20 20 20 20 24 77 20 2d 2d 20 6e $w -- n
9580: 6f 6e 65 21 0d 0a 20 20 20 44 72 61 77 33 44 42 one!.. Draw3DB
9590: 61 72 63 68 61 72 74 20 20 20 24 77 20 24 79 73 archart $w $ys
95a0: 63 61 6c 65 20 24 6e 6f 62 61 72 73 0d 0a 20 20 cale $nobars..
95b0: 20 44 65 66 61 75 6c 74 4c 65 67 65 6e 64 20 20 DefaultLegend
95c0: 20 20 24 77 0d 0a 20 20 20 44 65 66 61 75 6c 74 $w.. Default
95d0: 42 61 6c 6c 6f 6f 6e 20 20 20 24 77 0d 0a 0d 0a Balloon $w....
95e0: 20 20 20 72 65 74 75 72 6e 20 24 6e 65 77 63 68 return $newch
95f0: 61 72 74 0d 0a 7d 0d 0a 0d 0a 23 20 63 72 65 61 art..}....# crea
9600: 74 65 52 61 64 69 61 6c 63 68 61 72 74 20 2d 2d teRadialchart --
9610: 0d 0a 23 20 20 20 20 43 72 65 61 74 65 20 61 20 ..# Create a
9620: 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 61 77 command for draw
9630: 69 6e 67 20 61 20 72 61 64 69 61 6c 20 63 68 61 ing a radial cha
9640: 72 74 0d 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a rt..# Arguments:
9650: 0d 0a 23 20 20 20 20 77 20 20 20 20 20 20 20 20 ..# w
9660: 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 Name of the c
9670: 61 6e 76 61 73 0d 0a 23 20 20 20 20 6e 61 6d 65 anvas..# name
9680: 73 20 20 20 20 20 20 20 4e 61 6d 65 73 20 6f 66 s Names of
9690: 20 74 68 65 20 73 70 6f 6b 65 73 0d 0a 23 20 20 the spokes..#
96a0: 20 20 73 63 61 6c 65 20 20 20 20 20 20 20 53 63 scale Sc
96b0: 61 6c 65 20 66 61 63 74 6f 72 20 66 6f 72 20 74 ale factor for t
96c0: 68 65 20 64 61 74 61 0d 0a 23 20 20 20 20 73 74 he data..# st
96d0: 79 6c 65 20 20 20 20 20 20 20 28 4f 70 74 69 6f yle (Optio
96e0: 6e 61 6c 29 20 73 74 79 6c 65 20 6f 66 20 74 68 nal) style of th
96f0: 65 20 63 68 61 72 74 20 28 6c 69 6e 65 73 2c 20 e chart (lines,
9700: 63 75 6d 75 6c 61 74 69 76 65 20 6f 72 20 66 69 cumulative or fi
9710: 6c 6c 65 64 29 0d 0a 23 20 52 65 73 75 6c 74 3a lled)..# Result:
9720: 0d 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 20 61 ..# Name of a
9730: 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0d 0a 23 20 new command..#
9740: 4e 6f 74 65 3a 0d 0a 23 20 20 20 20 54 68 65 20 Note:..# The
9750: 65 6e 74 69 72 65 20 63 61 6e 76 61 73 20 77 69 entire canvas wi
9760: 6c 6c 20 62 65 20 64 65 64 69 63 61 74 65 64 20 ll be dedicated
9770: 74 6f 20 74 68 65 20 72 61 64 69 61 6c 20 63 68 to the radial ch
9780: 61 72 74 2e 0d 0a 23 0d 0a 70 72 6f 63 20 3a 3a art...#..proc ::
9790: 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 65 61 74 Plotchart::creat
97a0: 65 52 61 64 69 61 6c 63 68 61 72 74 20 7b 20 77 eRadialchart { w
97b0: 20 6e 61 6d 65 73 20 73 63 61 6c 65 20 7b 73 74 names scale {st
97c0: 79 6c 65 20 6c 69 6e 65 73 7d 20 7d 20 7b 0d 0a yle lines} } {..
97d0: 20 20 20 76 61 72 69 61 62 6c 65 20 73 65 74 74 variable sett
97e0: 69 6e 67 73 0d 0a 20 20 20 76 61 72 69 61 62 6c ings.. variabl
97f0: 65 20 64 61 74 61 5f 73 65 72 69 65 73 0d 0a 0d e data_series...
9800: 0a 20 20 20 66 6f 72 65 61 63 68 20 73 20 5b 61 . foreach s [a
9810: 72 72 61 79 20 6e 61 6d 65 73 20 64 61 74 61 5f rray names data_
9820: 73 65 72 69 65 73 20 22 24 77 2c 2a 22 5d 20 7b series "$w,*"] {
9830: 0d 0a 20 20 20 20 20 20 75 6e 73 65 74 20 64 61 .. unset da
9840: 74 61 5f 73 65 72 69 65 73 28 24 73 29 0d 0a 20 ta_series($s)..
9850: 20 20 7d 0d 0a 0d 0a 20 20 20 73 65 74 20 6e 65 }.... set ne
9860: 77 63 68 61 72 74 20 22 72 61 64 69 61 6c 63 68 wchart "radialch
9870: 61 72 74 5f 24 77 22 0d 0a 20 20 20 69 6e 74 65 art_$w".. inte
9880: 72 70 20 61 6c 69 61 73 20 7b 7d 20 24 6e 65 77 rp alias {} $new
9890: 63 68 61 72 74 20 7b 7d 20 3a 3a 50 6c 6f 74 63 chart {} ::Plotc
98a0: 68 61 72 74 3a 3a 50 6c 6f 74 48 61 6e 64 6c 65 hart::PlotHandle
98b0: 72 20 72 61 64 69 61 6c 63 68 61 72 74 20 24 77 r radialchart $w
98c0: 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 7b .... foreach {
98d0: 70 78 6d 69 6e 20 70 79 6d 69 6e 20 70 78 6d 61 pxmin pymin pxma
98e0: 78 20 70 79 6d 61 78 7d 20 5b 4d 61 72 67 69 6e x pymax} [Margin
98f0: 73 43 69 72 63 6c 65 20 24 77 5d 20 7b 62 72 65 sCircle $w] {bre
9900: 61 6b 7d 0d 0a 0d 0a 20 20 20 76 69 65 77 50 6f ak}.... viewPo
9910: 72 74 20 24 77 20 24 70 78 6d 69 6e 20 24 70 79 rt $w $pxmin $py
9920: 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 79 6d 61 min $pxmax $pyma
9930: 78 0d 0a 20 20 20 24 77 20 63 72 65 61 74 65 20 x.. $w create
9940: 6f 76 61 6c 20 24 70 78 6d 69 6e 20 24 70 79 6d oval $pxmin $pym
9950: 69 6e 20 24 70 78 6d 61 78 20 24 70 79 6d 61 78 in $pxmax $pymax
9960: 0d 0a 0d 0a 20 20 20 73 65 74 20 73 65 74 74 69 .... set setti
9970: 6e 67 73 28 24 77 2c 73 63 61 6c 65 29 20 20 5b ngs($w,scale) [
9980: 65 78 70 72 20 7b 64 6f 75 62 6c 65 28 24 73 63 expr {double($sc
9990: 61 6c 65 29 7d 5d 0d 0a 20 20 20 73 65 74 20 73 ale)}].. set s
99a0: 65 74 74 69 6e 67 73 28 24 77 2c 73 74 79 6c 65 ettings($w,style
99b0: 29 20 20 24 73 74 79 6c 65 0d 0a 20 20 20 73 65 ) $style.. se
99c0: 74 20 73 65 74 74 69 6e 67 73 28 24 77 2c 6e 75 t settings($w,nu
99d0: 6d 62 65 72 29 20 5b 6c 6c 65 6e 67 74 68 20 24 mber) [llength $
99e0: 6e 61 6d 65 73 5d 0d 0a 0d 0a 20 20 20 44 72 61 names].... Dra
99f0: 77 52 61 64 69 61 6c 53 70 6f 6b 65 73 20 24 77 wRadialSpokes $w
9a00: 20 24 6e 61 6d 65 73 0d 0a 20 20 20 44 65 66 61 $names.. Defa
9a10: 75 6c 74 4c 65 67 65 6e 64 20 20 24 77 0d 0a 20 ultLegend $w..
9a20: 20 20 44 65 66 61 75 6c 74 42 61 6c 6c 6f 6f 6e DefaultBalloon
9a30: 20 24 77 0d 0a 0d 0a 20 20 20 72 65 74 75 72 6e $w.... return
9a40: 20 24 6e 65 77 63 68 61 72 74 0d 0a 7d 0d 0a 0d $newchart..}...
9a50: 0a 23 20 63 72 65 61 74 65 54 58 50 6c 6f 74 20 .# createTXPlot
9a60: 2d 2d 0d 0a 23 20 20 20 20 43 72 65 61 74 65 20 --..# Create
9a70: 61 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 a command for dr
9a80: 61 77 69 6e 67 20 61 20 54 58 20 70 6c 6f 74 20 awing a TX plot
9a90: 28 78 20 76 65 72 73 75 73 20 64 61 74 65 2f 74 (x versus date/t
9aa0: 69 6d 65 29 0d 0a 23 20 41 72 67 75 6d 65 6e 74 ime)..# Argument
9ab0: 73 3a 0d 0a 23 20 20 20 20 77 20 20 20 20 20 20 s:..# w
9ac0: 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 Name of the
9ad0: 20 63 61 6e 76 61 73 0d 0a 23 20 20 20 20 74 73 canvas..# ts
9ae0: 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d 75 cale Minimu
9af0: 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 73 m, maximum and s
9b00: 74 65 70 20 66 6f 72 20 64 61 74 65 2f 74 69 6d tep for date/tim
9b10: 65 2d 61 78 69 73 20 28 69 6e 69 74 69 61 6c 29 e-axis (initial)
9b20: 0d 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 ..#
9b30: 20 20 20 28 76 61 6c 75 65 73 20 6d 75 73 74 20 (values must
9b40: 62 65 20 76 61 6c 69 64 20 64 61 74 65 73 20 61 be valid dates a
9b50: 6e 64 20 74 68 65 20 73 74 65 70 20 69 73 20 69 nd the step is i
9b60: 6e 20 64 61 79 73 29 0d 0a 23 20 20 20 20 78 73 n days)..# xs
9b70: 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d 75 cale Minimu
9b80: 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 73 m, maximum and s
9b90: 74 65 70 20 66 6f 72 20 76 65 72 74 69 63 61 6c tep for vertical
9ba0: 20 61 78 69 73 0d 0a 23 20 52 65 73 75 6c 74 3a axis..# Result:
9bb0: 0d 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 20 61 ..# Name of a
9bc0: 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0d 0a 23 20 new command..#
9bd0: 4e 6f 74 65 3a 0d 0a 23 20 20 20 20 54 68 65 20 Note:..# The
9be0: 65 6e 74 69 72 65 20 63 61 6e 76 61 73 20 77 69 entire canvas wi
9bf0: 6c 6c 20 62 65 20 64 65 64 69 63 61 74 65 64 20 ll be dedicated
9c00: 74 6f 20 74 68 65 20 54 58 20 70 6c 6f 74 2e 0d to the TX plot..
9c10: 0a 23 20 20 20 20 54 68 65 20 70 6c 6f 74 20 77 .# The plot w
9c20: 69 6c 6c 20 62 65 20 64 72 61 77 6e 20 77 69 74 ill be drawn wit
9c30: 68 20 61 78 65 73 0d 0a 23 0d 0a 70 72 6f 63 20 h axes..#..proc
9c40: 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 65 ::Plotchart::cre
9c50: 61 74 65 54 58 50 6c 6f 74 20 7b 20 77 20 74 73 ateTXPlot { w ts
9c60: 63 61 6c 65 20 78 73 63 61 6c 65 20 7d 20 7b 0d cale xscale } {.
9c70: 0a 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 74 . variable dat
9c80: 61 5f 73 65 72 69 65 73 0d 0a 0d 0a 20 20 20 66 a_series.... f
9c90: 6f 72 65 61 63 68 20 73 20 5b 61 72 72 61 79 20 oreach s [array
9ca0: 6e 61 6d 65 73 20 64 61 74 61 5f 73 65 72 69 65 names data_serie
9cb0: 73 20 22 24 77 2c 2a 22 5d 20 7b 0d 0a 20 20 20 s "$w,*"] {..
9cc0: 20 20 20 75 6e 73 65 74 20 64 61 74 61 5f 73 65 unset data_se
9cd0: 72 69 65 73 28 24 73 29 0d 0a 20 20 20 7d 0d 0a ries($s).. }..
9ce0: 0d 0a 20 20 20 73 65 74 20 6e 65 77 63 68 61 72 .. set newchar
9cf0: 74 20 22 74 78 70 6c 6f 74 5f 24 77 22 0d 0a 20 t "txplot_$w"..
9d00: 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b interp alias {
9d10: 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a } $newchart {} :
9d20: 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 :Plotchart::Plot
9d30: 48 61 6e 64 6c 65 72 20 74 78 70 6c 6f 74 20 24 Handler txplot $
9d40: 77 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 w.... foreach
9d50: 7b 70 78 6d 69 6e 20 70 79 6d 69 6e 20 70 78 6d {pxmin pymin pxm
9d60: 61 78 20 70 79 6d 61 78 7d 20 5b 4d 61 72 67 69 ax pymax} [Margi
9d70: 6e 73 52 65 63 74 61 6e 67 6c 65 20 24 77 5d 20 nsRectangle $w]
9d80: 7b 62 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 66 6f {break}.... fo
9d90: 72 65 61 63 68 20 7b 74 6d 69 6e 20 74 6d 61 78 reach {tmin tmax
9da0: 20 74 64 65 6c 74 7d 20 24 74 73 63 61 6c 65 20 tdelt} $tscale
9db0: 7b 62 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 73 65 {break}.... se
9dc0: 74 20 78 6d 69 6e 20 20 5b 63 6c 6f 63 6b 20 73 t xmin [clock s
9dd0: 63 61 6e 20 24 74 6d 69 6e 5d 0d 0a 20 20 20 73 can $tmin].. s
9de0: 65 74 20 78 6d 61 78 20 20 5b 63 6c 6f 63 6b 20 et xmax [clock
9df0: 73 63 61 6e 20 24 74 6d 61 78 5d 0d 0a 20 20 20 scan $tmax]..
9e00: 73 65 74 20 78 64 65 6c 74 20 5b 65 78 70 72 20 set xdelt [expr
9e10: 7b 38 36 34 30 30 2a 24 74 64 65 6c 74 7d 5d 0d {86400*$tdelt}].
9e20: 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 20 7b 79 ... foreach {y
9e30: 6d 69 6e 20 79 6d 61 78 20 79 64 65 6c 74 7d 20 min ymax ydelt}
9e40: 24 78 73 63 61 6c 65 20 7b 62 72 65 61 6b 7d 0d $xscale {break}.
9e50: 0a 0d 0a 20 20 20 69 66 20 7b 20 24 78 64 65 6c ... if { $xdel
9e60: 74 20 3d 3d 20 30 2e 30 20 7c 7c 20 24 79 64 65 t == 0.0 || $yde
9e70: 6c 74 20 3d 3d 20 30 2e 30 20 7d 20 7b 0d 0a 20 lt == 0.0 } {..
9e80: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 return -cod
9e90: 65 20 65 72 72 6f 72 20 22 53 74 65 70 20 73 69 e error "Step si
9ea0: 7a 65 20 63 61 6e 20 6e 6f 74 20 62 65 20 7a 65 ze can not be ze
9eb0: 72 6f 22 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 ro".. }....
9ec0: 69 66 20 7b 20 28 24 78 6d 61 78 2d 24 78 6d 69 if { ($xmax-$xmi
9ed0: 6e 29 2a 24 78 64 65 6c 74 20 3c 20 30 2e 30 20 n)*$xdelt < 0.0
9ee0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 78 } {.. set x
9ef0: 64 65 6c 74 20 5b 65 78 70 72 20 7b 2d 24 78 64 delt [expr {-$xd
9f00: 65 6c 74 7d 5d 0d 0a 20 20 20 7d 0d 0a 20 20 20 elt}].. }..
9f10: 69 66 20 7b 20 28 24 79 6d 61 78 2d 24 79 6d 69 if { ($ymax-$ymi
9f20: 6e 29 2a 24 79 64 65 6c 74 20 3c 20 30 2e 30 20 n)*$ydelt < 0.0
9f30: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 79 } {.. set y
9f40: 64 65 6c 74 20 5b 65 78 70 72 20 7b 2d 24 79 64 delt [expr {-$yd
9f50: 65 6c 74 7d 5d 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 elt}].. }....
9f60: 20 20 76 69 65 77 50 6f 72 74 20 20 20 20 20 20 viewPort
9f70: 20 20 20 24 77 20 24 70 78 6d 69 6e 20 24 70 79 $w $pxmin $py
9f80: 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 79 6d 61 min $pxmax $pyma
9f90: 78 0d 0a 20 20 20 77 6f 72 6c 64 43 6f 6f 72 64 x.. worldCoord
9fa0: 69 6e 61 74 65 73 20 24 77 20 24 78 6d 69 6e 20 inates $w $xmin
9fb0: 20 24 79 6d 69 6e 20 20 24 78 6d 61 78 20 20 24 $ymin $xmax $
9fc0: 79 6d 61 78 0d 0a 0d 0a 20 20 20 44 72 61 77 59 ymax.... DrawY
9fd0: 61 78 69 73 20 20 20 20 20 20 20 20 24 77 20 24 axis $w $
9fe0: 79 6d 69 6e 20 20 24 79 6d 61 78 20 20 24 79 64 ymin $ymax $yd
9ff0: 65 6c 74 0d 0a 20 20 20 44 72 61 77 54 69 6d 65 elt.. DrawTime
a000: 61 78 69 73 20 20 20 20 20 24 77 20 24 74 6d 69 axis $w $tmi
a010: 6e 20 20 24 74 6d 61 78 20 20 24 74 64 65 6c 74 n $tmax $tdelt
a020: 0d 0a 20 20 20 44 72 61 77 4d 61 73 6b 20 20 20 .. DrawMask
a030: 20 20 20 20 20 20 24 77 0d 0a 20 20 20 44 65 66 $w.. Def
a040: 61 75 6c 74 4c 65 67 65 6e 64 20 20 20 20 24 77 aultLegend $w
a050: 0d 0a 20 20 20 44 65 66 61 75 6c 74 42 61 6c 6c .. DefaultBall
a060: 6f 6f 6e 20 20 20 24 77 0d 0a 0d 0a 20 20 20 72 oon $w.... r
a070: 65 74 75 72 6e 20 24 6e 65 77 63 68 61 72 74 0d eturn $newchart.
a080: 0a 7d 0d 0a 0d 0a 23 20 63 72 65 61 74 65 52 69 .}....# createRi
a090: 67 68 74 41 78 69 73 20 2d 2d 0d 0a 23 20 20 20 ghtAxis --..#
a0a0: 20 43 72 65 61 74 65 20 61 20 63 6f 6d 6d 61 6e Create a comman
a0b0: 64 20 66 6f 72 20 64 72 61 77 69 6e 67 20 61 20 d for drawing a
a0c0: 70 6c 6f 74 20 77 69 74 68 20 61 20 72 69 67 68 plot with a righ
a0d0: 74 20 61 78 69 73 0d 0a 23 20 41 72 67 75 6d 65 t axis..# Argume
a0e0: 6e 74 73 3a 0d 0a 23 20 20 20 20 77 20 20 20 20 nts:..# w
a0f0: 20 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 Name of t
a100: 68 65 20 63 61 6e 76 61 73 0d 0a 23 20 20 20 20 he canvas..#
a110: 79 73 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 yscale Mini
a120: 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e 64 mum, maximum and
a130: 20 73 74 65 70 20 66 6f 72 20 76 65 72 74 69 63 step for vertic
a140: 61 6c 20 61 78 69 73 0d 0a 23 20 52 65 73 75 6c al axis..# Resul
a150: 74 3a 0d 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 t:..# Name of
a160: 20 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0d 0a a new command..
a170: 23 20 4e 6f 74 65 3a 0d 0a 23 20 20 20 20 54 68 # Note:..# Th
a180: 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65 71 75 69 is command requi
a190: 72 65 73 20 74 68 61 74 20 61 6e 6f 74 68 65 72 res that another
a1a0: 20 70 6c 6f 74 20 63 6f 6d 6d 61 6e 64 20 68 61 plot command ha
a1b0: 73 20 62 65 65 6e 0d 0a 23 20 20 20 20 63 72 65 s been..# cre
a1c0: 61 74 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 ated prior to th
a1d0: 69 73 20 6f 6e 65 2e 20 53 6f 6d 65 20 6f 66 20 is one. Some of
a1e0: 74 68 65 20 70 72 6f 70 65 72 74 69 65 73 20 66 the properties f
a1f0: 72 6f 6d 20 74 68 61 74 0d 0a 23 20 20 20 20 63 rom that..# c
a200: 6f 6d 6d 61 6e 64 20 73 65 72 76 65 20 66 6f 72 ommand serve for
a210: 20 74 68 69 73 20 6f 6e 65 20 74 6f 6f 2e 0d 0a this one too...
a220: 23 0d 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 #..proc ::Plotch
a230: 61 72 74 3a 3a 63 72 65 61 74 65 52 69 67 68 74 art::createRight
a240: 41 78 69 73 20 7b 20 77 20 79 73 63 61 6c 65 20 Axis { w yscale
a250: 7d 20 7b 0d 0a 20 20 20 76 61 72 69 61 62 6c 65 } {.. variable
a260: 20 64 61 74 61 5f 73 65 72 69 65 73 0d 0a 20 20 data_series..
a270: 20 76 61 72 69 61 62 6c 65 20 73 63 61 6c 69 6e variable scalin
a280: 67 0d 0a 0d 0a 20 20 20 73 65 74 20 6e 65 77 63 g.... set newc
a290: 68 61 72 74 20 22 72 69 67 68 74 5f 24 77 22 0d hart "right_$w".
a2a0: 0a 0d 0a 20 20 20 23 0d 0a 20 20 20 23 20 43 68 ... #.. # Ch
a2b0: 65 63 6b 20 69 66 20 74 68 65 72 65 20 69 73 20 eck if there is
a2c0: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 an appropriate p
a2d0: 6c 6f 74 20 61 6c 72 65 61 64 79 20 64 65 66 69 lot already defi
a2e0: 6e 65 64 20 2d 20 74 68 65 72 65 0d 0a 20 20 20 ned - there..
a2f0: 23 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 6c 79 # should be only
a300: 20 6f 6e 65 21 0d 0a 20 20 20 23 0d 0a 20 20 20 one!.. #..
a310: 69 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 if { [llength [i
a320: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 20 22 2a 5f 24 nfo command "*_$
a330: 77 22 20 5d 5d 20 3d 3d 20 30 20 7d 20 7b 0d 0a w" ]] == 0 } {..
a340: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 return -c
a350: 6f 64 65 20 65 72 72 6f 72 20 22 54 68 65 72 65 ode error "There
a360: 20 73 68 6f 75 6c 64 20 62 65 20 61 20 70 6c 6f should be a plo
a370: 74 20 77 69 74 68 20 61 20 6c 65 66 74 20 61 78 t with a left ax
a380: 69 73 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e is already defin
a390: 65 64 22 0d 0a 20 20 20 7d 0d 0a 20 20 20 69 66 ed".. }.. if
a3a0: 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 { [llength [inf
a3b0: 6f 20 63 6f 6d 6d 61 6e 64 20 22 2a 5f 24 77 22 o command "*_$w"
a3c0: 20 5d 5d 20 21 3d 20 31 20 7d 20 7b 0d 0a 20 20 ]] != 1 } {..
a3d0: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 return -cod
a3e0: 65 20 65 72 72 6f 72 20 22 54 68 65 72 65 20 73 e error "There s
a3f0: 68 6f 75 6c 64 20 62 65 20 6f 6e 6c 79 20 6f 6e hould be only on
a400: 65 20 70 6c 6f 74 20 63 6f 6d 6d 61 6e 64 20 66 e plot command f
a410: 6f 72 20 74 68 69 73 20 77 69 64 67 65 74 20 28 or this widget (
a420: 24 77 29 22 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 $w)".. }....
a430: 20 73 65 74 20 74 79 70 65 20 5b 6c 69 6e 64 65 set type [linde
a440: 78 20 5b 69 6e 74 65 72 70 20 61 6c 69 61 73 20 x [interp alias
a450: 7b 7d 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 {} [info command
a460: 20 22 2a 5f 24 77 22 5d 5d 20 31 5d 0d 0a 0d 0a "*_$w"]] 1]....
a470: 20 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 interp alias
a480: 7b 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 {} $newchart {}
a490: 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f ::Plotchart::Plo
a4a0: 74 48 61 6e 64 6c 65 72 20 24 74 79 70 65 20 72 tHandler $type r
a4b0: 24 77 0d 0a 20 20 20 69 6e 74 65 72 70 20 61 6c $w.. interp al
a4c0: 69 61 73 20 7b 7d 20 72 24 77 20 20 20 20 20 20 ias {} r$w
a4d0: 20 7b 7d 20 24 77 0d 0a 0d 0a 20 20 20 73 65 74 {} $w.... set
a4e0: 20 78 6d 69 6e 20 24 73 63 61 6c 69 6e 67 28 24 xmin $scaling($
a4f0: 77 2c 78 6d 69 6e 29 0d 0a 20 20 20 73 65 74 20 w,xmin).. set
a500: 78 6d 61 78 20 24 73 63 61 6c 69 6e 67 28 24 77 xmax $scaling($w
a510: 2c 78 6d 61 78 29 0d 0a 0d 0a 20 20 20 73 65 74 ,xmax).... set
a520: 20 70 78 6d 69 6e 20 24 73 63 61 6c 69 6e 67 28 pxmin $scaling(
a530: 24 77 2c 70 78 6d 69 6e 29 0d 0a 20 20 20 73 65 $w,pxmin).. se
a540: 74 20 70 78 6d 61 78 20 24 73 63 61 6c 69 6e 67 t pxmax $scaling
a550: 28 24 77 2c 70 78 6d 61 78 29 0d 0a 20 20 20 73 ($w,pxmax).. s
a560: 65 74 20 70 79 6d 69 6e 20 24 73 63 61 6c 69 6e et pymin $scalin
a570: 67 28 24 77 2c 70 79 6d 69 6e 29 0d 0a 20 20 20 g($w,pymin)..
a580: 73 65 74 20 70 79 6d 61 78 20 24 73 63 61 6c 69 set pymax $scali
a590: 6e 67 28 24 77 2c 70 79 6d 61 78 29 0d 0a 0d 0a ng($w,pymax)....
a5a0: 20 20 20 66 6f 72 65 61 63 68 20 7b 79 6d 69 6e foreach {ymin
a5b0: 20 79 6d 61 78 20 79 64 65 6c 74 7d 20 24 79 73 ymax ydelt} $ys
a5c0: 63 61 6c 65 20 7b 62 72 65 61 6b 7d 0d 0a 0d 0a cale {break}....
a5d0: 20 20 20 69 66 20 7b 20 24 79 64 65 6c 74 20 3d if { $ydelt =
a5e0: 3d 20 30 2e 30 20 7d 20 7b 0d 0a 20 20 20 20 20 = 0.0 } {..
a5f0: 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 return -code er
a600: 72 6f 72 20 22 53 74 65 70 20 73 69 7a 65 20 63 ror "Step size c
a610: 61 6e 20 6e 6f 74 20 62 65 20 7a 65 72 6f 22 0d an not be zero".
a620: 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 69 66 20 7b . }.... if {
a630: 20 28 24 79 6d 61 78 2d 24 79 6d 69 6e 29 2a 24 ($ymax-$ymin)*$
a640: 79 64 65 6c 74 20 3c 20 30 2e 30 20 7d 20 7b 0d ydelt < 0.0 } {.
a650: 0a 20 20 20 20 20 20 73 65 74 20 79 64 65 6c 74 . set ydelt
a660: 20 5b 65 78 70 72 20 7b 2d 24 79 64 65 6c 74 7d [expr {-$ydelt}
a670: 5d 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 20 20 76 69 ].. }.... vi
a680: 65 77 50 6f 72 74 20 20 20 20 20 20 20 20 20 72 ewPort r
a690: 24 77 20 24 70 78 6d 69 6e 20 24 70 79 6d 69 6e $w $pxmin $pymin
a6a0: 20 24 70 78 6d 61 78 20 24 70 79 6d 61 78 0d 0a $pxmax $pymax..
a6b0: 20 20 20 77 6f 72 6c 64 43 6f 6f 72 64 69 6e 61 worldCoordina
a6c0: 74 65 73 20 72 24 77 20 24 78 6d 69 6e 20 20 24 tes r$w $xmin $
a6d0: 79 6d 69 6e 20 20 24 78 6d 61 78 20 20 24 79 6d ymin $xmax $ym
a6e0: 61 78 0d 0a 0d 0a 20 20 20 44 72 61 77 52 69 67 ax.... DrawRig
a6f0: 68 74 61 78 69 73 20 20 20 20 72 24 77 20 24 79 htaxis r$w $y
a700: 6d 69 6e 20 20 24 79 6d 61 78 20 20 24 79 64 65 min $ymax $yde
a710: 6c 74 0d 0a 0d 0a 20 20 20 72 65 74 75 72 6e 20 lt.... return
a720: 24 6e 65 77 63 68 61 72 74 0d 0a 7d 0d 0a 0d 0a $newchart..}....
a730: 23 20 63 72 65 61 74 65 33 44 52 69 62 62 6f 6e # create3DRibbon
a740: 43 68 61 72 74 20 2d 2d 0d 0a 23 20 20 20 20 43 Chart --..# C
a750: 72 65 61 74 65 20 61 20 63 68 61 72 74 20 74 68 reate a chart th
a760: 61 74 20 63 61 6e 20 64 69 73 70 6c 61 79 20 33 at can display 3
a770: 44 20 6c 69 6e 65 73 20 61 6e 64 20 61 72 65 61 D lines and area
a780: 73 0d 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a 0d s..# Arguments:.
a790: 0a 23 20 20 20 20 77 20 20 20 20 20 20 20 20 20 .# w
a7a0: 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 61 Name of the ca
a7b0: 6e 76 61 73 0d 0a 23 20 20 20 20 6e 61 6d 65 73 nvas..# names
a7c0: 20 20 20 20 20 20 20 4c 61 62 65 6c 73 20 61 6c Labels al
a7d0: 6f 6e 67 20 74 68 65 20 78 2d 61 78 69 73 0d 0a ong the x-axis..
a7e0: 23 20 20 20 20 79 73 63 61 6c 65 20 20 20 20 20 # yscale
a7f0: 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 Minimum, maximu
a800: 6d 20 61 6e 64 20 73 74 65 70 20 66 6f 72 20 79 m and step for y
a810: 2d 61 78 69 73 0d 0a 23 20 20 20 20 7a 73 63 61 -axis..# zsca
a820: 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d 75 6d 2c le Minimum,
a830: 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 73 74 65 maximum and ste
a840: 70 20 66 6f 72 20 7a 2d 61 78 69 73 0d 0a 23 20 p for z-axis..#
a850: 52 65 73 75 6c 74 3a 0d 0a 23 20 20 20 20 4e 61 Result:..# Na
a860: 6d 65 20 6f 66 20 61 20 6e 65 77 20 63 6f 6d 6d me of a new comm
a870: 61 6e 64 0d 0a 23 20 4e 6f 74 65 3a 0d 0a 23 20 and..# Note:..#
a880: 20 20 20 54 68 65 20 65 6e 74 69 72 65 20 63 61 The entire ca
a890: 6e 76 61 73 20 77 69 6c 6c 20 62 65 20 64 65 64 nvas will be ded
a8a0: 69 63 61 74 65 64 20 74 6f 20 74 68 65 20 33 44 icated to the 3D
a8b0: 20 63 68 61 72 74 0d 0a 23 0d 0a 70 72 6f 63 20 chart..#..proc
a8c0: 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 65 ::Plotchart::cre
a8d0: 61 74 65 33 44 52 69 62 62 6f 6e 43 68 61 72 74 ate3DRibbonChart
a8e0: 20 7b 20 77 20 6e 61 6d 65 73 20 79 73 63 61 6c { w names yscal
a8f0: 65 20 7a 73 63 61 6c 65 20 7d 20 7b 0d 0a 20 20 e zscale } {..
a900: 20 76 61 72 69 61 62 6c 65 20 64 61 74 61 5f 73 variable data_s
a910: 65 72 69 65 73 0d 0a 0d 0a 20 20 20 66 6f 72 65 eries.... fore
a920: 61 63 68 20 73 20 5b 61 72 72 61 79 20 6e 61 6d ach s [array nam
a930: 65 73 20 64 61 74 61 5f 73 65 72 69 65 73 20 22 es data_series "
a940: 24 77 2c 2a 22 5d 20 7b 0d 0a 20 20 20 20 20 20 $w,*"] {..
a950: 75 6e 73 65 74 20 64 61 74 61 5f 73 65 72 69 65 unset data_serie
a960: 73 28 24 73 29 0d 0a 20 20 20 7d 0d 0a 0d 0a 20 s($s).. }....
a970: 20 20 73 65 74 20 6e 65 77 63 68 61 72 74 20 22 set newchart "
a980: 33 64 72 69 62 62 6f 6e 5f 24 77 22 0d 0a 20 20 3dribbon_$w"..
a990: 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d interp alias {}
a9a0: 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a 3a $newchart {} ::
a9b0: 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 48 Plotchart::PlotH
a9c0: 61 6e 64 6c 65 72 20 33 64 72 69 62 62 6f 6e 20 andler 3dribbon
a9d0: 24 77 0d 0a 0d 0a 20 20 20 66 6f 72 65 61 63 68 $w.... foreach
a9e0: 20 7b 70 78 6d 69 6e 20 70 79 6d 69 6e 20 70 78 {pxmin pymin px
a9f0: 6d 61 78 20 70 79 6d 61 78 7d 20 5b 4d 61 72 67 max pymax} [Marg
aa00: 69 6e 73 33 44 50 6c 6f 74 20 24 77 5d 20 7b 62 ins3DPlot $w] {b
aa10: 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 66 6f 72 65 reak}.... fore
aa20: 61 63 68 20 7b 78 6d 69 6e 20 78 6d 61 78 20 78 ach {xmin xmax x
aa30: 73 74 65 70 7d 20 7b 30 2e 30 20 31 2e 30 20 30 step} {0.0 1.0 0
aa40: 2e 30 7d 20 7b 62 72 65 61 6b 7d 0d 0a 20 20 20 .0} {break}..
aa50: 66 6f 72 65 61 63 68 20 7b 79 6d 69 6e 20 79 6d foreach {ymin ym
aa60: 61 78 20 79 73 74 65 70 7d 20 24 79 73 63 61 6c ax ystep} $yscal
aa70: 65 20 7b 62 72 65 61 6b 7d 0d 0a 20 20 20 66 6f e {break}.. fo
aa80: 72 65 61 63 68 20 7b 7a 6d 69 6e 20 7a 6d 61 78 reach {zmin zmax
aa90: 20 7a 73 74 65 70 7d 20 24 7a 73 63 61 6c 65 20 zstep} $zscale
aaa0: 7b 62 72 65 61 6b 7d 0d 0a 0d 0a 20 20 20 73 65 {break}.... se
aab0: 74 20 78 73 74 65 70 20 5b 65 78 70 72 20 7b 31 t xstep [expr {1
aac0: 2e 30 2f 5b 6c 6c 65 6e 67 74 68 20 24 6e 61 6d .0/[llength $nam
aad0: 65 73 5d 7d 5d 0d 0a 20 20 20 73 65 74 20 64 61 es]}].. set da
aae0: 74 61 5f 73 65 72 69 65 73 28 24 77 2c 78 62 61 ta_series($w,xba
aaf0: 73 65 29 20 20 5b 65 78 70 72 20 7b 31 2e 30 2d se) [expr {1.0-
ab00: 30 2e 31 35 2a 24 78 73 74 65 70 7d 5d 0d 0a 20 0.15*$xstep}]..
ab10: 20 20 73 65 74 20 64 61 74 61 5f 73 65 72 69 65 set data_serie
ab20: 73 28 24 77 2c 78 73 74 65 70 29 20 20 24 78 73 s($w,xstep) $xs
ab30: 74 65 70 0d 0a 20 20 20 73 65 74 20 64 61 74 61 tep.. set data
ab40: 5f 73 65 72 69 65 73 28 24 77 2c 78 77 69 64 74 _series($w,xwidt
ab50: 68 29 20 5b 65 78 70 72 20 7b 30 2e 37 2a 24 78 h) [expr {0.7*$x
ab60: 73 74 65 70 7d 5d 0d 0a 0d 0a 20 20 20 76 69 65 step}].... vie
ab70: 77 50 6f 72 74 20 20 20 20 20 20 20 20 20 20 20 wPort
ab80: 24 77 20 24 70 78 6d 69 6e 20 24 70 79 6d 69 6e $w $pxmin $pymin
ab90: 20 24 70 78 6d 61 78 20 24 70 79 6d 61 78 0d 0a $pxmax $pymax..
aba0: 20 20 20 77 6f 72 6c 64 33 44 43 6f 6f 72 64 69 world3DCoordi
abb0: 6e 61 74 65 73 20 24 77 20 24 78 6d 69 6e 20 20 nates $w $xmin
abc0: 24 79 6d 69 6e 20 20 24 7a 6d 69 6e 20 20 24 78 $ymin $zmin $x
abd0: 6d 61 78 20 20 24 79 6d 61 78 20 24 7a 6d 61 78 max $ymax $zmax
abe0: 0d 0a 0d 0a 20 20 20 44 72 61 77 33 44 41 78 65 .... Draw3DAxe
abf0: 73 20 20 20 20 20 20 20 20 20 24 77 20 24 78 6d s $w $xm
ac00: 69 6e 20 20 24 79 6d 69 6e 20 20 24 7a 6d 69 6e in $ymin $zmin
ac10: 20 20 24 78 6d 61 78 20 20 24 79 6d 61 78 20 24 $xmax $ymax $
ac20: 7a 6d 61 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 zmax \..
ac30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ac40: 20 24 78 73 74 65 70 20 24 79 73 74 65 70 20 24 $xstep $ystep $
ac50: 7a 73 74 65 70 20 24 6e 61 6d 65 73 0d 0a 20 20 zstep $names..
ac60: 20 44 65 66 61 75 6c 74 4c 65 67 65 6e 64 20 20 DefaultLegend
ac70: 20 20 20 20 24 77 0d 0a 20 20 20 44 65 66 61 75 $w.. Defau
ac80: 6c 74 42 61 6c 6c 6f 6f 6e 20 20 20 20 20 24 77 ltBalloon $w
ac90: 0d 0a 0d 0a 20 20 20 53 65 74 43 6f 6c 6f 75 72 .... SetColour
aca0: 73 20 24 77 20 67 72 65 79 20 62 6c 61 63 6b 0d s $w grey black.
acb0: 0a 0d 0a 20 20 20 72 65 74 75 72 6e 20 24 6e 65 ... return $ne
acc0: 77 63 68 61 72 74 0d 0a 7d 0d 0a 0d 0a 23 20 4c wchart..}....# L
acd0: 6f 61 64 20 74 68 65 20 70 72 69 76 61 74 65 20 oad the private
ace0: 70 72 6f 63 65 64 75 72 65 73 0d 0a 23 0d 0a 73 procedures..#..s
acf0: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ource [file join
ad00: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b [file dirname [
ad10: 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 22 70 info script]] "p
ad20: 6c 6f 74 70 72 69 76 2e 74 63 6c 22 5d 0d 0a 73 lotpriv.tcl"]..s
ad30: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ource [file join
ad40: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b [file dirname [
ad50: 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 22 70 info script]] "p
ad60: 6c 6f 74 61 78 69 73 2e 74 63 6c 22 5d 0d 0a 73 lotaxis.tcl"]..s
ad70: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ource [file join
ad80: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b [file dirname [
ad90: 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 22 70 info script]] "p
ada0: 6c 6f 74 33 64 2e 74 63 6c 22 5d 0d 0a 73 6f 75 lot3d.tcl"]..sou
adb0: 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b rce [file join [
adc0: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e file dirname [in
add0: 66 6f 20 73 63 72 69 70 74 5d 5d 20 22 73 63 61 fo script]] "sca
ade0: 6c 69 6e 67 2e 74 63 6c 22 5d 0d 0a 73 6f 75 72 ling.tcl"]..sour
adf0: 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 ce [file join [f
ae00: 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 ile dirname [inf
ae10: 6f 20 73 63 72 69 70 74 5d 5d 20 22 70 6c 6f 74 o script]] "plot
ae20: 63 6f 6e 74 6f 75 72 2e 74 63 6c 22 5d 0d 0a 73 contour.tcl"]..s
ae30: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ource [file join
ae40: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b [file dirname [
ae50: 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 22 70 info script]] "p
ae60: 6c 6f 74 67 61 6e 74 74 2e 74 63 6c 22 5d 0d 0a lotgantt.tcl"]..
ae70: 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 source [file joi
ae80: 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 n [file dirname
ae90: 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 22 [info script]] "
aea0: 70 6c 6f 74 62 75 73 69 6e 65 73 73 2e 74 63 6c plotbusiness.tcl
aeb0: 22 5d 0d 0a 73 6f 75 72 63 65 20 5b 66 69 6c 65 "]..source [file
aec0: 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 6e join [file dirn
aed0: 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 ame [info script
aee0: 5d 5d 20 22 70 6c 6f 74 61 6e 6e 6f 74 2e 74 63 ]] "plotannot.tc
aef0: 6c 22 5d 0d 0a 0d 0a 23 20 41 6e 6e 6f 75 6e 63 l"]....# Announc
af00: 65 20 6f 75 72 20 70 72 65 73 65 6e 63 65 0d 0a e our presence..
af10: 23 0d 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 #..package provi
af20: 64 65 20 50 6c 6f 74 63 68 61 72 74 20 31 2e 33 de Plotchart 1.3
af30: 2e 32 0d 0a .2..