Attachment "plotchart.tcl" to
ticket [2691870fff]
added by
relaxmike
2009-03-18 21:15:00.
0000: 23 20 70 6c 6f 74 63 68 61 72 74 2e 74 63 6c 20 # plotchart.tcl
0010: 2d 2d 0a 23 20 20 20 20 46 61 63 69 6c 69 74 69 --.# Faciliti
0020: 65 73 20 74 6f 20 64 72 61 77 20 73 69 6d 70 6c es to draw simpl
0030: 65 20 70 6c 6f 74 73 20 69 6e 20 61 20 64 65 64 e plots in a ded
0040: 69 63 61 74 65 64 20 63 61 6e 76 61 73 0a 23 0a icated canvas.#.
0050: 23 20 4e 6f 74 65 3a 0a 23 20 20 20 20 54 68 69 # Note:.# Thi
0060: 73 20 73 6f 75 72 63 65 20 66 69 6c 65 20 63 6f s source file co
0070: 6e 74 61 69 6e 73 20 74 68 65 20 70 75 62 6c 69 ntains the publi
0080: 63 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 23 20 20 c functions..#
0090: 20 20 54 68 65 20 70 72 69 76 61 74 65 20 66 75 The private fu
00a0: 6e 63 74 69 6f 6e 73 20 61 72 65 20 63 6f 6e 74 nctions are cont
00b0: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 66 69 6c ained in the fil
00c0: 65 73 20 22 73 6f 75 72 63 65 64 22 0a 23 20 20 es "sourced".#
00d0: 20 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 23 0a at the end..#.
00e0: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require
00f0: 54 63 6c 20 38 2e 34 0a 70 61 63 6b 61 67 65 20 Tcl 8.4.package
0100: 72 65 71 75 69 72 65 20 54 6b 0a 0a 23 20 50 6c require Tk..# Pl
0110: 6f 74 63 68 61 72 74 20 2d 2d 0a 23 20 20 20 20 otchart --.#
0120: 4e 61 6d 65 73 70 61 63 65 20 74 6f 20 68 6f 6c Namespace to hol
0130: 64 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 73 d the procedures
0140: 20 61 6e 64 20 74 68 65 20 70 72 69 76 61 74 65 and the private
0150: 20 64 61 74 61 0a 23 0a 6e 61 6d 65 73 70 61 63 data.#.namespac
0160: 65 20 65 76 61 6c 20 3a 3a 50 6c 6f 74 63 68 61 e eval ::Plotcha
0170: 72 74 20 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 rt {. variable
0180: 20 73 65 74 74 69 6e 67 73 0a 20 20 20 76 61 72 settings. var
0190: 69 61 62 6c 65 20 6c 65 67 65 6e 64 0a 20 20 20 iable legend.
01a0: 76 61 72 69 61 62 6c 65 20 73 63 61 6c 69 6e 67 variable scaling
01b0: 0a 20 20 20 76 61 72 69 61 62 6c 65 20 6d 65 74 . variable met
01c0: 68 6f 64 50 72 6f 63 0a 20 20 20 76 61 72 69 61 hodProc. varia
01d0: 62 6c 65 20 64 61 74 61 5f 73 65 72 69 65 73 0a ble data_series.
01e0: 0a 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 . namespace ex
01f0: 70 6f 72 74 20 77 6f 72 6c 64 43 6f 6f 72 64 69 port worldCoordi
0200: 6e 61 74 65 73 20 76 69 65 77 50 6f 72 74 20 63 nates viewPort c
0210: 6f 6f 72 64 73 54 6f 50 69 78 65 6c 20 5c 0a 20 oordsToPixel \.
0220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0230: 20 20 20 70 6f 6c 61 72 43 6f 6f 72 64 69 6e 61 polarCoordina
0240: 74 65 73 20 73 65 74 5a 6f 6f 6d 50 61 6e 20 5c tes setZoomPan \
0250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0260: 20 20 20 20 20 77 6f 72 6c 64 33 44 43 6f 6f 72 world3DCoor
0270: 64 69 6e 61 74 65 73 20 63 6f 6f 72 64 73 54 6f dinates coordsTo
0280: 50 69 78 65 6c 20 5c 0a 20 20 20 20 20 20 20 20 Pixel \.
0290: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6f 72 coor
02a0: 64 73 33 44 54 6f 50 69 78 65 6c 20 70 6f 6c 61 ds3DToPixel pola
02b0: 72 54 6f 50 69 78 65 6c 20 5c 0a 20 20 20 20 20 rToPixel \.
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 p
02d0: 69 78 65 6c 54 6f 43 6f 6f 72 64 73 20 70 69 78 ixelToCoords pix
02e0: 65 6c 54 6f 49 6e 64 65 78 20 64 65 74 65 72 6d elToIndex determ
02f0: 69 6e 65 53 63 61 6c 65 20 5c 0a 20 20 20 20 20 ineScale \.
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
0310: 72 65 61 74 65 58 59 50 6c 6f 74 20 63 72 65 61 reateXYPlot crea
0320: 74 65 50 6f 6c 61 72 50 6c 6f 74 20 63 72 65 61 tePolarPlot crea
0330: 74 65 50 69 65 63 68 61 72 74 20 5c 0a 20 20 20 tePiechart \.
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0350: 20 63 72 65 61 74 65 42 61 72 63 68 61 72 74 20 createBarchart
0360: 63 72 65 61 74 65 48 6f 72 69 7a 6f 6e 74 61 6c createHorizontal
0370: 42 61 72 63 68 61 72 74 20 5c 0a 20 20 20 20 20 Barchart \.
0380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
0390: 72 65 61 74 65 54 69 6d 65 63 68 61 72 74 20 63 reateTimechart c
03a0: 72 65 61 74 65 53 74 72 69 70 63 68 61 72 74 20 reateStripchart
03b0: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 \.
03c0: 20 20 20 20 20 20 63 72 65 61 74 65 49 73 6f 6d createIsom
03d0: 65 74 72 69 63 50 6c 6f 74 20 63 72 65 61 74 65 etricPlot create
03e0: 33 44 50 6c 6f 74 20 5c 0a 20 20 20 20 20 20 20 3DPlot \.
03f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 72 65 cre
0400: 61 74 65 47 61 6e 74 74 43 68 61 72 74 20 63 72 ateGanttChart cr
0410: 65 61 74 65 48 69 73 74 6f 67 72 61 6d 20 63 6f eateHistogram co
0420: 6c 6f 72 4d 61 70 20 5c 0a 20 20 20 20 20 20 20 lorMap \.
0430: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 72 65 cre
0440: 61 74 65 33 44 42 61 72 73 20 63 72 65 61 74 65 ate3DBars create
0450: 52 61 64 69 61 6c 63 68 61 72 74 20 5c 0a 20 20 Radialchart \.
0460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0470: 20 20 63 72 65 61 74 65 54 58 50 6c 6f 74 20 63 createTXPlot c
0480: 72 65 61 74 65 52 69 67 68 74 41 78 69 73 20 5c reateRightAxis \
0490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
04a0: 20 20 20 20 20 63 72 65 61 74 65 33 44 52 69 62 create3DRib
04b0: 62 6f 6e 43 68 61 72 74 20 5c 0a 20 20 20 20 20 bonChart \.
04c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
04d0: 72 65 61 74 65 58 4c 6f 67 59 50 6c 6f 74 20 5c reateXLogYPlot \
04e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
04f0: 20 20 20 20 20 70 6c 6f 74 63 6f 6e 66 69 67 20 plotconfig
0500: 70 6c 6f 74 70 61 63 6b 20 5c 0a 0a 20 20 20 23 plotpack \.. #
0510: 0a 20 20 20 23 20 41 72 72 61 79 20 6c 69 6e 6b . # Array link
0520: 69 6e 67 20 70 72 6f 63 65 64 75 72 65 73 20 77 ing procedures w
0530: 69 74 68 20 6d 65 74 68 6f 64 73 0a 20 20 20 23 ith methods. #
0540: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
0550: 6f 63 28 78 79 70 6c 6f 74 2c 74 69 74 6c 65 29 oc(xyplot,title)
0560: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 72 61 Dra
0570: 77 54 69 74 6c 65 0a 20 20 20 73 65 74 20 6d 65 wTitle. set me
0580: 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c thodProc(xyplot,
0590: 78 74 65 78 74 29 20 20 20 20 20 20 20 20 20 20 xtext)
05a0: 20 20 20 44 72 61 77 58 74 65 78 74 0a 20 20 20 DrawXtext.
05b0: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 set methodProc(x
05c0: 79 70 6c 6f 74 2c 79 74 65 78 74 29 20 20 20 20 yplot,ytext)
05d0: 20 20 20 20 20 20 20 20 20 44 72 61 77 59 74 65 DrawYte
05e0: 78 74 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 xt. set method
05f0: 50 72 6f 63 28 78 79 70 6c 6f 74 2c 70 6c 6f 74 Proc(xyplot,plot
0600: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 ) D
0610: 72 61 77 44 61 74 61 0a 20 20 20 73 65 74 20 6d rawData. set m
0620: 65 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 ethodProc(xyplot
0630: 2c 64 6f 74 29 20 20 20 20 20 20 20 20 20 20 20 ,dot)
0640: 20 20 20 20 44 72 61 77 44 6f 74 0a 20 20 20 73 DrawDot. s
0650: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 et methodProc(xy
0660: 70 6c 6f 74 2c 64 6f 74 63 6f 6e 66 69 67 29 20 plot,dotconfig)
0670: 20 20 20 20 20 20 20 20 44 6f 74 43 6f 6e 66 69 DotConfi
0680: 67 75 72 65 0a 20 20 20 73 65 74 20 6d 65 74 68 gure. set meth
0690: 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c 69 6e odProc(xyplot,in
06a0: 74 65 72 76 61 6c 29 20 20 20 20 20 20 20 20 20 terval)
06b0: 20 44 72 61 77 49 6e 74 65 72 76 61 6c 0a 20 20 DrawInterval.
06c0: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
06d0: 78 79 70 6c 6f 74 2c 74 72 65 6e 64 29 20 20 20 xyplot,trend)
06e0: 20 20 20 20 20 20 20 20 20 20 44 72 61 77 54 72 DrawTr
06f0: 65 6e 64 4c 69 6e 65 0a 20 20 20 73 65 74 20 6d endLine. set m
0700: 65 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 ethodProc(xyplot
0710: 2c 76 65 63 74 6f 72 29 20 20 20 20 20 20 20 20 ,vector)
0720: 20 20 20 20 44 72 61 77 56 65 63 74 6f 72 0a 20 DrawVector.
0730: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
0740: 28 78 79 70 6c 6f 74 2c 76 65 63 74 6f 72 63 6f (xyplot,vectorco
0750: 6e 66 69 67 29 20 20 20 20 20 20 56 65 63 74 6f nfig) Vecto
0760: 72 43 6f 6e 66 69 67 75 72 65 0a 20 20 20 73 65 rConfigure. se
0770: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 70 t methodProc(xyp
0780: 6c 6f 74 2c 72 63 68 61 72 74 29 20 20 20 20 20 lot,rchart)
0790: 20 20 20 20 20 20 20 44 72 61 77 52 63 68 61 72 DrawRchar
07a0: 74 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 t. set methodP
07b0: 72 6f 63 28 78 79 70 6c 6f 74 2c 67 72 69 64 29 roc(xyplot,grid)
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 72 Dr
07d0: 61 77 47 72 69 64 0a 20 20 20 73 65 74 20 6d 65 awGrid. set me
07e0: 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c thodProc(xyplot,
07f0: 63 6f 6e 74 6f 75 72 6c 69 6e 65 73 29 20 20 20 contourlines)
0800: 20 20 20 44 72 61 77 49 73 6f 6c 69 6e 65 73 0a DrawIsolines.
0810: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
0820: 63 28 78 79 70 6c 6f 74 2c 63 6f 6e 74 6f 75 72 c(xyplot,contour
0830: 66 69 6c 6c 29 20 20 20 20 20 20 20 44 72 61 77 fill) Draw
0840: 53 68 61 64 65 73 0a 20 20 20 73 65 74 20 6d 65 Shades. set me
0850: 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c thodProc(xyplot,
0860: 63 6f 6e 74 6f 75 72 62 6f 78 29 20 20 20 20 20 contourbox)
0870: 20 20 20 44 72 61 77 42 6f 78 0a 20 20 20 73 65 DrawBox. se
0880: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 70 t methodProc(xyp
0890: 6c 6f 74 2c 73 61 76 65 70 6c 6f 74 29 20 20 20 lot,saveplot)
08a0: 20 20 20 20 20 20 20 53 61 76 65 50 6c 6f 74 0a SavePlot.
08b0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
08c0: 63 28 78 79 70 6c 6f 74 2c 64 61 74 61 63 6f 6e c(xyplot,datacon
08d0: 66 69 67 29 20 20 20 20 20 20 20 20 44 61 74 61 fig) Data
08e0: 43 6f 6e 66 69 67 0a 20 20 20 73 65 74 20 6d 65 Config. set me
08f0: 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c thodProc(xyplot,
0900: 78 63 6f 6e 66 69 67 29 20 20 20 20 20 20 20 20 xconfig)
0910: 20 20 20 58 43 6f 6e 66 69 67 0a 20 20 20 73 65 XConfig. se
0920: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 70 t methodProc(xyp
0930: 6c 6f 74 2c 79 63 6f 6e 66 69 67 29 20 20 20 20 lot,yconfig)
0940: 20 20 20 20 20 20 20 59 43 6f 6e 66 69 67 0a 20 YConfig.
0950: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
0960: 28 78 79 70 6c 6f 74 2c 78 74 69 63 6b 6c 69 6e (xyplot,xticklin
0970: 65 73 29 20 20 20 20 20 20 20 20 44 72 61 77 58 es) DrawX
0980: 54 69 63 6b 6c 69 6e 65 73 0a 20 20 20 73 65 74 Ticklines. set
0990: 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 70 6c methodProc(xypl
09a0: 6f 74 2c 79 74 69 63 6b 6c 69 6e 65 73 29 20 20 ot,yticklines)
09b0: 20 20 20 20 20 20 44 72 61 77 59 54 69 63 6b 6c DrawYTickl
09c0: 69 6e 65 73 0a 20 20 20 73 65 74 20 6d 65 74 68 ines. set meth
09d0: 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c 62 61 odProc(xyplot,ba
09e0: 63 6b 67 72 6f 75 6e 64 29 20 20 20 20 20 20 20 ckground)
09f0: 20 42 61 63 6b 67 72 6f 75 6e 64 43 6f 6c 6f 75 BackgroundColou
0a00: 72 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 r. set methodP
0a10: 72 6f 63 28 78 79 70 6c 6f 74 2c 6c 65 67 65 6e roc(xyplot,legen
0a20: 64 63 6f 6e 66 69 67 29 20 20 20 20 20 20 4c 65 dconfig) Le
0a30: 67 65 6e 64 43 6f 6e 66 69 67 75 72 65 0a 20 20 gendConfigure.
0a40: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
0a50: 78 79 70 6c 6f 74 2c 6c 65 67 65 6e 64 29 20 20 xyplot,legend)
0a60: 20 20 20 20 20 20 20 20 20 20 44 72 61 77 4c 65 DrawLe
0a70: 67 65 6e 64 0a 20 20 20 73 65 74 20 6d 65 74 68 gend. set meth
0a80: 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c 62 61 odProc(xyplot,ba
0a90: 6c 6c 6f 6f 6e 29 20 20 20 20 20 20 20 20 20 20 lloon)
0aa0: 20 44 72 61 77 42 61 6c 6c 6f 6f 6e 0a 20 20 20 DrawBalloon.
0ab0: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 set methodProc(x
0ac0: 79 70 6c 6f 74 2c 62 61 6c 6c 6f 6f 6e 63 6f 6e yplot,ballooncon
0ad0: 66 69 67 29 20 20 20 20 20 43 6f 6e 66 69 67 42 fig) ConfigB
0ae0: 61 6c 6c 6f 6f 6e 0a 20 20 20 73 65 74 20 6d 65 alloon. set me
0af0: 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c thodProc(xyplot,
0b00: 70 6c 61 69 6e 74 65 78 74 29 20 20 20 20 20 20 plaintext)
0b10: 20 20 20 44 72 61 77 50 6c 61 69 6e 54 65 78 74 DrawPlainText
0b20: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
0b30: 6f 63 28 78 79 70 6c 6f 74 2c 62 69 6e 64 76 61 oc(xyplot,bindva
0b40: 72 29 20 20 20 20 20 20 20 20 20 20 20 42 69 6e r) Bin
0b50: 64 56 61 72 0a 20 20 20 73 65 74 20 6d 65 74 68 dVar. set meth
0b60: 6f 64 50 72 6f 63 28 78 79 70 6c 6f 74 2c 62 69 odProc(xyplot,bi
0b70: 6e 64 63 6d 64 29 20 20 20 20 20 20 20 20 20 20 ndcmd)
0b80: 20 42 69 6e 64 43 6d 64 0a 20 20 20 73 65 74 20 BindCmd. set
0b90: 6d 65 74 68 6f 64 50 72 6f 63 28 78 79 70 6c 6f methodProc(xyplo
0ba0: 74 2c 72 65 73 63 61 6c 65 29 20 20 20 20 20 20 t,rescale)
0bb0: 20 20 20 20 20 52 65 73 63 61 6c 65 50 6c 6f 74 RescalePlot
0bc0: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
0bd0: 6f 63 28 78 79 70 6c 6f 74 2c 62 6f 78 2d 61 6e oc(xyplot,box-an
0be0: 64 2d 77 68 69 73 6b 65 72 73 29 20 20 44 72 61 d-whiskers) Dra
0bf0: 77 42 6f 78 57 68 69 73 6b 65 72 73 0a 20 20 20 wBoxWhiskers.
0c00: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 set methodProc(x
0c10: 6c 6f 67 79 70 6c 6f 74 2c 74 69 74 6c 65 29 20 logyplot,title)
0c20: 20 20 20 20 20 20 20 20 20 44 72 61 77 54 69 74 DrawTit
0c30: 6c 65 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 le. set method
0c40: 50 72 6f 63 28 78 6c 6f 67 79 70 6c 6f 74 2c 78 Proc(xlogyplot,x
0c50: 74 65 78 74 29 20 20 20 20 20 20 20 20 20 20 44 text) D
0c60: 72 61 77 58 74 65 78 74 0a 20 20 20 73 65 74 20 rawXtext. set
0c70: 6d 65 74 68 6f 64 50 72 6f 63 28 78 6c 6f 67 79 methodProc(xlogy
0c80: 70 6c 6f 74 2c 79 74 65 78 74 29 20 20 20 20 20 plot,ytext)
0c90: 20 20 20 20 20 44 72 61 77 59 74 65 78 74 0a 20 DrawYtext.
0ca0: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
0cb0: 28 78 6c 6f 67 79 70 6c 6f 74 2c 70 6c 6f 74 29 (xlogyplot,plot)
0cc0: 20 20 20 20 20 20 20 20 20 20 20 44 72 61 77 4c DrawL
0cd0: 6f 67 44 61 74 61 0a 20 20 20 73 65 74 20 6d 65 ogData. set me
0ce0: 74 68 6f 64 50 72 6f 63 28 78 6c 6f 67 79 70 6c thodProc(xlogypl
0cf0: 6f 74 2c 64 6f 74 29 20 20 20 20 20 20 20 20 20 ot,dot)
0d00: 20 20 20 44 72 61 77 4c 6f 67 44 6f 74 0a 20 20 DrawLogDot.
0d10: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
0d20: 78 6c 6f 67 79 70 6c 6f 74 2c 64 6f 74 63 6f 6e xlogyplot,dotcon
0d30: 66 69 67 29 20 20 20 20 20 20 44 6f 74 43 6f 6e fig) DotCon
0d40: 66 69 67 75 72 65 0a 20 20 20 73 65 74 20 6d 65 figure. set me
0d50: 74 68 6f 64 50 72 6f 63 28 78 6c 6f 67 79 70 6c thodProc(xlogypl
0d60: 6f 74 2c 69 6e 74 65 72 76 61 6c 29 20 20 20 20 ot,interval)
0d70: 20 20 20 44 72 61 77 4c 6f 67 49 6e 74 65 72 76 DrawLogInterv
0d80: 61 6c 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 al. set method
0d90: 50 72 6f 63 28 78 6c 6f 67 79 70 6c 6f 74 2c 74 Proc(xlogyplot,t
0da0: 72 65 6e 64 29 20 20 20 20 20 20 20 20 20 20 44 rend) D
0db0: 72 61 77 4c 6f 67 54 72 65 6e 64 4c 69 6e 65 0a rawLogTrendLine.
0dc0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
0dd0: 63 28 78 6c 6f 67 79 70 6c 6f 74 2c 73 61 76 65 c(xlogyplot,save
0de0: 70 6c 6f 74 29 20 20 20 20 20 20 20 53 61 76 65 plot) Save
0df0: 50 6c 6f 74 0a 20 20 20 73 65 74 20 6d 65 74 68 Plot. set meth
0e00: 6f 64 50 72 6f 63 28 78 6c 6f 67 79 70 6c 6f 74 odProc(xlogyplot
0e10: 2c 64 61 74 61 63 6f 6e 66 69 67 29 20 20 20 20 ,dataconfig)
0e20: 20 44 61 74 61 43 6f 6e 66 69 67 0a 20 20 20 73 DataConfig. s
0e30: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 6c et methodProc(xl
0e40: 6f 67 79 70 6c 6f 74 2c 78 63 6f 6e 66 69 67 29 ogyplot,xconfig)
0e50: 20 20 20 20 20 20 20 20 58 43 6f 6e 66 69 67 0a XConfig.
0e60: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
0e70: 63 28 78 6c 6f 67 79 70 6c 6f 74 2c 79 63 6f 6e c(xlogyplot,ycon
0e80: 66 69 67 29 20 20 20 20 20 20 20 20 59 43 6f 6e fig) YCon
0e90: 66 69 67 0a 20 20 20 73 65 74 20 6d 65 74 68 6f fig. set metho
0ea0: 64 50 72 6f 63 28 78 6c 6f 67 79 70 6c 6f 74 2c dProc(xlogyplot,
0eb0: 78 74 69 63 6b 6c 69 6e 65 73 29 20 20 20 20 20 xticklines)
0ec0: 44 72 61 77 58 54 69 63 6b 6c 69 6e 65 73 0a 20 DrawXTicklines.
0ed0: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
0ee0: 28 78 6c 6f 67 79 70 6c 6f 74 2c 79 74 69 63 6b (xlogyplot,ytick
0ef0: 6c 69 6e 65 73 29 20 20 20 20 20 44 72 61 77 59 lines) DrawY
0f00: 54 69 63 6b 6c 69 6e 65 73 0a 20 20 20 73 65 74 Ticklines. set
0f10: 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 6c 6f 67 methodProc(xlog
0f20: 79 70 6c 6f 74 2c 62 61 63 6b 67 72 6f 75 6e 64 yplot,background
0f30: 29 20 20 20 20 20 42 61 63 6b 67 72 6f 75 6e 64 ) Background
0f40: 43 6f 6c 6f 75 72 0a 20 20 20 73 65 74 20 6d 65 Colour. set me
0f50: 74 68 6f 64 50 72 6f 63 28 78 6c 6f 67 79 70 6c thodProc(xlogypl
0f60: 6f 74 2c 6c 65 67 65 6e 64 63 6f 6e 66 69 67 29 ot,legendconfig)
0f70: 20 20 20 4c 65 67 65 6e 64 43 6f 6e 66 69 67 75 LegendConfigu
0f80: 72 65 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 re. set method
0f90: 50 72 6f 63 28 78 6c 6f 67 79 70 6c 6f 74 2c 6c Proc(xlogyplot,l
0fa0: 65 67 65 6e 64 29 20 20 20 20 20 20 20 20 20 44 egend) D
0fb0: 72 61 77 4c 65 67 65 6e 64 0a 20 20 20 73 65 74 rawLegend. set
0fc0: 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 6c 6f 67 methodProc(xlog
0fd0: 79 70 6c 6f 74 2c 62 61 6c 6c 6f 6f 6e 29 20 20 yplot,balloon)
0fe0: 20 20 20 20 20 20 44 72 61 77 42 61 6c 6c 6f 6f DrawBalloo
0ff0: 6e 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 n. set methodP
1000: 72 6f 63 28 78 6c 6f 67 79 70 6c 6f 74 2c 62 61 roc(xlogyplot,ba
1010: 6c 6c 6f 6f 6e 63 6f 6e 66 69 67 29 20 20 43 6f lloonconfig) Co
1020: 6e 66 69 67 42 61 6c 6c 6f 6f 6e 0a 20 20 20 73 nfigBalloon. s
1030: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 78 6c et methodProc(xl
1040: 6f 67 79 70 6c 6f 74 2c 70 6c 61 69 6e 74 65 78 ogyplot,plaintex
1050: 74 29 20 20 20 20 20 20 44 72 61 77 50 6c 61 69 t) DrawPlai
1060: 6e 54 65 78 74 0a 20 20 20 73 65 74 20 6d 65 74 nText. set met
1070: 68 6f 64 50 72 6f 63 28 70 69 65 63 68 61 72 74 hodProc(piechart
1080: 2c 74 69 74 6c 65 29 20 20 20 20 20 20 20 20 20 ,title)
1090: 20 20 44 72 61 77 54 69 74 6c 65 0a 20 20 20 73 DrawTitle. s
10a0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 69 et methodProc(pi
10b0: 65 63 68 61 72 74 2c 70 6c 6f 74 29 20 20 20 20 echart,plot)
10c0: 20 20 20 20 20 20 20 20 44 72 61 77 50 69 65 0a DrawPie.
10d0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
10e0: 63 28 70 69 65 63 68 61 72 74 2c 73 61 76 65 70 c(piechart,savep
10f0: 6c 6f 74 29 20 20 20 20 20 20 20 20 53 61 76 65 lot) Save
1100: 50 6c 6f 74 0a 20 20 20 73 65 74 20 6d 65 74 68 Plot. set meth
1110: 6f 64 50 72 6f 63 28 70 69 65 63 68 61 72 74 2c odProc(piechart,
1120: 62 61 6c 6c 6f 6f 6e 29 20 20 20 20 20 20 20 20 balloon)
1130: 20 44 72 61 77 42 61 6c 6c 6f 6f 6e 0a 20 20 20 DrawBalloon.
1140: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 set methodProc(p
1150: 69 65 63 68 61 72 74 2c 62 61 6c 6c 6f 6f 6e 63 iechart,balloonc
1160: 6f 6e 66 69 67 29 20 20 20 43 6f 6e 66 69 67 42 onfig) ConfigB
1170: 61 6c 6c 6f 6f 6e 0a 20 20 20 73 65 74 20 6d 65 alloon. set me
1180: 74 68 6f 64 50 72 6f 63 28 70 69 65 63 68 61 72 thodProc(piechar
1190: 74 2c 70 6c 61 69 6e 74 65 78 74 29 20 20 20 20 t,plaintext)
11a0: 20 20 20 44 72 61 77 50 6c 61 69 6e 54 65 78 74 DrawPlainText
11b0: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
11c0: 6f 63 28 70 6f 6c 61 72 70 6c 6f 74 2c 74 69 74 oc(polarplot,tit
11d0: 6c 65 29 20 20 20 20 20 20 20 20 20 20 44 72 61 le) Dra
11e0: 77 54 69 74 6c 65 0a 20 20 20 73 65 74 20 6d 65 wTitle. set me
11f0: 74 68 6f 64 50 72 6f 63 28 70 6f 6c 61 72 70 6c thodProc(polarpl
1200: 6f 74 2c 70 6c 6f 74 29 20 20 20 20 20 20 20 20 ot,plot)
1210: 20 20 20 44 72 61 77 50 6f 6c 61 72 44 61 74 61 DrawPolarData
1220: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
1230: 6f 63 28 70 6f 6c 61 72 70 6c 6f 74 2c 73 61 76 oc(polarplot,sav
1240: 65 70 6c 6f 74 29 20 20 20 20 20 20 20 53 61 76 eplot) Sav
1250: 65 50 6c 6f 74 0a 20 20 20 73 65 74 20 6d 65 74 ePlot. set met
1260: 68 6f 64 50 72 6f 63 28 70 6f 6c 61 72 70 6c 6f hodProc(polarplo
1270: 74 2c 64 61 74 61 63 6f 6e 66 69 67 29 20 20 20 t,dataconfig)
1280: 20 20 44 61 74 61 43 6f 6e 66 69 67 0a 20 20 20 DataConfig.
1290: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 set methodProc(p
12a0: 6f 6c 61 72 70 6c 6f 74 2c 62 61 63 6b 67 72 6f olarplot,backgro
12b0: 75 6e 64 29 20 20 20 20 20 42 61 63 6b 67 72 6f und) Backgro
12c0: 75 6e 64 43 6f 6c 6f 75 72 0a 20 20 20 73 65 74 undColour. set
12d0: 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 6f 6c 61 methodProc(pola
12e0: 72 70 6c 6f 74 2c 6c 65 67 65 6e 64 63 6f 6e 66 rplot,legendconf
12f0: 69 67 29 20 20 20 4c 65 67 65 6e 64 43 6f 6e 66 ig) LegendConf
1300: 69 67 75 72 65 0a 20 20 20 73 65 74 20 6d 65 74 igure. set met
1310: 68 6f 64 50 72 6f 63 28 70 6f 6c 61 72 70 6c 6f hodProc(polarplo
1320: 74 2c 6c 65 67 65 6e 64 29 20 20 20 20 20 20 20 t,legend)
1330: 20 20 44 72 61 77 4c 65 67 65 6e 64 0a 20 20 20 DrawLegend.
1340: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 70 set methodProc(p
1350: 6f 6c 61 72 70 6c 6f 74 2c 62 61 6c 6c 6f 6f 6e olarplot,balloon
1360: 29 20 20 20 20 20 20 20 20 44 72 61 77 42 61 6c ) DrawBal
1370: 6c 6f 6f 6e 0a 20 20 20 73 65 74 20 6d 65 74 68 loon. set meth
1380: 6f 64 50 72 6f 63 28 70 6f 6c 61 72 70 6c 6f 74 odProc(polarplot
1390: 2c 62 61 6c 6c 6f 6f 6e 63 6f 6e 66 69 67 29 20 ,balloonconfig)
13a0: 20 43 6f 6e 66 69 67 42 61 6c 6c 6f 6f 6e 0a 20 ConfigBalloon.
13b0: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
13c0: 28 70 6f 6c 61 72 70 6c 6f 74 2c 70 6c 61 69 6e (polarplot,plain
13d0: 74 65 78 74 29 20 20 20 20 20 20 44 72 61 77 50 text) DrawP
13e0: 6c 61 69 6e 54 65 78 74 0a 20 20 20 73 65 74 20 lainText. set
13f0: 6d 65 74 68 6f 64 50 72 6f 63 28 68 69 73 74 6f methodProc(histo
1400: 67 72 61 6d 2c 74 69 74 6c 65 29 20 20 20 20 20 gram,title)
1410: 20 20 20 20 20 44 72 61 77 54 69 74 6c 65 0a 20 DrawTitle.
1420: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
1430: 28 68 69 73 74 6f 67 72 61 6d 2c 78 74 65 78 74 (histogram,xtext
1440: 29 20 20 20 20 20 20 20 20 20 20 44 72 61 77 58 ) DrawX
1450: 74 65 78 74 0a 20 20 20 73 65 74 20 6d 65 74 68 text. set meth
1460: 6f 64 50 72 6f 63 28 68 69 73 74 6f 67 72 61 6d odProc(histogram
1470: 2c 79 74 65 78 74 29 20 20 20 20 20 20 20 20 20 ,ytext)
1480: 20 44 72 61 77 59 74 65 78 74 0a 20 20 20 73 65 DrawYtext. se
1490: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 69 73 t methodProc(his
14a0: 74 6f 67 72 61 6d 2c 70 6c 6f 74 29 20 20 20 20 togram,plot)
14b0: 20 20 20 20 20 20 20 44 72 61 77 48 69 73 74 6f DrawHisto
14c0: 67 72 61 6d 44 61 74 61 0a 20 20 20 73 65 74 20 gramData. set
14d0: 6d 65 74 68 6f 64 50 72 6f 63 28 68 69 73 74 6f methodProc(histo
14e0: 67 72 61 6d 2c 73 61 76 65 70 6c 6f 74 29 20 20 gram,saveplot)
14f0: 20 20 20 20 20 53 61 76 65 50 6c 6f 74 0a 20 20 SavePlot.
1500: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
1510: 68 69 73 74 6f 67 72 61 6d 2c 64 61 74 61 63 6f histogram,dataco
1520: 6e 66 69 67 29 20 20 20 20 20 44 61 74 61 43 6f nfig) DataCo
1530: 6e 66 69 67 0a 20 20 20 73 65 74 20 6d 65 74 68 nfig. set meth
1540: 6f 64 50 72 6f 63 28 68 69 73 74 6f 67 72 61 6d odProc(histogram
1550: 2c 78 63 6f 6e 66 69 67 29 20 20 20 20 20 20 20 ,xconfig)
1560: 20 58 43 6f 6e 66 69 67 0a 20 20 20 73 65 74 20 XConfig. set
1570: 6d 65 74 68 6f 64 50 72 6f 63 28 68 69 73 74 6f methodProc(histo
1580: 67 72 61 6d 2c 79 63 6f 6e 66 69 67 29 20 20 20 gram,yconfig)
1590: 20 20 20 20 20 59 43 6f 6e 66 69 67 0a 20 20 20 YConfig.
15a0: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 set methodProc(h
15b0: 69 73 74 6f 67 72 61 6d 2c 79 74 69 63 6b 6c 69 istogram,ytickli
15c0: 6e 65 73 29 20 20 20 20 20 44 72 61 77 59 54 69 nes) DrawYTi
15d0: 63 6b 6c 69 6e 65 73 0a 20 20 20 73 65 74 20 6d cklines. set m
15e0: 65 74 68 6f 64 50 72 6f 63 28 68 69 73 74 6f 67 ethodProc(histog
15f0: 72 61 6d 2c 62 61 63 6b 67 72 6f 75 6e 64 29 20 ram,background)
1600: 20 20 20 20 42 61 63 6b 67 72 6f 75 6e 64 43 6f BackgroundCo
1610: 6c 6f 75 72 0a 20 20 20 73 65 74 20 6d 65 74 68 lour. set meth
1620: 6f 64 50 72 6f 63 28 68 69 73 74 6f 67 72 61 6d odProc(histogram
1630: 2c 6c 65 67 65 6e 64 63 6f 6e 66 69 67 29 20 20 ,legendconfig)
1640: 20 4c 65 67 65 6e 64 43 6f 6e 66 69 67 75 72 65 LegendConfigure
1650: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
1660: 6f 63 28 68 69 73 74 6f 67 72 61 6d 2c 6c 65 67 oc(histogram,leg
1670: 65 6e 64 29 20 20 20 20 20 20 20 20 20 44 72 61 end) Dra
1680: 77 4c 65 67 65 6e 64 0a 20 20 20 73 65 74 20 6d wLegend. set m
1690: 65 74 68 6f 64 50 72 6f 63 28 68 69 73 74 6f 67 ethodProc(histog
16a0: 72 61 6d 2c 62 61 6c 6c 6f 6f 6e 29 20 20 20 20 ram,balloon)
16b0: 20 20 20 20 44 72 61 77 42 61 6c 6c 6f 6f 6e 0a DrawBalloon.
16c0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
16d0: 63 28 68 69 73 74 6f 67 72 61 6d 2c 62 61 6c 6c c(histogram,ball
16e0: 6f 6f 6e 63 6f 6e 66 69 67 29 20 20 43 6f 6e 66 oonconfig) Conf
16f0: 69 67 42 61 6c 6c 6f 6f 6e 0a 20 20 20 73 65 74 igBalloon. set
1700: 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 69 73 74 methodProc(hist
1710: 6f 67 72 61 6d 2c 70 6c 61 69 6e 74 65 78 74 29 ogram,plaintext)
1720: 20 20 20 20 20 20 44 72 61 77 50 6c 61 69 6e 54 DrawPlainT
1730: 65 78 74 0a 20 20 20 73 65 74 20 6d 65 74 68 6f ext. set metho
1740: 64 50 72 6f 63 28 68 6f 72 69 7a 62 61 72 73 2c dProc(horizbars,
1750: 74 69 74 6c 65 29 20 20 20 20 20 20 20 20 20 20 title)
1760: 44 72 61 77 54 69 74 6c 65 0a 20 20 20 73 65 74 DrawTitle. set
1770: 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 6f 72 69 methodProc(hori
1780: 7a 62 61 72 73 2c 78 74 65 78 74 29 20 20 20 20 zbars,xtext)
1790: 20 20 20 20 20 20 44 72 61 77 58 74 65 78 74 0a DrawXtext.
17a0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
17b0: 63 28 68 6f 72 69 7a 62 61 72 73 2c 79 74 65 78 c(horizbars,ytex
17c0: 74 29 20 20 20 20 20 20 20 20 20 20 44 72 61 77 t) Draw
17d0: 59 74 65 78 74 0a 20 20 20 73 65 74 20 6d 65 74 Ytext. set met
17e0: 68 6f 64 50 72 6f 63 28 68 6f 72 69 7a 62 61 72 hodProc(horizbar
17f0: 73 2c 70 6c 6f 74 29 20 20 20 20 20 20 20 20 20 s,plot)
1800: 20 20 44 72 61 77 48 6f 72 69 7a 42 61 72 44 61 DrawHorizBarDa
1810: 74 61 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 ta. set method
1820: 50 72 6f 63 28 68 6f 72 69 7a 62 61 72 73 2c 78 Proc(horizbars,x
1830: 74 69 63 6b 6c 69 6e 65 73 29 20 20 20 20 20 44 ticklines) D
1840: 72 61 77 58 54 69 63 6b 6c 69 6e 65 73 0a 20 20 rawXTicklines.
1850: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
1860: 68 6f 72 69 7a 62 61 72 73 2c 62 61 63 6b 67 72 horizbars,backgr
1870: 6f 75 6e 64 29 20 20 20 20 20 42 61 63 6b 67 72 ound) Backgr
1880: 6f 75 6e 64 43 6f 6c 6f 75 72 0a 20 20 20 73 65 oundColour. se
1890: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 6f 72 t methodProc(hor
18a0: 69 7a 62 61 72 73 2c 73 61 76 65 70 6c 6f 74 29 izbars,saveplot)
18b0: 20 20 20 20 20 20 20 53 61 76 65 50 6c 6f 74 0a SavePlot.
18c0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
18d0: 63 28 68 6f 72 69 7a 62 61 72 73 2c 63 6f 6c 6f c(horizbars,colo
18e0: 75 72 73 29 20 20 20 20 20 20 20 20 53 65 74 43 urs) SetC
18f0: 6f 6c 6f 75 72 73 0a 20 20 20 73 65 74 20 6d 65 olours. set me
1900: 74 68 6f 64 50 72 6f 63 28 68 6f 72 69 7a 62 61 thodProc(horizba
1910: 72 73 2c 63 6f 6c 6f 72 73 29 20 20 20 20 20 20 rs,colors)
1920: 20 20 20 53 65 74 43 6f 6c 6f 75 72 73 0a 20 20 SetColours.
1930: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
1940: 68 6f 72 69 7a 62 61 72 73 2c 78 63 6f 6e 66 69 horizbars,xconfi
1950: 67 29 20 20 20 20 20 20 20 20 58 43 6f 6e 66 69 g) XConfi
1960: 67 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 g. set methodP
1970: 72 6f 63 28 68 6f 72 69 7a 62 61 72 73 2c 6c 65 roc(horizbars,le
1980: 67 65 6e 64 63 6f 6e 66 69 67 29 20 20 20 4c 65 gendconfig) Le
1990: 67 65 6e 64 43 6f 6e 66 69 67 75 72 65 0a 20 20 gendConfigure.
19a0: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
19b0: 68 6f 72 69 7a 62 61 72 73 2c 6c 65 67 65 6e 64 horizbars,legend
19c0: 29 20 20 20 20 20 20 20 20 20 44 72 61 77 4c 65 ) DrawLe
19d0: 67 65 6e 64 0a 20 20 20 73 65 74 20 6d 65 74 68 gend. set meth
19e0: 6f 64 50 72 6f 63 28 68 6f 72 69 7a 62 61 72 73 odProc(horizbars
19f0: 2c 62 61 6c 6c 6f 6f 6e 29 20 20 20 20 20 20 20 ,balloon)
1a00: 20 44 72 61 77 42 61 6c 6c 6f 6f 6e 0a 20 20 20 DrawBalloon.
1a10: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 68 set methodProc(h
1a20: 6f 72 69 7a 62 61 72 73 2c 62 61 6c 6c 6f 6f 6e orizbars,balloon
1a30: 63 6f 6e 66 69 67 29 20 20 43 6f 6e 66 69 67 42 config) ConfigB
1a40: 61 6c 6c 6f 6f 6e 0a 20 20 20 73 65 74 20 6d 65 alloon. set me
1a50: 74 68 6f 64 50 72 6f 63 28 68 6f 72 69 7a 62 61 thodProc(horizba
1a60: 72 73 2c 70 6c 61 69 6e 74 65 78 74 29 20 20 20 rs,plaintext)
1a70: 20 20 20 44 72 61 77 50 6c 61 69 6e 54 65 78 74 DrawPlainText
1a80: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
1a90: 6f 63 28 76 65 72 74 62 61 72 73 2c 74 69 74 6c oc(vertbars,titl
1aa0: 65 29 20 20 20 20 20 20 20 20 20 20 20 44 72 61 e) Dra
1ab0: 77 54 69 74 6c 65 0a 20 20 20 73 65 74 20 6d 65 wTitle. set me
1ac0: 74 68 6f 64 50 72 6f 63 28 76 65 72 74 62 61 72 thodProc(vertbar
1ad0: 73 2c 78 74 65 78 74 29 20 20 20 20 20 20 20 20 s,xtext)
1ae0: 20 20 20 44 72 61 77 58 74 65 78 74 0a 20 20 20 DrawXtext.
1af0: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 76 set methodProc(v
1b00: 65 72 74 62 61 72 73 2c 79 74 65 78 74 29 20 20 ertbars,ytext)
1b10: 20 20 20 20 20 20 20 20 20 44 72 61 77 59 74 65 DrawYte
1b20: 78 74 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 xt. set method
1b30: 50 72 6f 63 28 76 65 72 74 62 61 72 73 2c 70 6c Proc(vertbars,pl
1b40: 6f 74 29 20 20 20 20 20 20 20 20 20 20 20 20 44 ot) D
1b50: 72 61 77 56 65 72 74 42 61 72 44 61 74 61 0a 20 rawVertBarData.
1b60: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
1b70: 28 76 65 72 74 62 61 72 73 2c 62 61 63 6b 67 72 (vertbars,backgr
1b80: 6f 75 6e 64 29 20 20 20 20 20 20 42 61 63 6b 67 ound) Backg
1b90: 72 6f 75 6e 64 43 6f 6c 6f 75 72 0a 20 20 20 73 roundColour. s
1ba0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 76 65 et methodProc(ve
1bb0: 72 74 62 61 72 73 2c 79 74 69 63 6b 6c 69 6e 65 rtbars,ytickline
1bc0: 73 29 20 20 20 20 20 20 44 72 61 77 59 54 69 63 s) DrawYTic
1bd0: 6b 6c 69 6e 65 73 0a 20 20 20 73 65 74 20 6d 65 klines. set me
1be0: 74 68 6f 64 50 72 6f 63 28 76 65 72 74 62 61 72 thodProc(vertbar
1bf0: 73 2c 73 61 76 65 70 6c 6f 74 29 20 20 20 20 20 s,saveplot)
1c00: 20 20 20 53 61 76 65 50 6c 6f 74 0a 20 20 20 73 SavePlot. s
1c10: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 76 65 et methodProc(ve
1c20: 72 74 62 61 72 73 2c 63 6f 6c 6f 75 72 73 29 20 rtbars,colours)
1c30: 20 20 20 20 20 20 20 20 53 65 74 43 6f 6c 6f 75 SetColou
1c40: 72 73 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 rs. set method
1c50: 50 72 6f 63 28 76 65 72 74 62 61 72 73 2c 63 6f Proc(vertbars,co
1c60: 6c 6f 72 73 29 20 20 20 20 20 20 20 20 20 20 53 lors) S
1c70: 65 74 43 6f 6c 6f 75 72 73 0a 20 20 20 73 65 74 etColours. set
1c80: 20 6d 65 74 68 6f 64 50 72 6f 63 28 76 65 72 74 methodProc(vert
1c90: 62 61 72 73 2c 79 63 6f 6e 66 69 67 29 20 20 20 bars,yconfig)
1ca0: 20 20 20 20 20 20 59 43 6f 6e 66 69 67 0a 20 20 YConfig.
1cb0: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
1cc0: 76 65 72 74 62 61 72 73 2c 6c 65 67 65 6e 64 63 vertbars,legendc
1cd0: 6f 6e 66 69 67 29 20 20 20 20 4c 65 67 65 6e 64 onfig) Legend
1ce0: 43 6f 6e 66 69 67 75 72 65 0a 20 20 20 73 65 74 Configure. set
1cf0: 20 6d 65 74 68 6f 64 50 72 6f 63 28 76 65 72 74 methodProc(vert
1d00: 62 61 72 73 2c 6c 65 67 65 6e 64 29 20 20 20 20 bars,legend)
1d10: 20 20 20 20 20 20 44 72 61 77 4c 65 67 65 6e 64 DrawLegend
1d20: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
1d30: 6f 63 28 76 65 72 74 62 61 72 73 2c 62 61 6c 6c oc(vertbars,ball
1d40: 6f 6f 6e 29 20 20 20 20 20 20 20 20 20 44 72 61 oon) Dra
1d50: 77 42 61 6c 6c 6f 6f 6e 0a 20 20 20 73 65 74 20 wBalloon. set
1d60: 6d 65 74 68 6f 64 50 72 6f 63 28 76 65 72 74 62 methodProc(vertb
1d70: 61 72 73 2c 62 61 6c 6c 6f 6f 6e 63 6f 6e 66 69 ars,balloonconfi
1d80: 67 29 20 20 20 43 6f 6e 66 69 67 42 61 6c 6c 6f g) ConfigBallo
1d90: 6f 6e 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 on. set method
1da0: 50 72 6f 63 28 76 65 72 74 62 61 72 73 2c 70 6c Proc(vertbars,pl
1db0: 61 69 6e 74 65 78 74 29 20 20 20 20 20 20 20 44 aintext) D
1dc0: 72 61 77 50 6c 61 69 6e 54 65 78 74 0a 20 20 20 rawPlainText.
1dd0: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 set methodProc(t
1de0: 69 6d 65 63 68 61 72 74 2c 74 69 74 6c 65 29 20 imechart,title)
1df0: 20 20 20 20 20 20 20 20 20 44 72 61 77 54 69 74 DrawTit
1e00: 6c 65 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 le. set method
1e10: 50 72 6f 63 28 74 69 6d 65 63 68 61 72 74 2c 70 Proc(timechart,p
1e20: 65 72 69 6f 64 29 20 20 20 20 20 20 20 20 20 44 eriod) D
1e30: 72 61 77 54 69 6d 65 50 65 72 69 6f 64 0a 20 20 rawTimePeriod.
1e40: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
1e50: 74 69 6d 65 63 68 61 72 74 2c 6d 69 6c 65 73 74 timechart,milest
1e60: 6f 6e 65 29 20 20 20 20 20 20 44 72 61 77 54 69 one) DrawTi
1e70: 6d 65 4d 69 6c 65 73 74 6f 6e 65 0a 20 20 20 73 meMilestone. s
1e80: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 69 et methodProc(ti
1e90: 6d 65 63 68 61 72 74 2c 76 65 72 74 6c 69 6e 65 mechart,vertline
1ea0: 29 20 20 20 20 20 20 20 44 72 61 77 54 69 6d 65 ) DrawTime
1eb0: 56 65 72 74 4c 69 6e 65 0a 20 20 20 73 65 74 20 VertLine. set
1ec0: 6d 65 74 68 6f 64 50 72 6f 63 28 74 69 6d 65 63 methodProc(timec
1ed0: 68 61 72 74 2c 73 61 76 65 70 6c 6f 74 29 20 20 hart,saveplot)
1ee0: 20 20 20 20 20 53 61 76 65 50 6c 6f 74 0a 20 20 SavePlot.
1ef0: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
1f00: 74 69 6d 65 63 68 61 72 74 2c 62 61 63 6b 67 72 timechart,backgr
1f10: 6f 75 6e 64 29 20 20 20 20 20 42 61 63 6b 67 72 ound) Backgr
1f20: 6f 75 6e 64 43 6f 6c 6f 75 72 0a 20 20 20 73 65 oundColour. se
1f30: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 69 6d t methodProc(tim
1f40: 65 63 68 61 72 74 2c 62 61 6c 6c 6f 6f 6e 29 20 echart,balloon)
1f50: 20 20 20 20 20 20 20 44 72 61 77 42 61 6c 6c 6f DrawBallo
1f60: 6f 6e 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 on. set method
1f70: 50 72 6f 63 28 74 69 6d 65 63 68 61 72 74 2c 62 Proc(timechart,b
1f80: 61 6c 6c 6f 6f 6e 63 6f 6e 66 69 67 29 20 20 43 alloonconfig) C
1f90: 6f 6e 66 69 67 42 61 6c 6c 6f 6f 6e 0a 20 20 20 onfigBalloon.
1fa0: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 set methodProc(t
1fb0: 69 6d 65 63 68 61 72 74 2c 70 6c 61 69 6e 74 65 imechart,plainte
1fc0: 78 74 29 20 20 20 20 20 20 44 72 61 77 50 6c 61 xt) DrawPla
1fd0: 69 6e 54 65 78 74 0a 20 20 20 73 65 74 20 6d 65 inText. set me
1fe0: 74 68 6f 64 50 72 6f 63 28 74 69 6d 65 63 68 61 thodProc(timecha
1ff0: 72 74 2c 68 73 63 72 6f 6c 6c 29 20 20 20 20 20 rt,hscroll)
2000: 20 20 20 43 6f 6e 6e 65 63 74 48 6f 72 69 7a 53 ConnectHorizS
2010: 63 72 6f 6c 6c 62 61 72 0a 20 20 20 73 65 74 20 crollbar. set
2020: 6d 65 74 68 6f 64 50 72 6f 63 28 74 69 6d 65 63 methodProc(timec
2030: 68 61 72 74 2c 76 73 63 72 6f 6c 6c 29 20 20 20 hart,vscroll)
2040: 20 20 20 20 20 43 6f 6e 6e 65 63 74 56 65 72 74 ConnectVert
2050: 53 63 72 6f 6c 6c 62 61 72 0a 20 20 20 73 65 74 Scrollbar. set
2060: 20 6d 65 74 68 6f 64 50 72 6f 63 28 67 61 6e 74 methodProc(gant
2070: 74 63 68 61 72 74 2c 74 69 74 6c 65 29 20 20 20 tchart,title)
2080: 20 20 20 20 20 20 44 72 61 77 54 69 74 6c 65 0a DrawTitle.
2090: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
20a0: 63 28 67 61 6e 74 74 63 68 61 72 74 2c 70 65 72 c(ganttchart,per
20b0: 69 6f 64 29 20 20 20 20 20 20 20 20 44 72 61 77 iod) Draw
20c0: 47 61 6e 74 74 50 65 72 69 6f 64 0a 20 20 20 73 GanttPeriod. s
20d0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 67 61 et methodProc(ga
20e0: 6e 74 74 63 68 61 72 74 2c 74 61 73 6b 29 20 20 nttchart,task)
20f0: 20 20 20 20 20 20 20 20 44 72 61 77 47 61 6e 74 DrawGant
2100: 74 50 65 72 69 6f 64 0a 20 20 20 73 65 74 20 6d tPeriod. set m
2110: 65 74 68 6f 64 50 72 6f 63 28 67 61 6e 74 74 63 ethodProc(ganttc
2120: 68 61 72 74 2c 6d 69 6c 65 73 74 6f 6e 65 29 20 hart,milestone)
2130: 20 20 20 20 44 72 61 77 47 61 6e 74 74 4d 69 6c DrawGanttMil
2140: 65 73 74 6f 6e 65 0a 20 20 20 73 65 74 20 6d 65 estone. set me
2150: 74 68 6f 64 50 72 6f 63 28 67 61 6e 74 74 63 68 thodProc(ganttch
2160: 61 72 74 2c 76 65 72 74 6c 69 6e 65 29 20 20 20 art,vertline)
2170: 20 20 20 44 72 61 77 47 61 6e 74 74 56 65 72 74 DrawGanttVert
2180: 4c 69 6e 65 0a 20 20 20 73 65 74 20 6d 65 74 68 Line. set meth
2190: 6f 64 50 72 6f 63 28 67 61 6e 74 74 63 68 61 72 odProc(ganttchar
21a0: 74 2c 73 61 76 65 70 6c 6f 74 29 20 20 20 20 20 t,saveplot)
21b0: 20 53 61 76 65 50 6c 6f 74 0a 20 20 20 73 65 74 SavePlot. set
21c0: 20 6d 65 74 68 6f 64 50 72 6f 63 28 67 61 6e 74 methodProc(gant
21d0: 74 63 68 61 72 74 2c 63 6f 6c 6f 72 29 20 20 20 tchart,color)
21e0: 20 20 20 20 20 20 47 61 6e 74 74 43 6f 6c 6f 72 GanttColor
21f0: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
2200: 6f 63 28 67 61 6e 74 74 63 68 61 72 74 2c 63 6f oc(ganttchart,co
2210: 6c 6f 75 72 29 20 20 20 20 20 20 20 20 47 61 6e lour) Gan
2220: 74 74 43 6f 6c 6f 72 0a 20 20 20 73 65 74 20 6d ttColor. set m
2230: 65 74 68 6f 64 50 72 6f 63 28 67 61 6e 74 74 63 ethodProc(ganttc
2240: 68 61 72 74 2c 66 6f 6e 74 29 20 20 20 20 20 20 hart,font)
2250: 20 20 20 20 47 61 6e 74 74 46 6f 6e 74 0a 20 20 GanttFont.
2260: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
2270: 67 61 6e 74 74 63 68 61 72 74 2c 63 6f 6e 6e 65 ganttchart,conne
2280: 63 74 29 20 20 20 20 20 20 20 44 72 61 77 47 61 ct) DrawGa
2290: 6e 74 74 43 6f 6e 6e 65 63 74 0a 20 20 20 73 65 nttConnect. se
22a0: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 67 61 6e t methodProc(gan
22b0: 74 74 63 68 61 72 74 2c 73 75 6d 6d 61 72 79 29 ttchart,summary)
22c0: 20 20 20 20 20 20 20 44 72 61 77 47 61 6e 74 74 DrawGantt
22d0: 53 75 6d 6d 61 72 79 0a 20 20 20 73 65 74 20 6d Summary. set m
22e0: 65 74 68 6f 64 50 72 6f 63 28 67 61 6e 74 74 63 ethodProc(ganttc
22f0: 68 61 72 74 2c 62 61 63 6b 67 72 6f 75 6e 64 29 hart,background)
2300: 20 20 20 20 42 61 63 6b 67 72 6f 75 6e 64 43 6f BackgroundCo
2310: 6c 6f 75 72 0a 20 20 20 73 65 74 20 6d 65 74 68 lour. set meth
2320: 6f 64 50 72 6f 63 28 67 61 6e 74 74 63 68 61 72 odProc(ganttchar
2330: 74 2c 62 61 6c 6c 6f 6f 6e 29 20 20 20 20 20 20 t,balloon)
2340: 20 44 72 61 77 42 61 6c 6c 6f 6f 6e 0a 20 20 20 DrawBalloon.
2350: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 67 set methodProc(g
2360: 61 6e 74 74 63 68 61 72 74 2c 62 61 6c 6c 6f 6f anttchart,balloo
2370: 6e 63 6f 6e 66 69 67 29 20 43 6f 6e 66 69 67 42 nconfig) ConfigB
2380: 61 6c 6c 6f 6f 6e 0a 20 20 20 73 65 74 20 6d 65 alloon. set me
2390: 74 68 6f 64 50 72 6f 63 28 67 61 6e 74 74 63 68 thodProc(ganttch
23a0: 61 72 74 2c 70 6c 61 69 6e 74 65 78 74 29 20 20 art,plaintext)
23b0: 20 20 20 44 72 61 77 50 6c 61 69 6e 54 65 78 74 DrawPlainText
23c0: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
23d0: 6f 63 28 67 61 6e 74 74 63 68 61 72 74 2c 68 73 oc(ganttchart,hs
23e0: 63 72 6f 6c 6c 29 20 20 20 20 20 20 20 43 6f 6e croll) Con
23f0: 6e 65 63 74 48 6f 72 69 7a 53 63 72 6f 6c 6c 62 nectHorizScrollb
2400: 61 72 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 ar. set method
2410: 50 72 6f 63 28 67 61 6e 74 74 63 68 61 72 74 2c Proc(ganttchart,
2420: 76 73 63 72 6f 6c 6c 29 20 20 20 20 20 20 20 43 vscroll) C
2430: 6f 6e 6e 65 63 74 56 65 72 74 53 63 72 6f 6c 6c onnectVertScroll
2440: 62 61 72 0a 20 20 20 73 65 74 20 6d 65 74 68 6f bar. set metho
2450: 64 50 72 6f 63 28 73 74 72 69 70 63 68 61 72 74 dProc(stripchart
2460: 2c 74 69 74 6c 65 29 20 20 20 20 20 20 20 20 20 ,title)
2470: 44 72 61 77 54 69 74 6c 65 0a 20 20 20 73 65 74 DrawTitle. set
2480: 20 6d 65 74 68 6f 64 50 72 6f 63 28 73 74 72 69 methodProc(stri
2490: 70 63 68 61 72 74 2c 78 74 65 78 74 29 20 20 20 pchart,xtext)
24a0: 20 20 20 20 20 20 44 72 61 77 58 74 65 78 74 0a DrawXtext.
24b0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
24c0: 63 28 73 74 72 69 70 63 68 61 72 74 2c 79 74 65 c(stripchart,yte
24d0: 78 74 29 20 20 20 20 20 20 20 20 20 44 72 61 77 xt) Draw
24e0: 59 74 65 78 74 0a 20 20 20 73 65 74 20 6d 65 74 Ytext. set met
24f0: 68 6f 64 50 72 6f 63 28 73 74 72 69 70 63 68 61 hodProc(stripcha
2500: 72 74 2c 70 6c 6f 74 29 20 20 20 20 20 20 20 20 rt,plot)
2510: 20 20 44 72 61 77 53 74 72 69 70 44 61 74 61 0a DrawStripData.
2520: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
2530: 63 28 73 74 72 69 70 63 68 61 72 74 2c 73 61 76 c(stripchart,sav
2540: 65 70 6c 6f 74 29 20 20 20 20 20 20 53 61 76 65 eplot) Save
2550: 50 6c 6f 74 0a 20 20 20 73 65 74 20 6d 65 74 68 Plot. set meth
2560: 6f 64 50 72 6f 63 28 73 74 72 69 70 63 68 61 72 odProc(stripchar
2570: 74 2c 64 61 74 61 63 6f 6e 66 69 67 29 20 20 20 t,dataconfig)
2580: 20 44 61 74 61 43 6f 6e 66 69 67 0a 20 20 20 73 DataConfig. s
2590: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 73 74 et methodProc(st
25a0: 72 69 70 63 68 61 72 74 2c 78 63 6f 6e 66 69 67 ripchart,xconfig
25b0: 29 20 20 20 20 20 20 20 58 43 6f 6e 66 69 67 0a ) XConfig.
25c0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
25d0: 63 28 73 74 72 69 70 63 68 61 72 74 2c 79 63 6f c(stripchart,yco
25e0: 6e 66 69 67 29 20 20 20 20 20 20 20 59 43 6f 6e nfig) YCon
25f0: 66 69 67 0a 20 20 20 73 65 74 20 6d 65 74 68 6f fig. set metho
2600: 64 50 72 6f 63 28 73 74 72 69 70 63 68 61 72 74 dProc(stripchart
2610: 2c 79 74 69 63 6b 6c 69 6e 65 73 29 20 20 20 20 ,yticklines)
2620: 44 72 61 77 59 54 69 63 6b 6c 69 6e 65 73 0a 20 DrawYTicklines.
2630: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
2640: 28 73 74 72 69 70 63 68 61 72 74 2c 62 61 63 6b (stripchart,back
2650: 67 72 6f 75 6e 64 29 20 20 20 20 42 61 63 6b 67 ground) Backg
2660: 72 6f 75 6e 64 43 6f 6c 6f 75 72 0a 20 20 20 73 roundColour. s
2670: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 73 74 et methodProc(st
2680: 72 69 70 63 68 61 72 74 2c 6c 65 67 65 6e 64 63 ripchart,legendc
2690: 6f 6e 66 69 67 29 20 20 4c 65 67 65 6e 64 43 6f onfig) LegendCo
26a0: 6e 66 69 67 75 72 65 0a 20 20 20 73 65 74 20 6d nfigure. set m
26b0: 65 74 68 6f 64 50 72 6f 63 28 73 74 72 69 70 63 ethodProc(stripc
26c0: 68 61 72 74 2c 6c 65 67 65 6e 64 29 20 20 20 20 hart,legend)
26d0: 20 20 20 20 44 72 61 77 4c 65 67 65 6e 64 0a 20 DrawLegend.
26e0: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
26f0: 28 73 74 72 69 70 63 68 61 72 74 2c 62 61 6c 6c (stripchart,ball
2700: 6f 6f 6e 29 20 20 20 20 20 20 20 44 72 61 77 42 oon) DrawB
2710: 61 6c 6c 6f 6f 6e 0a 20 20 20 73 65 74 20 6d 65 alloon. set me
2720: 74 68 6f 64 50 72 6f 63 28 73 74 72 69 70 63 68 thodProc(stripch
2730: 61 72 74 2c 62 61 6c 6c 6f 6f 6e 63 6f 6e 66 69 art,balloonconfi
2740: 67 29 20 43 6f 6e 66 69 67 42 61 6c 6c 6f 6f 6e g) ConfigBalloon
2750: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
2760: 6f 63 28 73 74 72 69 70 63 68 61 72 74 2c 70 6c oc(stripchart,pl
2770: 61 69 6e 74 65 78 74 29 20 20 20 20 20 44 72 61 aintext) Dra
2780: 77 50 6c 61 69 6e 54 65 78 74 0a 20 20 20 73 65 wPlainText. se
2790: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 69 73 6f t methodProc(iso
27a0: 6d 65 74 72 69 63 2c 74 69 74 6c 65 29 20 20 20 metric,title)
27b0: 20 20 20 20 20 20 20 44 72 61 77 54 69 74 6c 65 DrawTitle
27c0: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
27d0: 6f 63 28 69 73 6f 6d 65 74 72 69 63 2c 78 74 65 oc(isometric,xte
27e0: 78 74 29 20 20 20 20 20 20 20 20 20 20 44 72 61 xt) Dra
27f0: 77 58 74 65 78 74 0a 20 20 20 73 65 74 20 6d 65 wXtext. set me
2800: 74 68 6f 64 50 72 6f 63 28 69 73 6f 6d 65 74 72 thodProc(isometr
2810: 69 63 2c 79 74 65 78 74 29 20 20 20 20 20 20 20 ic,ytext)
2820: 20 20 20 44 72 61 77 59 74 65 78 74 0a 20 20 20 DrawYtext.
2830: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 69 set methodProc(i
2840: 73 6f 6d 65 74 72 69 63 2c 70 6c 6f 74 29 20 20 sometric,plot)
2850: 20 20 20 20 20 20 20 20 20 44 72 61 77 49 73 6f DrawIso
2860: 6d 65 74 72 69 63 44 61 74 61 0a 20 20 20 73 65 metricData. se
2870: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 69 73 6f t methodProc(iso
2880: 6d 65 74 72 69 63 2c 73 61 76 65 70 6c 6f 74 29 metric,saveplot)
2890: 20 20 20 20 20 20 20 53 61 76 65 50 6c 6f 74 0a SavePlot.
28a0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
28b0: 63 28 69 73 6f 6d 65 74 72 69 63 2c 62 61 63 6b c(isometric,back
28c0: 67 72 6f 75 6e 64 29 20 20 20 20 20 42 61 63 6b ground) Back
28d0: 67 72 6f 75 6e 64 43 6f 6c 6f 75 72 0a 20 20 20 groundColour.
28e0: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 69 set methodProc(i
28f0: 73 6f 6d 65 74 72 69 63 2c 62 61 6c 6c 6f 6f 6e sometric,balloon
2900: 29 20 20 20 20 20 20 20 20 44 72 61 77 42 61 6c ) DrawBal
2910: 6c 6f 6f 6e 0a 20 20 20 73 65 74 20 6d 65 74 68 loon. set meth
2920: 6f 64 50 72 6f 63 28 69 73 6f 6d 65 74 72 69 63 odProc(isometric
2930: 2c 62 61 6c 6c 6f 6f 6e 63 6f 6e 66 69 67 29 20 ,balloonconfig)
2940: 20 43 6f 6e 66 69 67 42 61 6c 6c 6f 6f 6e 0a 20 ConfigBalloon.
2950: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
2960: 28 69 73 6f 6d 65 74 72 69 63 2c 70 6c 61 69 6e (isometric,plain
2970: 74 65 78 74 29 20 20 20 20 20 20 44 72 61 77 50 text) DrawP
2980: 6c 61 69 6e 54 65 78 74 0a 20 20 20 73 65 74 20 lainText. set
2990: 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 70 6c 6f methodProc(3dplo
29a0: 74 2c 74 69 74 6c 65 29 20 20 20 20 20 20 20 20 t,title)
29b0: 20 20 20 20 20 44 72 61 77 54 69 74 6c 65 0a 20 DrawTitle.
29c0: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
29d0: 28 33 64 70 6c 6f 74 2c 70 6c 6f 74 66 75 6e 63 (3dplot,plotfunc
29e0: 29 20 20 20 20 20 20 20 20 20 20 44 72 61 77 33 ) Draw3
29f0: 44 46 75 6e 63 74 69 6f 6e 0a 20 20 20 73 65 74 DFunction. set
2a00: 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 70 6c methodProc(3dpl
2a10: 6f 74 2c 70 6c 6f 74 64 61 74 61 29 20 20 20 20 ot,plotdata)
2a20: 20 20 20 20 20 20 44 72 61 77 33 44 44 61 74 61 Draw3DData
2a30: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
2a40: 6f 63 28 33 64 70 6c 6f 74 2c 70 6c 6f 74 6c 69 oc(3dplot,plotli
2a50: 6e 65 29 20 20 20 20 20 20 20 20 20 20 44 72 61 ne) Dra
2a60: 77 33 44 4c 69 6e 65 46 72 6f 6d 33 44 63 6f 6f w3DLineFrom3Dcoo
2a70: 72 64 69 6e 61 74 65 73 0a 20 20 20 73 65 74 20 rdinates. set
2a80: 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 70 6c 6f methodProc(3dplo
2a90: 74 2c 67 72 69 64 73 69 7a 65 29 20 20 20 20 20 t,gridsize)
2aa0: 20 20 20 20 20 47 72 69 64 53 69 7a 65 33 44 0a GridSize3D.
2ab0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
2ac0: 63 28 33 64 70 6c 6f 74 2c 73 61 76 65 70 6c 6f c(3dplot,saveplo
2ad0: 74 29 20 20 20 20 20 20 20 20 20 20 53 61 76 65 t) Save
2ae0: 50 6c 6f 74 0a 20 20 20 73 65 74 20 6d 65 74 68 Plot. set meth
2af0: 6f 64 50 72 6f 63 28 33 64 70 6c 6f 74 2c 63 6f odProc(3dplot,co
2b00: 6c 6f 75 72 29 20 20 20 20 20 20 20 20 20 20 20 lour)
2b10: 20 53 65 74 43 6f 6c 6f 75 72 73 0a 20 20 20 73 SetColours. s
2b20: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 et methodProc(3d
2b30: 70 6c 6f 74 2c 63 6f 6c 6f 72 29 20 20 20 20 20 plot,color)
2b40: 20 20 20 20 20 20 20 20 53 65 74 43 6f 6c 6f 75 SetColou
2b50: 72 73 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 rs. set method
2b60: 50 72 6f 63 28 33 64 70 6c 6f 74 2c 78 63 6f 6e Proc(3dplot,xcon
2b70: 66 69 67 29 20 20 20 20 20 20 20 20 20 20 20 58 fig) X
2b80: 43 6f 6e 66 69 67 0a 20 20 20 73 65 74 20 6d 65 Config. set me
2b90: 74 68 6f 64 50 72 6f 63 28 33 64 70 6c 6f 74 2c thodProc(3dplot,
2ba0: 79 63 6f 6e 66 69 67 29 20 20 20 20 20 20 20 20 yconfig)
2bb0: 20 20 20 59 43 6f 6e 66 69 67 0a 20 20 20 73 65 YConfig. se
2bc0: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 70 t methodProc(3dp
2bd0: 6c 6f 74 2c 7a 63 6f 6e 66 69 67 29 20 20 20 20 lot,zconfig)
2be0: 20 20 20 20 20 20 20 5a 43 6f 6e 66 69 67 0a 20 ZConfig.
2bf0: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
2c00: 28 33 64 70 6c 6f 74 2c 70 6c 6f 74 66 75 6e 63 (3dplot,plotfunc
2c10: 6f 6e 74 29 20 20 20 20 20 20 20 44 72 61 77 33 ont) Draw3
2c20: 44 46 75 6e 63 74 69 6f 6e 43 6f 6e 74 6f 75 72 DFunctionContour
2c30: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
2c40: 6f 63 28 33 64 70 6c 6f 74 2c 62 61 63 6b 67 72 oc(3dplot,backgr
2c50: 6f 75 6e 64 29 20 20 20 20 20 20 20 20 42 61 63 ound) Bac
2c60: 6b 67 72 6f 75 6e 64 43 6f 6c 6f 75 72 0a 20 20 kgroundColour.
2c70: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
2c80: 33 64 62 61 72 73 2c 74 69 74 6c 65 29 20 20 20 3dbars,title)
2c90: 20 20 20 20 20 20 20 20 20 20 44 72 61 77 54 69 DrawTi
2ca0: 74 6c 65 0a 20 20 20 73 65 74 20 6d 65 74 68 6f tle. set metho
2cb0: 64 50 72 6f 63 28 33 64 62 61 72 73 2c 70 6c 6f dProc(3dbars,plo
2cc0: 74 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t)
2cd0: 44 72 61 77 33 44 42 61 72 0a 20 20 20 73 65 74 Draw3DBar. set
2ce0: 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 62 61 methodProc(3dba
2cf0: 72 73 2c 79 63 6f 6e 66 69 67 29 20 20 20 20 20 rs,yconfig)
2d00: 20 20 20 20 20 20 59 43 6f 6e 66 69 67 0a 20 20 YConfig.
2d10: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
2d20: 33 64 62 61 72 73 2c 73 61 76 65 70 6c 6f 74 29 3dbars,saveplot)
2d30: 20 20 20 20 20 20 20 20 20 20 53 61 76 65 50 6c SavePl
2d40: 6f 74 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 ot. set method
2d50: 50 72 6f 63 28 33 64 62 61 72 73 2c 63 6f 6e 66 Proc(3dbars,conf
2d60: 69 67 29 20 20 20 20 20 20 20 20 20 20 20 20 43 ig) C
2d70: 6f 6e 66 69 67 33 44 42 61 72 73 0a 20 20 20 73 onfig3DBars. s
2d80: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 et methodProc(3d
2d90: 62 61 72 73 2c 62 61 6c 6c 6f 6f 6e 29 20 20 20 bars,balloon)
2da0: 20 20 20 20 20 20 20 20 44 72 61 77 42 61 6c 6c DrawBall
2db0: 6f 6f 6e 0a 20 20 20 73 65 74 20 6d 65 74 68 6f oon. set metho
2dc0: 64 50 72 6f 63 28 33 64 62 61 72 73 2c 62 61 6c dProc(3dbars,bal
2dd0: 6c 6f 6f 6e 63 6f 6e 66 69 67 29 20 20 20 20 20 loonconfig)
2de0: 43 6f 6e 66 69 67 42 61 6c 6c 6f 6f 6e 0a 20 20 ConfigBalloon.
2df0: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
2e00: 33 64 62 61 72 73 2c 70 6c 61 69 6e 74 65 78 74 3dbars,plaintext
2e10: 29 20 20 20 20 20 20 20 20 20 44 72 61 77 50 6c ) DrawPl
2e20: 61 69 6e 54 65 78 74 0a 20 20 20 73 65 74 20 6d ainText. set m
2e30: 65 74 68 6f 64 50 72 6f 63 28 72 61 64 69 61 6c ethodProc(radial
2e40: 63 68 61 72 74 2c 74 69 74 6c 65 29 20 20 20 20 chart,title)
2e50: 20 20 20 20 44 72 61 77 54 69 74 6c 65 0a 20 20 DrawTitle.
2e60: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
2e70: 72 61 64 69 61 6c 63 68 61 72 74 2c 70 6c 6f 74 radialchart,plot
2e80: 29 20 20 20 20 20 20 20 20 20 44 72 61 77 52 61 ) DrawRa
2e90: 64 69 61 6c 0a 20 20 20 73 65 74 20 6d 65 74 68 dial. set meth
2ea0: 6f 64 50 72 6f 63 28 72 61 64 69 61 6c 63 68 61 odProc(radialcha
2eb0: 72 74 2c 73 61 76 65 70 6c 6f 74 29 20 20 20 20 rt,saveplot)
2ec0: 20 53 61 76 65 50 6c 6f 74 0a 20 20 20 73 65 74 SavePlot. set
2ed0: 20 6d 65 74 68 6f 64 50 72 6f 63 28 72 61 64 69 methodProc(radi
2ee0: 61 6c 63 68 61 72 74 2c 62 61 6c 6c 6f 6f 6e 29 alchart,balloon)
2ef0: 20 20 20 20 20 20 44 72 61 77 42 61 6c 6c 6f 6f DrawBalloo
2f00: 6e 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 n. set methodP
2f10: 72 6f 63 28 72 61 64 69 61 6c 63 68 61 72 74 2c roc(radialchart,
2f20: 70 6c 61 69 6e 74 65 78 74 29 20 20 20 20 44 72 plaintext) Dr
2f30: 61 77 50 6c 61 69 6e 54 65 78 74 0a 20 20 20 73 awPlainText. s
2f40: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 78 et methodProc(tx
2f50: 70 6c 6f 74 2c 74 69 74 6c 65 29 20 20 20 20 20 plot,title)
2f60: 20 20 20 20 20 20 20 20 44 72 61 77 54 69 74 6c DrawTitl
2f70: 65 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 e. set methodP
2f80: 72 6f 63 28 74 78 70 6c 6f 74 2c 78 74 65 78 74 roc(txplot,xtext
2f90: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 44 72 ) Dr
2fa0: 61 77 58 74 65 78 74 0a 20 20 20 73 65 74 20 6d awXtext. set m
2fb0: 65 74 68 6f 64 50 72 6f 63 28 74 78 70 6c 6f 74 ethodProc(txplot
2fc0: 2c 79 74 65 78 74 29 20 20 20 20 20 20 20 20 20 ,ytext)
2fd0: 20 20 20 20 44 72 61 77 59 74 65 78 74 0a 20 20 DrawYtext.
2fe0: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
2ff0: 74 78 70 6c 6f 74 2c 70 6c 6f 74 29 20 20 20 20 txplot,plot)
3000: 20 20 20 20 20 20 20 20 20 20 44 72 61 77 54 69 DrawTi
3010: 6d 65 44 61 74 61 0a 20 20 20 73 65 74 20 6d 65 meData. set me
3020: 74 68 6f 64 50 72 6f 63 28 74 78 70 6c 6f 74 2c thodProc(txplot,
3030: 69 6e 74 65 72 76 61 6c 29 20 20 20 20 20 20 20 interval)
3040: 20 20 20 44 72 61 77 49 6e 74 65 72 76 61 6c 0a DrawInterval.
3050: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
3060: 63 28 74 78 70 6c 6f 74 2c 73 61 76 65 70 6c 6f c(txplot,saveplo
3070: 74 29 20 20 20 20 20 20 20 20 20 20 53 61 76 65 t) Save
3080: 50 6c 6f 74 0a 20 20 20 73 65 74 20 6d 65 74 68 Plot. set meth
3090: 6f 64 50 72 6f 63 28 74 78 70 6c 6f 74 2c 64 61 odProc(txplot,da
30a0: 74 61 63 6f 6e 66 69 67 29 20 20 20 20 20 20 20 taconfig)
30b0: 20 44 61 74 61 43 6f 6e 66 69 67 0a 20 20 20 73 DataConfig. s
30c0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 78 et methodProc(tx
30d0: 70 6c 6f 74 2c 78 63 6f 6e 66 69 67 29 20 20 20 plot,xconfig)
30e0: 20 20 20 20 20 20 20 20 58 43 6f 6e 66 69 67 0a XConfig.
30f0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
3100: 63 28 74 78 70 6c 6f 74 2c 79 63 6f 6e 66 69 67 c(txplot,yconfig
3110: 29 20 20 20 20 20 20 20 20 20 20 20 59 43 6f 6e ) YCon
3120: 66 69 67 0a 20 20 20 73 65 74 20 6d 65 74 68 6f fig. set metho
3130: 64 50 72 6f 63 28 74 78 70 6c 6f 74 2c 78 74 69 dProc(txplot,xti
3140: 63 6b 6c 69 6e 65 73 29 20 20 20 20 20 20 20 20 cklines)
3150: 44 72 61 77 58 54 69 63 6b 6c 69 6e 65 73 0a 20 DrawXTicklines.
3160: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
3170: 28 74 78 70 6c 6f 74 2c 79 74 69 63 6b 6c 69 6e (txplot,yticklin
3180: 65 73 29 20 20 20 20 20 20 20 20 44 72 61 77 59 es) DrawY
3190: 54 69 63 6b 6c 69 6e 65 73 0a 20 20 20 73 65 74 Ticklines. set
31a0: 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 78 70 6c methodProc(txpl
31b0: 6f 74 2c 62 61 63 6b 67 72 6f 75 6e 64 29 20 20 ot,background)
31c0: 20 20 20 20 20 20 42 61 63 6b 67 72 6f 75 6e 64 Background
31d0: 43 6f 6c 6f 75 72 0a 20 20 20 73 65 74 20 6d 65 Colour. set me
31e0: 74 68 6f 64 50 72 6f 63 28 74 78 70 6c 6f 74 2c thodProc(txplot,
31f0: 6c 65 67 65 6e 64 63 6f 6e 66 69 67 29 20 20 20 legendconfig)
3200: 20 20 20 4c 65 67 65 6e 64 43 6f 6e 66 69 67 75 LegendConfigu
3210: 72 65 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 re. set method
3220: 50 72 6f 63 28 74 78 70 6c 6f 74 2c 6c 65 67 65 Proc(txplot,lege
3230: 6e 64 29 20 20 20 20 20 20 20 20 20 20 20 20 44 nd) D
3240: 72 61 77 4c 65 67 65 6e 64 0a 20 20 20 73 65 74 rawLegend. set
3250: 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 78 70 6c methodProc(txpl
3260: 6f 74 2c 62 61 6c 6c 6f 6f 6e 29 20 20 20 20 20 ot,balloon)
3270: 20 20 20 20 20 20 44 72 61 77 42 61 6c 6c 6f 6f DrawBalloo
3280: 6e 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 n. set methodP
3290: 72 6f 63 28 74 78 70 6c 6f 74 2c 62 61 6c 6c 6f roc(txplot,ballo
32a0: 6f 6e 63 6f 6e 66 69 67 29 20 20 20 20 20 43 6f onconfig) Co
32b0: 6e 66 69 67 42 61 6c 6c 6f 6f 6e 0a 20 20 20 73 nfigBalloon. s
32c0: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 74 78 et methodProc(tx
32d0: 70 6c 6f 74 2c 70 6c 61 69 6e 74 65 78 74 29 20 plot,plaintext)
32e0: 20 20 20 20 20 20 20 20 44 72 61 77 50 6c 61 69 DrawPlai
32f0: 6e 54 65 78 74 0a 20 20 20 73 65 74 20 6d 65 74 nText. set met
3300: 68 6f 64 50 72 6f 63 28 33 64 72 69 62 62 6f 6e hodProc(3dribbon
3310: 2c 74 69 74 6c 65 29 20 20 20 20 20 20 20 20 20 ,title)
3320: 20 20 44 72 61 77 54 69 74 6c 65 0a 20 20 20 73 DrawTitle. s
3330: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 33 64 et methodProc(3d
3340: 72 69 62 62 6f 6e 2c 73 61 76 65 70 6c 6f 74 29 ribbon,saveplot)
3350: 20 20 20 20 20 20 20 20 53 61 76 65 50 6c 6f 74 SavePlot
3360: 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 . set methodPr
3370: 6f 63 28 33 64 72 69 62 62 6f 6e 2c 6c 69 6e 65 oc(3dribbon,line
3380: 29 20 20 20 20 20 20 20 20 20 20 20 20 44 72 61 ) Dra
3390: 77 33 44 4c 69 6e 65 0a 20 20 20 73 65 74 20 6d w3DLine. set m
33a0: 65 74 68 6f 64 50 72 6f 63 28 33 64 72 69 62 62 ethodProc(3dribb
33b0: 6f 6e 2c 61 72 65 61 29 20 20 20 20 20 20 20 20 on,area)
33c0: 20 20 20 20 44 72 61 77 33 44 41 72 65 61 0a 20 Draw3DArea.
33d0: 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 set methodProc
33e0: 28 33 64 72 69 62 62 6f 6e 2c 62 61 63 6b 67 72 (3dribbon,backgr
33f0: 6f 75 6e 64 29 20 20 20 20 20 20 42 61 63 6b 67 ound) Backg
3400: 72 6f 75 6e 64 43 6f 6c 6f 75 72 0a 20 20 20 73 roundColour. s
3410: 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 62 6f et methodProc(bo
3420: 78 70 6c 6f 74 2c 74 69 74 6c 65 29 20 20 20 20 xplot,title)
3430: 20 20 20 20 20 20 20 20 44 72 61 77 54 69 74 6c DrawTitl
3440: 65 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 e. set methodP
3450: 72 6f 63 28 62 6f 78 70 6c 6f 74 2c 78 74 65 78 roc(boxplot,xtex
3460: 74 29 20 20 20 20 20 20 20 20 20 20 20 20 44 72 t) Dr
3470: 61 77 58 74 65 78 74 0a 20 20 20 73 65 74 20 6d awXtext. set m
3480: 65 74 68 6f 64 50 72 6f 63 28 62 6f 78 70 6c 6f ethodProc(boxplo
3490: 74 2c 79 74 65 78 74 29 20 20 20 20 20 20 20 20 t,ytext)
34a0: 20 20 20 20 44 72 61 77 59 74 65 78 74 0a 20 20 DrawYtext.
34b0: 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 set methodProc(
34c0: 62 6f 78 70 6c 6f 74 2c 70 6c 6f 74 29 20 20 20 boxplot,plot)
34d0: 20 20 20 20 20 20 20 20 20 20 44 72 61 77 42 6f DrawBo
34e0: 78 44 61 74 61 0a 20 20 20 73 65 74 20 6d 65 74 xData. set met
34f0: 68 6f 64 50 72 6f 63 28 62 6f 78 70 6c 6f 74 2c hodProc(boxplot,
3500: 73 61 76 65 70 6c 6f 74 29 20 20 20 20 20 20 20 saveplot)
3510: 20 20 53 61 76 65 50 6c 6f 74 0a 20 20 20 73 65 SavePlot. se
3520: 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 62 6f 78 t methodProc(box
3530: 70 6c 6f 74 2c 64 61 74 61 63 6f 6e 66 69 67 29 plot,dataconfig)
3540: 20 20 20 20 20 20 20 44 61 74 61 43 6f 6e 66 69 DataConfi
3550: 67 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 g. set methodP
3560: 72 6f 63 28 62 6f 78 70 6c 6f 74 2c 78 63 6f 6e roc(boxplot,xcon
3570: 66 69 67 29 20 20 20 20 20 20 20 20 20 20 58 43 fig) XC
3580: 6f 6e 66 69 67 0a 20 20 20 73 65 74 20 6d 65 74 onfig. set met
3590: 68 6f 64 50 72 6f 63 28 62 6f 78 70 6c 6f 74 2c hodProc(boxplot,
35a0: 79 63 6f 6e 66 69 67 29 20 20 20 20 20 20 20 20 yconfig)
35b0: 20 20 59 43 6f 6e 66 69 67 0a 20 20 20 73 65 74 YConfig. set
35c0: 20 6d 65 74 68 6f 64 50 72 6f 63 28 62 6f 78 70 methodProc(boxp
35d0: 6c 6f 74 2c 78 74 69 63 6b 6c 69 6e 65 73 29 20 lot,xticklines)
35e0: 20 20 20 20 20 20 44 72 61 77 58 54 69 63 6b 6c DrawXTickl
35f0: 69 6e 65 73 0a 20 20 20 73 65 74 20 6d 65 74 68 ines. set meth
3600: 6f 64 50 72 6f 63 28 62 6f 78 70 6c 6f 74 2c 79 odProc(boxplot,y
3610: 74 69 63 6b 6c 69 6e 65 73 29 20 20 20 20 20 20 ticklines)
3620: 20 44 72 61 77 59 54 69 63 6b 6c 69 6e 65 73 0a DrawYTicklines.
3630: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
3640: 63 28 62 6f 78 70 6c 6f 74 2c 62 61 63 6b 67 72 c(boxplot,backgr
3650: 6f 75 6e 64 29 20 20 20 20 20 20 20 42 61 63 6b ound) Back
3660: 67 72 6f 75 6e 64 43 6f 6c 6f 75 72 0a 20 20 20 groundColour.
3670: 73 65 74 20 6d 65 74 68 6f 64 50 72 6f 63 28 62 set methodProc(b
3680: 6f 78 70 6c 6f 74 2c 6c 65 67 65 6e 64 63 6f 6e oxplot,legendcon
3690: 66 69 67 29 20 20 20 20 20 4c 65 67 65 6e 64 43 fig) LegendC
36a0: 6f 6e 66 69 67 75 72 65 0a 20 20 20 73 65 74 20 onfigure. set
36b0: 6d 65 74 68 6f 64 50 72 6f 63 28 62 6f 78 70 6c methodProc(boxpl
36c0: 6f 74 2c 6c 65 67 65 6e 64 29 20 20 20 20 20 20 ot,legend)
36d0: 20 20 20 20 20 44 72 61 77 4c 65 67 65 6e 64 0a DrawLegend.
36e0: 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 72 6f set methodPro
36f0: 63 28 62 6f 78 70 6c 6f 74 2c 62 61 6c 6c 6f 6f c(boxplot,balloo
3700: 6e 29 20 20 20 20 20 20 20 20 20 20 44 72 61 77 n) Draw
3710: 42 61 6c 6c 6f 6f 6e 0a 20 20 20 73 65 74 20 6d Balloon. set m
3720: 65 74 68 6f 64 50 72 6f 63 28 62 6f 78 70 6c 6f ethodProc(boxplo
3730: 74 2c 62 61 6c 6c 6f 6f 6e 63 6f 6e 66 69 67 29 t,balloonconfig)
3740: 20 20 20 20 43 6f 6e 66 69 67 42 61 6c 6c 6f 6f ConfigBalloo
3750: 6e 0a 20 20 20 73 65 74 20 6d 65 74 68 6f 64 50 n. set methodP
3760: 72 6f 63 28 62 6f 78 70 6c 6f 74 2c 70 6c 61 69 roc(boxplot,plai
3770: 6e 74 65 78 74 29 20 20 20 20 20 20 20 20 44 72 ntext) Dr
3780: 61 77 50 6c 61 69 6e 54 65 78 74 0a 0a 20 20 20 awPlainText..
3790: 23 0a 20 20 20 23 20 41 75 78 69 6c 69 61 72 79 #. # Auxiliary
37a0: 20 70 61 72 61 6d 65 74 65 72 73 0a 20 20 20 23 parameters. #
37b0: 0a 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f 72 . variable tor
37c0: 61 64 0a 20 20 20 73 65 74 20 74 6f 72 61 64 20 ad. set torad
37d0: 5b 65 78 70 72 20 7b 33 2e 31 34 31 35 39 32 36 [expr {3.1415926
37e0: 2f 31 38 30 2e 30 7d 5d 0a 0a 20 20 20 76 61 72 /180.0}].. var
37f0: 69 61 62 6c 65 20 6f 70 74 69 6f 6e 73 0a 20 20 iable options.
3800: 20 76 61 72 69 61 62 6c 65 20 6f 70 74 69 6f 6e variable option
3810: 5f 6b 65 79 73 0a 20 20 20 76 61 72 69 61 62 6c _keys. variabl
3820: 65 20 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 73 0a e option_values.
3830: 20 20 20 73 65 74 20 6f 70 74 69 6f 6e 73 20 20 set options
3840: 20 20 20 20 20 7b 2d 63 6f 6c 6f 75 72 20 2d 63 {-colour -c
3850: 6f 6c 6f 72 20 20 2d 73 79 6d 62 6f 6c 20 2d 74 olor -symbol -t
3860: 79 70 65 20 2d 66 69 6c 6c 65 64 20 2d 66 69 6c ype -filled -fil
3870: 6c 63 6f 6c 6f 75 72 20 2d 62 6f 78 77 69 64 74 lcolour -boxwidt
3880: 68 7d 0a 20 20 20 73 65 74 20 6f 70 74 69 6f 6e h}. set option
3890: 5f 6b 65 79 73 20 20 20 7b 2d 63 6f 6c 6f 75 72 _keys {-colour
38a0: 20 2d 63 6f 6c 6f 75 72 20 2d 73 79 6d 62 6f 6c -colour -symbol
38b0: 20 2d 74 79 70 65 20 2d 66 69 6c 6c 65 64 20 2d -type -filled -
38c0: 66 69 6c 6c 63 6f 6c 6f 75 72 20 2d 62 6f 78 77 fillcolour -boxw
38d0: 69 64 74 68 7d 0a 20 20 20 73 65 74 20 6f 70 74 idth}. set opt
38e0: 69 6f 6e 5f 76 61 6c 75 65 73 20 7b 2d 63 6f 6c ion_values {-col
38f0: 6f 75 72 20 7b 2e 2e 2e 7d 0a 20 20 20 20 20 20 our {...}.
3900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3910: 2d 73 79 6d 62 6f 6c 20 7b 70 6c 75 73 20 63 72 -symbol {plus cr
3920: 6f 73 73 20 63 69 72 63 6c 65 20 75 70 20 64 6f oss circle up do
3930: 77 6e 20 64 6f 74 20 75 70 66 69 6c 6c 65 64 20 wn dot upfilled
3940: 64 6f 77 6e 66 69 6c 6c 65 64 7d 0a 20 20 20 20 downfilled}.
3950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3960: 20 20 2d 74 79 70 65 20 7b 6c 69 6e 65 20 73 79 -type {line sy
3970: 6d 62 6f 6c 20 62 6f 74 68 7d 0a 20 20 20 20 20 mbol both}.
3980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3990: 20 2d 66 69 6c 6c 65 64 20 7b 6e 6f 20 75 70 20 -filled {no up
39a0: 64 6f 77 6e 7d 0a 20 20 20 20 20 20 20 20 20 20 down}.
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 66 69 6c -fil
39c0: 6c 63 6f 6c 6f 75 72 20 7b 2e 2e 2e 7d 0a 20 20 lcolour {...}.
39d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
39e0: 20 20 20 20 2d 62 6f 78 77 69 64 74 68 20 20 20 -boxwidth
39f0: 7b 2e 2e 2e 7d 0a 20 20 20 20 20 20 20 20 20 20 {...}.
3a00: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 }..
3a10: 20 76 61 72 69 61 62 6c 65 20 61 78 69 73 5f 6f variable axis_o
3a20: 70 74 69 6f 6e 73 0a 20 20 20 76 61 72 69 61 62 ptions. variab
3a30: 6c 65 20 61 78 69 73 5f 6f 70 74 69 6f 6e 5f 63 le axis_option_c
3a40: 6c 65 61 72 0a 20 20 20 76 61 72 69 61 62 6c 65 lear. variable
3a50: 20 61 78 69 73 5f 6f 70 74 69 6f 6e 5f 76 61 6c axis_option_val
3a60: 75 65 73 0a 20 20 20 73 65 74 20 61 78 69 73 5f ues. set axis_
3a70: 6f 70 74 69 6f 6e 73 20 20 20 20 20 20 20 7b 2d options {-
3a80: 66 6f 72 6d 61 74 20 2d 74 69 63 6b 6c 65 6e 67 format -tickleng
3a90: 74 68 20 2d 74 69 63 6b 6c 69 6e 65 73 20 2d 73 th -ticklines -s
3aa0: 63 61 6c 65 7d 0a 20 20 20 73 65 74 20 61 78 69 cale}. set axi
3ab0: 73 5f 6f 70 74 69 6f 6e 5f 63 6c 65 61 72 20 20 s_option_clear
3ac0: 7b 20 30 20 20 20 20 20 20 20 30 20 20 20 20 20 { 0 0
3ad0: 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20 0
3ae0: 20 31 20 20 20 20 7d 0a 20 20 20 73 65 74 20 61 1 }. set a
3af0: 78 69 73 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 xis_option_value
3b00: 73 20 7b 2d 66 6f 72 6d 61 74 20 20 20 20 20 7b s {-format {
3b10: 2e 2e 2e 7d 0a 20 20 20 20 20 20 20 20 20 20 20 ...}.
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3b30: 2d 74 69 63 6b 6c 65 6e 67 74 68 20 7b 2e 2e 2e -ticklength {...
3b40: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 }.
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 69 -ti
3b60: 63 6b 6c 69 6e 65 73 20 20 7b 30 20 31 7d 0a 20 cklines {0 1}.
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3b80: 20 20 20 20 20 20 20 20 20 20 2d 73 63 61 6c 65 -scale
3b90: 20 20 20 20 20 20 7b 2e 2e 2e 7d 0a 20 20 20 20 {...}.
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3bb0: 20 20 20 20 20 20 7d 0a 20 20 20 76 61 72 69 61 }. varia
3bc0: 62 6c 65 20 63 6f 6e 74 6f 75 72 5f 6f 70 74 69 ble contour_opti
3bd0: 6f 6e 73 0a 7d 0a 0a 23 20 73 65 74 5a 6f 6f 6d ons.}..# setZoom
3be0: 50 61 6e 20 2d 2d 0a 23 20 20 20 20 53 65 74 20 Pan --.# Set
3bf0: 75 70 20 74 68 65 20 62 69 6e 64 69 6e 67 73 20 up the bindings
3c00: 66 6f 72 20 7a 6f 6f 6d 69 6e 67 20 61 6e 64 20 for zooming and
3c10: 70 61 6e 6e 69 6e 67 0a 23 20 41 72 67 75 6d 65 panning.# Argume
3c20: 6e 74 73 3a 0a 23 20 20 20 20 77 20 20 20 20 20 nts:.# w
3c30: 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 Name of th
3c40: 65 20 63 61 6e 76 61 73 20 77 69 6e 64 6f 77 0a e canvas window.
3c50: 23 20 52 65 73 75 6c 74 3a 0a 23 20 20 20 20 4e # Result:.# N
3c60: 6f 6e 65 0a 23 20 53 69 64 65 20 65 66 66 65 63 one.# Side effec
3c70: 74 3a 0a 23 20 20 20 20 42 69 6e 64 69 6e 67 73 t:.# Bindings
3c80: 20 73 65 74 20 75 70 0a 23 0a 70 72 6f 63 20 3a set up.#.proc :
3c90: 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 73 65 74 5a :Plotchart::setZ
3ca0: 6f 6f 6d 50 61 6e 20 7b 20 77 20 7d 20 7b 0a 20 oomPan { w } {.
3cb0: 20 20 73 65 74 20 73 71 72 74 32 20 20 5b 65 78 set sqrt2 [ex
3cc0: 70 72 20 7b 73 71 72 74 28 32 2e 30 29 7d 5d 0a pr {sqrt(2.0)}].
3cd0: 20 20 20 73 65 74 20 73 71 72 74 30 35 20 5b 65 set sqrt05 [e
3ce0: 78 70 72 20 7b 73 71 72 74 28 30 2e 35 29 7d 5d xpr {sqrt(0.5)}]
3cf0: 0a 0a 20 20 20 62 69 6e 64 20 24 77 20 3c 43 6f .. bind $w <Co
3d00: 6e 74 72 6f 6c 2d 42 75 74 74 6f 6e 2d 31 3e 20 ntrol-Button-1>
3d10: 5b 6c 69 73 74 20 3a 3a 50 6c 6f 74 63 68 61 72 [list ::Plotchar
3d20: 74 3a 3a 53 63 61 6c 65 49 74 65 6d 73 20 24 77 t::ScaleItems $w
3d30: 20 25 78 20 25 79 20 24 73 71 72 74 32 5d 0a 20 %x %y $sqrt2].
3d40: 20 20 62 69 6e 64 20 24 77 20 3c 43 6f 6e 74 72 bind $w <Contr
3d50: 6f 6c 2d 50 72 69 6f 72 3e 20 20 20 20 5b 6c 69 ol-Prior> [li
3d60: 73 74 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a st ::Plotchart::
3d70: 53 63 61 6c 65 49 74 65 6d 73 20 24 77 20 25 78 ScaleItems $w %x
3d80: 20 25 79 20 24 73 71 72 74 32 5d 0a 20 20 20 62 %y $sqrt2]. b
3d90: 69 6e 64 20 24 77 20 3c 43 6f 6e 74 72 6f 6c 2d ind $w <Control-
3da0: 42 75 74 74 6f 6e 2d 32 3e 20 5b 6c 69 73 74 20 Button-2> [list
3db0: 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 53 63 61 ::Plotchart::Sca
3dc0: 6c 65 49 74 65 6d 73 20 24 77 20 25 78 20 25 79 leItems $w %x %y
3dd0: 20 24 73 71 72 74 30 35 5d 0a 20 20 20 62 69 6e $sqrt05]. bin
3de0: 64 20 24 77 20 3c 43 6f 6e 74 72 6f 6c 2d 42 75 d $w <Control-Bu
3df0: 74 74 6f 6e 2d 33 3e 20 5b 6c 69 73 74 20 3a 3a tton-3> [list ::
3e00: 50 6c 6f 74 63 68 61 72 74 3a 3a 53 63 61 6c 65 Plotchart::Scale
3e10: 49 74 65 6d 73 20 24 77 20 25 78 20 25 79 20 24 Items $w %x %y $
3e20: 73 71 72 74 30 35 5d 0a 20 20 20 62 69 6e 64 20 sqrt05]. bind
3e30: 24 77 20 3c 43 6f 6e 74 72 6f 6c 2d 4e 65 78 74 $w <Control-Next
3e40: 3e 20 20 20 20 20 5b 6c 69 73 74 20 3a 3a 50 6c > [list ::Pl
3e50: 6f 74 63 68 61 72 74 3a 3a 53 63 61 6c 65 49 74 otchart::ScaleIt
3e60: 65 6d 73 20 24 77 20 25 78 20 25 79 20 24 73 71 ems $w %x %y $sq
3e70: 72 74 30 35 5d 0a 20 20 20 62 69 6e 64 20 24 77 rt05]. bind $w
3e80: 20 3c 43 6f 6e 74 72 6f 6c 2d 55 70 3e 20 20 20 <Control-Up>
3e90: 20 20 20 20 5b 6c 69 73 74 20 3a 3a 50 6c 6f 74 [list ::Plot
3ea0: 63 68 61 72 74 3a 3a 4d 6f 76 65 49 74 65 6d 73 chart::MoveItems
3eb0: 20 20 24 77 20 20 20 30 20 2d 34 30 5d 0a 20 20 $w 0 -40].
3ec0: 20 62 69 6e 64 20 24 77 20 3c 43 6f 6e 74 72 6f bind $w <Contro
3ed0: 6c 2d 44 6f 77 6e 3e 20 20 20 20 20 5b 6c 69 73 l-Down> [lis
3ee0: 74 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 4d t ::Plotchart::M
3ef0: 6f 76 65 49 74 65 6d 73 20 20 24 77 20 20 20 30 oveItems $w 0
3f00: 20 20 34 30 5d 0a 20 20 20 62 69 6e 64 20 24 77 40]. bind $w
3f10: 20 3c 43 6f 6e 74 72 6f 6c 2d 4c 65 66 74 3e 20 <Control-Left>
3f20: 20 20 20 20 5b 6c 69 73 74 20 3a 3a 50 6c 6f 74 [list ::Plot
3f30: 63 68 61 72 74 3a 3a 4d 6f 76 65 49 74 65 6d 73 chart::MoveItems
3f40: 20 20 24 77 20 2d 34 30 20 20 20 30 5d 0a 20 20 $w -40 0].
3f50: 20 62 69 6e 64 20 24 77 20 3c 43 6f 6e 74 72 6f bind $w <Contro
3f60: 6c 2d 52 69 67 68 74 3e 20 20 20 20 5b 6c 69 73 l-Right> [lis
3f70: 74 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 4d t ::Plotchart::M
3f80: 6f 76 65 49 74 65 6d 73 20 20 24 77 20 20 34 30 oveItems $w 40
3f90: 20 20 20 30 5d 0a 20 20 20 66 6f 63 75 73 20 24 0]. focus $
3fa0: 77 0a 7d 0a 0a 23 20 76 69 65 77 50 6f 72 74 20 w.}..# viewPort
3fb0: 2d 2d 0a 23 20 20 20 20 53 65 74 20 74 68 65 20 --.# Set the
3fc0: 70 69 78 65 6c 20 65 78 74 72 65 6d 65 73 20 66 pixel extremes f
3fd0: 6f 72 20 74 68 65 20 67 72 61 70 68 0a 23 20 41 or the graph.# A
3fe0: 72 67 75 6d 65 6e 74 73 3a 0a 23 20 20 20 20 77 rguments:.# w
3ff0: 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 20 Name
4000: 6f 66 20 74 68 65 20 63 61 6e 76 61 73 20 77 69 of the canvas wi
4010: 6e 64 6f 77 0a 23 20 20 20 20 70 78 6d 69 6e 20 ndow.# pxmin
4020: 20 20 20 20 20 20 4d 69 6e 69 6d 75 6d 20 58 2d Minimum X-
4030: 63 6f 6f 72 64 69 6e 61 74 65 0a 23 20 20 20 20 coordinate.#
4040: 70 79 6d 69 6e 20 20 20 20 20 20 20 4d 69 6e 69 pymin Mini
4050: 6d 75 6d 20 59 2d 63 6f 6f 72 64 69 6e 61 74 65 mum Y-coordinate
4060: 0a 23 20 20 20 20 70 78 6d 61 78 20 20 20 20 20 .# pxmax
4070: 20 20 4d 61 78 69 6d 75 6d 20 58 2d 63 6f 6f 72 Maximum X-coor
4080: 64 69 6e 61 74 65 0a 23 20 20 20 20 70 79 6d 61 dinate.# pyma
4090: 78 20 20 20 20 20 20 20 4d 61 78 69 6d 75 6d 20 x Maximum
40a0: 59 2d 63 6f 6f 72 64 69 6e 61 74 65 0a 23 20 52 Y-coordinate.# R
40b0: 65 73 75 6c 74 3a 0a 23 20 20 20 20 4e 6f 6e 65 esult:.# None
40c0: 0a 23 20 53 69 64 65 20 65 66 66 65 63 74 3a 0a .# Side effect:.
40d0: 23 20 20 20 20 41 72 72 61 79 20 73 63 61 6c 69 # Array scali
40e0: 6e 67 20 66 69 6c 6c 65 64 0a 23 0a 70 72 6f 63 ng filled.#.proc
40f0: 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 76 69 ::Plotchart::vi
4100: 65 77 50 6f 72 74 20 7b 20 77 20 70 78 6d 69 6e ewPort { w pxmin
4110: 20 70 79 6d 69 6e 20 70 78 6d 61 78 20 70 79 6d pymin pxmax pym
4120: 61 78 20 7d 20 7b 0a 20 20 20 76 61 72 69 61 62 ax } {. variab
4130: 6c 65 20 73 63 61 6c 69 6e 67 0a 0a 20 20 20 69 le scaling.. i
4140: 66 20 7b 20 24 70 78 6d 69 6e 20 3e 3d 20 24 70 f { $pxmin >= $p
4150: 78 6d 61 78 20 7c 7c 20 24 70 79 6d 69 6e 20 3e xmax || $pymin >
4160: 3d 20 24 70 79 6d 61 78 20 7d 20 7b 0a 20 20 20 = $pymax } {.
4170: 20 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 return -code
4180: 65 72 72 6f 72 20 22 49 6e 63 6f 6e 73 69 73 74 error "Inconsist
4190: 65 6e 74 20 62 6f 75 6e 64 73 20 66 6f 72 20 76 ent bounds for v
41a0: 69 65 77 70 6f 72 74 22 0a 20 20 20 7d 0a 0a 20 iewport". }..
41b0: 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 set scaling($w
41c0: 2c 70 78 6d 69 6e 29 20 20 20 20 24 70 78 6d 69 ,pxmin) $pxmi
41d0: 6e 0a 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 n. set scaling
41e0: 28 24 77 2c 70 79 6d 69 6e 29 20 20 20 20 24 70 ($w,pymin) $p
41f0: 79 6d 69 6e 0a 20 20 20 73 65 74 20 73 63 61 6c ymin. set scal
4200: 69 6e 67 28 24 77 2c 70 78 6d 61 78 29 20 20 20 ing($w,pxmax)
4210: 20 24 70 78 6d 61 78 0a 20 20 20 73 65 74 20 73 $pxmax. set s
4220: 63 61 6c 69 6e 67 28 24 77 2c 70 79 6d 61 78 29 caling($w,pymax)
4230: 20 20 20 20 24 70 79 6d 61 78 0a 20 20 20 73 65 $pymax. se
4240: 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 6e 65 77 t scaling($w,new
4250: 29 20 20 20 20 20 20 31 0a 7d 0a 0a 23 20 77 6f ) 1.}..# wo
4260: 72 6c 64 43 6f 6f 72 64 69 6e 61 74 65 73 20 2d rldCoordinates -
4270: 2d 0a 23 20 20 20 20 53 65 74 20 74 68 65 20 65 -.# Set the e
4280: 78 74 72 65 6d 65 73 20 66 6f 72 20 74 68 65 20 xtremes for the
4290: 77 6f 72 6c 64 20 63 6f 6f 72 64 69 6e 61 74 65 world coordinate
42a0: 73 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 s.# Arguments:.#
42b0: 20 20 20 20 77 20 20 20 20 20 20 20 20 20 20 20 w
42c0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 61 6e 76 Name of the canv
42d0: 61 73 20 77 69 6e 64 6f 77 0a 23 20 20 20 20 78 as window.# x
42e0: 6d 69 6e 20 20 20 20 20 20 20 20 4d 69 6e 69 6d min Minim
42f0: 75 6d 20 58 2d 63 6f 6f 72 64 69 6e 61 74 65 0a um X-coordinate.
4300: 23 20 20 20 20 79 6d 69 6e 20 20 20 20 20 20 20 # ymin
4310: 20 4d 69 6e 69 6d 75 6d 20 59 2d 63 6f 6f 72 64 Minimum Y-coord
4320: 69 6e 61 74 65 0a 23 20 20 20 20 78 6d 61 78 20 inate.# xmax
4330: 20 20 20 20 20 20 20 4d 61 78 69 6d 75 6d 20 58 Maximum X
4340: 2d 63 6f 6f 72 64 69 6e 61 74 65 0a 23 20 20 20 -coordinate.#
4350: 20 79 6d 61 78 20 20 20 20 20 20 20 20 4d 61 78 ymax Max
4360: 69 6d 75 6d 20 59 2d 63 6f 6f 72 64 69 6e 61 74 imum Y-coordinat
4370: 65 0a 23 20 52 65 73 75 6c 74 3a 0a 23 20 20 20 e.# Result:.#
4380: 20 4e 6f 6e 65 0a 23 20 53 69 64 65 20 65 66 66 None.# Side eff
4390: 65 63 74 3a 0a 23 20 20 20 20 41 72 72 61 79 20 ect:.# Array
43a0: 73 63 61 6c 69 6e 67 20 66 69 6c 6c 65 64 0a 23 scaling filled.#
43b0: 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 .proc ::Plotchar
43c0: 74 3a 3a 77 6f 72 6c 64 43 6f 6f 72 64 69 6e 61 t::worldCoordina
43d0: 74 65 73 20 7b 20 77 20 78 6d 69 6e 20 79 6d 69 tes { w xmin ymi
43e0: 6e 20 78 6d 61 78 20 79 6d 61 78 20 7d 20 7b 0a n xmax ymax } {.
43f0: 20 20 20 76 61 72 69 61 62 6c 65 20 73 63 61 6c variable scal
4400: 69 6e 67 0a 0a 20 20 20 69 66 20 7b 20 24 78 6d ing.. if { $xm
4410: 69 6e 20 3d 3d 20 24 78 6d 61 78 20 7c 7c 20 24 in == $xmax || $
4420: 79 6d 69 6e 20 3d 3d 20 24 79 6d 61 78 20 7d 20 ymin == $ymax }
4430: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d {. return -
4440: 63 6f 64 65 20 65 72 72 6f 72 20 22 4d 69 6e 69 code error "Mini
4450: 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 mum and maximum
4460: 6d 75 73 74 20 64 69 66 66 65 72 20 66 6f 72 20 must differ for
4470: 77 6f 72 6c 64 20 63 6f 6f 72 64 69 6e 61 74 65 world coordinate
4480: 73 22 0a 20 20 20 7d 0a 0a 20 20 20 73 65 74 20 s". }.. set
4490: 73 63 61 6c 69 6e 67 28 24 77 2c 78 6d 69 6e 29 scaling($w,xmin)
44a0: 20 20 20 20 5b 65 78 70 72 20 7b 64 6f 75 62 6c [expr {doubl
44b0: 65 28 24 78 6d 69 6e 29 7d 5d 0a 20 20 20 73 65 e($xmin)}]. se
44c0: 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 79 6d 69 t scaling($w,ymi
44d0: 6e 29 20 20 20 20 5b 65 78 70 72 20 7b 64 6f 75 n) [expr {dou
44e0: 62 6c 65 28 24 79 6d 69 6e 29 7d 5d 0a 20 20 20 ble($ymin)}].
44f0: 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 78 set scaling($w,x
4500: 6d 61 78 29 20 20 20 20 5b 65 78 70 72 20 7b 64 max) [expr {d
4510: 6f 75 62 6c 65 28 24 78 6d 61 78 29 7d 5d 0a 20 ouble($xmax)}].
4520: 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 set scaling($w
4530: 2c 79 6d 61 78 29 20 20 20 20 5b 65 78 70 72 20 ,ymax) [expr
4540: 7b 64 6f 75 62 6c 65 28 24 79 6d 61 78 29 7d 5d {double($ymax)}]
4550: 0a 0a 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 .. set scaling
4560: 28 24 77 2c 6e 65 77 29 20 20 20 20 20 31 0a 7d ($w,new) 1.}
4570: 0a 0a 23 20 70 6f 6c 61 72 43 6f 6f 72 64 69 6e ..# polarCoordin
4580: 61 74 65 73 20 2d 2d 0a 23 20 20 20 20 53 65 74 ates --.# Set
4590: 20 74 68 65 20 65 78 74 72 65 6d 65 73 20 66 6f the extremes fo
45a0: 72 20 74 68 65 20 70 6f 6c 61 72 20 63 6f 6f 72 r the polar coor
45b0: 64 69 6e 61 74 65 73 0a 23 20 41 72 67 75 6d 65 dinates.# Argume
45c0: 6e 74 73 3a 0a 23 20 20 20 20 77 20 20 20 20 20 nts:.# w
45d0: 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 Name of th
45e0: 65 20 63 61 6e 76 61 73 20 77 69 6e 64 6f 77 0a e canvas window.
45f0: 23 20 20 20 20 72 61 64 6d 61 78 20 20 20 20 20 # radmax
4600: 20 4d 61 78 69 6d 75 6d 20 72 61 64 69 75 73 0a Maximum radius.
4610: 23 20 52 65 73 75 6c 74 3a 0a 23 20 20 20 20 4e # Result:.# N
4620: 6f 6e 65 0a 23 20 53 69 64 65 20 65 66 66 65 63 one.# Side effec
4630: 74 3a 0a 23 20 20 20 20 41 72 72 61 79 20 73 63 t:.# Array sc
4640: 61 6c 69 6e 67 20 66 69 6c 6c 65 64 0a 23 0a 70 aling filled.#.p
4650: 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a roc ::Plotchart:
4660: 3a 70 6f 6c 61 72 43 6f 6f 72 64 69 6e 61 74 65 :polarCoordinate
4670: 73 20 7b 20 77 20 72 61 64 6d 61 78 20 7d 20 7b s { w radmax } {
4680: 0a 20 20 20 76 61 72 69 61 62 6c 65 20 73 63 61 . variable sca
4690: 6c 69 6e 67 0a 0a 20 20 20 69 66 20 7b 20 24 72 ling.. if { $r
46a0: 61 64 6d 61 78 20 3c 3d 20 30 2e 30 20 7d 20 7b admax <= 0.0 } {
46b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 . return -c
46c0: 6f 64 65 20 65 72 72 6f 72 20 22 4d 61 78 69 6d ode error "Maxim
46d0: 75 6d 20 72 61 64 69 75 73 20 6d 75 73 74 20 62 um radius must b
46e0: 65 20 70 6f 73 69 74 69 76 65 22 0a 20 20 20 7d e positive". }
46f0: 0a 0a 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 .. set scaling
4700: 28 24 77 2c 78 6d 69 6e 29 20 20 20 20 5b 65 78 ($w,xmin) [ex
4710: 70 72 20 7b 2d 64 6f 75 62 6c 65 28 24 72 61 64 pr {-double($rad
4720: 6d 61 78 29 7d 5d 0a 20 20 20 73 65 74 20 73 63 max)}]. set sc
4730: 61 6c 69 6e 67 28 24 77 2c 79 6d 69 6e 29 20 20 aling($w,ymin)
4740: 20 20 5b 65 78 70 72 20 7b 2d 64 6f 75 62 6c 65 [expr {-double
4750: 28 24 72 61 64 6d 61 78 29 7d 5d 0a 20 20 20 73 ($radmax)}]. s
4760: 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 78 6d et scaling($w,xm
4770: 61 78 29 20 20 20 20 5b 65 78 70 72 20 7b 64 6f ax) [expr {do
4780: 75 62 6c 65 28 24 72 61 64 6d 61 78 29 7d 5d 0a uble($radmax)}].
4790: 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 set scaling($
47a0: 77 2c 79 6d 61 78 29 20 20 20 20 5b 65 78 70 72 w,ymax) [expr
47b0: 20 7b 64 6f 75 62 6c 65 28 24 72 61 64 6d 61 78 {double($radmax
47c0: 29 7d 5d 0a 0a 20 20 20 73 65 74 20 73 63 61 6c )}].. set scal
47d0: 69 6e 67 28 24 77 2c 6e 65 77 29 20 20 20 20 20 ing($w,new)
47e0: 31 0a 7d 0a 0a 23 20 77 6f 72 6c 64 33 44 43 6f 1.}..# world3DCo
47f0: 6f 72 64 69 6e 61 74 65 73 20 2d 2d 0a 23 20 20 ordinates --.#
4800: 20 20 53 65 74 20 74 68 65 20 65 78 74 72 65 6d Set the extrem
4810: 65 73 20 66 6f 72 20 74 68 65 20 77 6f 72 6c 64 es for the world
4820: 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 69 6e 20 coordinates in
4830: 33 44 20 70 6c 6f 74 73 0a 23 20 41 72 67 75 6d 3D plots.# Argum
4840: 65 6e 74 73 3a 0a 23 20 20 20 20 77 20 20 20 20 ents:.# w
4850: 20 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 Name of t
4860: 68 65 20 63 61 6e 76 61 73 20 77 69 6e 64 6f 77 he canvas window
4870: 0a 23 20 20 20 20 78 6d 69 6e 20 20 20 20 20 20 .# xmin
4880: 20 20 4d 69 6e 69 6d 75 6d 20 58 2d 63 6f 6f 72 Minimum X-coor
4890: 64 69 6e 61 74 65 0a 23 20 20 20 20 79 6d 69 6e dinate.# ymin
48a0: 20 20 20 20 20 20 20 20 4d 69 6e 69 6d 75 6d 20 Minimum
48b0: 59 2d 63 6f 6f 72 64 69 6e 61 74 65 0a 23 20 20 Y-coordinate.#
48c0: 20 20 7a 6d 69 6e 20 20 20 20 20 20 20 20 4d 69 zmin Mi
48d0: 6e 69 6d 75 6d 20 5a 2d 63 6f 6f 72 64 69 6e 61 nimum Z-coordina
48e0: 74 65 0a 23 20 20 20 20 78 6d 61 78 20 20 20 20 te.# xmax
48f0: 20 20 20 20 4d 61 78 69 6d 75 6d 20 58 2d 63 6f Maximum X-co
4900: 6f 72 64 69 6e 61 74 65 0a 23 20 20 20 20 79 6d ordinate.# ym
4910: 61 78 20 20 20 20 20 20 20 20 4d 61 78 69 6d 75 ax Maximu
4920: 6d 20 59 2d 63 6f 6f 72 64 69 6e 61 74 65 0a 23 m Y-coordinate.#
4930: 20 20 20 20 7a 6d 61 78 20 20 20 20 20 20 20 20 zmax
4940: 4d 61 78 69 6d 75 6d 20 5a 2d 63 6f 6f 72 64 69 Maximum Z-coordi
4950: 6e 61 74 65 0a 23 20 52 65 73 75 6c 74 3a 0a 23 nate.# Result:.#
4960: 20 20 20 20 4e 6f 6e 65 0a 23 20 53 69 64 65 20 None.# Side
4970: 65 66 66 65 63 74 3a 0a 23 20 20 20 20 41 72 72 effect:.# Arr
4980: 61 79 20 73 63 61 6c 69 6e 67 20 66 69 6c 6c 65 ay scaling fille
4990: 64 0a 23 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 d.#.proc ::Plotc
49a0: 68 61 72 74 3a 3a 77 6f 72 6c 64 33 44 43 6f 6f hart::world3DCoo
49b0: 72 64 69 6e 61 74 65 73 20 7b 20 77 20 78 6d 69 rdinates { w xmi
49c0: 6e 20 79 6d 69 6e 20 7a 6d 69 6e 20 78 6d 61 78 n ymin zmin xmax
49d0: 20 79 6d 61 78 20 7a 6d 61 78 20 7d 20 7b 0a 20 ymax zmax } {.
49e0: 20 20 76 61 72 69 61 62 6c 65 20 73 63 61 6c 69 variable scali
49f0: 6e 67 0a 0a 20 20 20 69 66 20 7b 20 24 78 6d 69 ng.. if { $xmi
4a00: 6e 20 3d 3d 20 24 78 6d 61 78 20 7c 7c 20 24 79 n == $xmax || $y
4a10: 6d 69 6e 20 3d 3d 20 24 79 6d 61 78 20 7c 7c 20 min == $ymax ||
4a20: 24 7a 6d 69 6e 20 3d 3d 20 24 7a 6d 61 78 20 7d $zmin == $zmax }
4a30: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 {. return
4a40: 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 4d 69 6e -code error "Min
4a50: 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d imum and maximum
4a60: 20 6d 75 73 74 20 64 69 66 66 65 72 20 66 6f 72 must differ for
4a70: 20 77 6f 72 6c 64 20 63 6f 6f 72 64 69 6e 61 74 world coordinat
4a80: 65 73 22 0a 20 20 20 7d 0a 0a 20 20 20 73 65 74 es". }.. set
4a90: 20 73 63 61 6c 69 6e 67 28 24 77 2c 78 6d 69 6e scaling($w,xmin
4aa0: 29 20 20 20 20 5b 65 78 70 72 20 7b 64 6f 75 62 ) [expr {doub
4ab0: 6c 65 28 24 78 6d 69 6e 29 7d 5d 0a 20 20 20 73 le($xmin)}]. s
4ac0: 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 79 6d et scaling($w,ym
4ad0: 69 6e 29 20 20 20 20 5b 65 78 70 72 20 7b 64 6f in) [expr {do
4ae0: 75 62 6c 65 28 24 79 6d 69 6e 29 7d 5d 0a 20 20 uble($ymin)}].
4af0: 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c set scaling($w,
4b00: 7a 6d 69 6e 29 20 20 20 20 5b 65 78 70 72 20 7b zmin) [expr {
4b10: 64 6f 75 62 6c 65 28 24 7a 6d 69 6e 29 7d 5d 0a double($zmin)}].
4b20: 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 set scaling($
4b30: 77 2c 78 6d 61 78 29 20 20 20 20 5b 65 78 70 72 w,xmax) [expr
4b40: 20 7b 64 6f 75 62 6c 65 28 24 78 6d 61 78 29 7d {double($xmax)}
4b50: 5d 0a 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 ]. set scaling
4b60: 28 24 77 2c 79 6d 61 78 29 20 20 20 20 5b 65 78 ($w,ymax) [ex
4b70: 70 72 20 7b 64 6f 75 62 6c 65 28 24 79 6d 61 78 pr {double($ymax
4b80: 29 7d 5d 0a 20 20 20 73 65 74 20 73 63 61 6c 69 )}]. set scali
4b90: 6e 67 28 24 77 2c 7a 6d 61 78 29 20 20 20 20 5b ng($w,zmax) [
4ba0: 65 78 70 72 20 7b 64 6f 75 62 6c 65 28 24 7a 6d expr {double($zm
4bb0: 61 78 29 7d 5d 0a 0a 20 20 20 73 65 74 20 73 63 ax)}].. set sc
4bc0: 61 6c 69 6e 67 28 24 77 2c 6e 65 77 29 20 20 20 aling($w,new)
4bd0: 20 20 31 0a 7d 0a 0a 23 20 63 6f 6f 72 64 73 54 1.}..# coordsT
4be0: 6f 50 69 78 65 6c 20 2d 2d 0a 23 20 20 20 20 43 oPixel --.# C
4bf0: 6f 6e 76 65 72 74 20 77 6f 72 6c 64 20 63 6f 6f onvert world coo
4c00: 72 64 69 6e 61 74 65 73 20 74 6f 20 70 69 78 65 rdinates to pixe
4c10: 6c 20 63 6f 6f 72 64 69 6e 61 74 65 73 0a 23 20 l coordinates.#
4c20: 41 72 67 75 6d 65 6e 74 73 3a 0a 23 20 20 20 20 Arguments:.#
4c30: 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 w Name
4c40: 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 0a 23 of the canvas.#
4c50: 20 20 20 20 78 63 72 64 20 20 20 20 20 20 20 20 xcrd
4c60: 58 2d 63 6f 6f 72 64 69 6e 61 74 65 0a 23 20 20 X-coordinate.#
4c70: 20 20 79 63 72 64 20 20 20 20 20 20 20 20 59 2d ycrd Y-
4c80: 63 6f 6f 72 64 69 6e 61 74 65 0a 23 20 52 65 73 coordinate.# Res
4c90: 75 6c 74 3a 0a 23 20 20 20 20 4c 69 73 74 20 6f ult:.# List o
4ca0: 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 2c 20 f two elements,
4cb0: 78 2d 20 61 6e 64 20 79 2d 63 6f 6f 72 64 69 6e x- and y-coordin
4cc0: 61 74 65 73 20 69 6e 20 70 69 78 65 6c 73 0a 23 ates in pixels.#
4cd0: 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 .proc ::Plotchar
4ce0: 74 3a 3a 63 6f 6f 72 64 73 54 6f 50 69 78 65 6c t::coordsToPixel
4cf0: 20 7b 20 77 20 78 63 72 64 20 79 63 72 64 20 7d { w xcrd ycrd }
4d00: 20 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 20 73 {. variable s
4d10: 63 61 6c 69 6e 67 0a 0a 20 20 20 69 66 20 7b 20 caling.. if {
4d20: 24 73 63 61 6c 69 6e 67 28 24 77 2c 6e 65 77 29 $scaling($w,new)
4d30: 20 3d 3d 20 31 20 7d 20 7b 0a 20 20 20 20 20 20 == 1 } {.
4d40: 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 6e set scaling($w,n
4d50: 65 77 29 20 20 20 20 20 30 0a 20 20 20 20 20 20 ew) 0.
4d60: 73 65 74 20 77 69 64 74 68 20 20 20 20 20 20 20 set width
4d70: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 [expr {$
4d80: 73 63 61 6c 69 6e 67 28 24 77 2c 70 78 6d 61 78 scaling($w,pxmax
4d90: 29 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 78 )-$scaling($w,px
4da0: 6d 69 6e 29 7d 5d 0a 20 20 20 20 20 20 73 65 74 min)}]. set
4db0: 20 68 65 69 67 68 74 20 20 20 20 20 20 20 20 20 height
4dc0: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 73 63 61 [expr {$sca
4dd0: 6c 69 6e 67 28 24 77 2c 70 79 6d 61 78 29 2d 24 ling($w,pymax)-$
4de0: 73 63 61 6c 69 6e 67 28 24 77 2c 70 79 6d 69 6e scaling($w,pymin
4df0: 29 7d 5d 0a 0a 20 20 20 20 20 20 73 65 74 20 64 )}].. set d
4e00: 78 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 x
4e10: 20 20 20 5b 65 78 70 72 20 7b 24 73 63 61 6c 69 [expr {$scali
4e20: 6e 67 28 24 77 2c 78 6d 61 78 29 2d 24 73 63 61 ng($w,xmax)-$sca
4e30: 6c 69 6e 67 28 24 77 2c 78 6d 69 6e 29 7d 5d 0a ling($w,xmin)}].
4e40: 20 20 20 20 20 20 73 65 74 20 64 79 20 20 20 20 set dy
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 [e
4e60: 78 70 72 20 7b 24 73 63 61 6c 69 6e 67 28 24 77 xpr {$scaling($w
4e70: 2c 79 6d 61 78 29 2d 24 73 63 61 6c 69 6e 67 28 ,ymax)-$scaling(
4e80: 24 77 2c 79 6d 69 6e 29 7d 5d 0a 20 20 20 20 20 $w,ymin)}].
4e90: 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c set scaling($w,
4ea0: 78 66 61 63 74 6f 72 29 20 5b 65 78 70 72 20 7b xfactor) [expr {
4eb0: 24 77 69 64 74 68 2f 24 64 78 7d 5d 0a 20 20 20 $width/$dx}].
4ec0: 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 set scaling($
4ed0: 77 2c 79 66 61 63 74 6f 72 29 20 5b 65 78 70 72 w,yfactor) [expr
4ee0: 20 7b 24 68 65 69 67 68 74 2f 24 64 79 7d 5d 0a {$height/$dy}].
4ef0: 20 20 20 7d 0a 0a 20 20 20 73 65 74 20 78 70 69 }.. set xpi
4f00: 78 20 5b 65 78 70 72 20 7b 24 73 63 61 6c 69 6e x [expr {$scalin
4f10: 67 28 24 77 2c 70 78 6d 69 6e 29 2b 28 24 78 63 g($w,pxmin)+($xc
4f20: 72 64 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c 78 rd-$scaling($w,x
4f30: 6d 69 6e 29 29 2a 24 73 63 61 6c 69 6e 67 28 24 min))*$scaling($
4f40: 77 2c 78 66 61 63 74 6f 72 29 7d 5d 0a 20 20 20 w,xfactor)}].
4f50: 73 65 74 20 79 70 69 78 20 5b 65 78 70 72 20 7b set ypix [expr {
4f60: 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 79 6d 69 $scaling($w,pymi
4f70: 6e 29 2b 28 24 73 63 61 6c 69 6e 67 28 24 77 2c n)+($scaling($w,
4f80: 79 6d 61 78 29 2d 24 79 63 72 64 29 2a 24 73 63 ymax)-$ycrd)*$sc
4f90: 61 6c 69 6e 67 28 24 77 2c 79 66 61 63 74 6f 72 aling($w,yfactor
4fa0: 29 7d 5d 0a 20 20 20 72 65 74 75 72 6e 20 5b 6c )}]. return [l
4fb0: 69 73 74 20 24 78 70 69 78 20 24 79 70 69 78 5d ist $xpix $ypix]
4fc0: 0a 7d 0a 0a 23 20 63 6f 6f 72 64 73 33 44 54 6f .}..# coords3DTo
4fd0: 50 69 78 65 6c 20 2d 2d 0a 23 20 20 20 20 43 6f Pixel --.# Co
4fe0: 6e 76 65 72 74 20 77 6f 72 6c 64 20 63 6f 6f 72 nvert world coor
4ff0: 64 69 6e 61 74 65 73 20 74 6f 20 70 69 78 65 6c dinates to pixel
5000: 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 28 33 44 coordinates (3D
5010: 20 70 6c 6f 74 73 29 0a 23 20 41 72 67 75 6d 65 plots).# Argume
5020: 6e 74 73 3a 0a 23 20 20 20 20 77 20 20 20 20 20 nts:.# w
5030: 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 Name of th
5040: 65 20 63 61 6e 76 61 73 0a 23 20 20 20 20 78 63 e canvas.# xc
5050: 72 64 20 20 20 20 20 20 20 20 58 2d 63 6f 6f 72 rd X-coor
5060: 64 69 6e 61 74 65 0a 23 20 20 20 20 79 63 72 64 dinate.# ycrd
5070: 20 20 20 20 20 20 20 20 59 2d 63 6f 6f 72 64 69 Y-coordi
5080: 6e 61 74 65 0a 23 20 20 20 20 7a 63 72 64 20 20 nate.# zcrd
5090: 20 20 20 20 20 20 5a 2d 63 6f 6f 72 64 69 6e 61 Z-coordina
50a0: 74 65 0a 23 20 52 65 73 75 6c 74 3a 0a 23 20 20 te.# Result:.#
50b0: 20 20 4c 69 73 74 20 6f 66 20 74 77 6f 20 65 6c List of two el
50c0: 65 6d 65 6e 74 73 2c 20 78 2d 20 61 6e 64 20 79 ements, x- and y
50d0: 2d 63 6f 6f 72 64 69 6e 61 74 65 73 20 69 6e 20 -coordinates in
50e0: 70 69 78 65 6c 73 0a 23 0a 70 72 6f 63 20 3a 3a pixels.#.proc ::
50f0: 50 6c 6f 74 63 68 61 72 74 3a 3a 63 6f 6f 72 64 Plotchart::coord
5100: 73 33 44 54 6f 50 69 78 65 6c 20 7b 20 77 20 78 s3DToPixel { w x
5110: 63 72 64 20 79 63 72 64 20 7a 63 72 64 20 7d 20 crd ycrd zcrd }
5120: 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 20 73 63 {. variable sc
5130: 61 6c 69 6e 67 0a 0a 20 20 20 69 66 20 7b 20 24 aling.. if { $
5140: 73 63 61 6c 69 6e 67 28 24 77 2c 6e 65 77 29 20 scaling($w,new)
5150: 3d 3d 20 31 20 7d 20 7b 0a 20 20 20 20 20 20 73 == 1 } {. s
5160: 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 6e 65 et scaling($w,ne
5170: 77 29 20 20 20 20 20 20 30 0a 20 20 20 20 20 20 w) 0.
5180: 73 65 74 20 77 69 64 74 68 20 20 20 20 20 20 20 set width
5190: 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b [expr {
51a0: 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 78 6d 61 $scaling($w,pxma
51b0: 78 29 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 x)-$scaling($w,p
51c0: 78 6d 69 6e 29 7d 5d 0a 20 20 20 20 20 20 73 65 xmin)}]. se
51d0: 74 20 68 65 69 67 68 74 20 20 20 20 20 20 20 20 t height
51e0: 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 73 [expr {$s
51f0: 63 61 6c 69 6e 67 28 24 77 2c 70 79 6d 61 78 29 caling($w,pymax)
5200: 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 79 6d -$scaling($w,pym
5210: 69 6e 29 7d 5d 0a 0a 20 20 20 20 20 20 73 65 74 in)}].. set
5220: 20 64 78 20 20 20 20 20 20 20 20 20 20 20 20 20 dx
5230: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 73 63 [expr {$sc
5240: 61 6c 69 6e 67 28 24 77 2c 78 6d 61 78 29 2d 24 aling($w,xmax)-$
5250: 73 63 61 6c 69 6e 67 28 24 77 2c 78 6d 69 6e 29 scaling($w,xmin)
5260: 7d 5d 0a 20 20 20 20 20 20 73 65 74 20 64 79 20 }]. set dy
5270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5280: 20 20 5b 65 78 70 72 20 7b 24 73 63 61 6c 69 6e [expr {$scalin
5290: 67 28 24 77 2c 79 6d 61 78 29 2d 24 73 63 61 6c g($w,ymax)-$scal
52a0: 69 6e 67 28 24 77 2c 79 6d 69 6e 29 7d 5d 0a 20 ing($w,ymin)}].
52b0: 20 20 20 20 20 73 65 74 20 64 7a 20 20 20 20 20 set dz
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 [e
52d0: 78 70 72 20 7b 24 73 63 61 6c 69 6e 67 28 24 77 xpr {$scaling($w
52e0: 2c 7a 6d 61 78 29 2d 24 73 63 61 6c 69 6e 67 28 ,zmax)-$scaling(
52f0: 24 77 2c 7a 6d 69 6e 29 7d 5d 0a 20 20 20 20 20 $w,zmin)}].
5300: 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c set scaling($w,
5310: 78 79 66 61 63 74 6f 72 29 20 5b 65 78 70 72 20 xyfactor) [expr
5320: 7b 24 73 63 61 6c 69 6e 67 28 24 77 2c 79 66 72 {$scaling($w,yfr
5330: 61 63 74 29 2a 24 77 69 64 74 68 2f 24 64 78 7d act)*$width/$dx}
5340: 5d 0a 20 20 20 20 20 20 73 65 74 20 73 63 61 6c ]. set scal
5350: 69 6e 67 28 24 77 2c 78 7a 66 61 63 74 6f 72 29 ing($w,xzfactor)
5360: 20 5b 65 78 70 72 20 7b 24 73 63 61 6c 69 6e 67 [expr {$scaling
5370: 28 24 77 2c 7a 66 72 61 63 74 29 2a 24 68 65 69 ($w,zfract)*$hei
5380: 67 68 74 2f 24 64 78 7d 5d 0a 20 20 20 20 20 20 ght/$dx}].
5390: 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 79 set scaling($w,y
53a0: 66 61 63 74 6f 72 29 20 20 5b 65 78 70 72 20 7b factor) [expr {
53b0: 24 77 69 64 74 68 2f 24 64 79 7d 5d 0a 20 20 20 $width/$dy}].
53c0: 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 set scaling($
53d0: 77 2c 7a 66 61 63 74 6f 72 29 20 20 5b 65 78 70 w,zfactor) [exp
53e0: 72 20 7b 24 68 65 69 67 68 74 2f 24 64 7a 7d 5d r {$height/$dz}]
53f0: 0a 20 20 20 7d 0a 0a 20 20 20 23 0a 20 20 20 23 . }.. #. #
5400: 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 The values for
5410: 78 63 72 64 20 3d 20 78 6d 61 78 0a 20 20 20 23 xcrd = xmax. #
5420: 0a 20 20 20 73 65 74 20 78 70 69 78 20 5b 65 78 . set xpix [ex
5430: 70 72 20 7b 24 73 63 61 6c 69 6e 67 28 24 77 2c pr {$scaling($w,
5440: 70 78 6d 69 6e 29 2b 28 24 79 63 72 64 2d 24 73 pxmin)+($ycrd-$s
5450: 63 61 6c 69 6e 67 28 24 77 2c 79 6d 69 6e 29 29 caling($w,ymin))
5460: 2a 24 73 63 61 6c 69 6e 67 28 24 77 2c 79 66 61 *$scaling($w,yfa
5470: 63 74 6f 72 29 7d 5d 0a 20 20 20 73 65 74 20 79 ctor)}]. set y
5480: 70 69 78 20 5b 65 78 70 72 20 7b 24 73 63 61 6c pix [expr {$scal
5490: 69 6e 67 28 24 77 2c 70 79 6d 69 6e 29 2b 28 24 ing($w,pymin)+($
54a0: 73 63 61 6c 69 6e 67 28 24 77 2c 7a 6d 61 78 29 scaling($w,zmax)
54b0: 2d 24 7a 63 72 64 29 2a 24 73 63 61 6c 69 6e 67 -$zcrd)*$scaling
54c0: 28 24 77 2c 7a 66 61 63 74 6f 72 29 7d 5d 0a 0a ($w,zfactor)}]..
54d0: 20 20 20 23 0a 20 20 20 23 20 41 64 64 20 74 68 #. # Add th
54e0: 65 20 73 68 69 66 74 20 64 75 65 20 74 6f 20 78 e shift due to x
54f0: 63 72 64 2d 78 6d 61 78 0a 20 20 20 23 0a 20 20 crd-xmax. #.
5500: 20 73 65 74 20 78 70 69 78 20 5b 65 78 70 72 20 set xpix [expr
5510: 7b 24 78 70 69 78 20 2b 20 24 73 63 61 6c 69 6e {$xpix + $scalin
5520: 67 28 24 77 2c 78 79 66 61 63 74 6f 72 29 2a 28 g($w,xyfactor)*(
5530: 24 78 63 72 64 2d 24 73 63 61 6c 69 6e 67 28 24 $xcrd-$scaling($
5540: 77 2c 78 6d 61 78 29 29 7d 5d 0a 20 20 20 73 65 w,xmax))}]. se
5550: 74 20 79 70 69 78 20 5b 65 78 70 72 20 7b 24 79 t ypix [expr {$y
5560: 70 69 78 20 2d 20 24 73 63 61 6c 69 6e 67 28 24 pix - $scaling($
5570: 77 2c 78 7a 66 61 63 74 6f 72 29 2a 28 24 78 63 w,xzfactor)*($xc
5580: 72 64 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c 78 rd-$scaling($w,x
5590: 6d 61 78 29 29 7d 5d 0a 0a 20 20 20 72 65 74 75 max))}].. retu
55a0: 72 6e 20 5b 6c 69 73 74 20 24 78 70 69 78 20 24 rn [list $xpix $
55b0: 79 70 69 78 5d 0a 7d 0a 0a 23 20 70 69 78 65 6c ypix].}..# pixel
55c0: 54 6f 43 6f 6f 72 64 73 20 2d 2d 0a 23 20 20 20 ToCoords --.#
55d0: 20 43 6f 6e 76 65 72 74 20 70 69 78 65 6c 20 63 Convert pixel c
55e0: 6f 6f 72 64 69 6e 61 74 65 73 20 74 6f 20 77 6f oordinates to wo
55f0: 72 6c 64 20 63 6f 6f 72 64 69 6e 61 74 65 73 0a rld coordinates.
5600: 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 20 20 # Arguments:.#
5610: 20 20 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 w Na
5620: 6d 65 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 me of the canvas
5630: 0a 23 20 20 20 20 78 70 69 78 20 20 20 20 20 20 .# xpix
5640: 20 20 58 2d 63 6f 6f 72 64 69 6e 61 74 65 20 28 X-coordinate (
5650: 70 69 78 65 6c 29 0a 23 20 20 20 20 79 70 69 78 pixel).# ypix
5660: 20 20 20 20 20 20 20 20 59 2d 63 6f 6f 72 64 69 Y-coordi
5670: 6e 61 74 65 20 28 70 69 78 65 6c 29 0a 23 20 52 nate (pixel).# R
5680: 65 73 75 6c 74 3a 0a 23 20 20 20 20 4c 69 73 74 esult:.# List
5690: 20 6f 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 of two elements
56a0: 2c 20 78 2d 20 61 6e 64 20 79 2d 63 6f 6f 72 64 , x- and y-coord
56b0: 69 6e 61 74 65 73 20 69 6e 20 77 6f 72 6c 64 20 inates in world
56c0: 63 6f 6f 72 64 69 6e 61 74 65 20 73 79 73 74 65 coordinate syste
56d0: 6d 0a 23 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 m.#.proc ::Plotc
56e0: 68 61 72 74 3a 3a 70 69 78 65 6c 54 6f 43 6f 6f hart::pixelToCoo
56f0: 72 64 73 20 7b 20 77 20 78 70 69 78 20 79 70 69 rds { w xpix ypi
5700: 78 20 7d 20 7b 0a 20 20 20 76 61 72 69 61 62 6c x } {. variabl
5710: 65 20 73 63 61 6c 69 6e 67 0a 0a 20 20 20 69 66 e scaling.. if
5720: 20 7b 20 24 73 63 61 6c 69 6e 67 28 24 77 2c 6e { $scaling($w,n
5730: 65 77 29 20 3d 3d 20 31 20 7d 20 7b 0a 20 20 20 ew) == 1 } {.
5740: 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 set scaling($
5750: 77 2c 6e 65 77 29 20 20 20 20 20 30 0a 20 20 20 w,new) 0.
5760: 20 20 20 73 65 74 20 77 69 64 74 68 20 20 20 20 set width
5770: 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 [expr
5780: 20 7b 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 78 {$scaling($w,px
5790: 6d 61 78 29 2d 24 73 63 61 6c 69 6e 67 28 24 77 max)-$scaling($w
57a0: 2c 70 78 6d 69 6e 29 7d 5d 0a 20 20 20 20 20 20 ,pxmin)}].
57b0: 73 65 74 20 68 65 69 67 68 74 20 20 20 20 20 20 set height
57c0: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 [expr {$
57d0: 73 63 61 6c 69 6e 67 28 24 77 2c 70 79 6d 61 78 scaling($w,pymax
57e0: 29 2d 24 73 63 61 6c 69 6e 67 28 24 77 2c 70 79 )-$scaling($w,py
57f0: 6d 69 6e 29 7d 5d 0a 0a 20 20 20 20 20 20 73 65 min)}].. se
5800: 74 20 64 78 20 20 20 20 20 20 20 20 20 20 20 20 t dx
5810: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 73 63 [expr {$sc
5820: 61 6c 69 6e 67 28 24 77 2c 78 6d 61 78 29 2d 24 aling($w,xmax)-$
5830: 73 63 61 6c 69 6e 67 28 24 77 2c 78 6d 69 6e 29 scaling($w,xmin)
5840: 7d 5d 0a 20 20 20 20 20 20 73 65 74 20 64 79 20 }]. set dy
5850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5860: 20 5b 65 78 70 72 20 7b 24 73 63 61 6c 69 6e 67 [expr {$scaling
5870: 28 24 77 2c 79 6d 61 78 29 2d 24 73 63 61 6c 69 ($w,ymax)-$scali
5880: 6e 67 28 24 77 2c 79 6d 69 6e 29 7d 5d 0a 20 20 ng($w,ymin)}].
5890: 20 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 set scaling(
58a0: 24 77 2c 78 66 61 63 74 6f 72 29 20 5b 65 78 70 $w,xfactor) [exp
58b0: 72 20 7b 24 77 69 64 74 68 2f 24 64 78 7d 5d 0a r {$width/$dx}].
58c0: 20 20 20 20 20 20 73 65 74 20 73 63 61 6c 69 6e set scalin
58d0: 67 28 24 77 2c 79 66 61 63 74 6f 72 29 20 5b 65 g($w,yfactor) [e
58e0: 78 70 72 20 7b 24 68 65 69 67 68 74 2f 24 64 79 xpr {$height/$dy
58f0: 7d 5d 0a 20 20 20 7d 0a 0a 20 20 20 73 65 74 20 }]. }.. set
5900: 78 63 72 64 20 5b 65 78 70 72 20 7b 24 73 63 61 xcrd [expr {$sca
5910: 6c 69 6e 67 28 24 77 2c 78 6d 69 6e 29 2b 28 24 ling($w,xmin)+($
5920: 78 70 69 78 2d 24 73 63 61 6c 69 6e 67 28 24 77 xpix-$scaling($w
5930: 2c 70 78 6d 69 6e 29 29 2f 24 73 63 61 6c 69 6e ,pxmin))/$scalin
5940: 67 28 24 77 2c 78 66 61 63 74 6f 72 29 7d 5d 0a g($w,xfactor)}].
5950: 20 20 20 73 65 74 20 79 63 72 64 20 5b 65 78 70 set ycrd [exp
5960: 72 20 7b 24 73 63 61 6c 69 6e 67 28 24 77 2c 79 r {$scaling($w,y
5970: 6d 61 78 29 2d 28 24 79 70 69 78 2d 24 73 63 61 max)-($ypix-$sca
5980: 6c 69 6e 67 28 24 77 2c 70 79 6d 69 6e 29 29 2f ling($w,pymin))/
5990: 24 73 63 61 6c 69 6e 67 28 24 77 2c 79 66 61 63 $scaling($w,yfac
59a0: 74 6f 72 29 7d 5d 0a 20 20 20 72 65 74 75 72 6e tor)}]. return
59b0: 20 5b 6c 69 73 74 20 24 78 63 72 64 20 24 79 63 [list $xcrd $yc
59c0: 72 64 5d 0a 7d 0a 0a 23 20 70 69 78 65 6c 54 6f rd].}..# pixelTo
59d0: 49 6e 64 65 78 20 2d 2d 0a 23 20 20 20 20 43 6f Index --.# Co
59e0: 6e 76 65 72 74 20 70 69 78 65 6c 20 63 6f 6f 72 nvert pixel coor
59f0: 64 69 6e 61 74 65 73 20 74 6f 20 65 6c 65 6d 65 dinates to eleme
5a00: 6e 74 73 20 6c 69 73 74 20 69 6e 64 65 78 0a 23 nts list index.#
5a10: 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 20 20 20 Arguments:.#
5a20: 20 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d w Nam
5a30: 65 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 0a e of the canvas.
5a40: 23 20 20 20 20 78 70 69 78 20 20 20 20 20 20 20 # xpix
5a50: 20 58 2d 63 6f 6f 72 64 69 6e 61 74 65 20 28 70 X-coordinate (p
5a60: 69 78 65 6c 29 0a 23 20 20 20 20 79 70 69 78 20 ixel).# ypix
5a70: 20 20 20 20 20 20 20 59 2d 63 6f 6f 72 64 69 6e Y-coordin
5a80: 61 74 65 20 28 70 69 78 65 6c 29 0a 23 20 52 65 ate (pixel).# Re
5a90: 73 75 6c 74 3a 0a 23 20 20 20 20 45 6c 65 6d 65 sult:.# Eleme
5aa0: 6e 74 73 20 6c 69 73 74 20 69 6e 64 65 78 0a 23 nts list index.#
5ab0: 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 .proc ::Plotchar
5ac0: 74 3a 3a 70 69 78 65 6c 54 6f 49 6e 64 65 78 20 t::pixelToIndex
5ad0: 7b 20 77 20 78 70 69 78 20 79 70 69 78 20 7d 20 { w xpix ypix }
5ae0: 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 20 73 63 {. variable sc
5af0: 61 6c 69 6e 67 0a 20 20 20 76 61 72 69 61 62 6c aling. variabl
5b00: 65 20 74 6f 72 61 64 0a 0a 20 20 20 73 65 74 20 e torad.. set
5b10: 69 64 78 20 2d 31 0a 20 20 20 73 65 74 20 72 61 idx -1. set ra
5b20: 64 69 75 73 20 5b 65 78 70 72 20 7b 28 24 73 63 dius [expr {($sc
5b30: 61 6c 69 6e 67 28 24 7b 77 7d 2c 70 78 6d 61 78 aling(${w},pxmax
5b40: 29 20 2d 20 24 73 63 61 6c 69 6e 67 28 24 7b 77 ) - $scaling(${w
5b50: 7d 2c 70 78 6d 69 6e 29 29 20 2f 20 32 7d 5d 0a },pxmin)) / 2}].
5b60: 20 20 20 73 65 74 20 78 72 65 6c 20 5b 65 78 70 set xrel [exp
5b70: 72 20 7b 24 7b 78 70 69 78 7d 20 2d 20 24 73 63 r {${xpix} - $sc
5b80: 61 6c 69 6e 67 28 24 7b 77 7d 2c 70 78 6d 69 6e aling(${w},pxmin
5b90: 29 20 2d 20 24 7b 72 61 64 69 75 73 7d 7d 5d 0a ) - ${radius}}].
5ba0: 20 20 20 73 65 74 20 79 72 65 6c 20 5b 65 78 70 set yrel [exp
5bb0: 72 20 7b 2d 24 7b 79 70 69 78 7d 20 2b 20 24 73 r {-${ypix} + $s
5bc0: 63 61 6c 69 6e 67 28 24 7b 77 7d 2c 70 79 6d 69 caling(${w},pymi
5bd0: 6e 29 20 2b 20 24 7b 72 61 64 69 75 73 7d 7d 5d n) + ${radius}}]
5be0: 0a 20 20 20 69 66 20 7b 5b 65 78 70 72 20 7b 70 . if {[expr {p
5bf0: 6f 77 28 24 7b 72 61 64 69 75 73 7d 2c 32 29 20 ow(${radius},2)
5c00: 3c 20 28 70 6f 77 28 24 7b 78 72 65 6c 7d 2c 32 < (pow(${xrel},2
5c10: 29 20 2b 20 70 6f 77 28 24 7b 79 72 65 6c 7d 2c ) + pow(${yrel},
5c20: 32 29 29 7d 5d 7d 20 7b 0a 20 20 20 20 20 20 20 2))}]} {.
5c30: 23 20 64 6f 20 6e 6f 74 68 69 6e 67 20 6f 75 74 # do nothing out
5c40: 20 6f 66 20 70 69 65 20 63 68 61 72 74 0a 20 20 of pie chart.
5c50: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f } elseif {[info
5c60: 20 65 78 69 73 74 73 20 73 63 61 6c 69 6e 67 28 exists scaling(
5c70: 24 7b 77 7d 2c 61 6e 67 6c 65 73 29 5d 7d 20 7b ${w},angles)]} {
5c80: 0a 20 20 20 20 20 20 20 73 65 74 20 78 79 5f 61 . set xy_a
5c90: 6e 67 6c 65 20 5b 65 78 70 72 20 7b 28 33 36 30 ngle [expr {(360
5ca0: 20 2b 20 72 6f 75 6e 64 28 61 74 61 6e 32 28 24 + round(atan2($
5cb0: 7b 79 72 65 6c 7d 2c 24 7b 78 72 65 6c 7d 29 2f {yrel},${xrel})/
5cc0: 24 7b 74 6f 72 61 64 7d 29 29 20 25 20 33 36 30 ${torad})) % 360
5cd0: 7d 5d 0a 20 20 20 20 20 20 20 66 6f 72 65 61 63 }]. foreac
5ce0: 68 20 61 6e 67 6c 65 20 24 73 63 61 6c 69 6e 67 h angle $scaling
5cf0: 28 24 7b 77 7d 2c 61 6e 67 6c 65 73 29 20 7b 0a (${w},angles) {.
5d00: 20 20 20 20 20 20 20 69 66 20 7b 24 7b 78 79 5f if {${xy_
5d10: 61 6e 67 6c 65 7d 20 3c 3d 20 24 7b 61 6e 67 6c angle} <= ${angl
5d20: 65 7d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 e}} {.
5d30: 20 62 72 65 61 6b 0a 20 20 20 20 20 20 20 7d 0a break. }.
5d40: 20 20 20 20 20 20 20 69 6e 63 72 20 69 64 78 0a incr idx.
5d50: 20 20 20 20 20 20 20 7d 0a 20 20 20 7d 0a 20 20 }. }.
5d60: 20 72 65 74 75 72 6e 20 24 7b 69 64 78 7d 0a 7d return ${idx}.}
5d70: 0a 0a 23 20 70 6f 6c 61 72 54 6f 50 69 78 65 6c ..# polarToPixel
5d80: 20 2d 2d 0a 23 20 20 20 20 43 6f 6e 76 65 72 74 --.# Convert
5d90: 20 70 6f 6c 61 72 20 63 6f 6f 72 64 69 6e 61 74 polar coordinat
5da0: 65 73 20 74 6f 20 70 69 78 65 6c 20 63 6f 6f 72 es to pixel coor
5db0: 64 69 6e 61 74 65 73 0a 23 20 41 72 67 75 6d 65 dinates.# Argume
5dc0: 6e 74 73 3a 0a 23 20 20 20 20 77 20 20 20 20 20 nts:.# w
5dd0: 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 Name of th
5de0: 65 20 63 61 6e 76 61 73 0a 23 20 20 20 20 72 61 e canvas.# ra
5df0: 64 20 20 20 20 20 20 20 20 20 52 61 64 69 75 73 d Radius
5e00: 20 6f 66 20 74 68 65 20 70 6f 69 6e 74 0a 23 20 of the point.#
5e10: 20 20 20 70 68 69 20 20 20 20 20 20 20 20 20 41 phi A
5e20: 6e 67 6c 65 20 6f 66 20 74 68 65 20 70 6f 69 6e ngle of the poin
5e30: 74 20 28 64 65 67 72 65 65 73 29 0a 23 20 52 65 t (degrees).# Re
5e40: 73 75 6c 74 3a 0a 23 20 20 20 20 4c 69 73 74 20 sult:.# List
5e50: 6f 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 2c of two elements,
5e60: 20 78 2d 20 61 6e 64 20 79 2d 63 6f 6f 72 64 69 x- and y-coordi
5e70: 6e 61 74 65 73 20 69 6e 20 70 69 78 65 6c 73 0a nates in pixels.
5e80: 23 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 #.proc ::Plotcha
5e90: 72 74 3a 3a 70 6f 6c 61 72 54 6f 50 69 78 65 6c rt::polarToPixel
5ea0: 20 7b 20 77 20 72 61 64 20 70 68 69 20 7d 20 7b { w rad phi } {
5eb0: 0a 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f 72 . variable tor
5ec0: 61 64 0a 0a 20 20 20 73 65 74 20 78 63 72 64 20 ad.. set xcrd
5ed0: 5b 65 78 70 72 20 7b 24 72 61 64 2a 63 6f 73 28 [expr {$rad*cos(
5ee0: 24 70 68 69 2a 24 74 6f 72 61 64 29 7d 5d 0a 20 $phi*$torad)}].
5ef0: 20 20 73 65 74 20 79 63 72 64 20 5b 65 78 70 72 set ycrd [expr
5f00: 20 7b 24 72 61 64 2a 73 69 6e 28 24 70 68 69 2a {$rad*sin($phi*
5f10: 24 74 6f 72 61 64 29 7d 5d 0a 0a 20 20 20 63 6f $torad)}].. co
5f20: 6f 72 64 73 54 6f 50 69 78 65 6c 20 24 77 20 24 ordsToPixel $w $
5f30: 78 63 72 64 20 24 79 63 72 64 0a 7d 0a 0a 23 20 xcrd $ycrd.}..#
5f40: 63 72 65 61 74 65 58 59 50 6c 6f 74 20 2d 2d 0a createXYPlot --.
5f50: 23 20 20 20 20 43 72 65 61 74 65 20 61 20 63 6f # Create a co
5f60: 6d 6d 61 6e 64 20 66 6f 72 20 64 72 61 77 69 6e mmand for drawin
5f70: 67 20 61 6e 20 58 59 20 70 6c 6f 74 0a 23 20 41 g an XY plot.# A
5f80: 72 67 75 6d 65 6e 74 73 3a 0a 23 20 20 20 20 77 rguments:.# w
5f90: 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 20 Name
5fa0: 6f 66 20 74 68 65 20 63 61 6e 76 61 73 0a 23 20 of the canvas.#
5fb0: 20 20 20 78 73 63 61 6c 65 20 20 20 20 20 20 4d xscale M
5fc0: 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d 20 inimum, maximum
5fd0: 61 6e 64 20 73 74 65 70 20 66 6f 72 20 78 2d 61 and step for x-a
5fe0: 78 69 73 20 28 69 6e 69 74 69 61 6c 29 0a 23 20 xis (initial).#
5ff0: 20 20 20 79 73 63 61 6c 65 20 20 20 20 20 20 4d yscale M
6000: 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d 20 inimum, maximum
6010: 61 6e 64 20 73 74 65 70 20 66 6f 72 20 79 2d 61 and step for y-a
6020: 78 69 73 0a 23 20 52 65 73 75 6c 74 3a 0a 23 20 xis.# Result:.#
6030: 20 20 20 4e 61 6d 65 20 6f 66 20 61 20 6e 65 77 Name of a new
6040: 20 63 6f 6d 6d 61 6e 64 0a 23 20 4e 6f 74 65 3a command.# Note:
6050: 0a 23 20 20 20 20 54 68 65 20 65 6e 74 69 72 65 .# The entire
6060: 20 63 61 6e 76 61 73 20 77 69 6c 6c 20 62 65 20 canvas will be
6070: 64 65 64 69 63 61 74 65 64 20 74 6f 20 74 68 65 dedicated to the
6080: 20 58 59 20 70 6c 6f 74 2e 0a 23 20 20 20 20 54 XY plot..# T
6090: 68 65 20 70 6c 6f 74 20 77 69 6c 6c 20 62 65 20 he plot will be
60a0: 64 72 61 77 6e 20 77 69 74 68 20 61 78 65 73 0a drawn with axes.
60b0: 23 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 #.proc ::Plotcha
60c0: 72 74 3a 3a 63 72 65 61 74 65 58 59 50 6c 6f 74 rt::createXYPlot
60d0: 20 7b 20 77 20 78 73 63 61 6c 65 20 79 73 63 61 { w xscale ysca
60e0: 6c 65 20 7d 20 7b 0a 20 20 20 76 61 72 69 61 62 le } {. variab
60f0: 6c 65 20 64 61 74 61 5f 73 65 72 69 65 73 0a 0a le data_series..
6100: 20 20 20 66 6f 72 65 61 63 68 20 73 20 5b 61 72 foreach s [ar
6110: 72 61 79 20 6e 61 6d 65 73 20 64 61 74 61 5f 73 ray names data_s
6120: 65 72 69 65 73 20 22 24 77 2c 2a 22 5d 20 7b 0a eries "$w,*"] {.
6130: 20 20 20 20 20 20 75 6e 73 65 74 20 64 61 74 61 unset data
6140: 5f 73 65 72 69 65 73 28 24 73 29 0a 20 20 20 7d _series($s). }
6150: 0a 0a 20 20 20 73 65 74 20 6e 65 77 63 68 61 72 .. set newchar
6160: 74 20 22 78 79 70 6c 6f 74 5f 24 77 22 0a 20 20 t "xyplot_$w".
6170: 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d interp alias {}
6180: 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a 3a $newchart {} ::
6190: 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 48 Plotchart::PlotH
61a0: 61 6e 64 6c 65 72 20 78 79 70 6c 6f 74 20 24 77 andler xyplot $w
61b0: 0a 20 20 20 43 6f 70 79 43 6f 6e 66 69 67 20 78 . CopyConfig x
61c0: 79 70 6c 6f 74 20 24 77 0a 0a 20 20 20 66 6f 72 yplot $w.. for
61d0: 65 61 63 68 20 7b 70 78 6d 69 6e 20 70 79 6d 69 each {pxmin pymi
61e0: 6e 20 70 78 6d 61 78 20 70 79 6d 61 78 7d 20 5b n pxmax pymax} [
61f0: 4d 61 72 67 69 6e 73 52 65 63 74 61 6e 67 6c 65 MarginsRectangle
6200: 20 24 77 5d 20 7b 62 72 65 61 6b 7d 0a 0a 20 20 $w] {break}..
6210: 20 66 6f 72 65 61 63 68 20 7b 78 6d 69 6e 20 78 foreach {xmin x
6220: 6d 61 78 20 78 64 65 6c 74 7d 20 24 78 73 63 61 max xdelt} $xsca
6230: 6c 65 20 7b 62 72 65 61 6b 7d 0a 20 20 20 66 6f le {break}. fo
6240: 72 65 61 63 68 20 7b 79 6d 69 6e 20 79 6d 61 78 reach {ymin ymax
6250: 20 79 64 65 6c 74 7d 20 24 79 73 63 61 6c 65 20 ydelt} $yscale
6260: 7b 62 72 65 61 6b 7d 0a 0a 20 20 20 69 66 20 7b {break}.. if {
6270: 20 24 78 64 65 6c 74 20 3d 3d 20 30 2e 30 20 7c $xdelt == 0.0 |
6280: 7c 20 24 79 64 65 6c 74 20 3d 3d 20 30 2e 30 20 | $ydelt == 0.0
6290: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e } {. return
62a0: 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 53 74 -code error "St
62b0: 65 70 20 73 69 7a 65 20 63 61 6e 20 6e 6f 74 20 ep size can not
62c0: 62 65 20 7a 65 72 6f 22 0a 20 20 20 7d 0a 0a 20 be zero". }..
62d0: 20 20 69 66 20 7b 20 28 24 78 6d 61 78 2d 24 78 if { ($xmax-$x
62e0: 6d 69 6e 29 2a 24 78 64 65 6c 74 20 3c 20 30 2e min)*$xdelt < 0.
62f0: 30 20 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 0 } {. set
6300: 78 64 65 6c 74 20 5b 65 78 70 72 20 7b 2d 24 78 xdelt [expr {-$x
6310: 64 65 6c 74 7d 5d 0a 20 20 20 7d 0a 20 20 20 69 delt}]. }. i
6320: 66 20 7b 20 28 24 79 6d 61 78 2d 24 79 6d 69 6e f { ($ymax-$ymin
6330: 29 2a 24 79 64 65 6c 74 20 3c 20 30 2e 30 20 7d )*$ydelt < 0.0 }
6340: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 79 64 65 {. set yde
6350: 6c 74 20 5b 65 78 70 72 20 7b 2d 24 79 64 65 6c lt [expr {-$ydel
6360: 74 7d 5d 0a 20 20 20 7d 0a 0a 20 20 20 76 69 65 t}]. }.. vie
6370: 77 50 6f 72 74 20 20 20 20 20 20 20 20 20 24 77 wPort $w
6380: 20 24 70 78 6d 69 6e 20 24 70 79 6d 69 6e 20 24 $pxmin $pymin $
6390: 70 78 6d 61 78 20 24 70 79 6d 61 78 0a 20 20 20 pxmax $pymax.
63a0: 77 6f 72 6c 64 43 6f 6f 72 64 69 6e 61 74 65 73 worldCoordinates
63b0: 20 24 77 20 24 78 6d 69 6e 20 20 24 79 6d 69 6e $w $xmin $ymin
63c0: 20 20 24 78 6d 61 78 20 20 24 79 6d 61 78 0a 0a $xmax $ymax..
63d0: 20 20 20 44 72 61 77 59 61 78 69 73 20 20 20 20 DrawYaxis
63e0: 20 20 20 20 24 77 20 24 79 6d 69 6e 20 20 24 79 $w $ymin $y
63f0: 6d 61 78 20 20 24 79 64 65 6c 74 0a 20 20 20 44 max $ydelt. D
6400: 72 61 77 58 61 78 69 73 20 20 20 20 20 20 20 20 rawXaxis
6410: 24 77 20 24 78 6d 69 6e 20 20 24 78 6d 61 78 20 $w $xmin $xmax
6420: 20 24 78 64 65 6c 74 0a 20 20 20 44 72 61 77 4d $xdelt. DrawM
6430: 61 73 6b 20 20 20 20 20 20 20 20 20 24 77 0a 20 ask $w.
6440: 20 20 44 65 66 61 75 6c 74 4c 65 67 65 6e 64 20 DefaultLegend
6450: 20 20 20 24 77 0a 20 20 20 44 65 66 61 75 6c 74 $w. Default
6460: 42 61 6c 6c 6f 6f 6e 20 20 20 24 77 0a 0a 20 20 Balloon $w..
6470: 20 72 65 74 75 72 6e 20 24 6e 65 77 63 68 61 72 return $newchar
6480: 74 0a 7d 0a 0a 23 20 63 72 65 61 74 65 53 74 72 t.}..# createStr
6490: 69 70 63 68 61 72 74 20 2d 2d 0a 23 20 20 20 20 ipchart --.#
64a0: 43 72 65 61 74 65 20 61 20 63 6f 6d 6d 61 6e 64 Create a command
64b0: 20 66 6f 72 20 64 72 61 77 69 6e 67 20 61 20 73 for drawing a s
64c0: 74 72 69 70 20 63 68 61 72 74 0a 23 20 41 72 67 trip chart.# Arg
64d0: 75 6d 65 6e 74 73 3a 0a 23 20 20 20 20 77 20 20 uments:.# w
64e0: 20 20 20 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 Name of
64f0: 20 74 68 65 20 63 61 6e 76 61 73 0a 23 20 20 20 the canvas.#
6500: 20 78 73 63 61 6c 65 20 20 20 20 20 20 4d 69 6e xscale Min
6510: 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e imum, maximum an
6520: 64 20 73 74 65 70 20 66 6f 72 20 78 2d 61 78 69 d step for x-axi
6530: 73 20 28 69 6e 69 74 69 61 6c 29 0a 23 20 20 20 s (initial).#
6540: 20 79 73 63 61 6c 65 20 20 20 20 20 20 4d 69 6e yscale Min
6550: 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e imum, maximum an
6560: 64 20 73 74 65 70 20 66 6f 72 20 79 2d 61 78 69 d step for y-axi
6570: 73 0a 23 20 52 65 73 75 6c 74 3a 0a 23 20 20 20 s.# Result:.#
6580: 20 4e 61 6d 65 20 6f 66 20 61 20 6e 65 77 20 63 Name of a new c
6590: 6f 6d 6d 61 6e 64 0a 23 20 4e 6f 74 65 3a 0a 23 ommand.# Note:.#
65a0: 20 20 20 20 54 68 65 20 65 6e 74 69 72 65 20 63 The entire c
65b0: 61 6e 76 61 73 20 77 69 6c 6c 20 62 65 20 64 65 anvas will be de
65c0: 64 69 63 61 74 65 64 20 74 6f 20 74 68 65 20 73 dicated to the s
65d0: 74 72 69 70 63 68 61 72 74 2e 0a 23 20 20 20 20 tripchart..#
65e0: 54 68 65 20 73 74 72 69 70 63 68 61 72 74 20 77 The stripchart w
65f0: 69 6c 6c 20 62 65 20 64 72 61 77 6e 20 77 69 74 ill be drawn wit
6600: 68 20 61 78 65 73 0a 23 0a 70 72 6f 63 20 3a 3a h axes.#.proc ::
6610: 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 65 61 74 Plotchart::creat
6620: 65 53 74 72 69 70 63 68 61 72 74 20 7b 20 77 20 eStripchart { w
6630: 78 73 63 61 6c 65 20 79 73 63 61 6c 65 20 7d 20 xscale yscale }
6640: 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 {. variable da
6650: 74 61 5f 73 65 72 69 65 73 0a 0a 20 20 20 73 65 ta_series.. se
6660: 74 20 6e 65 77 63 68 61 72 74 20 5b 63 72 65 61 t newchart [crea
6670: 74 65 58 59 50 6c 6f 74 20 24 77 20 24 78 73 63 teXYPlot $w $xsc
6680: 61 6c 65 20 24 79 73 63 61 6c 65 5d 0a 0a 20 20 ale $yscale]..
6690: 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d interp alias {}
66a0: 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 0a 0a 20 $newchart {}..
66b0: 20 20 73 65 74 20 6e 65 77 63 68 61 72 74 20 22 set newchart "
66c0: 73 74 72 69 70 63 68 61 72 74 5f 24 77 22 0a 20 stripchart_$w".
66d0: 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b interp alias {
66e0: 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a } $newchart {} :
66f0: 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 :Plotchart::Plot
6700: 48 61 6e 64 6c 65 72 20 73 74 72 69 70 63 68 61 Handler stripcha
6710: 72 74 20 24 77 0a 20 20 20 43 6f 70 79 43 6f 6e rt $w. CopyCon
6720: 66 69 67 20 73 74 72 69 70 63 68 61 72 74 20 24 fig stripchart $
6730: 77 0a 0a 20 20 20 72 65 74 75 72 6e 20 24 6e 65 w.. return $ne
6740: 77 63 68 61 72 74 0a 7d 0a 0a 23 20 63 72 65 61 wchart.}..# crea
6750: 74 65 49 73 6f 6d 65 74 72 69 63 50 6c 6f 74 20 teIsometricPlot
6760: 2d 2d 0a 23 20 20 20 20 43 72 65 61 74 65 20 61 --.# Create a
6770: 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 61 command for dra
6780: 77 69 6e 67 20 61 6e 20 22 69 73 6f 6d 65 74 72 wing an "isometr
6790: 69 63 22 20 70 6c 6f 74 0a 23 20 41 72 67 75 6d ic" plot.# Argum
67a0: 65 6e 74 73 3a 0a 23 20 20 20 20 77 20 20 20 20 ents:.# w
67b0: 20 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 Name of t
67c0: 68 65 20 63 61 6e 76 61 73 0a 23 20 20 20 20 78 he canvas.# x
67d0: 73 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d scale Minim
67e0: 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 66 um and maximum f
67f0: 6f 72 20 78 2d 61 78 69 73 0a 23 20 20 20 20 79 or x-axis.# y
6800: 73 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d scale Minim
6810: 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 66 um and maximum f
6820: 6f 72 20 79 2d 61 78 69 73 0a 23 20 20 20 20 73 or y-axis.# s
6830: 74 65 70 73 69 7a 65 20 20 20 20 53 74 65 70 20 tepsize Step
6840: 73 69 7a 65 20 66 6f 72 20 6e 75 6d 62 65 72 73 size for numbers
6850: 20 6f 6e 20 74 68 65 20 61 78 65 73 20 6f 72 20 on the axes or
6860: 22 6e 6f 61 78 65 73 22 0a 23 20 52 65 73 75 6c "noaxes".# Resul
6870: 74 3a 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 20 t:.# Name of
6880: 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0a 23 20 a new command.#
6890: 4e 6f 74 65 3a 0a 23 20 20 20 20 54 68 65 20 65 Note:.# The e
68a0: 6e 74 69 72 65 20 63 61 6e 76 61 73 20 77 69 6c ntire canvas wil
68b0: 6c 20 62 65 20 64 65 64 69 63 61 74 65 64 20 74 l be dedicated t
68c0: 6f 20 74 68 65 20 70 6c 6f 74 0a 23 20 20 20 20 o the plot.#
68d0: 54 68 65 20 70 6c 6f 74 20 77 69 6c 6c 20 62 65 The plot will be
68e0: 20 64 72 61 77 6e 20 77 69 74 68 20 6f 72 20 77 drawn with or w
68f0: 69 74 68 6f 75 74 20 61 78 65 73 0a 23 0a 70 72 ithout axes.#.pr
6900: 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a oc ::Plotchart::
6910: 63 72 65 61 74 65 49 73 6f 6d 65 74 72 69 63 50 createIsometricP
6920: 6c 6f 74 20 7b 20 77 20 78 73 63 61 6c 65 20 79 lot { w xscale y
6930: 73 63 61 6c 65 20 73 74 65 70 73 69 7a 65 20 7d scale stepsize }
6940: 20 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 20 64 {. variable d
6950: 61 74 61 5f 73 65 72 69 65 73 0a 0a 20 20 20 66 ata_series.. f
6960: 6f 72 65 61 63 68 20 73 20 5b 61 72 72 61 79 20 oreach s [array
6970: 6e 61 6d 65 73 20 64 61 74 61 5f 73 65 72 69 65 names data_serie
6980: 73 20 22 24 77 2c 2a 22 5d 20 7b 0a 20 20 20 20 s "$w,*"] {.
6990: 20 20 75 6e 73 65 74 20 64 61 74 61 5f 73 65 72 unset data_ser
69a0: 69 65 73 28 24 73 29 0a 20 20 20 7d 0a 0a 20 20 ies($s). }..
69b0: 20 73 65 74 20 6e 65 77 63 68 61 72 74 20 22 69 set newchart "i
69c0: 73 6f 6d 65 74 72 69 63 5f 24 77 22 0a 20 20 20 sometric_$w".
69d0: 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 interp alias {}
69e0: 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a 3a 50 $newchart {} ::P
69f0: 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 48 61 lotchart::PlotHa
6a00: 6e 64 6c 65 72 20 69 73 6f 6d 65 74 72 69 63 20 ndler isometric
6a10: 24 77 0a 20 20 20 43 6f 70 79 43 6f 6e 66 69 67 $w. CopyConfig
6a20: 20 69 73 6f 6d 65 74 72 69 63 20 24 77 0a 0a 20 isometric $w..
6a30: 20 20 69 66 20 7b 20 24 73 74 65 70 73 69 7a 65 if { $stepsize
6a40: 20 21 3d 20 22 6e 6f 61 78 65 73 22 20 7d 20 7b != "noaxes" } {
6a50: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 7b . foreach {
6a60: 70 78 6d 69 6e 20 70 79 6d 69 6e 20 70 78 6d 61 pxmin pymin pxma
6a70: 78 20 70 79 6d 61 78 7d 20 5b 4d 61 72 67 69 6e x pymax} [Margin
6a80: 73 52 65 63 74 61 6e 67 6c 65 20 24 77 5d 20 7b sRectangle $w] {
6a90: 62 72 65 61 6b 7d 0a 20 20 20 7d 20 65 6c 73 65 break}. } else
6aa0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 70 78 6d {. set pxm
6ab0: 69 6e 20 30 0a 20 20 20 20 20 20 73 65 74 20 70 in 0. set p
6ac0: 79 6d 69 6e 20 30 0a 20 20 20 20 20 20 23 73 65 ymin 0. #se
6ad0: 74 20 70 78 6d 61 78 20 5b 24 77 20 63 67 65 74 t pxmax [$w cget
6ae0: 20 2d 77 69 64 74 68 5d 0a 20 20 20 20 20 20 23 -width]. #
6af0: 73 65 74 20 70 79 6d 61 78 20 5b 24 77 20 63 67 set pymax [$w cg
6b00: 65 74 20 2d 68 65 69 67 68 74 5d 0a 20 20 20 20 et -height].
6b10: 20 20 73 65 74 20 70 78 6d 61 78 20 5b 57 69 64 set pxmax [Wid
6b20: 74 68 43 61 6e 76 61 73 20 24 77 5d 0a 20 20 20 thCanvas $w].
6b30: 20 20 20 73 65 74 20 70 79 6d 61 78 20 5b 48 65 set pymax [He
6b40: 69 67 68 74 43 61 6e 76 61 73 20 24 77 5d 0a 20 ightCanvas $w].
6b50: 20 20 7d 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 }.. foreach
6b60: 7b 78 6d 69 6e 20 78 6d 61 78 7d 20 24 78 73 63 {xmin xmax} $xsc
6b70: 61 6c 65 20 7b 62 72 65 61 6b 7d 0a 20 20 20 66 ale {break}. f
6b80: 6f 72 65 61 63 68 20 7b 79 6d 69 6e 20 79 6d 61 oreach {ymin yma
6b90: 78 7d 20 24 79 73 63 61 6c 65 20 7b 62 72 65 61 x} $yscale {brea
6ba0: 6b 7d 0a 0a 20 20 20 69 66 20 7b 20 24 78 6d 69 k}.. if { $xmi
6bb0: 6e 20 3d 3d 20 24 78 6d 61 78 20 7c 7c 20 24 79 n == $xmax || $y
6bc0: 6d 69 6e 20 3d 3d 20 24 79 6d 61 78 20 7d 20 7b min == $ymax } {
6bd0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 . return -c
6be0: 6f 64 65 20 65 72 72 6f 72 20 22 45 78 74 72 65 ode error "Extre
6bf0: 6d 65 73 20 66 6f 72 20 61 78 65 73 20 6d 75 73 mes for axes mus
6c00: 74 20 62 65 20 64 69 66 66 65 72 65 6e 74 22 0a t be different".
6c10: 20 20 20 7d 0a 0a 20 20 20 76 69 65 77 50 6f 72 }.. viewPor
6c20: 74 20 20 20 20 20 20 20 20 20 24 77 20 24 70 78 t $w $px
6c30: 6d 69 6e 20 24 70 79 6d 69 6e 20 24 70 78 6d 61 min $pymin $pxma
6c40: 78 20 24 70 79 6d 61 78 0a 20 20 20 53 63 61 6c x $pymax. Scal
6c50: 65 49 73 6f 6d 65 74 72 69 63 20 20 20 24 77 20 eIsometric $w
6c60: 24 78 6d 69 6e 20 20 24 79 6d 69 6e 20 20 24 78 $xmin $ymin $x
6c70: 6d 61 78 20 20 24 79 6d 61 78 0a 0a 20 20 20 69 max $ymax.. i
6c80: 66 20 7b 20 24 73 74 65 70 73 69 7a 65 20 21 3d f { $stepsize !=
6c90: 20 22 6e 6f 61 78 65 73 22 20 7d 20 7b 0a 20 20 "noaxes" } {.
6ca0: 20 20 20 20 44 72 61 77 59 61 78 69 73 20 20 20 DrawYaxis
6cb0: 20 20 20 20 20 24 77 20 24 79 6d 69 6e 20 20 24 $w $ymin $
6cc0: 79 6d 61 78 20 20 24 79 64 65 6c 74 0a 20 20 20 ymax $ydelt.
6cd0: 20 20 20 44 72 61 77 58 61 78 69 73 20 20 20 20 DrawXaxis
6ce0: 20 20 20 20 24 77 20 24 78 6d 69 6e 20 20 24 78 $w $xmin $x
6cf0: 6d 61 78 20 20 24 78 64 65 6c 74 0a 20 20 20 20 max $xdelt.
6d00: 20 20 44 72 61 77 4d 61 73 6b 20 20 20 20 20 20 DrawMask
6d10: 20 20 20 24 77 0a 20 20 20 7d 0a 20 20 20 44 65 $w. }. De
6d20: 66 61 75 6c 74 4c 65 67 65 6e 64 20 20 24 77 0a faultLegend $w.
6d30: 20 20 20 44 65 66 61 75 6c 74 42 61 6c 6c 6f 6f DefaultBalloo
6d40: 6e 20 24 77 0a 0a 20 20 20 72 65 74 75 72 6e 20 n $w.. return
6d50: 24 6e 65 77 63 68 61 72 74 0a 7d 0a 0a 23 20 63 $newchart.}..# c
6d60: 72 65 61 74 65 58 4c 6f 67 59 50 6c 6f 74 20 2d reateXLogYPlot -
6d70: 2d 0a 23 20 20 20 20 43 72 65 61 74 65 20 61 20 -.# Create a
6d80: 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 61 77 command for draw
6d90: 69 6e 67 20 61 6e 20 58 59 20 70 6c 6f 74 20 28 ing an XY plot (
6da0: 77 69 74 68 20 61 20 76 65 72 74 69 63 61 6c 20 with a vertical
6db0: 6c 6f 67 61 72 69 74 68 6d 69 63 20 61 78 69 73 logarithmic axis
6dc0: 29 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 ).# Arguments:.#
6dd0: 20 20 20 20 77 20 20 20 20 20 20 20 20 20 20 20 w
6de0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 61 6e 76 Name of the canv
6df0: 61 73 0a 23 20 20 20 20 78 73 63 61 6c 65 20 20 as.# xscale
6e00: 20 20 20 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 Minimum, max
6e10: 69 6d 75 6d 20 61 6e 64 20 73 74 65 70 20 66 6f imum and step fo
6e20: 72 20 78 2d 61 78 69 73 20 28 69 6e 69 74 69 61 r x-axis (initia
6e30: 6c 29 0a 23 20 20 20 20 79 73 63 61 6c 65 20 20 l).# yscale
6e40: 20 20 20 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 Minimum, max
6e50: 69 6d 75 6d 20 61 6e 64 20 73 74 65 70 20 66 6f imum and step fo
6e60: 72 20 79 2d 61 78 69 73 20 28 73 74 65 70 20 69 r y-axis (step i
6e70: 73 20 69 67 6e 6f 72 65 64 21 29 0a 23 20 52 65 s ignored!).# Re
6e80: 73 75 6c 74 3a 0a 23 20 20 20 20 4e 61 6d 65 20 sult:.# Name
6e90: 6f 66 20 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 of a new command
6ea0: 0a 23 20 4e 6f 74 65 3a 0a 23 20 20 20 20 54 68 .# Note:.# Th
6eb0: 65 20 65 6e 74 69 72 65 20 63 61 6e 76 61 73 20 e entire canvas
6ec0: 77 69 6c 6c 20 62 65 20 64 65 64 69 63 61 74 65 will be dedicate
6ed0: 64 20 74 6f 20 74 68 65 20 58 59 20 70 6c 6f 74 d to the XY plot
6ee0: 2e 0a 23 20 20 20 20 54 68 65 20 70 6c 6f 74 20 ..# The plot
6ef0: 77 69 6c 6c 20 62 65 20 64 72 61 77 6e 20 77 69 will be drawn wi
6f00: 74 68 20 61 78 65 73 0a 23 0a 70 72 6f 63 20 3a th axes.#.proc :
6f10: 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 65 61 :Plotchart::crea
6f20: 74 65 58 4c 6f 67 59 50 6c 6f 74 20 7b 20 77 20 teXLogYPlot { w
6f30: 78 73 63 61 6c 65 20 79 73 63 61 6c 65 20 7d 20 xscale yscale }
6f40: 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 {. variable da
6f50: 74 61 5f 73 65 72 69 65 73 0a 0a 20 20 20 66 6f ta_series.. fo
6f60: 72 65 61 63 68 20 73 20 5b 61 72 72 61 79 20 6e reach s [array n
6f70: 61 6d 65 73 20 64 61 74 61 5f 73 65 72 69 65 73 ames data_series
6f80: 20 22 24 77 2c 2a 22 5d 20 7b 0a 20 20 20 20 20 "$w,*"] {.
6f90: 20 75 6e 73 65 74 20 64 61 74 61 5f 73 65 72 69 unset data_seri
6fa0: 65 73 28 24 73 29 0a 20 20 20 7d 0a 0a 20 20 20 es($s). }..
6fb0: 73 65 74 20 6e 65 77 63 68 61 72 74 20 22 78 6c set newchart "xl
6fc0: 6f 67 79 70 6c 6f 74 5f 24 77 22 0a 20 20 20 69 ogyplot_$w". i
6fd0: 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 24 nterp alias {} $
6fe0: 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a 3a 50 6c newchart {} ::Pl
6ff0: 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 48 61 6e otchart::PlotHan
7000: 64 6c 65 72 20 78 6c 6f 67 79 70 6c 6f 74 20 24 dler xlogyplot $
7010: 77 0a 20 20 20 43 6f 70 79 43 6f 6e 66 69 67 20 w. CopyConfig
7020: 78 6c 6f 67 79 70 6c 6f 74 20 24 77 0a 0a 20 20 xlogyplot $w..
7030: 20 66 6f 72 65 61 63 68 20 7b 70 78 6d 69 6e 20 foreach {pxmin
7040: 70 79 6d 69 6e 20 70 78 6d 61 78 20 70 79 6d 61 pymin pxmax pyma
7050: 78 7d 20 5b 4d 61 72 67 69 6e 73 52 65 63 74 61 x} [MarginsRecta
7060: 6e 67 6c 65 20 24 77 5d 20 7b 62 72 65 61 6b 7d ngle $w] {break}
7070: 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 7b 78 6d .. foreach {xm
7080: 69 6e 20 78 6d 61 78 20 78 64 65 6c 74 7d 20 24 in xmax xdelt} $
7090: 78 73 63 61 6c 65 20 7b 62 72 65 61 6b 7d 0a 20 xscale {break}.
70a0: 20 20 66 6f 72 65 61 63 68 20 7b 79 6d 69 6e 20 foreach {ymin
70b0: 79 6d 61 78 20 79 64 65 6c 74 7d 20 24 79 73 63 ymax ydelt} $ysc
70c0: 61 6c 65 20 7b 62 72 65 61 6b 7d 0a 0a 20 20 20 ale {break}..
70d0: 69 66 20 7b 20 24 78 64 65 6c 74 20 3d 3d 20 30 if { $xdelt == 0
70e0: 2e 30 20 7c 7c 20 24 79 64 65 6c 74 20 3d 3d 20 .0 || $ydelt ==
70f0: 30 2e 30 20 7d 20 7b 0a 20 20 20 20 20 20 72 65 0.0 } {. re
7100: 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72 turn -code error
7110: 20 22 53 74 65 70 20 73 69 7a 65 20 63 61 6e 20 "Step size can
7120: 6e 6f 74 20 62 65 20 7a 65 72 6f 22 0a 20 20 20 not be zero".
7130: 7d 0a 0a 20 20 20 69 66 20 7b 20 24 79 6d 69 6e }.. if { $ymin
7140: 20 3c 3d 20 30 2e 30 20 7c 7c 20 24 79 6d 61 78 <= 0.0 || $ymax
7150: 20 3c 3d 20 30 2e 30 20 7d 20 7b 0a 20 20 20 20 <= 0.0 } {.
7160: 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 return -code e
7170: 72 72 6f 72 20 22 4d 69 6e 69 6d 75 6d 20 61 6e rror "Minimum an
7180: 64 20 6d 61 78 69 6d 75 6d 20 66 6f 72 20 79 2d d maximum for y-
7190: 61 78 69 73 20 6d 75 73 74 20 62 65 20 70 6f 73 axis must be pos
71a0: 69 74 69 76 65 22 0a 20 20 20 7d 0a 0a 20 20 20 itive". }..
71b0: 23 0a 20 20 20 23 20 54 4f 44 4f 3a 20 72 65 76 #. # TODO: rev
71c0: 65 72 73 65 64 20 6c 6f 67 20 70 6c 6f 74 0a 20 ersed log plot.
71d0: 20 20 23 0a 0a 20 20 20 76 69 65 77 50 6f 72 74 #.. viewPort
71e0: 20 20 20 20 20 20 20 20 20 24 77 20 24 70 78 6d $w $pxm
71f0: 69 6e 20 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 in $pymin $pxmax
7200: 20 24 70 79 6d 61 78 0a 20 20 20 77 6f 72 6c 64 $pymax. world
7210: 43 6f 6f 72 64 69 6e 61 74 65 73 20 24 77 20 24 Coordinates $w $
7220: 78 6d 69 6e 20 20 5b 65 78 70 72 20 7b 6c 6f 67 xmin [expr {log
7230: 31 30 28 24 79 6d 69 6e 29 7d 5d 20 20 24 78 6d 10($ymin)}] $xm
7240: 61 78 20 5b 65 78 70 72 20 7b 6c 6f 67 31 30 28 ax [expr {log10(
7250: 24 79 6d 61 78 29 7d 5d 0a 0a 20 20 20 44 72 61 $ymax)}].. Dra
7260: 77 4c 6f 67 59 61 78 69 73 20 20 20 20 20 24 77 wLogYaxis $w
7270: 20 24 79 6d 69 6e 20 20 24 79 6d 61 78 20 20 24 $ymin $ymax $
7280: 79 64 65 6c 74 0a 20 20 20 44 72 61 77 58 61 78 ydelt. DrawXax
7290: 69 73 20 20 20 20 20 20 20 20 24 77 20 24 78 6d is $w $xm
72a0: 69 6e 20 20 24 78 6d 61 78 20 20 24 78 64 65 6c in $xmax $xdel
72b0: 74 0a 20 20 20 44 72 61 77 4d 61 73 6b 20 20 20 t. DrawMask
72c0: 20 20 20 20 20 20 24 77 0a 20 20 20 44 65 66 61 $w. Defa
72d0: 75 6c 74 4c 65 67 65 6e 64 20 20 20 20 24 77 0a ultLegend $w.
72e0: 20 20 20 44 65 66 61 75 6c 74 42 61 6c 6c 6f 6f DefaultBalloo
72f0: 6e 20 20 20 24 77 0a 0a 20 20 20 72 65 74 75 72 n $w.. retur
7300: 6e 20 24 6e 65 77 63 68 61 72 74 0a 7d 0a 0a 23 n $newchart.}..#
7310: 20 63 72 65 61 74 65 48 69 73 74 6f 67 72 61 6d createHistogram
7320: 20 2d 2d 0a 23 20 20 20 20 43 72 65 61 74 65 20 --.# Create
7330: 61 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 a command for dr
7340: 61 77 69 6e 67 20 61 20 68 69 73 74 6f 67 72 61 awing a histogra
7350: 6d 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 m.# Arguments:.#
7360: 20 20 20 20 77 20 20 20 20 20 20 20 20 20 20 20 w
7370: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 61 6e 76 Name of the canv
7380: 61 73 0a 23 20 20 20 20 78 73 63 61 6c 65 20 20 as.# xscale
7390: 20 20 20 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 Minimum, max
73a0: 69 6d 75 6d 20 61 6e 64 20 73 74 65 70 20 66 6f imum and step fo
73b0: 72 20 78 2d 61 78 69 73 20 28 69 6e 69 74 69 61 r x-axis (initia
73c0: 6c 29 0a 23 20 20 20 20 79 73 63 61 6c 65 20 20 l).# yscale
73d0: 20 20 20 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 Minimum, max
73e0: 69 6d 75 6d 20 61 6e 64 20 73 74 65 70 20 66 6f imum and step fo
73f0: 72 20 79 2d 61 78 69 73 0a 23 20 52 65 73 75 6c r y-axis.# Resul
7400: 74 3a 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 20 t:.# Name of
7410: 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0a 23 20 a new command.#
7420: 4e 6f 74 65 3a 0a 23 20 20 20 20 54 68 65 20 65 Note:.# The e
7430: 6e 74 69 72 65 20 63 61 6e 76 61 73 20 77 69 6c ntire canvas wil
7440: 6c 20 62 65 20 64 65 64 69 63 61 74 65 64 20 74 l be dedicated t
7450: 6f 20 74 68 65 20 68 69 73 74 6f 67 72 61 6d 2e o the histogram.
7460: 0a 23 20 20 20 20 54 68 65 20 70 6c 6f 74 20 77 .# The plot w
7470: 69 6c 6c 20 62 65 20 64 72 61 77 6e 20 77 69 74 ill be drawn wit
7480: 68 20 61 78 65 73 0a 23 20 20 20 20 54 68 69 73 h axes.# This
7490: 20 69 73 20 61 6c 6d 6f 73 74 20 74 68 65 20 73 is almost the s
74a0: 61 6d 65 20 63 6f 64 65 20 61 73 20 66 6f 72 20 ame code as for
74b0: 61 6e 20 58 59 20 70 6c 6f 74 0a 23 0a 70 72 6f an XY plot.#.pro
74c0: 63 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 63 c ::Plotchart::c
74d0: 72 65 61 74 65 48 69 73 74 6f 67 72 61 6d 20 7b reateHistogram {
74e0: 20 77 20 78 73 63 61 6c 65 20 79 73 63 61 6c 65 w xscale yscale
74f0: 20 7d 20 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 } {. variable
7500: 20 64 61 74 61 5f 73 65 72 69 65 73 0a 0a 20 20 data_series..
7510: 20 66 6f 72 65 61 63 68 20 73 20 5b 61 72 72 61 foreach s [arra
7520: 79 20 6e 61 6d 65 73 20 64 61 74 61 5f 73 65 72 y names data_ser
7530: 69 65 73 20 22 24 77 2c 2a 22 5d 20 7b 0a 20 20 ies "$w,*"] {.
7540: 20 20 20 20 75 6e 73 65 74 20 64 61 74 61 5f 73 unset data_s
7550: 65 72 69 65 73 28 24 73 29 0a 20 20 20 7d 0a 0a eries($s). }..
7560: 20 20 20 73 65 74 20 6e 65 77 63 68 61 72 74 20 set newchart
7570: 22 68 69 73 74 6f 67 72 61 6d 5f 24 77 22 0a 20 "histogram_$w".
7580: 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b interp alias {
7590: 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a } $newchart {} :
75a0: 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 :Plotchart::Plot
75b0: 48 61 6e 64 6c 65 72 20 68 69 73 74 6f 67 72 61 Handler histogra
75c0: 6d 20 24 77 0a 20 20 20 43 6f 70 79 43 6f 6e 66 m $w. CopyConf
75d0: 69 67 20 68 69 73 74 6f 67 72 61 6d 20 24 77 0a ig histogram $w.
75e0: 0a 20 20 20 66 6f 72 65 61 63 68 20 7b 70 78 6d . foreach {pxm
75f0: 69 6e 20 70 79 6d 69 6e 20 70 78 6d 61 78 20 70 in pymin pxmax p
7600: 79 6d 61 78 7d 20 5b 4d 61 72 67 69 6e 73 52 65 ymax} [MarginsRe
7610: 63 74 61 6e 67 6c 65 20 24 77 5d 20 7b 62 72 65 ctangle $w] {bre
7620: 61 6b 7d 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 ak}.. foreach
7630: 7b 78 6d 69 6e 20 78 6d 61 78 20 78 64 65 6c 74 {xmin xmax xdelt
7640: 7d 20 24 78 73 63 61 6c 65 20 7b 62 72 65 61 6b } $xscale {break
7650: 7d 0a 20 20 20 66 6f 72 65 61 63 68 20 7b 79 6d }. foreach {ym
7660: 69 6e 20 79 6d 61 78 20 79 64 65 6c 74 7d 20 24 in ymax ydelt} $
7670: 79 73 63 61 6c 65 20 7b 62 72 65 61 6b 7d 0a 0a yscale {break}..
7680: 20 20 20 69 66 20 7b 20 24 78 64 65 6c 74 20 3d if { $xdelt =
7690: 3d 20 30 2e 30 20 7c 7c 20 24 79 64 65 6c 74 20 = 0.0 || $ydelt
76a0: 3d 3d 20 30 2e 30 20 7d 20 7b 0a 20 20 20 20 20 == 0.0 } {.
76b0: 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 return -code er
76c0: 72 6f 72 20 22 53 74 65 70 20 73 69 7a 65 20 63 ror "Step size c
76d0: 61 6e 20 6e 6f 74 20 62 65 20 7a 65 72 6f 22 0a an not be zero".
76e0: 20 20 20 7d 0a 0a 20 20 20 69 66 20 7b 20 28 24 }.. if { ($
76f0: 78 6d 61 78 2d 24 78 6d 69 6e 29 2a 24 78 64 65 xmax-$xmin)*$xde
7700: 6c 74 20 3c 20 30 2e 30 20 7d 20 7b 0a 20 20 20 lt < 0.0 } {.
7710: 20 20 20 73 65 74 20 78 64 65 6c 74 20 5b 65 78 set xdelt [ex
7720: 70 72 20 7b 2d 24 78 64 65 6c 74 7d 5d 0a 20 20 pr {-$xdelt}].
7730: 20 7d 0a 20 20 20 69 66 20 7b 20 28 24 79 6d 61 }. if { ($yma
7740: 78 2d 24 79 6d 69 6e 29 2a 24 79 64 65 6c 74 20 x-$ymin)*$ydelt
7750: 3c 20 30 2e 30 20 7d 20 7b 0a 20 20 20 20 20 20 < 0.0 } {.
7760: 73 65 74 20 79 64 65 6c 74 20 5b 65 78 70 72 20 set ydelt [expr
7770: 7b 2d 24 79 64 65 6c 74 7d 5d 0a 20 20 20 7d 0a {-$ydelt}]. }.
7780: 0a 20 20 20 76 69 65 77 50 6f 72 74 20 20 20 20 . viewPort
7790: 20 20 20 20 20 24 77 20 24 70 78 6d 69 6e 20 24 $w $pxmin $
77a0: 70 79 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 79 pymin $pxmax $py
77b0: 6d 61 78 0a 20 20 20 77 6f 72 6c 64 43 6f 6f 72 max. worldCoor
77c0: 64 69 6e 61 74 65 73 20 24 77 20 24 78 6d 69 6e dinates $w $xmin
77d0: 20 20 24 79 6d 69 6e 20 20 24 78 6d 61 78 20 20 $ymin $xmax
77e0: 24 79 6d 61 78 0a 0a 20 20 20 44 72 61 77 59 61 $ymax.. DrawYa
77f0: 78 69 73 20 20 20 20 20 20 20 20 24 77 20 24 79 xis $w $y
7800: 6d 69 6e 20 20 24 79 6d 61 78 20 20 24 79 64 65 min $ymax $yde
7810: 6c 74 0a 20 20 20 44 72 61 77 58 61 78 69 73 20 lt. DrawXaxis
7820: 20 20 20 20 20 20 20 24 77 20 24 78 6d 69 6e 20 $w $xmin
7830: 20 24 78 6d 61 78 20 20 24 78 64 65 6c 74 0a 20 $xmax $xdelt.
7840: 20 20 44 72 61 77 4d 61 73 6b 20 20 20 20 20 20 DrawMask
7850: 20 20 20 24 77 0a 20 20 20 44 65 66 61 75 6c 74 $w. Default
7860: 4c 65 67 65 6e 64 20 20 20 20 24 77 0a 20 20 20 Legend $w.
7870: 44 65 66 61 75 6c 74 42 61 6c 6c 6f 6f 6e 20 20 DefaultBalloon
7880: 20 24 77 0a 0a 20 20 20 72 65 74 75 72 6e 20 24 $w.. return $
7890: 6e 65 77 63 68 61 72 74 0a 7d 0a 0a 23 20 63 72 newchart.}..# cr
78a0: 65 61 74 65 50 69 65 63 68 61 72 74 20 2d 2d 0a eatePiechart --.
78b0: 23 20 20 20 20 43 72 65 61 74 65 20 61 20 63 6f # Create a co
78c0: 6d 6d 61 6e 64 20 66 6f 72 20 64 72 61 77 69 6e mmand for drawin
78d0: 67 20 61 20 70 69 65 20 63 68 61 72 74 0a 23 20 g a pie chart.#
78e0: 41 72 67 75 6d 65 6e 74 73 3a 0a 23 20 20 20 20 Arguments:.#
78f0: 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 w Name
7900: 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 0a 23 of the canvas.#
7910: 20 52 65 73 75 6c 74 3a 0a 23 20 20 20 20 4e 61 Result:.# Na
7920: 6d 65 20 6f 66 20 61 20 6e 65 77 20 63 6f 6d 6d me of a new comm
7930: 61 6e 64 0a 23 20 4e 6f 74 65 3a 0a 23 20 20 20 and.# Note:.#
7940: 20 54 68 65 20 65 6e 74 69 72 65 20 63 61 6e 76 The entire canv
7950: 61 73 20 77 69 6c 6c 20 62 65 20 64 65 64 69 63 as will be dedic
7960: 61 74 65 64 20 74 6f 20 74 68 65 20 70 69 65 20 ated to the pie
7970: 63 68 61 72 74 2e 0a 23 0a 70 72 6f 63 20 3a 3a chart..#.proc ::
7980: 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 65 61 74 Plotchart::creat
7990: 65 50 69 65 63 68 61 72 74 20 7b 20 77 20 7d 20 ePiechart { w }
79a0: 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 {. variable da
79b0: 74 61 5f 73 65 72 69 65 73 0a 0a 20 20 20 66 6f ta_series.. fo
79c0: 72 65 61 63 68 20 73 20 5b 61 72 72 61 79 20 6e reach s [array n
79d0: 61 6d 65 73 20 64 61 74 61 5f 73 65 72 69 65 73 ames data_series
79e0: 20 22 24 77 2c 2a 22 5d 20 7b 0a 20 20 20 20 20 "$w,*"] {.
79f0: 20 75 6e 73 65 74 20 64 61 74 61 5f 73 65 72 69 unset data_seri
7a00: 65 73 28 24 73 29 0a 20 20 20 7d 0a 0a 20 20 20 es($s). }..
7a10: 73 65 74 20 6e 65 77 63 68 61 72 74 20 22 70 69 set newchart "pi
7a20: 65 63 68 61 72 74 5f 24 77 22 0a 20 20 20 69 6e echart_$w". in
7a30: 74 65 72 70 20 61 6c 69 61 73 20 7b 7d 20 24 6e terp alias {} $n
7a40: 65 77 63 68 61 72 74 20 7b 7d 20 3a 3a 50 6c 6f ewchart {} ::Plo
7a50: 74 63 68 61 72 74 3a 3a 50 6c 6f 74 48 61 6e 64 tchart::PlotHand
7a60: 6c 65 72 20 70 69 65 63 68 61 72 74 20 24 77 0a ler piechart $w.
7a70: 20 20 20 43 6f 70 79 43 6f 6e 66 69 67 20 70 69 CopyConfig pi
7a80: 65 63 68 61 72 74 20 24 77 0a 0a 20 20 20 66 6f echart $w.. fo
7a90: 72 65 61 63 68 20 7b 70 78 6d 69 6e 20 70 79 6d reach {pxmin pym
7aa0: 69 6e 20 70 78 6d 61 78 20 70 79 6d 61 78 7d 20 in pxmax pymax}
7ab0: 5b 4d 61 72 67 69 6e 73 43 69 72 63 6c 65 20 24 [MarginsCircle $
7ac0: 77 5d 20 7b 62 72 65 61 6b 7d 0a 0a 20 20 20 76 w] {break}.. v
7ad0: 69 65 77 50 6f 72 74 20 24 77 20 24 70 78 6d 69 iewPort $w $pxmi
7ae0: 6e 20 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 20 n $pymin $pxmax
7af0: 24 70 79 6d 61 78 0a 20 20 20 24 77 20 63 72 65 $pymax. $w cre
7b00: 61 74 65 20 6f 76 61 6c 20 24 70 78 6d 69 6e 20 ate oval $pxmin
7b10: 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 $pymin $pxmax $p
7b20: 79 6d 61 78 0a 0a 20 20 20 53 65 74 43 6f 6c 6f ymax.. SetColo
7b30: 75 72 73 20 24 77 20 62 6c 75 65 20 6c 69 67 68 urs $w blue ligh
7b40: 74 62 6c 75 65 20 67 72 65 65 6e 20 79 65 6c 6c tblue green yell
7b50: 6f 77 20 6f 72 61 6e 67 65 20 72 65 64 20 6d 61 ow orange red ma
7b60: 67 65 6e 74 61 20 62 72 6f 77 6e 0a 20 20 20 44 genta brown. D
7b70: 65 66 61 75 6c 74 4c 65 67 65 6e 64 20 20 24 77 efaultLegend $w
7b80: 0a 20 20 20 44 65 66 61 75 6c 74 42 61 6c 6c 6f . DefaultBallo
7b90: 6f 6e 20 24 77 0a 0a 20 20 20 72 65 74 75 72 6e on $w.. return
7ba0: 20 24 6e 65 77 63 68 61 72 74 0a 7d 0a 0a 23 20 $newchart.}..#
7bb0: 63 72 65 61 74 65 50 6f 6c 61 72 70 6c 6f 74 20 createPolarplot
7bc0: 2d 2d 0a 23 20 20 20 20 43 72 65 61 74 65 20 61 --.# Create a
7bd0: 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 61 command for dra
7be0: 77 69 6e 67 20 61 20 70 6f 6c 61 72 20 70 6c 6f wing a polar plo
7bf0: 74 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 t.# Arguments:.#
7c00: 20 20 20 20 77 20 20 20 20 20 20 20 20 20 20 20 w
7c10: 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 61 Name of the ca
7c20: 6e 76 61 73 0a 23 20 20 20 20 72 61 64 69 75 73 nvas.# radius
7c30: 5f 64 61 74 61 20 20 20 4d 61 78 69 6d 75 6d 20 _data Maximum
7c40: 72 61 64 69 75 73 20 61 6e 64 20 73 74 65 70 0a radius and step.
7c50: 23 20 52 65 73 75 6c 74 3a 0a 23 20 20 20 20 4e # Result:.# N
7c60: 61 6d 65 20 6f 66 20 61 20 6e 65 77 20 63 6f 6d ame of a new com
7c70: 6d 61 6e 64 0a 23 20 4e 6f 74 65 3a 0a 23 20 20 mand.# Note:.#
7c80: 20 20 54 68 65 20 65 6e 74 69 72 65 20 63 61 6e The entire can
7c90: 76 61 73 20 77 69 6c 6c 20 62 65 20 64 65 64 69 vas will be dedi
7ca0: 63 61 74 65 64 20 74 6f 20 74 68 65 20 70 6f 6c cated to the pol
7cb0: 61 72 20 70 6c 6f 74 0a 23 20 20 20 20 50 6f 73 ar plot.# Pos
7cc0: 73 69 62 6c 65 20 61 64 64 69 74 69 6f 6e 61 6c sible additional
7cd0: 20 61 72 67 75 6d 65 6e 74 73 20 28 6f 70 74 69 arguments (opti
7ce0: 6f 6e 61 6c 29 3a 20 6e 61 75 74 69 63 61 6c 2f onal): nautical/
7cf0: 6d 61 74 68 65 6d 61 74 69 63 61 6c 0a 23 20 20 mathematical.#
7d00: 20 20 73 74 65 70 20 69 6e 20 70 68 69 0a 23 0a step in phi.#.
7d10: 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 74 proc ::Plotchart
7d20: 3a 3a 63 72 65 61 74 65 50 6f 6c 61 72 70 6c 6f ::createPolarplo
7d30: 74 20 7b 20 77 20 72 61 64 69 75 73 5f 64 61 74 t { w radius_dat
7d40: 61 20 7d 20 7b 0a 20 20 20 76 61 72 69 61 62 6c a } {. variabl
7d50: 65 20 64 61 74 61 5f 73 65 72 69 65 73 0a 0a 20 e data_series..
7d60: 20 20 66 6f 72 65 61 63 68 20 73 20 5b 61 72 72 foreach s [arr
7d70: 61 79 20 6e 61 6d 65 73 20 64 61 74 61 5f 73 65 ay names data_se
7d80: 72 69 65 73 20 22 24 77 2c 2a 22 5d 20 7b 0a 20 ries "$w,*"] {.
7d90: 20 20 20 20 20 75 6e 73 65 74 20 64 61 74 61 5f unset data_
7da0: 73 65 72 69 65 73 28 24 73 29 0a 20 20 20 7d 0a series($s). }.
7db0: 0a 20 20 20 73 65 74 20 6e 65 77 63 68 61 72 74 . set newchart
7dc0: 20 22 70 6f 6c 61 72 70 6c 6f 74 5f 24 77 22 0a "polarplot_$w".
7dd0: 20 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 interp alias
7de0: 7b 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 {} $newchart {}
7df0: 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f ::Plotchart::Plo
7e00: 74 48 61 6e 64 6c 65 72 20 70 6f 6c 61 72 70 6c tHandler polarpl
7e10: 6f 74 20 24 77 0a 20 20 20 43 6f 70 79 43 6f 6e ot $w. CopyCon
7e20: 66 69 67 20 70 6f 6c 61 72 70 6c 6f 74 20 24 77 fig polarplot $w
7e30: 0a 0a 20 20 20 73 65 74 20 72 61 64 5f 6d 61 78 .. set rad_max
7e40: 20 20 20 5b 6c 69 6e 64 65 78 20 24 72 61 64 69 [lindex $radi
7e50: 75 73 5f 64 61 74 61 20 30 5d 0a 20 20 20 73 65 us_data 0]. se
7e60: 74 20 72 61 64 5f 73 74 65 70 20 20 5b 6c 69 6e t rad_step [lin
7e70: 64 65 78 20 24 72 61 64 69 75 73 5f 64 61 74 61 dex $radius_data
7e80: 20 31 5d 0a 0a 20 20 20 69 66 20 7b 20 24 72 61 1].. if { $ra
7e90: 64 5f 73 74 65 70 20 3c 3d 20 30 2e 30 20 7d 20 d_step <= 0.0 }
7ea0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d {. return -
7eb0: 63 6f 64 65 20 65 72 72 6f 72 20 22 53 74 65 70 code error "Step
7ec0: 20 73 69 7a 65 20 63 61 6e 20 6e 6f 74 20 62 65 size can not be
7ed0: 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 zero or negativ
7ee0: 65 22 0a 20 20 20 7d 0a 20 20 20 69 66 20 7b 20 e". }. if {
7ef0: 24 72 61 64 5f 6d 61 78 20 3c 3d 20 30 2e 30 20 $rad_max <= 0.0
7f00: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e } {. return
7f10: 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 4d 61 -code error "Ma
7f20: 78 69 6d 75 6d 20 72 61 64 69 75 73 20 63 61 6e ximum radius can
7f30: 20 6e 6f 74 20 62 65 20 7a 65 72 6f 20 6f 72 20 not be zero or
7f40: 6e 65 67 61 74 69 76 65 22 0a 20 20 20 7d 0a 0a negative". }..
7f50: 20 20 20 66 6f 72 65 61 63 68 20 7b 70 78 6d 69 foreach {pxmi
7f60: 6e 20 70 79 6d 69 6e 20 70 78 6d 61 78 20 70 79 n pymin pxmax py
7f70: 6d 61 78 7d 20 5b 4d 61 72 67 69 6e 73 43 69 72 max} [MarginsCir
7f80: 63 6c 65 20 24 77 5d 20 7b 62 72 65 61 6b 7d 0a cle $w] {break}.
7f90: 0a 20 20 20 76 69 65 77 50 6f 72 74 20 20 20 20 . viewPort
7fa0: 20 20 20 20 20 24 77 20 24 70 78 6d 69 6e 20 20 $w $pxmin
7fb0: 20 20 20 24 70 79 6d 69 6e 20 20 20 20 20 24 70 $pymin $p
7fc0: 78 6d 61 78 20 20 20 24 70 79 6d 61 78 0a 20 20 xmax $pymax.
7fd0: 20 70 6f 6c 61 72 43 6f 6f 72 64 69 6e 61 74 65 polarCoordinate
7fe0: 73 20 24 77 20 24 72 61 64 5f 6d 61 78 0a 20 20 s $w $rad_max.
7ff0: 20 44 72 61 77 50 6f 6c 61 72 41 78 65 73 20 20 DrawPolarAxes
8000: 20 20 24 77 20 24 72 61 64 5f 6d 61 78 20 20 20 $w $rad_max
8010: 24 72 61 64 5f 73 74 65 70 0a 20 20 20 44 65 66 $rad_step. Def
8020: 61 75 6c 74 4c 65 67 65 6e 64 20 20 20 20 24 77 aultLegend $w
8030: 0a 20 20 20 44 65 66 61 75 6c 74 42 61 6c 6c 6f . DefaultBallo
8040: 6f 6e 20 20 20 24 77 0a 0a 20 20 20 72 65 74 75 on $w.. retu
8050: 72 6e 20 24 6e 65 77 63 68 61 72 74 0a 7d 0a 0a rn $newchart.}..
8060: 23 20 63 72 65 61 74 65 42 61 72 63 68 61 72 74 # createBarchart
8070: 20 2d 2d 0a 23 20 20 20 20 43 72 65 61 74 65 20 --.# Create
8080: 61 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 a command for dr
8090: 61 77 69 6e 67 20 61 20 62 61 72 63 68 61 72 74 awing a barchart
80a0: 20 77 69 74 68 20 76 65 72 74 69 63 61 6c 20 62 with vertical b
80b0: 61 72 73 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a ars.# Arguments:
80c0: 0a 23 20 20 20 20 77 20 20 20 20 20 20 20 20 20 .# w
80d0: 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 61 Name of the ca
80e0: 6e 76 61 73 0a 23 20 20 20 20 78 6c 61 62 65 6c nvas.# xlabel
80f0: 73 20 20 20 20 20 4c 69 73 74 20 6f 66 20 6c 61 s List of la
8100: 62 65 6c 73 20 66 6f 72 20 78 2d 61 78 69 73 0a bels for x-axis.
8110: 23 20 20 20 20 79 73 63 61 6c 65 20 20 20 20 20 # yscale
8120: 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 Minimum, maximu
8130: 6d 20 61 6e 64 20 73 74 65 70 20 66 6f 72 20 79 m and step for y
8140: 2d 61 78 69 73 0a 23 20 20 20 20 6e 6f 73 65 72 -axis.# noser
8150: 69 65 73 20 20 20 20 4e 75 6d 62 65 72 20 6f 66 ies Number of
8160: 20 73 65 72 69 65 73 20 6f 72 20 74 68 65 20 6b series or the k
8170: 65 79 77 6f 72 64 20 22 73 74 61 63 6b 65 64 22 eyword "stacked"
8180: 0a 23 20 52 65 73 75 6c 74 3a 0a 23 20 20 20 20 .# Result:.#
8190: 4e 61 6d 65 20 6f 66 20 61 20 6e 65 77 20 63 6f Name of a new co
81a0: 6d 6d 61 6e 64 0a 23 20 4e 6f 74 65 3a 0a 23 20 mmand.# Note:.#
81b0: 20 20 20 54 68 65 20 65 6e 74 69 72 65 20 63 61 The entire ca
81c0: 6e 76 61 73 20 77 69 6c 6c 20 62 65 20 64 65 64 nvas will be ded
81d0: 69 63 61 74 65 64 20 74 6f 20 74 68 65 20 62 61 icated to the ba
81e0: 72 63 68 61 72 74 2e 0a 23 0a 70 72 6f 63 20 3a rchart..#.proc :
81f0: 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 65 61 :Plotchart::crea
8200: 74 65 42 61 72 63 68 61 72 74 20 7b 20 77 20 78 teBarchart { w x
8210: 6c 61 62 65 6c 73 20 79 73 63 61 6c 65 20 6e 6f labels yscale no
8220: 73 65 72 69 65 73 20 7d 20 7b 0a 20 20 20 76 61 series } {. va
8230: 72 69 61 62 6c 65 20 64 61 74 61 5f 73 65 72 69 riable data_seri
8240: 65 73 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 73 es.. foreach s
8250: 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 64 61 [array names da
8260: 74 61 5f 73 65 72 69 65 73 20 22 24 77 2c 2a 22 ta_series "$w,*"
8270: 5d 20 7b 0a 20 20 20 20 20 20 75 6e 73 65 74 20 ] {. unset
8280: 64 61 74 61 5f 73 65 72 69 65 73 28 24 73 29 0a data_series($s).
8290: 20 20 20 7d 0a 0a 20 20 20 73 65 74 20 6e 65 77 }.. set new
82a0: 63 68 61 72 74 20 22 62 61 72 63 68 61 72 74 5f chart "barchart_
82b0: 24 77 22 0a 20 20 20 69 6e 74 65 72 70 20 61 6c $w". interp al
82c0: 69 61 73 20 7b 7d 20 24 6e 65 77 63 68 61 72 74 ias {} $newchart
82d0: 20 7b 7d 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a {} ::Plotchart:
82e0: 3a 50 6c 6f 74 48 61 6e 64 6c 65 72 20 76 65 72 :PlotHandler ver
82f0: 74 62 61 72 73 20 24 77 0a 20 20 20 43 6f 70 79 tbars $w. Copy
8300: 43 6f 6e 66 69 67 20 76 65 72 74 62 61 72 73 20 Config vertbars
8310: 24 77 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 7b $w.. foreach {
8320: 70 78 6d 69 6e 20 70 79 6d 69 6e 20 70 78 6d 61 pxmin pymin pxma
8330: 78 20 70 79 6d 61 78 7d 20 5b 4d 61 72 67 69 6e x pymax} [Margin
8340: 73 52 65 63 74 61 6e 67 6c 65 20 24 77 5d 20 7b sRectangle $w] {
8350: 62 72 65 61 6b 7d 0a 0a 20 20 20 73 65 74 20 78 break}.. set x
8360: 6d 69 6e 20 20 30 2e 30 0a 20 20 20 73 65 74 20 min 0.0. set
8370: 78 6d 61 78 20 20 5b 65 78 70 72 20 7b 5b 6c 6c xmax [expr {[ll
8380: 65 6e 67 74 68 20 24 78 6c 61 62 65 6c 73 5d 20 ength $xlabels]
8390: 2b 20 30 2e 31 7d 5d 0a 0a 20 20 20 66 6f 72 65 + 0.1}].. fore
83a0: 61 63 68 20 7b 79 6d 69 6e 20 79 6d 61 78 20 79 ach {ymin ymax y
83b0: 64 65 6c 74 7d 20 24 79 73 63 61 6c 65 20 7b 62 delt} $yscale {b
83c0: 72 65 61 6b 7d 0a 0a 20 20 20 69 66 20 7b 20 24 reak}.. if { $
83d0: 79 64 65 6c 74 20 3d 3d 20 30 2e 30 20 7d 20 7b ydelt == 0.0 } {
83e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 . return -c
83f0: 6f 64 65 20 65 72 72 6f 72 20 22 53 74 65 70 20 ode error "Step
8400: 73 69 7a 65 20 63 61 6e 20 6e 6f 74 20 62 65 20 size can not be
8410: 7a 65 72 6f 22 0a 20 20 20 7d 0a 0a 20 20 20 69 zero". }.. i
8420: 66 20 7b 20 28 24 79 6d 61 78 2d 24 79 6d 69 6e f { ($ymax-$ymin
8430: 29 2a 24 79 64 65 6c 74 20 3c 20 30 2e 30 20 7d )*$ydelt < 0.0 }
8440: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 79 64 65 {. set yde
8450: 6c 74 20 5b 65 78 70 72 20 7b 2d 24 79 64 65 6c lt [expr {-$ydel
8460: 74 7d 5d 0a 20 20 20 7d 0a 0a 20 20 20 76 69 65 t}]. }.. vie
8470: 77 50 6f 72 74 20 20 20 20 20 20 20 20 20 24 77 wPort $w
8480: 20 24 70 78 6d 69 6e 20 24 70 79 6d 69 6e 20 24 $pxmin $pymin $
8490: 70 78 6d 61 78 20 24 70 79 6d 61 78 0a 20 20 20 pxmax $pymax.
84a0: 77 6f 72 6c 64 43 6f 6f 72 64 69 6e 61 74 65 73 worldCoordinates
84b0: 20 24 77 20 24 78 6d 69 6e 20 20 24 79 6d 69 6e $w $xmin $ymin
84c0: 20 20 24 78 6d 61 78 20 20 24 79 6d 61 78 0a 0a $xmax $ymax..
84d0: 20 20 20 44 72 61 77 59 61 78 69 73 20 20 20 20 DrawYaxis
84e0: 20 20 20 20 24 77 20 24 79 6d 69 6e 20 20 24 79 $w $ymin $y
84f0: 6d 61 78 20 20 24 79 64 65 6c 74 0a 20 20 20 44 max $ydelt. D
8500: 72 61 77 58 6c 61 62 65 6c 73 20 20 20 20 20 20 rawXlabels
8510: 24 77 20 24 78 6c 61 62 65 6c 73 20 24 6e 6f 73 $w $xlabels $nos
8520: 65 72 69 65 73 0a 20 20 20 44 72 61 77 4d 61 73 eries. DrawMas
8530: 6b 20 20 20 20 20 20 20 20 20 24 77 0a 20 20 20 k $w.
8540: 44 65 66 61 75 6c 74 4c 65 67 65 6e 64 20 20 20 DefaultLegend
8550: 20 24 77 0a 20 20 20 73 65 74 20 64 61 74 61 5f $w. set data_
8560: 73 65 72 69 65 73 28 24 77 2c 6c 65 67 65 6e 64 series($w,legend
8570: 74 79 70 65 29 20 22 72 65 63 74 61 6e 67 6c 65 type) "rectangle
8580: 22 0a 20 20 20 44 65 66 61 75 6c 74 42 61 6c 6c ". DefaultBall
8590: 6f 6f 6e 20 20 20 24 77 0a 0a 20 20 20 53 65 74 oon $w.. Set
85a0: 43 6f 6c 6f 75 72 73 20 24 77 20 62 6c 75 65 20 Colours $w blue
85b0: 6c 69 67 68 74 62 6c 75 65 20 67 72 65 65 6e 20 lightblue green
85c0: 79 65 6c 6c 6f 77 20 6f 72 61 6e 67 65 20 72 65 yellow orange re
85d0: 64 20 6d 61 67 65 6e 74 61 20 62 72 6f 77 6e 0a d magenta brown.
85e0: 0a 20 20 20 72 65 74 75 72 6e 20 24 6e 65 77 63 . return $newc
85f0: 68 61 72 74 0a 7d 0a 0a 23 20 63 72 65 61 74 65 hart.}..# create
8600: 48 6f 72 69 7a 6f 6e 74 61 6c 42 61 72 63 68 61 HorizontalBarcha
8610: 72 74 20 2d 2d 0a 23 20 20 20 20 43 72 65 61 74 rt --.# Creat
8620: 65 20 61 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 e a command for
8630: 64 72 61 77 69 6e 67 20 61 20 62 61 72 63 68 61 drawing a barcha
8640: 72 74 20 77 69 74 68 20 68 6f 72 69 7a 6f 6e 74 rt with horizont
8650: 61 6c 20 62 61 72 73 0a 23 20 41 72 67 75 6d 65 al bars.# Argume
8660: 6e 74 73 3a 0a 23 20 20 20 20 77 20 20 20 20 20 nts:.# w
8670: 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 Name of th
8680: 65 20 63 61 6e 76 61 73 0a 23 20 20 20 20 78 73 e canvas.# xs
8690: 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d 75 cale Minimu
86a0: 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 73 m, maximum and s
86b0: 74 65 70 20 66 6f 72 20 78 2d 61 78 69 73 0a 23 tep for x-axis.#
86c0: 20 20 20 20 79 6c 61 62 65 6c 73 20 20 20 20 20 ylabels
86d0: 4c 69 73 74 20 6f 66 20 6c 61 62 65 6c 73 20 66 List of labels f
86e0: 6f 72 20 79 2d 61 78 69 73 0a 23 20 20 20 20 6e or y-axis.# n
86f0: 6f 73 65 72 69 65 73 20 20 20 20 4e 75 6d 62 65 oseries Numbe
8700: 72 20 6f 66 20 73 65 72 69 65 73 20 6f 72 20 74 r of series or t
8710: 68 65 20 6b 65 79 77 6f 72 64 20 22 73 74 61 63 he keyword "stac
8720: 6b 65 64 22 0a 23 20 52 65 73 75 6c 74 3a 0a 23 ked".# Result:.#
8730: 20 20 20 20 4e 61 6d 65 20 6f 66 20 61 20 6e 65 Name of a ne
8740: 77 20 63 6f 6d 6d 61 6e 64 0a 23 20 4e 6f 74 65 w command.# Note
8750: 3a 0a 23 20 20 20 20 54 68 65 20 65 6e 74 69 72 :.# The entir
8760: 65 20 63 61 6e 76 61 73 20 77 69 6c 6c 20 62 65 e canvas will be
8770: 20 64 65 64 69 63 61 74 65 64 20 74 6f 20 74 68 dedicated to th
8780: 65 20 62 61 72 63 68 61 72 74 2e 0a 23 0a 70 72 e barchart..#.pr
8790: 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a oc ::Plotchart::
87a0: 63 72 65 61 74 65 48 6f 72 69 7a 6f 6e 74 61 6c createHorizontal
87b0: 42 61 72 63 68 61 72 74 20 7b 20 77 20 78 73 63 Barchart { w xsc
87c0: 61 6c 65 20 79 6c 61 62 65 6c 73 20 6e 6f 73 65 ale ylabels nose
87d0: 72 69 65 73 20 7d 20 7b 0a 20 20 20 76 61 72 69 ries } {. vari
87e0: 61 62 6c 65 20 64 61 74 61 5f 73 65 72 69 65 73 able data_series
87f0: 0a 20 20 20 76 61 72 69 61 62 6c 65 20 63 6f 6e . variable con
8800: 66 69 67 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 fig.. foreach
8810: 73 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 64 s [array names d
8820: 61 74 61 5f 73 65 72 69 65 73 20 22 24 77 2c 2a ata_series "$w,*
8830: 22 5d 20 7b 0a 20 20 20 20 20 20 75 6e 73 65 74 "] {. unset
8840: 20 64 61 74 61 5f 73 65 72 69 65 73 28 24 73 29 data_series($s)
8850: 0a 20 20 20 7d 0a 0a 20 20 20 73 65 74 20 6e 65 . }.. set ne
8860: 77 63 68 61 72 74 20 22 68 62 61 72 63 68 61 72 wchart "hbarchar
8870: 74 5f 24 77 22 0a 20 20 20 69 6e 74 65 72 70 20 t_$w". interp
8880: 61 6c 69 61 73 20 7b 7d 20 24 6e 65 77 63 68 61 alias {} $newcha
8890: 72 74 20 7b 7d 20 3a 3a 50 6c 6f 74 63 68 61 72 rt {} ::Plotchar
88a0: 74 3a 3a 50 6c 6f 74 48 61 6e 64 6c 65 72 20 68 t::PlotHandler h
88b0: 6f 72 69 7a 62 61 72 73 20 24 77 0a 20 20 20 43 orizbars $w. C
88c0: 6f 70 79 43 6f 6e 66 69 67 20 68 6f 72 69 7a 62 opyConfig horizb
88d0: 61 72 73 20 24 77 0a 0a 20 20 20 73 65 74 20 66 ars $w.. set f
88e0: 6f 6e 74 20 20 20 20 20 20 24 63 6f 6e 66 69 67 ont $config
88f0: 28 24 77 2c 6c 65 66 74 61 78 69 73 2c 66 6f 6e ($w,leftaxis,fon
8900: 74 29 0a 20 20 20 73 65 74 20 78 73 70 61 63 65 t). set xspace
8910: 6d 61 78 20 30 0a 20 20 20 66 6f 72 65 61 63 68 max 0. foreach
8920: 20 79 6c 61 62 65 6c 20 24 79 6c 61 62 65 6c 73 ylabel $ylabels
8930: 20 7b 0a 20 20 20 20 20 20 20 73 65 74 20 78 73 {. set xs
8940: 70 61 63 65 20 5b 66 6f 6e 74 20 6d 65 61 73 75 pace [font measu
8950: 72 65 20 24 66 6f 6e 74 20 24 79 6c 61 62 65 6c re $font $ylabel
8960: 5d 0a 20 20 20 20 20 20 20 69 66 20 7b 20 24 78 ]. if { $x
8970: 73 70 61 63 65 20 3e 20 24 78 73 70 61 63 65 6d space > $xspacem
8980: 61 78 20 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 ax } {.
8990: 20 20 73 65 74 20 78 73 70 61 63 65 6d 61 78 20 set xspacemax
89a0: 24 78 73 70 61 63 65 0a 20 20 20 20 20 20 20 7d $xspace. }
89b0: 0a 20 20 20 7d 0a 20 20 20 73 65 74 20 63 6f 6e . }. set con
89c0: 66 69 67 28 24 77 2c 6d 61 72 67 69 6e 2c 6c 65 fig($w,margin,le
89d0: 66 74 29 20 5b 65 78 70 72 20 7b 24 78 73 70 61 ft) [expr {$xspa
89e0: 63 65 6d 61 78 2b 35 7d 5d 20 3b 23 20 53 6c 69 cemax+5}] ;# Sli
89f0: 67 68 74 6c 79 20 6d 6f 72 65 20 73 70 61 63 65 ghtly more space
8a00: 20 72 65 71 75 69 72 65 64 21 0a 0a 20 20 20 66 required!.. f
8a10: 6f 72 65 61 63 68 20 7b 70 78 6d 69 6e 20 70 79 oreach {pxmin py
8a20: 6d 69 6e 20 70 78 6d 61 78 20 70 79 6d 61 78 7d min pxmax pymax}
8a30: 20 5b 4d 61 72 67 69 6e 73 52 65 63 74 61 6e 67 [MarginsRectang
8a40: 6c 65 20 24 77 5d 20 7b 62 72 65 61 6b 7d 0a 0a le $w] {break}..
8a50: 20 20 20 73 65 74 20 79 6d 69 6e 20 20 30 2e 30 set ymin 0.0
8a60: 0a 20 20 20 73 65 74 20 79 6d 61 78 20 20 5b 65 . set ymax [e
8a70: 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 79 xpr {[llength $y
8a80: 6c 61 62 65 6c 73 5d 20 2b 20 30 2e 31 7d 5d 0a labels] + 0.1}].
8a90: 0a 20 20 20 66 6f 72 65 61 63 68 20 7b 78 6d 69 . foreach {xmi
8aa0: 6e 20 78 6d 61 78 20 78 64 65 6c 74 7d 20 24 78 n xmax xdelt} $x
8ab0: 73 63 61 6c 65 20 7b 62 72 65 61 6b 7d 0a 0a 20 scale {break}..
8ac0: 20 20 69 66 20 7b 20 24 78 64 65 6c 74 20 3d 3d if { $xdelt ==
8ad0: 20 30 2e 30 20 7d 20 7b 0a 20 20 20 20 20 20 72 0.0 } {. r
8ae0: 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f eturn -code erro
8af0: 72 20 22 53 74 65 70 20 73 69 7a 65 20 63 61 6e r "Step size can
8b00: 20 6e 6f 74 20 62 65 20 7a 65 72 6f 22 0a 20 20 not be zero".
8b10: 20 7d 0a 0a 20 20 20 69 66 20 7b 20 28 24 78 6d }.. if { ($xm
8b20: 61 78 2d 24 78 6d 69 6e 29 2a 24 78 64 65 6c 74 ax-$xmin)*$xdelt
8b30: 20 3c 20 30 2e 30 20 7d 20 7b 0a 20 20 20 20 20 < 0.0 } {.
8b40: 20 73 65 74 20 78 64 65 6c 74 20 5b 65 78 70 72 set xdelt [expr
8b50: 20 7b 2d 24 78 64 65 6c 74 7d 5d 0a 20 20 20 7d {-$xdelt}]. }
8b60: 0a 0a 20 20 20 76 69 65 77 50 6f 72 74 20 20 20 .. viewPort
8b70: 20 20 20 20 20 20 24 77 20 24 70 78 6d 69 6e 20 $w $pxmin
8b80: 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 $pymin $pxmax $p
8b90: 79 6d 61 78 0a 20 20 20 77 6f 72 6c 64 43 6f 6f ymax. worldCoo
8ba0: 72 64 69 6e 61 74 65 73 20 24 77 20 24 78 6d 69 rdinates $w $xmi
8bb0: 6e 20 20 24 79 6d 69 6e 20 20 24 78 6d 61 78 20 n $ymin $xmax
8bc0: 20 24 79 6d 61 78 0a 0a 20 20 20 44 72 61 77 58 $ymax.. DrawX
8bd0: 61 78 69 73 20 20 20 20 20 20 20 20 24 77 20 24 axis $w $
8be0: 78 6d 69 6e 20 20 24 78 6d 61 78 20 20 24 78 64 xmin $xmax $xd
8bf0: 65 6c 74 0a 20 20 20 44 72 61 77 59 6c 61 62 65 elt. DrawYlabe
8c00: 6c 73 20 20 20 20 20 20 24 77 20 24 79 6c 61 62 ls $w $ylab
8c10: 65 6c 73 20 24 6e 6f 73 65 72 69 65 73 0a 20 20 els $noseries.
8c20: 20 44 72 61 77 4d 61 73 6b 20 20 20 20 20 20 20 DrawMask
8c30: 20 20 24 77 0a 20 20 20 44 65 66 61 75 6c 74 4c $w. DefaultL
8c40: 65 67 65 6e 64 20 20 20 20 24 77 0a 20 20 20 73 egend $w. s
8c50: 65 74 20 64 61 74 61 5f 73 65 72 69 65 73 28 24 et data_series($
8c60: 77 2c 6c 65 67 65 6e 64 74 79 70 65 29 20 22 72 w,legendtype) "r
8c70: 65 63 74 61 6e 67 6c 65 22 0a 20 20 20 44 65 66 ectangle". Def
8c80: 61 75 6c 74 42 61 6c 6c 6f 6f 6e 20 20 20 24 77 aultBalloon $w
8c90: 0a 0a 20 20 20 53 65 74 43 6f 6c 6f 75 72 73 20 .. SetColours
8ca0: 24 77 20 62 6c 75 65 20 6c 69 67 68 74 62 6c 75 $w blue lightblu
8cb0: 65 20 67 72 65 65 6e 20 79 65 6c 6c 6f 77 20 6f e green yellow o
8cc0: 72 61 6e 67 65 20 72 65 64 20 6d 61 67 65 6e 74 range red magent
8cd0: 61 20 62 72 6f 77 6e 0a 0a 20 20 20 72 65 74 75 a brown.. retu
8ce0: 72 6e 20 24 6e 65 77 63 68 61 72 74 0a 7d 0a 0a rn $newchart.}..
8cf0: 23 20 63 72 65 61 74 65 42 6f 78 70 6c 6f 74 20 # createBoxplot
8d00: 2d 2d 0a 23 20 20 20 20 43 72 65 61 74 65 20 61 --.# Create a
8d10: 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 61 command for dra
8d20: 77 69 6e 67 20 61 20 70 6c 6f 74 20 77 69 74 68 wing a plot with
8d30: 20 62 6f 78 2d 61 6e 64 2d 77 68 69 73 6b 65 72 box-and-whisker
8d40: 73 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 s.# Arguments:.#
8d50: 20 20 20 20 77 20 20 20 20 20 20 20 20 20 20 20 w
8d60: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 61 6e 76 Name of the canv
8d70: 61 73 0a 23 20 20 20 20 78 73 63 61 6c 65 20 20 as.# xscale
8d80: 20 20 20 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 Minimum, max
8d90: 69 6d 75 6d 20 61 6e 64 20 73 74 65 70 20 66 6f imum and step fo
8da0: 72 20 78 2d 61 78 69 73 0a 23 20 20 20 20 79 6c r x-axis.# yl
8db0: 61 62 65 6c 73 20 20 20 20 20 4c 69 73 74 20 6f abels List o
8dc0: 66 20 6c 61 62 65 6c 73 20 66 6f 72 20 79 2d 61 f labels for y-a
8dd0: 78 69 73 0a 23 20 52 65 73 75 6c 74 3a 0a 23 20 xis.# Result:.#
8de0: 20 20 20 4e 61 6d 65 20 6f 66 20 61 20 6e 65 77 Name of a new
8df0: 20 63 6f 6d 6d 61 6e 64 0a 23 20 4e 6f 74 65 3a command.# Note:
8e00: 0a 23 20 20 20 20 54 68 65 20 65 6e 74 69 72 65 .# The entire
8e10: 20 63 61 6e 76 61 73 20 77 69 6c 6c 20 62 65 20 canvas will be
8e20: 64 65 64 69 63 61 74 65 64 20 74 6f 20 74 68 65 dedicated to the
8e30: 20 62 6f 78 70 6c 6f 74 2e 0a 23 0a 70 72 6f 63 boxplot..#.proc
8e40: 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 ::Plotchart::cr
8e50: 65 61 74 65 42 6f 78 70 6c 6f 74 20 7b 20 77 20 eateBoxplot { w
8e60: 78 73 63 61 6c 65 20 79 6c 61 62 65 6c 73 20 7d xscale ylabels }
8e70: 20 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 20 64 {. variable d
8e80: 61 74 61 5f 73 65 72 69 65 73 0a 20 20 20 76 61 ata_series. va
8e90: 72 69 61 62 6c 65 20 63 6f 6e 66 69 67 0a 0a 20 riable config..
8ea0: 20 20 66 6f 72 65 61 63 68 20 73 20 5b 61 72 72 foreach s [arr
8eb0: 61 79 20 6e 61 6d 65 73 20 64 61 74 61 5f 73 65 ay names data_se
8ec0: 72 69 65 73 20 22 24 77 2c 2a 22 5d 20 7b 0a 20 ries "$w,*"] {.
8ed0: 20 20 20 20 20 75 6e 73 65 74 20 64 61 74 61 5f unset data_
8ee0: 73 65 72 69 65 73 28 24 73 29 0a 20 20 20 7d 0a series($s). }.
8ef0: 0a 20 20 20 73 65 74 20 6e 65 77 63 68 61 72 74 . set newchart
8f00: 20 22 62 6f 78 70 6c 6f 74 5f 24 77 22 0a 20 20 "boxplot_$w".
8f10: 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b 7d interp alias {}
8f20: 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a 3a $newchart {} ::
8f30: 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 48 Plotchart::PlotH
8f40: 61 6e 64 6c 65 72 20 62 6f 78 70 6c 6f 74 20 24 andler boxplot $
8f50: 77 0a 20 20 20 43 6f 70 79 43 6f 6e 66 69 67 20 w. CopyConfig
8f60: 62 6f 78 70 6c 6f 74 20 24 77 0a 0a 20 20 20 73 boxplot $w.. s
8f70: 65 74 20 66 6f 6e 74 20 20 20 20 20 20 24 63 6f et font $co
8f80: 6e 66 69 67 28 24 77 2c 6c 65 66 74 61 78 69 73 nfig($w,leftaxis
8f90: 2c 66 6f 6e 74 29 0a 20 20 20 73 65 74 20 78 73 ,font). set xs
8fa0: 70 61 63 65 6d 61 78 20 30 0a 20 20 20 66 6f 72 pacemax 0. for
8fb0: 65 61 63 68 20 79 6c 61 62 65 6c 20 24 79 6c 61 each ylabel $yla
8fc0: 62 65 6c 73 20 7b 0a 20 20 20 20 20 20 20 73 65 bels {. se
8fd0: 74 20 78 73 70 61 63 65 20 5b 66 6f 6e 74 20 6d t xspace [font m
8fe0: 65 61 73 75 72 65 20 24 66 6f 6e 74 20 24 79 6c easure $font $yl
8ff0: 61 62 65 6c 5d 0a 20 20 20 20 20 20 20 69 66 20 abel]. if
9000: 7b 20 24 78 73 70 61 63 65 20 3e 20 24 78 73 70 { $xspace > $xsp
9010: 61 63 65 6d 61 78 20 7d 20 7b 0a 20 20 20 20 20 acemax } {.
9020: 20 20 20 20 20 20 73 65 74 20 78 73 70 61 63 65 set xspace
9030: 6d 61 78 20 24 78 73 70 61 63 65 0a 20 20 20 20 max $xspace.
9040: 20 20 20 7d 0a 20 20 20 7d 0a 20 20 20 73 65 74 }. }. set
9050: 20 63 6f 6e 66 69 67 28 24 77 2c 6d 61 72 67 69 config($w,margi
9060: 6e 2c 6c 65 66 74 29 20 5b 65 78 70 72 20 7b 24 n,left) [expr {$
9070: 78 73 70 61 63 65 6d 61 78 2b 35 7d 5d 20 3b 23 xspacemax+5}] ;#
9080: 20 53 6c 69 67 68 74 6c 79 20 6d 6f 72 65 20 73 Slightly more s
9090: 70 61 63 65 20 72 65 71 75 69 72 65 64 21 0a 20 pace required!.
90a0: 20 20 66 6f 72 65 61 63 68 20 7b 70 78 6d 69 6e foreach {pxmin
90b0: 20 70 79 6d 69 6e 20 70 78 6d 61 78 20 70 79 6d pymin pxmax pym
90c0: 61 78 7d 20 5b 4d 61 72 67 69 6e 73 52 65 63 74 ax} [MarginsRect
90d0: 61 6e 67 6c 65 20 24 77 5d 20 7b 62 72 65 61 6b angle $w] {break
90e0: 7d 0a 0a 20 20 20 73 65 74 20 79 6d 69 6e 20 20 }.. set ymin
90f0: 30 2e 30 0a 20 20 20 73 65 74 20 79 6d 61 78 20 0.0. set ymax
9100: 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 [expr {[llength
9110: 20 24 79 6c 61 62 65 6c 73 5d 20 2b 20 30 2e 31 $ylabels] + 0.1
9120: 7d 5d 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 7b }].. foreach {
9130: 78 6d 69 6e 20 78 6d 61 78 20 78 64 65 6c 74 7d xmin xmax xdelt}
9140: 20 24 78 73 63 61 6c 65 20 7b 62 72 65 61 6b 7d $xscale {break}
9150: 0a 0a 20 20 20 69 66 20 7b 20 24 78 64 65 6c 74 .. if { $xdelt
9160: 20 3d 3d 20 30 2e 30 20 7d 20 7b 0a 20 20 20 20 == 0.0 } {.
9170: 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 return -code e
9180: 72 72 6f 72 20 22 53 74 65 70 20 73 69 7a 65 20 rror "Step size
9190: 63 61 6e 20 6e 6f 74 20 62 65 20 7a 65 72 6f 22 can not be zero"
91a0: 0a 20 20 20 7d 0a 0a 20 20 20 69 66 20 7b 20 28 . }.. if { (
91b0: 24 78 6d 61 78 2d 24 78 6d 69 6e 29 2a 24 78 64 $xmax-$xmin)*$xd
91c0: 65 6c 74 20 3c 20 30 2e 30 20 7d 20 7b 0a 20 20 elt < 0.0 } {.
91d0: 20 20 20 20 73 65 74 20 78 64 65 6c 74 20 5b 65 set xdelt [e
91e0: 78 70 72 20 7b 2d 24 78 64 65 6c 74 7d 5d 0a 20 xpr {-$xdelt}].
91f0: 20 20 7d 0a 0a 20 20 20 76 69 65 77 50 6f 72 74 }.. viewPort
9200: 20 20 20 20 20 20 20 20 20 24 77 20 24 70 78 6d $w $pxm
9210: 69 6e 20 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 in $pymin $pxmax
9220: 20 24 70 79 6d 61 78 0a 20 20 20 77 6f 72 6c 64 $pymax. world
9230: 43 6f 6f 72 64 69 6e 61 74 65 73 20 24 77 20 24 Coordinates $w $
9240: 78 6d 69 6e 20 20 24 79 6d 69 6e 20 20 24 78 6d xmin $ymin $xm
9250: 61 78 20 20 24 79 6d 61 78 0a 0a 20 20 20 44 72 ax $ymax.. Dr
9260: 61 77 58 61 78 69 73 20 20 20 20 20 20 20 20 24 awXaxis $
9270: 77 20 24 78 6d 69 6e 20 20 24 78 6d 61 78 20 20 w $xmin $xmax
9280: 24 78 64 65 6c 74 0a 20 20 20 44 72 61 77 59 6c $xdelt. DrawYl
9290: 61 62 65 6c 73 20 20 20 20 20 20 24 77 20 24 79 abels $w $y
92a0: 6c 61 62 65 6c 73 20 31 0a 20 20 20 44 72 61 77 labels 1. Draw
92b0: 4d 61 73 6b 20 20 20 20 20 20 20 20 20 24 77 0a Mask $w.
92c0: 20 20 20 44 65 66 61 75 6c 74 4c 65 67 65 6e 64 DefaultLegend
92d0: 20 20 20 20 24 77 0a 20 20 20 73 65 74 20 64 61 $w. set da
92e0: 74 61 5f 73 65 72 69 65 73 28 24 77 2c 6c 65 67 ta_series($w,leg
92f0: 65 6e 64 74 79 70 65 29 20 22 72 65 63 74 61 6e endtype) "rectan
9300: 67 6c 65 22 0a 20 20 20 44 65 66 61 75 6c 74 42 gle". DefaultB
9310: 61 6c 6c 6f 6f 6e 20 20 20 24 77 0a 0a 20 20 20 alloon $w..
9320: 73 65 74 20 63 6f 6e 66 69 67 28 24 77 2c 61 78 set config($w,ax
9330: 69 73 6e 61 6d 65 73 29 20 24 79 6c 61 62 65 6c isnames) $ylabel
9340: 73 0a 0a 20 20 20 72 65 74 75 72 6e 20 24 6e 65 s.. return $ne
9350: 77 63 68 61 72 74 0a 7d 0a 0a 23 20 63 72 65 61 wchart.}..# crea
9360: 74 65 54 69 6d 65 63 68 61 72 74 20 2d 2d 0a 23 teTimechart --.#
9370: 20 20 20 20 43 72 65 61 74 65 20 61 20 63 6f 6d Create a com
9380: 6d 61 6e 64 20 66 6f 72 20 64 72 61 77 69 6e 67 mand for drawing
9390: 20 61 20 73 69 6d 70 6c 65 20 74 69 6d 65 63 68 a simple timech
93a0: 61 72 74 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a art.# Arguments:
93b0: 0a 23 20 20 20 20 77 20 20 20 20 20 20 20 20 20 .# w
93c0: 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 61 Name of the ca
93d0: 6e 76 61 73 0a 23 20 20 20 20 74 69 6d 65 5f 62 nvas.# time_b
93e0: 65 67 69 6e 20 20 53 74 61 72 74 20 74 69 6d 65 egin Start time
93f0: 20 28 69 6e 20 74 68 65 20 66 6f 72 6d 20 6f 66 (in the form of
9400: 20 61 20 64 61 74 65 2f 74 69 6d 65 29 0a 23 20 a date/time).#
9410: 20 20 20 74 69 6d 65 5f 65 6e 64 20 20 20 20 45 time_end E
9420: 6e 64 20 74 69 6d 65 20 28 69 6e 20 74 68 65 20 nd time (in the
9430: 66 6f 72 6d 20 6f 66 20 61 20 64 61 74 65 2f 74 form of a date/t
9440: 69 6d 65 29 0a 23 20 20 20 20 61 72 67 73 20 20 ime).# args
9450: 20 20 20 20 20 20 4e 75 6d 62 65 72 20 6f 66 20 Number of
9460: 69 74 65 6d 73 20 74 6f 20 62 65 20 73 68 6f 77 items to be show
9470: 6e 20 28 64 65 74 65 72 6d 69 6e 65 73 20 73 70 n (determines sp
9480: 61 63 69 6e 67 29 0a 23 20 20 20 20 20 20 20 20 acing).#
9490: 20 20 20 20 20 20 20 20 6f 72 20 6f 6e 65 20 6f or one o
94a0: 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 73 20 28 r more options (
94b0: 2d 62 61 72 68 65 69 67 68 74 20 70 69 78 65 6c -barheight pixel
94c0: 73 2c 20 2d 79 6c 61 62 65 6c 77 69 64 74 68 20 s, -ylabelwidth
94d0: 70 69 78 65 6c 73 29 0a 23 20 52 65 73 75 6c 74 pixels).# Result
94e0: 3a 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 20 61 :.# Name of a
94f0: 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0a 23 20 4e new command.# N
9500: 6f 74 65 3a 0a 23 20 20 20 20 54 68 65 20 65 6e ote:.# The en
9510: 74 69 72 65 20 63 61 6e 76 61 73 20 77 69 6c 6c tire canvas will
9520: 20 62 65 20 64 65 64 69 63 61 74 65 64 20 74 6f be dedicated to
9530: 20 74 68 65 20 74 69 6d 65 63 68 61 72 74 2e 0a the timechart..
9540: 23 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 #.proc ::Plotcha
9550: 72 74 3a 3a 63 72 65 61 74 65 54 69 6d 65 63 68 rt::createTimech
9560: 61 72 74 20 7b 20 77 20 74 69 6d 65 5f 62 65 67 art { w time_beg
9570: 69 6e 20 74 69 6d 65 5f 65 6e 64 20 61 72 67 73 in time_end args
9580: 7d 20 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 20 } {. variable
9590: 64 61 74 61 5f 73 65 72 69 65 73 0a 20 20 20 76 data_series. v
95a0: 61 72 69 61 62 6c 65 20 73 63 61 6c 69 6e 67 0a ariable scaling.
95b0: 0a 20 20 20 66 6f 72 65 61 63 68 20 73 20 5b 61 . foreach s [a
95c0: 72 72 61 79 20 6e 61 6d 65 73 20 64 61 74 61 5f rray names data_
95d0: 73 65 72 69 65 73 20 22 24 77 2c 2a 22 5d 20 7b series "$w,*"] {
95e0: 0a 20 20 20 20 20 20 75 6e 73 65 74 20 64 61 74 . unset dat
95f0: 61 5f 73 65 72 69 65 73 28 24 73 29 0a 20 20 20 a_series($s).
9600: 7d 0a 0a 20 20 20 73 65 74 20 6e 65 77 63 68 61 }.. set newcha
9610: 72 74 20 22 74 69 6d 65 63 68 61 72 74 5f 24 77 rt "timechart_$w
9620: 22 0a 20 20 20 69 6e 74 65 72 70 20 61 6c 69 61 ". interp alia
9630: 73 20 7b 7d 20 24 6e 65 77 63 68 61 72 74 20 7b s {} $newchart {
9640: 7d 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 50 } ::Plotchart::P
9650: 6c 6f 74 48 61 6e 64 6c 65 72 20 74 69 6d 65 63 lotHandler timec
9660: 68 61 72 74 20 24 77 0a 20 20 20 43 6f 70 79 43 hart $w. CopyC
9670: 6f 6e 66 69 67 20 74 69 6d 65 63 68 61 72 74 20 onfig timechart
9680: 24 77 0a 0a 20 20 20 23 0a 20 20 20 23 20 48 61 $w.. #. # Ha
9690: 6e 64 6c 65 20 74 68 65 20 61 72 67 75 6d 65 6e ndle the argumen
96a0: 74 73 0a 20 20 20 23 0a 20 20 20 73 65 74 20 62 ts. #. set b
96b0: 61 72 68 65 69 67 68 74 20 20 20 20 30 0a 20 20 arheight 0.
96c0: 20 73 65 74 20 6e 6f 69 74 65 6d 73 20 20 20 20 set noitems
96d0: 20 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 [lindex $args
96e0: 30 5d 0a 20 20 20 73 65 74 20 79 6c 61 62 65 6c 0]. set ylabel
96f0: 77 69 64 74 68 20 20 38 0a 0a 20 20 20 69 66 20 width 8.. if
9700: 7b 20 5b 73 74 72 69 6e 67 20 69 73 20 69 6e 74 { [string is int
9710: 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 6e 6f eger -strict $no
9720: 69 74 65 6d 73 5d 20 7d 20 7b 0a 20 20 20 20 20 items] } {.
9730: 20 20 73 65 74 20 61 72 67 73 20 5b 6c 72 61 6e set args [lran
9740: 67 65 20 24 61 72 67 73 20 31 20 65 6e 64 5d 0a ge $args 1 end].
9750: 20 20 20 7d 0a 20 20 20 66 6f 72 65 61 63 68 20 }. foreach
9760: 7b 6b 65 79 77 6f 72 64 20 76 61 6c 75 65 7d 20 {keyword value}
9770: 24 61 72 67 73 20 7b 0a 20 20 20 20 20 20 20 73 $args {. s
9780: 77 69 74 63 68 20 2d 2d 20 24 6b 65 79 77 6f 72 witch -- $keywor
9790: 64 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 22 d {. "
97a0: 2d 62 61 72 68 65 69 67 68 74 22 20 7b 0a 20 20 -barheight" {.
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
97c0: 74 20 62 61 72 68 65 69 67 68 74 20 24 76 61 6c t barheight $val
97d0: 75 65 0a 20 20 20 20 20 20 20 20 20 20 20 7d 0a ue. }.
97e0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 79 6c 61 "-yla
97f0: 62 65 6c 77 69 64 74 68 22 20 7b 0a 20 20 20 20 belwidth" {.
9800: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
9810: 79 6c 61 62 65 6c 77 69 64 74 68 20 5b 65 78 70 ylabelwidth [exp
9820: 72 20 7b 24 76 61 6c 75 65 2f 31 30 2e 30 7d 5d r {$value/10.0}]
9830: 20 3b 23 20 50 69 78 65 6c 73 20 74 6f 20 63 68 ;# Pixels to ch
9840: 61 72 61 63 74 65 72 73 0a 20 20 20 20 20 20 20 aracters.
9850: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 }.
9860: 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 default {.
9870: 20 20 20 20 20 20 20 20 20 20 20 23 20 49 67 6e # Ign
9880: 6f 72 65 0a 20 20 20 20 20 20 20 20 20 20 20 7d ore. }
9890: 0a 20 20 20 20 20 20 20 7d 0a 20 20 20 7d 0a 0a . }. }..
98a0: 20 20 20 66 6f 72 65 61 63 68 20 7b 70 78 6d 69 foreach {pxmi
98b0: 6e 20 70 79 6d 69 6e 20 70 78 6d 61 78 20 70 79 n pymin pxmax py
98c0: 6d 61 78 7d 20 5b 4d 61 72 67 69 6e 73 52 65 63 max} [MarginsRec
98d0: 74 61 6e 67 6c 65 20 24 77 20 33 20 24 79 6c 61 tangle $w 3 $yla
98e0: 62 65 6c 77 69 64 74 68 5d 20 7b 62 72 65 61 6b belwidth] {break
98f0: 7d 0a 0a 20 20 20 69 66 20 7b 20 24 62 61 72 68 }.. if { $barh
9900: 65 69 67 68 74 20 21 3d 20 30 20 7d 20 7b 0a 20 eight != 0 } {.
9910: 20 20 20 20 20 20 73 65 74 20 6e 6f 69 74 65 6d set noitem
9920: 73 20 5b 65 78 70 72 20 7b 28 24 70 78 6d 61 78 s [expr {($pxmax
9930: 2d 24 70 78 6d 69 6e 29 2f 64 6f 75 62 6c 65 28 -$pxmin)/double(
9940: 24 62 61 72 68 65 69 67 68 74 29 7d 5d 0a 20 20 $barheight)}].
9950: 20 7d 0a 20 20 20 73 65 74 20 73 63 61 6c 69 6e }. set scalin
9960: 67 28 24 77 2c 62 61 72 68 65 69 67 68 74 29 20 g($w,barheight)
9970: 24 62 61 72 68 65 69 67 68 74 0a 0a 20 20 20 73 $barheight.. s
9980: 65 74 20 79 6d 69 6e 20 20 30 2e 30 0a 20 20 20 et ymin 0.0.
9990: 73 65 74 20 79 6d 61 78 20 20 24 6e 6f 69 74 65 set ymax $noite
99a0: 6d 73 0a 0a 20 20 20 73 65 74 20 78 6d 69 6e 20 ms.. set xmin
99b0: 20 5b 65 78 70 72 20 7b 31 2e 30 2a 5b 63 6c 6f [expr {1.0*[clo
99c0: 63 6b 20 73 63 61 6e 20 24 74 69 6d 65 5f 62 65 ck scan $time_be
99d0: 67 69 6e 5d 7d 5d 0a 20 20 20 73 65 74 20 78 6d gin]}]. set xm
99e0: 61 78 20 20 5b 65 78 70 72 20 7b 31 2e 30 2a 5b ax [expr {1.0*[
99f0: 63 6c 6f 63 6b 20 73 63 61 6e 20 24 74 69 6d 65 clock scan $time
9a00: 5f 65 6e 64 5d 7d 5d 0a 0a 20 20 20 76 69 65 77 _end]}].. view
9a10: 50 6f 72 74 20 20 20 20 20 20 20 20 20 24 77 20 Port $w
9a20: 24 70 78 6d 69 6e 20 24 70 79 6d 69 6e 20 24 70 $pxmin $pymin $p
9a30: 78 6d 61 78 20 24 70 79 6d 61 78 0a 20 20 20 77 xmax $pymax. w
9a40: 6f 72 6c 64 43 6f 6f 72 64 69 6e 61 74 65 73 20 orldCoordinates
9a50: 24 77 20 24 78 6d 69 6e 20 20 24 79 6d 69 6e 20 $w $xmin $ymin
9a60: 20 24 78 6d 61 78 20 20 24 79 6d 61 78 0a 0a 20 $xmax $ymax..
9a70: 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 set scaling($w
9a80: 2c 63 75 72 72 65 6e 74 29 20 24 79 6d 61 78 0a ,current) $ymax.
9a90: 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 set scaling($
9aa0: 77 2c 64 79 29 20 20 20 20 20 20 2d 30 2e 37 0a w,dy) -0.7.
9ab0: 0a 20 20 20 44 72 61 77 53 63 72 6f 6c 6c 4d 61 . DrawScrollMa
9ac0: 73 6b 20 24 77 0a 20 20 20 73 65 74 20 73 63 61 sk $w. set sca
9ad0: 6c 69 6e 67 28 24 77 2c 63 75 72 70 6f 73 29 20 ling($w,curpos)
9ae0: 20 30 0a 20 20 20 73 65 74 20 73 63 61 6c 69 6e 0. set scalin
9af0: 67 28 24 77 2c 63 75 72 68 70 6f 73 29 20 30 0a g($w,curhpos) 0.
9b00: 0a 20 20 20 72 65 74 75 72 6e 20 24 6e 65 77 63 . return $newc
9b10: 68 61 72 74 0a 7d 0a 0a 23 20 63 72 65 61 74 65 hart.}..# create
9b20: 47 61 6e 74 74 63 68 61 72 74 20 2d 2d 0a 23 20 Ganttchart --.#
9b30: 20 20 20 43 72 65 61 74 65 20 61 20 63 6f 6d 6d Create a comm
9b40: 61 6e 64 20 66 6f 72 20 64 72 61 77 69 6e 67 20 and for drawing
9b50: 61 20 47 61 6e 74 74 20 28 70 6c 61 6e 6e 69 6e a Gantt (plannin
9b60: 67 29 20 63 68 61 72 74 0a 23 20 41 72 67 75 6d g) chart.# Argum
9b70: 65 6e 74 73 3a 0a 23 20 20 20 20 77 20 20 20 20 ents:.# w
9b80: 20 20 20 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 Name of t
9b90: 68 65 20 63 61 6e 76 61 73 0a 23 20 20 20 20 74 he canvas.# t
9ba0: 69 6d 65 5f 62 65 67 69 6e 20 20 53 74 61 72 74 ime_begin Start
9bb0: 20 74 69 6d 65 20 28 69 6e 20 74 68 65 20 66 6f time (in the fo
9bc0: 72 6d 20 6f 66 20 61 20 64 61 74 65 2f 74 69 6d rm of a date/tim
9bd0: 65 29 0a 23 20 20 20 20 74 69 6d 65 5f 65 6e 64 e).# time_end
9be0: 20 20 20 20 45 6e 64 20 74 69 6d 65 20 28 69 6e End time (in
9bf0: 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20 64 the form of a d
9c00: 61 74 65 2f 74 69 6d 65 29 0a 23 20 20 20 20 61 ate/time).# a
9c10: 72 67 73 20 20 20 20 20 20 20 20 28 46 69 72 73 rgs (Firs
9c20: 74 20 69 6e 74 65 67 65 72 29 20 4e 75 6d 62 65 t integer) Numbe
9c30: 72 20 6f 66 20 69 74 65 6d 73 20 74 6f 20 62 65 r of items to be
9c40: 20 73 68 6f 77 6e 20 28 64 65 74 65 72 6d 69 6e shown (determin
9c50: 65 73 20 73 70 61 63 69 6e 67 29 0a 23 20 20 20 es spacing).#
9c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 53 65 (Se
9c70: 63 6f 6e 64 20 69 6e 74 65 67 65 72 29 20 45 73 cond integer) Es
9c80: 74 69 6d 61 74 65 64 20 6d 61 78 69 6d 75 6d 20 timated maximum
9c90: 6c 65 6e 67 74 68 20 6f 66 20 74 65 78 74 20 28 length of text (
9ca0: 64 65 66 61 75 6c 74 3a 20 32 30 29 0a 23 20 20 default: 20).#
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 72 Or
9cc0: 20 6b 65 79 77 6f 72 64 2d 76 61 6c 75 65 20 70 keyword-value p
9cd0: 61 69 72 73 0a 23 20 52 65 73 75 6c 74 3a 0a 23 airs.# Result:.#
9ce0: 20 20 20 20 4e 61 6d 65 20 6f 66 20 61 20 6e 65 Name of a ne
9cf0: 77 20 63 6f 6d 6d 61 6e 64 0a 23 20 4e 6f 74 65 w command.# Note
9d00: 3a 0a 23 20 20 20 20 54 68 65 20 65 6e 74 69 72 :.# The entir
9d10: 65 20 63 61 6e 76 61 73 20 77 69 6c 6c 20 62 65 e canvas will be
9d20: 20 64 65 64 69 63 61 74 65 64 20 74 6f 20 74 68 dedicated to th
9d30: 65 20 47 61 6e 74 74 20 63 68 61 72 74 2e 0a 23 e Gantt chart..#
9d40: 20 20 20 20 4d 6f 73 74 20 63 6f 6d 6d 61 6e 64 Most command
9d50: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 69 6d s taken from tim
9d60: 65 20 63 68 61 72 74 73 2e 0a 23 0a 70 72 6f 63 e charts..#.proc
9d70: 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 63 72 ::Plotchart::cr
9d80: 65 61 74 65 47 61 6e 74 74 63 68 61 72 74 20 7b eateGanttchart {
9d90: 20 77 20 74 69 6d 65 5f 62 65 67 69 6e 20 74 69 w time_begin ti
9da0: 6d 65 5f 65 6e 64 20 61 72 67 73 7d 20 7b 0a 0a me_end args} {..
9db0: 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 74 61 variable data
9dc0: 5f 73 65 72 69 65 73 0a 20 20 20 76 61 72 69 61 _series. varia
9dd0: 62 6c 65 20 73 63 61 6c 69 6e 67 0a 0a 20 20 20 ble scaling..
9de0: 66 6f 72 65 61 63 68 20 73 20 5b 61 72 72 61 79 foreach s [array
9df0: 20 6e 61 6d 65 73 20 64 61 74 61 5f 73 65 72 69 names data_seri
9e00: 65 73 20 22 24 77 2c 2a 22 5d 20 7b 0a 20 20 20 es "$w,*"] {.
9e10: 20 20 20 75 6e 73 65 74 20 64 61 74 61 5f 73 65 unset data_se
9e20: 72 69 65 73 28 24 73 29 0a 20 20 20 7d 0a 0a 20 ries($s). }..
9e30: 20 20 73 65 74 20 6e 65 77 63 68 61 72 74 20 22 set newchart "
9e40: 67 61 6e 74 74 63 68 61 72 74 5f 24 77 22 0a 20 ganttchart_$w".
9e50: 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 7b interp alias {
9e60: 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 3a } $newchart {} :
9e70: 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f 74 :Plotchart::Plot
9e80: 48 61 6e 64 6c 65 72 20 67 61 6e 74 74 63 68 61 Handler ganttcha
9e90: 72 74 20 24 77 0a 20 20 20 43 6f 70 79 43 6f 6e rt $w. CopyCon
9ea0: 66 69 67 20 67 61 6e 74 74 63 68 61 72 74 20 24 fig ganttchart $
9eb0: 77 0a 0a 20 20 20 23 0a 20 20 20 23 20 48 61 6e w.. #. # Han
9ec0: 64 6c 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 dle the argument
9ed0: 73 0a 20 20 20 23 0a 20 20 20 73 65 74 20 62 61 s. #. set ba
9ee0: 72 68 65 69 67 68 74 20 20 20 20 30 0a 20 20 20 rheight 0.
9ef0: 73 65 74 20 6e 6f 69 74 65 6d 73 20 20 20 20 20 set noitems
9f00: 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 30 [lindex $args 0
9f10: 5d 0a 0a 20 20 20 69 66 20 7b 20 5b 73 74 72 69 ].. if { [stri
9f20: 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d 73 ng is integer -s
9f30: 74 72 69 63 74 20 24 6e 6f 69 74 65 6d 73 5d 20 trict $noitems]
9f40: 7d 20 7b 0a 20 20 20 20 20 20 20 73 65 74 20 61 } {. set a
9f50: 72 67 73 20 20 20 20 20 20 20 20 5b 6c 72 61 6e rgs [lran
9f60: 67 65 20 24 61 72 67 73 20 31 20 65 6e 64 5d 0a ge $args 1 end].
9f70: 20 20 20 20 20 20 20 73 65 74 20 79 6c 61 62 65 set ylabe
9f80: 6c 77 69 64 74 68 20 5b 6c 69 6e 64 65 78 20 24 lwidth [lindex $
9f90: 61 72 67 73 20 30 5d 0a 20 20 20 20 20 20 20 69 args 0]. i
9fa0: 66 20 7b 20 5b 73 74 72 69 6e 67 20 69 73 20 69 f { [string is i
9fb0: 6e 74 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 nteger -strict $
9fc0: 79 6c 61 62 65 6c 77 69 64 74 68 5d 20 7d 20 7b ylabelwidth] } {
9fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 . set
9fe0: 61 72 67 73 20 5b 6c 72 61 6e 67 65 20 24 61 72 args [lrange $ar
9ff0: 67 73 20 31 20 65 6e 64 5d 0a 20 20 20 20 20 20 gs 1 end].
a000: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 } else {.
a010: 20 20 20 20 20 73 65 74 20 79 6c 61 62 65 6c 77 set ylabelw
a020: 69 64 74 68 20 32 30 0a 20 20 20 20 20 20 20 7d idth 20. }
a030: 0a 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 . } else {.
a040: 20 20 20 20 73 65 74 20 79 6c 61 62 65 6c 77 69 set ylabelwi
a050: 64 74 68 20 32 30 0a 20 20 20 7d 0a 0a 20 20 20 dth 20. }..
a060: 66 6f 72 65 61 63 68 20 7b 6b 65 79 77 6f 72 64 foreach {keyword
a070: 20 76 61 6c 75 65 7d 20 24 61 72 67 73 20 7b 0a value} $args {.
a080: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d switch --
a090: 20 24 6b 65 79 77 6f 72 64 20 7b 0a 20 20 20 20 $keyword {.
a0a0: 20 20 20 20 20 20 20 22 2d 62 61 72 68 65 69 67 "-barheig
a0b0: 68 74 22 20 7b 0a 20 20 20 20 20 20 20 20 20 20 ht" {.
a0c0: 20 20 20 20 20 20 73 65 74 20 62 61 72 68 65 69 set barhei
a0d0: 67 68 74 20 24 76 61 6c 75 65 0a 20 20 20 20 20 ght $value.
a0e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
a0f0: 20 20 20 22 2d 79 6c 61 62 65 6c 77 69 64 74 68 "-ylabelwidth
a100: 22 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 " {.
a110: 20 20 20 20 73 65 74 20 79 6c 61 62 65 6c 77 69 set ylabelwi
a120: 64 74 68 20 5b 65 78 70 72 20 7b 24 76 61 6c 75 dth [expr {$valu
a130: 65 2f 31 30 2e 30 7d 5d 20 3b 23 20 50 69 78 65 e/10.0}] ;# Pixe
a140: 6c 73 20 74 6f 20 63 68 61 72 61 63 74 65 72 73 ls to characters
a150: 0a 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 . }.
a160: 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 default
a170: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.
a180: 20 20 20 23 20 49 67 6e 6f 72 65 0a 20 20 20 20 # Ignore.
a190: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
a1a0: 7d 0a 20 20 20 7d 0a 0a 20 20 20 66 6f 72 65 61 }. }.. forea
a1b0: 63 68 20 7b 70 78 6d 69 6e 20 70 79 6d 69 6e 20 ch {pxmin pymin
a1c0: 70 78 6d 61 78 20 70 79 6d 61 78 7d 20 5b 4d 61 pxmax pymax} [Ma
a1d0: 72 67 69 6e 73 52 65 63 74 61 6e 67 6c 65 20 24 rginsRectangle $
a1e0: 77 20 33 20 24 79 6c 61 62 65 6c 77 69 64 74 68 w 3 $ylabelwidth
a1f0: 5d 20 7b 62 72 65 61 6b 7d 0a 0a 20 20 20 69 66 ] {break}.. if
a200: 20 7b 20 24 62 61 72 68 65 69 67 68 74 20 21 3d { $barheight !=
a210: 20 30 20 7d 20 7b 0a 20 20 20 20 20 20 20 73 65 0 } {. se
a220: 74 20 6e 6f 69 74 65 6d 73 20 5b 65 78 70 72 20 t noitems [expr
a230: 7b 28 24 70 78 6d 61 78 2d 24 70 78 6d 69 6e 29 {($pxmax-$pxmin)
a240: 2f 64 6f 75 62 6c 65 28 24 62 61 72 68 65 69 67 /double($barheig
a250: 68 74 29 7d 5d 0a 20 20 20 7d 0a 20 20 20 73 65 ht)}]. }. se
a260: 74 20 73 63 61 6c 69 6e 67 28 24 77 2c 62 61 72 t scaling($w,bar
a270: 68 65 69 67 68 74 29 20 24 62 61 72 68 65 69 67 height) $barheig
a280: 68 74 0a 0a 20 20 20 73 65 74 20 79 6d 69 6e 20 ht.. set ymin
a290: 20 30 2e 30 0a 20 20 20 73 65 74 20 79 6d 61 78 0.0. set ymax
a2a0: 20 20 24 6e 6f 69 74 65 6d 73 0a 0a 20 20 20 73 $noitems.. s
a2b0: 65 74 20 78 6d 69 6e 20 20 5b 65 78 70 72 20 7b et xmin [expr {
a2c0: 31 2e 30 2a 5b 63 6c 6f 63 6b 20 73 63 61 6e 20 1.0*[clock scan
a2d0: 24 74 69 6d 65 5f 62 65 67 69 6e 5d 7d 5d 0a 20 $time_begin]}].
a2e0: 20 20 73 65 74 20 78 6d 61 78 20 20 5b 65 78 70 set xmax [exp
a2f0: 72 20 7b 31 2e 30 2a 5b 63 6c 6f 63 6b 20 73 63 r {1.0*[clock sc
a300: 61 6e 20 24 74 69 6d 65 5f 65 6e 64 5d 7d 5d 0a an $time_end]}].
a310: 0a 20 20 20 76 69 65 77 50 6f 72 74 20 20 20 20 . viewPort
a320: 20 20 20 20 20 24 77 20 24 70 78 6d 69 6e 20 24 $w $pxmin $
a330: 70 79 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 79 pymin $pxmax $py
a340: 6d 61 78 0a 20 20 20 77 6f 72 6c 64 43 6f 6f 72 max. worldCoor
a350: 64 69 6e 61 74 65 73 20 24 77 20 24 78 6d 69 6e dinates $w $xmin
a360: 20 20 24 79 6d 69 6e 20 20 24 78 6d 61 78 20 20 $ymin $xmax
a370: 24 79 6d 61 78 0a 0a 20 20 20 73 65 74 20 73 63 $ymax.. set sc
a380: 61 6c 69 6e 67 28 24 77 2c 63 75 72 72 65 6e 74 aling($w,current
a390: 29 20 24 79 6d 61 78 0a 20 20 20 73 65 74 20 73 ) $ymax. set s
a3a0: 63 61 6c 69 6e 67 28 24 77 2c 64 79 29 20 20 20 caling($w,dy)
a3b0: 20 20 20 2d 30 2e 37 0a 0a 20 20 20 23 0a 20 20 -0.7.. #.
a3c0: 20 23 20 44 72 61 77 20 74 68 65 20 62 61 63 6b # Draw the back
a3d0: 67 72 6f 75 6e 64 73 20 28 62 6f 74 68 20 69 6e grounds (both in
a3e0: 20 74 68 65 20 74 65 78 74 20 70 61 72 74 20 61 the text part a
a3f0: 6e 64 20 74 68 65 0a 20 20 20 23 20 67 72 61 70 nd the. # grap
a400: 68 69 63 61 6c 20 70 61 72 74 3b 20 74 68 65 20 hical part; the
a410: 74 65 78 74 20 70 61 72 74 20 68 61 73 20 74 68 text part has th
a420: 65 20 22 73 70 65 63 69 61 6c 22 20 74 61 67 0a e "special" tag.
a430: 20 20 20 23 20 22 45 64 69 74 22 20 74 6f 20 65 # "Edit" to e
a440: 6e 61 62 6c 65 20 61 20 47 55 49 20 74 6f 20 63 nable a GUI to c
a450: 68 61 6e 67 65 20 74 68 69 6e 67 73 29 0a 20 20 hange things).
a460: 20 23 0a 20 20 20 73 65 74 20 79 65 6e 64 20 30 #. set yend 0
a470: 2e 30 0a 20 20 20 66 6f 72 20 7b 20 73 65 74 20 .0. for { set
a480: 69 20 30 20 7d 20 7b 20 24 69 20 3c 20 24 6e 6f i 0 } { $i < $no
a490: 69 74 65 6d 73 20 7d 20 7b 20 69 6e 63 72 20 69 items } { incr i
a4a0: 20 7d 20 7b 0a 20 20 20 20 20 20 20 73 65 74 20 } {. set
a4b0: 79 62 65 67 69 6e 20 24 79 65 6e 64 0a 20 20 20 ybegin $yend.
a4c0: 20 20 20 20 73 65 74 20 79 65 6e 64 20 20 20 5b set yend [
a4d0: 65 78 70 72 20 7b 24 79 62 65 67 69 6e 2b 31 2e expr {$ybegin+1.
a4e0: 30 7d 5d 0a 20 20 20 20 20 20 20 66 6f 72 65 61 0}]. forea
a4f0: 63 68 20 7b 78 31 20 79 31 7d 20 5b 63 6f 6f 72 ch {x1 y1} [coor
a500: 64 73 54 6f 50 69 78 65 6c 20 24 77 20 24 78 6d dsToPixel $w $xm
a510: 69 6e 20 24 79 62 65 67 69 6e 5d 20 7b 62 72 65 in $ybegin] {bre
a520: 61 6b 7d 0a 20 20 20 20 20 20 20 66 6f 72 65 61 ak}. forea
a530: 63 68 20 7b 78 32 20 79 32 7d 20 5b 63 6f 6f 72 ch {x2 y2} [coor
a540: 64 73 54 6f 50 69 78 65 6c 20 24 77 20 24 78 6d dsToPixel $w $xm
a550: 61 78 20 24 79 65 6e 64 20 20 5d 20 7b 62 72 65 ax $yend ] {bre
a560: 61 6b 7d 0a 0a 20 20 20 20 20 20 20 69 66 20 7b ak}.. if {
a570: 20 24 69 25 32 20 3d 3d 20 30 20 7d 20 7b 0a 20 $i%2 == 0 } {.
a580: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 61 set ta
a590: 67 20 6f 64 64 0a 20 20 20 20 20 20 20 7d 20 65 g odd. } e
a5a0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 lse {.
a5b0: 20 73 65 74 20 74 61 67 20 65 76 65 6e 0a 20 20 set tag even.
a5c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 24 77 }. $w
a5d0: 20 63 72 65 61 74 65 20 72 65 63 74 61 6e 67 6c create rectangl
a5e0: 65 20 30 20 20 20 24 79 31 20 24 78 31 20 24 79 e 0 $y1 $x1 $y
a5f0: 32 20 2d 66 69 6c 6c 20 77 68 69 74 65 20 5c 0a 2 -fill white \.
a600: 20 20 20 20 20 20 20 20 20 20 20 2d 74 61 67 20 -tag
a610: 7b 45 64 69 74 20 76 65 72 74 73 63 72 6f 6c 6c {Edit vertscroll
a620: 20 6c 6f 77 65 73 74 7d 20 2d 6f 75 74 6c 69 6e lowest} -outlin
a630: 65 20 77 68 69 74 65 0a 20 20 20 20 20 20 20 24 e white. $
a640: 77 20 63 72 65 61 74 65 20 72 65 63 74 61 6e 67 w create rectang
a650: 6c 65 20 24 78 31 20 24 79 31 20 24 78 32 20 24 le $x1 $y1 $x2 $
a660: 79 32 20 2d 66 69 6c 6c 20 77 68 69 74 65 20 5c y2 -fill white \
a670: 0a 20 20 20 20 20 20 20 20 20 20 20 2d 74 61 67 . -tag
a680: 20 5b 6c 69 73 74 20 24 74 61 67 20 76 65 72 74 [list $tag vert
a690: 73 63 72 6f 6c 6c 20 6c 6f 77 65 73 74 5d 20 2d scroll lowest] -
a6a0: 6f 75 74 6c 69 6e 65 20 77 68 69 74 65 0a 20 20 outline white.
a6b0: 20 7d 0a 0a 20 20 20 23 0a 20 20 20 23 20 44 65 }.. #. # De
a6c0: 66 61 75 6c 74 20 63 6f 6c 6f 75 72 73 20 61 6e fault colours an
a6d0: 64 20 66 6f 6e 74 73 0a 20 20 20 23 0a 20 20 20 d fonts. #.
a6e0: 47 61 6e 74 74 43 6f 6c 6f 72 20 24 77 20 64 65 GanttColor $w de
a6f0: 73 63 72 69 70 74 69 6f 6e 20 62 6c 61 63 6b 0a scription black.
a700: 20 20 20 47 61 6e 74 74 43 6f 6c 6f 72 20 24 77 GanttColor $w
a710: 20 63 6f 6d 70 6c 65 74 65 64 20 20 20 6c 69 67 completed lig
a720: 68 74 62 6c 75 65 0a 20 20 20 47 61 6e 74 74 43 htblue. GanttC
a730: 6f 6c 6f 72 20 24 77 20 6c 65 66 74 20 20 20 20 olor $w left
a740: 20 20 20 20 77 68 69 74 65 0a 20 20 20 47 61 6e white. Gan
a750: 74 74 43 6f 6c 6f 72 20 24 77 20 6f 64 64 20 20 ttColor $w odd
a760: 20 20 20 20 20 20 20 77 68 69 74 65 0a 20 20 20 white.
a770: 47 61 6e 74 74 43 6f 6c 6f 72 20 24 77 20 65 76 GanttColor $w ev
a780: 65 6e 20 20 20 20 20 20 20 20 6c 69 67 68 74 67 en lightg
a790: 72 65 79 0a 20 20 20 47 61 6e 74 74 43 6f 6c 6f rey. GanttColo
a7a0: 72 20 24 77 20 73 75 6d 6d 61 72 79 20 20 20 20 r $w summary
a7b0: 20 62 6c 61 63 6b 0a 20 20 20 47 61 6e 74 74 43 black. GanttC
a7c0: 6f 6c 6f 72 20 24 77 20 73 75 6d 6d 61 72 79 62 olor $w summaryb
a7d0: 61 72 20 20 62 6c 61 63 6b 0a 20 20 20 47 61 6e ar black. Gan
a7e0: 74 74 46 6f 6e 74 20 20 24 77 20 64 65 73 63 72 ttFont $w descr
a7f0: 69 70 74 69 6f 6e 20 22 74 69 6d 65 73 20 31 30 iption "times 10
a800: 22 0a 20 20 20 47 61 6e 74 74 46 6f 6e 74 20 20 ". GanttFont
a810: 24 77 20 73 75 6d 6d 61 72 79 20 20 20 20 20 22 $w summary "
a820: 74 69 6d 65 73 20 31 30 20 62 6f 6c 64 22 0a 20 times 10 bold".
a830: 20 20 47 61 6e 74 74 46 6f 6e 74 20 20 24 77 20 GanttFont $w
a840: 73 63 61 6c 65 20 20 20 20 20 20 20 22 74 69 6d scale "tim
a850: 65 73 20 37 22 0a 20 20 20 44 65 66 61 75 6c 74 es 7". Default
a860: 42 61 6c 6c 6f 6f 6e 20 24 77 0a 0a 20 20 20 44 Balloon $w.. D
a870: 72 61 77 53 63 72 6f 6c 6c 4d 61 73 6b 20 24 77 rawScrollMask $w
a880: 0a 20 20 20 73 65 74 20 73 63 61 6c 69 6e 67 28 . set scaling(
a890: 24 77 2c 63 75 72 70 6f 73 29 20 20 30 0a 20 20 $w,curpos) 0.
a8a0: 20 73 65 74 20 73 63 61 6c 69 6e 67 28 24 77 2c set scaling($w,
a8b0: 63 75 72 68 70 6f 73 29 20 30 0a 0a 20 20 20 72 curhpos) 0.. r
a8c0: 65 74 75 72 6e 20 24 6e 65 77 63 68 61 72 74 0a eturn $newchart.
a8d0: 7d 0a 0a 23 20 63 72 65 61 74 65 33 44 50 6c 6f }..# create3DPlo
a8e0: 74 20 2d 2d 0a 23 20 20 20 20 43 72 65 61 74 65 t --.# Create
a8f0: 20 61 20 73 69 6d 70 6c 65 20 33 44 20 70 6c 6f a simple 3D plo
a900: 74 0a 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 t.# Arguments:.#
a910: 20 20 20 20 77 20 20 20 20 20 20 20 20 20 20 20 w
a920: 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 61 6e 76 Name of the canv
a930: 61 73 0a 23 20 20 20 20 78 73 63 61 6c 65 20 20 as.# xscale
a940: 20 20 20 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 Minimum, max
a950: 69 6d 75 6d 20 61 6e 64 20 73 74 65 70 20 66 6f imum and step fo
a960: 72 20 78 2d 61 78 69 73 20 28 69 6e 69 74 69 61 r x-axis (initia
a970: 6c 29 0a 23 20 20 20 20 79 73 63 61 6c 65 20 20 l).# yscale
a980: 20 20 20 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 Minimum, max
a990: 69 6d 75 6d 20 61 6e 64 20 73 74 65 70 20 66 6f imum and step fo
a9a0: 72 20 79 2d 61 78 69 73 0a 23 20 20 20 20 7a 73 r y-axis.# zs
a9b0: 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d 75 cale Minimu
a9c0: 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 73 m, maximum and s
a9d0: 74 65 70 20 66 6f 72 20 7a 2d 61 78 69 73 0a 23 tep for z-axis.#
a9e0: 20 52 65 73 75 6c 74 3a 0a 23 20 20 20 20 4e 61 Result:.# Na
a9f0: 6d 65 20 6f 66 20 61 20 6e 65 77 20 63 6f 6d 6d me of a new comm
aa00: 61 6e 64 0a 23 20 4e 6f 74 65 3a 0a 23 20 20 20 and.# Note:.#
aa10: 20 54 68 65 20 65 6e 74 69 72 65 20 63 61 6e 76 The entire canv
aa20: 61 73 20 77 69 6c 6c 20 62 65 20 64 65 64 69 63 as will be dedic
aa30: 61 74 65 64 20 74 6f 20 74 68 65 20 33 44 20 70 ated to the 3D p
aa40: 6c 6f 74 0a 23 0a 70 72 6f 63 20 3a 3a 50 6c 6f lot.#.proc ::Plo
aa50: 74 63 68 61 72 74 3a 3a 63 72 65 61 74 65 33 44 tchart::create3D
aa60: 50 6c 6f 74 20 7b 20 77 20 78 73 63 61 6c 65 20 Plot { w xscale
aa70: 79 73 63 61 6c 65 20 7a 73 63 61 6c 65 20 7d 20 yscale zscale }
aa80: 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 {. variable da
aa90: 74 61 5f 73 65 72 69 65 73 0a 0a 20 20 20 66 6f ta_series.. fo
aaa0: 72 65 61 63 68 20 73 20 5b 61 72 72 61 79 20 6e reach s [array n
aab0: 61 6d 65 73 20 64 61 74 61 5f 73 65 72 69 65 73 ames data_series
aac0: 20 22 24 77 2c 2a 22 5d 20 7b 0a 20 20 20 20 20 "$w,*"] {.
aad0: 20 75 6e 73 65 74 20 64 61 74 61 5f 73 65 72 69 unset data_seri
aae0: 65 73 28 24 73 29 0a 20 20 20 7d 0a 0a 20 20 20 es($s). }..
aaf0: 73 65 74 20 6e 65 77 63 68 61 72 74 20 22 33 64 set newchart "3d
ab00: 70 6c 6f 74 5f 24 77 22 0a 20 20 20 69 6e 74 65 plot_$w". inte
ab10: 72 70 20 61 6c 69 61 73 20 7b 7d 20 24 6e 65 77 rp alias {} $new
ab20: 63 68 61 72 74 20 7b 7d 20 3a 3a 50 6c 6f 74 63 chart {} ::Plotc
ab30: 68 61 72 74 3a 3a 50 6c 6f 74 48 61 6e 64 6c 65 hart::PlotHandle
ab40: 72 20 33 64 70 6c 6f 74 20 24 77 0a 20 20 20 43 r 3dplot $w. C
ab50: 6f 70 79 43 6f 6e 66 69 67 20 33 64 70 6c 6f 74 opyConfig 3dplot
ab60: 20 24 77 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 $w.. foreach
ab70: 7b 70 78 6d 69 6e 20 70 79 6d 69 6e 20 70 78 6d {pxmin pymin pxm
ab80: 61 78 20 70 79 6d 61 78 7d 20 5b 4d 61 72 67 69 ax pymax} [Margi
ab90: 6e 73 33 44 50 6c 6f 74 20 24 77 5d 20 7b 62 72 ns3DPlot $w] {br
aba0: 65 61 6b 7d 0a 0a 20 20 20 66 6f 72 65 61 63 68 eak}.. foreach
abb0: 20 7b 78 6d 69 6e 20 78 6d 61 78 20 78 73 74 65 {xmin xmax xste
abc0: 70 7d 20 24 78 73 63 61 6c 65 20 7b 62 72 65 61 p} $xscale {brea
abd0: 6b 7d 0a 20 20 20 66 6f 72 65 61 63 68 20 7b 79 k}. foreach {y
abe0: 6d 69 6e 20 79 6d 61 78 20 79 73 74 65 70 7d 20 min ymax ystep}
abf0: 24 79 73 63 61 6c 65 20 7b 62 72 65 61 6b 7d 0a $yscale {break}.
ac00: 20 20 20 66 6f 72 65 61 63 68 20 7b 7a 6d 69 6e foreach {zmin
ac10: 20 7a 6d 61 78 20 7a 73 74 65 70 7d 20 24 7a 73 zmax zstep} $zs
ac20: 63 61 6c 65 20 7b 62 72 65 61 6b 7d 0a 0a 20 20 cale {break}..
ac30: 20 76 69 65 77 50 6f 72 74 20 20 20 20 20 20 20 viewPort
ac40: 20 20 20 20 24 77 20 24 70 78 6d 69 6e 20 24 70 $w $pxmin $p
ac50: 79 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 79 6d ymin $pxmax $pym
ac60: 61 78 0a 20 20 20 77 6f 72 6c 64 33 44 43 6f 6f ax. world3DCoo
ac70: 72 64 69 6e 61 74 65 73 20 24 77 20 24 78 6d 69 rdinates $w $xmi
ac80: 6e 20 20 24 79 6d 69 6e 20 20 24 7a 6d 69 6e 20 n $ymin $zmin
ac90: 20 24 78 6d 61 78 20 20 24 79 6d 61 78 20 24 7a $xmax $ymax $z
aca0: 6d 61 78 0a 0a 20 20 20 44 72 61 77 33 44 41 78 max.. Draw3DAx
acb0: 65 73 20 20 20 20 20 20 20 20 20 24 77 20 24 78 es $w $x
acc0: 6d 69 6e 20 20 24 79 6d 69 6e 20 20 24 7a 6d 69 min $ymin $zmi
acd0: 6e 20 20 24 78 6d 61 78 20 20 24 79 6d 61 78 20 n $xmax $ymax
ace0: 24 7a 6d 61 78 20 5c 0a 20 20 20 20 20 20 20 20 $zmax \.
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ad00: 20 24 78 73 74 65 70 20 24 79 73 74 65 70 20 24 $xstep $ystep $
ad10: 7a 73 74 65 70 0a 20 20 20 44 65 66 61 75 6c 74 zstep. Default
ad20: 4c 65 67 65 6e 64 20 20 20 20 20 20 24 77 0a 20 Legend $w.
ad30: 20 20 44 65 66 61 75 6c 74 42 61 6c 6c 6f 6f 6e DefaultBalloon
ad40: 20 20 20 20 20 24 77 0a 0a 20 20 20 53 65 74 43 $w.. SetC
ad50: 6f 6c 6f 75 72 73 20 24 77 20 67 72 65 79 20 62 olours $w grey b
ad60: 6c 61 63 6b 0a 0a 20 20 20 72 65 74 75 72 6e 20 lack.. return
ad70: 24 6e 65 77 63 68 61 72 74 0a 7d 0a 0a 23 20 63 $newchart.}..# c
ad80: 72 65 61 74 65 33 44 42 61 72 63 68 61 72 74 20 reate3DBarchart
ad90: 2d 2d 0a 23 20 20 20 20 43 72 65 61 74 65 20 61 --.# Create a
ada0: 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 72 61 command for dra
adb0: 77 69 6e 67 20 61 20 62 61 72 63 68 61 72 74 20 wing a barchart
adc0: 77 69 74 68 20 76 65 72 74 69 63 61 6c 20 33 44 with vertical 3D
add0: 20 62 61 72 73 0a 23 20 41 72 67 75 6d 65 6e 74 bars.# Argument
ade0: 73 3a 0a 23 20 20 20 20 77 20 20 20 20 20 20 20 s:.# w
adf0: 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 Name of the
ae00: 63 61 6e 76 61 73 0a 23 20 20 20 20 79 73 63 61 canvas.# ysca
ae10: 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d 75 6d 2c le Minimum,
ae20: 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 73 74 65 maximum and ste
ae30: 70 20 66 6f 72 20 79 2d 61 78 69 73 0a 23 20 20 p for y-axis.#
ae40: 20 20 6e 6f 62 61 72 73 20 20 20 20 20 20 4e 75 nobars Nu
ae50: 6d 62 65 72 20 6f 66 20 62 61 72 73 20 74 6f 20 mber of bars to
ae60: 62 65 20 64 72 61 77 6e 0a 23 20 52 65 73 75 6c be drawn.# Resul
ae70: 74 3a 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 20 t:.# Name of
ae80: 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0a 23 20 a new command.#
ae90: 4e 6f 74 65 3a 0a 23 20 20 20 20 54 68 65 20 65 Note:.# The e
aea0: 6e 74 69 72 65 20 63 61 6e 76 61 73 20 77 69 6c ntire canvas wil
aeb0: 6c 20 62 65 20 64 65 64 69 63 61 74 65 64 20 74 l be dedicated t
aec0: 6f 20 74 68 65 20 62 61 72 63 68 61 72 74 2e 0a o the barchart..
aed0: 23 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 #.proc ::Plotcha
aee0: 72 74 3a 3a 63 72 65 61 74 65 33 44 42 61 72 63 rt::create3DBarc
aef0: 68 61 72 74 20 7b 20 77 20 79 73 63 61 6c 65 20 hart { w yscale
af00: 6e 6f 62 61 72 73 20 7d 20 7b 0a 20 20 20 76 61 nobars } {. va
af10: 72 69 61 62 6c 65 20 64 61 74 61 5f 73 65 72 69 riable data_seri
af20: 65 73 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 73 es.. foreach s
af30: 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 64 61 [array names da
af40: 74 61 5f 73 65 72 69 65 73 20 22 24 77 2c 2a 22 ta_series "$w,*"
af50: 5d 20 7b 0a 20 20 20 20 20 20 75 6e 73 65 74 20 ] {. unset
af60: 64 61 74 61 5f 73 65 72 69 65 73 28 24 73 29 0a data_series($s).
af70: 20 20 20 7d 0a 0a 20 20 20 73 65 74 20 6e 65 77 }.. set new
af80: 63 68 61 72 74 20 22 33 64 62 61 72 63 68 61 72 chart "3dbarchar
af90: 74 5f 24 77 22 0a 20 20 20 69 6e 74 65 72 70 20 t_$w". interp
afa0: 61 6c 69 61 73 20 7b 7d 20 24 6e 65 77 63 68 61 alias {} $newcha
afb0: 72 74 20 7b 7d 20 3a 3a 50 6c 6f 74 63 68 61 72 rt {} ::Plotchar
afc0: 74 3a 3a 50 6c 6f 74 48 61 6e 64 6c 65 72 20 33 t::PlotHandler 3
afd0: 64 62 61 72 73 20 24 77 0a 20 20 20 43 6f 70 79 dbars $w. Copy
afe0: 43 6f 6e 66 69 67 20 33 64 62 61 72 73 20 24 77 Config 3dbars $w
aff0: 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 7b 70 78 .. foreach {px
b000: 6d 69 6e 20 70 79 6d 69 6e 20 70 78 6d 61 78 20 min pymin pxmax
b010: 70 79 6d 61 78 7d 20 5b 4d 61 72 67 69 6e 73 52 pymax} [MarginsR
b020: 65 63 74 61 6e 67 6c 65 20 24 77 20 34 5d 20 7b ectangle $w 4] {
b030: 62 72 65 61 6b 7d 0a 0a 20 20 20 73 65 74 20 78 break}.. set x
b040: 6d 69 6e 20 20 30 2e 30 0a 20 20 20 73 65 74 20 min 0.0. set
b050: 78 6d 61 78 20 20 5b 65 78 70 72 20 7b 24 6e 6f xmax [expr {$no
b060: 62 61 72 73 20 2b 20 30 2e 31 7d 5d 0a 0a 20 20 bars + 0.1}]..
b070: 20 66 6f 72 65 61 63 68 20 7b 79 6d 69 6e 20 79 foreach {ymin y
b080: 6d 61 78 20 79 64 65 6c 74 7d 20 24 79 73 63 61 max ydelt} $ysca
b090: 6c 65 20 7b 62 72 65 61 6b 7d 0a 0a 20 20 20 69 le {break}.. i
b0a0: 66 20 7b 20 24 79 64 65 6c 74 20 3d 3d 20 30 2e f { $ydelt == 0.
b0b0: 30 20 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 0 } {. retu
b0c0: 72 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 rn -code error "
b0d0: 53 74 65 70 20 73 69 7a 65 20 63 61 6e 20 6e 6f Step size can no
b0e0: 74 20 62 65 20 7a 65 72 6f 22 0a 20 20 20 7d 0a t be zero". }.
b0f0: 0a 20 20 20 69 66 20 7b 20 28 24 79 6d 61 78 2d . if { ($ymax-
b100: 24 79 6d 69 6e 29 2a 24 79 64 65 6c 74 20 3c 20 $ymin)*$ydelt <
b110: 30 2e 30 20 7d 20 7b 0a 20 20 20 20 20 20 73 65 0.0 } {. se
b120: 74 20 79 64 65 6c 74 20 5b 65 78 70 72 20 7b 2d t ydelt [expr {-
b130: 24 79 64 65 6c 74 7d 5d 0a 20 20 20 7d 0a 0a 20 $ydelt}]. }..
b140: 20 20 76 69 65 77 50 6f 72 74 20 20 20 20 20 20 viewPort
b150: 20 20 20 24 77 20 24 70 78 6d 69 6e 20 24 70 79 $w $pxmin $py
b160: 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 79 6d 61 min $pxmax $pyma
b170: 78 0a 20 20 20 77 6f 72 6c 64 43 6f 6f 72 64 69 x. worldCoordi
b180: 6e 61 74 65 73 20 24 77 20 24 78 6d 69 6e 20 20 nates $w $xmin
b190: 24 79 6d 69 6e 20 20 24 78 6d 61 78 20 20 24 79 $ymin $xmax $y
b1a0: 6d 61 78 0a 0a 20 20 20 44 72 61 77 59 61 78 69 max.. DrawYaxi
b1b0: 73 20 20 20 20 20 20 20 20 24 77 20 24 79 6d 69 s $w $ymi
b1c0: 6e 20 20 24 79 6d 61 78 20 20 24 79 64 65 6c 74 n $ymax $ydelt
b1d0: 0a 20 20 23 44 72 61 77 4d 61 73 6b 20 20 20 20 . #DrawMask
b1e0: 20 20 20 20 20 24 77 20 2d 2d 20 6e 6f 6e 65 21 $w -- none!
b1f0: 0a 20 20 20 44 72 61 77 33 44 42 61 72 63 68 61 . Draw3DBarcha
b200: 72 74 20 20 20 24 77 20 24 79 73 63 61 6c 65 20 rt $w $yscale
b210: 24 6e 6f 62 61 72 73 0a 20 20 20 44 65 66 61 75 $nobars. Defau
b220: 6c 74 4c 65 67 65 6e 64 20 20 20 20 24 77 0a 20 ltLegend $w.
b230: 20 20 44 65 66 61 75 6c 74 42 61 6c 6c 6f 6f 6e DefaultBalloon
b240: 20 20 20 24 77 0a 0a 20 20 20 72 65 74 75 72 6e $w.. return
b250: 20 24 6e 65 77 63 68 61 72 74 0a 7d 0a 0a 23 20 $newchart.}..#
b260: 63 72 65 61 74 65 52 61 64 69 61 6c 63 68 61 72 createRadialchar
b270: 74 20 2d 2d 0a 23 20 20 20 20 43 72 65 61 74 65 t --.# Create
b280: 20 61 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 a command for d
b290: 72 61 77 69 6e 67 20 61 20 72 61 64 69 61 6c 20 rawing a radial
b2a0: 63 68 61 72 74 0a 23 20 41 72 67 75 6d 65 6e 74 chart.# Argument
b2b0: 73 3a 0a 23 20 20 20 20 77 20 20 20 20 20 20 20 s:.# w
b2c0: 20 20 20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 Name of the
b2d0: 63 61 6e 76 61 73 0a 23 20 20 20 20 6e 61 6d 65 canvas.# name
b2e0: 73 20 20 20 20 20 20 20 4e 61 6d 65 73 20 6f 66 s Names of
b2f0: 20 74 68 65 20 73 70 6f 6b 65 73 0a 23 20 20 20 the spokes.#
b300: 20 73 63 61 6c 65 20 20 20 20 20 20 20 53 63 61 scale Sca
b310: 6c 65 20 66 61 63 74 6f 72 20 66 6f 72 20 74 68 le factor for th
b320: 65 20 64 61 74 61 0a 23 20 20 20 20 73 74 79 6c e data.# styl
b330: 65 20 20 20 20 20 20 20 28 4f 70 74 69 6f 6e 61 e (Optiona
b340: 6c 29 20 73 74 79 6c 65 20 6f 66 20 74 68 65 20 l) style of the
b350: 63 68 61 72 74 20 28 6c 69 6e 65 73 2c 20 63 75 chart (lines, cu
b360: 6d 75 6c 61 74 69 76 65 20 6f 72 20 66 69 6c 6c mulative or fill
b370: 65 64 29 0a 23 20 52 65 73 75 6c 74 3a 0a 23 20 ed).# Result:.#
b380: 20 20 20 4e 61 6d 65 20 6f 66 20 61 20 6e 65 77 Name of a new
b390: 20 63 6f 6d 6d 61 6e 64 0a 23 20 4e 6f 74 65 3a command.# Note:
b3a0: 0a 23 20 20 20 20 54 68 65 20 65 6e 74 69 72 65 .# The entire
b3b0: 20 63 61 6e 76 61 73 20 77 69 6c 6c 20 62 65 20 canvas will be
b3c0: 64 65 64 69 63 61 74 65 64 20 74 6f 20 74 68 65 dedicated to the
b3d0: 20 72 61 64 69 61 6c 20 63 68 61 72 74 2e 0a 23 radial chart..#
b3e0: 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 .proc ::Plotchar
b3f0: 74 3a 3a 63 72 65 61 74 65 52 61 64 69 61 6c 63 t::createRadialc
b400: 68 61 72 74 20 7b 20 77 20 6e 61 6d 65 73 20 73 hart { w names s
b410: 63 61 6c 65 20 7b 73 74 79 6c 65 20 6c 69 6e 65 cale {style line
b420: 73 7d 20 7d 20 7b 0a 20 20 20 76 61 72 69 61 62 s} } {. variab
b430: 6c 65 20 73 65 74 74 69 6e 67 73 0a 20 20 20 76 le settings. v
b440: 61 72 69 61 62 6c 65 20 64 61 74 61 5f 73 65 72 ariable data_ser
b450: 69 65 73 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 ies.. foreach
b460: 73 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 64 s [array names d
b470: 61 74 61 5f 73 65 72 69 65 73 20 22 24 77 2c 2a ata_series "$w,*
b480: 22 5d 20 7b 0a 20 20 20 20 20 20 75 6e 73 65 74 "] {. unset
b490: 20 64 61 74 61 5f 73 65 72 69 65 73 28 24 73 29 data_series($s)
b4a0: 0a 20 20 20 7d 0a 0a 20 20 20 73 65 74 20 6e 65 . }.. set ne
b4b0: 77 63 68 61 72 74 20 22 72 61 64 69 61 6c 63 68 wchart "radialch
b4c0: 61 72 74 5f 24 77 22 0a 20 20 20 69 6e 74 65 72 art_$w". inter
b4d0: 70 20 61 6c 69 61 73 20 7b 7d 20 24 6e 65 77 63 p alias {} $newc
b4e0: 68 61 72 74 20 7b 7d 20 3a 3a 50 6c 6f 74 63 68 hart {} ::Plotch
b4f0: 61 72 74 3a 3a 50 6c 6f 74 48 61 6e 64 6c 65 72 art::PlotHandler
b500: 20 72 61 64 69 61 6c 63 68 61 72 74 20 24 77 0a radialchart $w.
b510: 20 20 20 43 6f 70 79 43 6f 6e 66 69 67 20 72 61 CopyConfig ra
b520: 64 69 61 6c 63 68 61 72 74 20 24 77 0a 0a 20 20 dialchart $w..
b530: 20 66 6f 72 65 61 63 68 20 7b 70 78 6d 69 6e 20 foreach {pxmin
b540: 70 79 6d 69 6e 20 70 78 6d 61 78 20 70 79 6d 61 pymin pxmax pyma
b550: 78 7d 20 5b 4d 61 72 67 69 6e 73 43 69 72 63 6c x} [MarginsCircl
b560: 65 20 24 77 5d 20 7b 62 72 65 61 6b 7d 0a 0a 20 e $w] {break}..
b570: 20 20 76 69 65 77 50 6f 72 74 20 24 77 20 24 70 viewPort $w $p
b580: 78 6d 69 6e 20 24 70 79 6d 69 6e 20 24 70 78 6d xmin $pymin $pxm
b590: 61 78 20 24 70 79 6d 61 78 0a 20 20 20 24 77 20 ax $pymax. $w
b5a0: 63 72 65 61 74 65 20 6f 76 61 6c 20 24 70 78 6d create oval $pxm
b5b0: 69 6e 20 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 in $pymin $pxmax
b5c0: 20 24 70 79 6d 61 78 0a 0a 20 20 20 73 65 74 20 $pymax.. set
b5d0: 73 65 74 74 69 6e 67 73 28 24 77 2c 73 63 61 6c settings($w,scal
b5e0: 65 29 20 20 5b 65 78 70 72 20 7b 64 6f 75 62 6c e) [expr {doubl
b5f0: 65 28 24 73 63 61 6c 65 29 7d 5d 0a 20 20 20 73 e($scale)}]. s
b600: 65 74 20 73 65 74 74 69 6e 67 73 28 24 77 2c 73 et settings($w,s
b610: 74 79 6c 65 29 20 20 24 73 74 79 6c 65 0a 20 20 tyle) $style.
b620: 20 73 65 74 20 73 65 74 74 69 6e 67 73 28 24 77 set settings($w
b630: 2c 6e 75 6d 62 65 72 29 20 5b 6c 6c 65 6e 67 74 ,number) [llengt
b640: 68 20 24 6e 61 6d 65 73 5d 0a 0a 20 20 20 44 72 h $names].. Dr
b650: 61 77 52 61 64 69 61 6c 53 70 6f 6b 65 73 20 24 awRadialSpokes $
b660: 77 20 24 6e 61 6d 65 73 0a 20 20 20 44 65 66 61 w $names. Defa
b670: 75 6c 74 4c 65 67 65 6e 64 20 20 24 77 0a 20 20 ultLegend $w.
b680: 20 44 65 66 61 75 6c 74 42 61 6c 6c 6f 6f 6e 20 DefaultBalloon
b690: 24 77 0a 0a 20 20 20 72 65 74 75 72 6e 20 24 6e $w.. return $n
b6a0: 65 77 63 68 61 72 74 0a 7d 0a 0a 23 20 63 72 65 ewchart.}..# cre
b6b0: 61 74 65 54 58 50 6c 6f 74 20 2d 2d 0a 23 20 20 ateTXPlot --.#
b6c0: 20 20 43 72 65 61 74 65 20 61 20 63 6f 6d 6d 61 Create a comma
b6d0: 6e 64 20 66 6f 72 20 64 72 61 77 69 6e 67 20 61 nd for drawing a
b6e0: 20 54 58 20 70 6c 6f 74 20 28 78 20 76 65 72 73 TX plot (x vers
b6f0: 75 73 20 64 61 74 65 2f 74 69 6d 65 29 0a 23 20 us date/time).#
b700: 41 72 67 75 6d 65 6e 74 73 3a 0a 23 20 20 20 20 Arguments:.#
b710: 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d 65 w Name
b720: 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 0a 23 of the canvas.#
b730: 20 20 20 20 74 73 63 61 6c 65 20 20 20 20 20 20 tscale
b740: 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d Minimum, maximum
b750: 20 61 6e 64 20 73 74 65 70 20 66 6f 72 20 64 61 and step for da
b760: 74 65 2f 74 69 6d 65 2d 61 78 69 73 20 28 69 6e te/time-axis (in
b770: 69 74 69 61 6c 29 0a 23 20 20 20 20 20 20 20 20 itial).#
b780: 20 20 20 20 20 20 20 20 28 76 61 6c 75 65 73 20 (values
b790: 6d 75 73 74 20 62 65 20 76 61 6c 69 64 20 64 61 must be valid da
b7a0: 74 65 73 20 61 6e 64 20 74 68 65 20 73 74 65 70 tes and the step
b7b0: 20 69 73 20 69 6e 20 64 61 79 73 29 0a 23 20 20 is in days).#
b7c0: 20 20 78 73 63 61 6c 65 20 20 20 20 20 20 4d 69 xscale Mi
b7d0: 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 nimum, maximum a
b7e0: 6e 64 20 73 74 65 70 20 66 6f 72 20 76 65 72 74 nd step for vert
b7f0: 69 63 61 6c 20 61 78 69 73 0a 23 20 52 65 73 75 ical axis.# Resu
b800: 6c 74 3a 0a 23 20 20 20 20 4e 61 6d 65 20 6f 66 lt:.# Name of
b810: 20 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 0a 23 a new command.#
b820: 20 4e 6f 74 65 3a 0a 23 20 20 20 20 54 68 65 20 Note:.# The
b830: 65 6e 74 69 72 65 20 63 61 6e 76 61 73 20 77 69 entire canvas wi
b840: 6c 6c 20 62 65 20 64 65 64 69 63 61 74 65 64 20 ll be dedicated
b850: 74 6f 20 74 68 65 20 54 58 20 70 6c 6f 74 2e 0a to the TX plot..
b860: 23 20 20 20 20 54 68 65 20 70 6c 6f 74 20 77 69 # The plot wi
b870: 6c 6c 20 62 65 20 64 72 61 77 6e 20 77 69 74 68 ll be drawn with
b880: 20 61 78 65 73 0a 23 0a 70 72 6f 63 20 3a 3a 50 axes.#.proc ::P
b890: 6c 6f 74 63 68 61 72 74 3a 3a 63 72 65 61 74 65 lotchart::create
b8a0: 54 58 50 6c 6f 74 20 7b 20 77 20 74 73 63 61 6c TXPlot { w tscal
b8b0: 65 20 78 73 63 61 6c 65 20 7d 20 7b 0a 20 20 20 e xscale } {.
b8c0: 76 61 72 69 61 62 6c 65 20 64 61 74 61 5f 73 65 variable data_se
b8d0: 72 69 65 73 0a 0a 20 20 20 66 6f 72 65 61 63 68 ries.. foreach
b8e0: 20 73 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 s [array names
b8f0: 64 61 74 61 5f 73 65 72 69 65 73 20 22 24 77 2c data_series "$w,
b900: 2a 22 5d 20 7b 0a 20 20 20 20 20 20 75 6e 73 65 *"] {. unse
b910: 74 20 64 61 74 61 5f 73 65 72 69 65 73 28 24 73 t data_series($s
b920: 29 0a 20 20 20 7d 0a 0a 20 20 20 73 65 74 20 6e ). }.. set n
b930: 65 77 63 68 61 72 74 20 22 74 78 70 6c 6f 74 5f ewchart "txplot_
b940: 24 77 22 0a 20 20 20 69 6e 74 65 72 70 20 61 6c $w". interp al
b950: 69 61 73 20 7b 7d 20 24 6e 65 77 63 68 61 72 74 ias {} $newchart
b960: 20 7b 7d 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a {} ::Plotchart:
b970: 3a 50 6c 6f 74 48 61 6e 64 6c 65 72 20 74 78 70 :PlotHandler txp
b980: 6c 6f 74 20 24 77 0a 20 20 20 43 6f 70 79 43 6f lot $w. CopyCo
b990: 6e 66 69 67 20 74 78 70 6c 6f 74 20 24 77 0a 0a nfig txplot $w..
b9a0: 20 20 20 66 6f 72 65 61 63 68 20 7b 70 78 6d 69 foreach {pxmi
b9b0: 6e 20 70 79 6d 69 6e 20 70 78 6d 61 78 20 70 79 n pymin pxmax py
b9c0: 6d 61 78 7d 20 5b 4d 61 72 67 69 6e 73 52 65 63 max} [MarginsRec
b9d0: 74 61 6e 67 6c 65 20 24 77 5d 20 7b 62 72 65 61 tangle $w] {brea
b9e0: 6b 7d 0a 0a 20 20 20 66 6f 72 65 61 63 68 20 7b k}.. foreach {
b9f0: 74 6d 69 6e 20 74 6d 61 78 20 74 64 65 6c 74 7d tmin tmax tdelt}
ba00: 20 24 74 73 63 61 6c 65 20 7b 62 72 65 61 6b 7d $tscale {break}
ba10: 0a 0a 20 20 20 73 65 74 20 78 6d 69 6e 20 20 5b .. set xmin [
ba20: 63 6c 6f 63 6b 20 73 63 61 6e 20 24 74 6d 69 6e clock scan $tmin
ba30: 5d 0a 20 20 20 73 65 74 20 78 6d 61 78 20 20 5b ]. set xmax [
ba40: 63 6c 6f 63 6b 20 73 63 61 6e 20 24 74 6d 61 78 clock scan $tmax
ba50: 5d 0a 20 20 20 73 65 74 20 78 64 65 6c 74 20 5b ]. set xdelt [
ba60: 65 78 70 72 20 7b 38 36 34 30 30 2a 24 74 64 65 expr {86400*$tde
ba70: 6c 74 7d 5d 0a 0a 20 20 20 66 6f 72 65 61 63 68 lt}].. foreach
ba80: 20 7b 79 6d 69 6e 20 79 6d 61 78 20 79 64 65 6c {ymin ymax ydel
ba90: 74 7d 20 24 78 73 63 61 6c 65 20 7b 62 72 65 61 t} $xscale {brea
baa0: 6b 7d 0a 0a 20 20 20 69 66 20 7b 20 24 78 64 65 k}.. if { $xde
bab0: 6c 74 20 3d 3d 20 30 2e 30 20 7c 7c 20 24 79 64 lt == 0.0 || $yd
bac0: 65 6c 74 20 3d 3d 20 30 2e 30 20 7d 20 7b 0a 20 elt == 0.0 } {.
bad0: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 return -cod
bae0: 65 20 65 72 72 6f 72 20 22 53 74 65 70 20 73 69 e error "Step si
baf0: 7a 65 20 63 61 6e 20 6e 6f 74 20 62 65 20 7a 65 ze can not be ze
bb00: 72 6f 22 0a 20 20 20 7d 0a 0a 20 20 20 69 66 20 ro". }.. if
bb10: 7b 20 28 24 78 6d 61 78 2d 24 78 6d 69 6e 29 2a { ($xmax-$xmin)*
bb20: 24 78 64 65 6c 74 20 3c 20 30 2e 30 20 7d 20 7b $xdelt < 0.0 } {
bb30: 0a 20 20 20 20 20 20 73 65 74 20 78 64 65 6c 74 . set xdelt
bb40: 20 5b 65 78 70 72 20 7b 2d 24 78 64 65 6c 74 7d [expr {-$xdelt}
bb50: 5d 0a 20 20 20 7d 0a 20 20 20 69 66 20 7b 20 28 ]. }. if { (
bb60: 24 79 6d 61 78 2d 24 79 6d 69 6e 29 2a 24 79 64 $ymax-$ymin)*$yd
bb70: 65 6c 74 20 3c 20 30 2e 30 20 7d 20 7b 0a 20 20 elt < 0.0 } {.
bb80: 20 20 20 20 73 65 74 20 79 64 65 6c 74 20 5b 65 set ydelt [e
bb90: 78 70 72 20 7b 2d 24 79 64 65 6c 74 7d 5d 0a 20 xpr {-$ydelt}].
bba0: 20 20 7d 0a 0a 20 20 20 76 69 65 77 50 6f 72 74 }.. viewPort
bbb0: 20 20 20 20 20 20 20 20 20 24 77 20 24 70 78 6d $w $pxm
bbc0: 69 6e 20 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 in $pymin $pxmax
bbd0: 20 24 70 79 6d 61 78 0a 20 20 20 77 6f 72 6c 64 $pymax. world
bbe0: 43 6f 6f 72 64 69 6e 61 74 65 73 20 24 77 20 24 Coordinates $w $
bbf0: 78 6d 69 6e 20 20 24 79 6d 69 6e 20 20 24 78 6d xmin $ymin $xm
bc00: 61 78 20 20 24 79 6d 61 78 0a 0a 20 20 20 44 72 ax $ymax.. Dr
bc10: 61 77 59 61 78 69 73 20 20 20 20 20 20 20 20 24 awYaxis $
bc20: 77 20 24 79 6d 69 6e 20 20 24 79 6d 61 78 20 20 w $ymin $ymax
bc30: 24 79 64 65 6c 74 0a 20 20 20 44 72 61 77 54 69 $ydelt. DrawTi
bc40: 6d 65 61 78 69 73 20 20 20 20 20 24 77 20 24 74 meaxis $w $t
bc50: 6d 69 6e 20 20 24 74 6d 61 78 20 20 24 74 64 65 min $tmax $tde
bc60: 6c 74 0a 20 20 20 44 72 61 77 4d 61 73 6b 20 20 lt. DrawMask
bc70: 20 20 20 20 20 20 20 24 77 0a 20 20 20 44 65 66 $w. Def
bc80: 61 75 6c 74 4c 65 67 65 6e 64 20 20 20 20 24 77 aultLegend $w
bc90: 0a 20 20 20 44 65 66 61 75 6c 74 42 61 6c 6c 6f . DefaultBallo
bca0: 6f 6e 20 20 20 24 77 0a 0a 20 20 20 72 65 74 75 on $w.. retu
bcb0: 72 6e 20 24 6e 65 77 63 68 61 72 74 0a 7d 0a 0a rn $newchart.}..
bcc0: 23 20 63 72 65 61 74 65 52 69 67 68 74 41 78 69 # createRightAxi
bcd0: 73 20 2d 2d 0a 23 20 20 20 20 43 72 65 61 74 65 s --.# Create
bce0: 20 61 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 64 a command for d
bcf0: 72 61 77 69 6e 67 20 61 20 70 6c 6f 74 20 77 69 rawing a plot wi
bd00: 74 68 20 61 20 72 69 67 68 74 20 61 78 69 73 0a th a right axis.
bd10: 23 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 20 20 # Arguments:.#
bd20: 20 20 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 w Na
bd30: 6d 65 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 me of the canvas
bd40: 0a 23 20 20 20 20 79 73 63 61 6c 65 20 20 20 20 .# yscale
bd50: 20 20 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d Minimum, maxim
bd60: 75 6d 20 61 6e 64 20 73 74 65 70 20 66 6f 72 20 um and step for
bd70: 76 65 72 74 69 63 61 6c 20 61 78 69 73 0a 23 20 vertical axis.#
bd80: 52 65 73 75 6c 74 3a 0a 23 20 20 20 20 4e 61 6d Result:.# Nam
bd90: 65 20 6f 66 20 61 20 6e 65 77 20 63 6f 6d 6d 61 e of a new comma
bda0: 6e 64 0a 23 20 4e 6f 74 65 3a 0a 23 20 20 20 20 nd.# Note:.#
bdb0: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65 71 This command req
bdc0: 75 69 72 65 73 20 74 68 61 74 20 61 6e 6f 74 68 uires that anoth
bdd0: 65 72 20 70 6c 6f 74 20 63 6f 6d 6d 61 6e 64 20 er plot command
bde0: 68 61 73 20 62 65 65 6e 0a 23 20 20 20 20 63 72 has been.# cr
bdf0: 65 61 74 65 64 20 70 72 69 6f 72 20 74 6f 20 74 eated prior to t
be00: 68 69 73 20 6f 6e 65 2e 20 53 6f 6d 65 20 6f 66 his one. Some of
be10: 20 74 68 65 20 70 72 6f 70 65 72 74 69 65 73 20 the properties
be20: 66 72 6f 6d 20 74 68 61 74 0a 23 20 20 20 20 63 from that.# c
be30: 6f 6d 6d 61 6e 64 20 73 65 72 76 65 20 66 6f 72 ommand serve for
be40: 20 74 68 69 73 20 6f 6e 65 20 74 6f 6f 2e 0a 23 this one too..#
be50: 0a 70 72 6f 63 20 3a 3a 50 6c 6f 74 63 68 61 72 .proc ::Plotchar
be60: 74 3a 3a 63 72 65 61 74 65 52 69 67 68 74 41 78 t::createRightAx
be70: 69 73 20 7b 20 77 20 79 73 63 61 6c 65 20 7d 20 is { w yscale }
be80: 7b 0a 20 20 20 76 61 72 69 61 62 6c 65 20 64 61 {. variable da
be90: 74 61 5f 73 65 72 69 65 73 0a 20 20 20 76 61 72 ta_series. var
bea0: 69 61 62 6c 65 20 73 63 61 6c 69 6e 67 0a 0a 20 iable scaling..
beb0: 20 20 73 65 74 20 6e 65 77 63 68 61 72 74 20 22 set newchart "
bec0: 72 69 67 68 74 5f 24 77 22 0a 0a 20 20 20 23 0a right_$w".. #.
bed0: 20 20 20 23 20 43 68 65 63 6b 20 69 66 20 74 68 # Check if th
bee0: 65 72 65 20 69 73 20 61 6e 20 61 70 70 72 6f 70 ere is an approp
bef0: 72 69 61 74 65 20 70 6c 6f 74 20 61 6c 72 65 61 riate plot alrea
bf00: 64 79 20 64 65 66 69 6e 65 64 20 2d 20 74 68 65 dy defined - the
bf10: 72 65 0a 20 20 20 23 20 73 68 6f 75 6c 64 20 62 re. # should b
bf20: 65 20 6f 6e 6c 79 20 6f 6e 65 21 0a 20 20 20 23 e only one!. #
bf30: 0a 20 20 20 69 66 20 7b 20 5b 6c 6c 65 6e 67 74 . if { [llengt
bf40: 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 20 h [info command
bf50: 22 2a 5f 24 77 22 20 5d 5d 20 3d 3d 20 30 20 7d "*_$w" ]] == 0 }
bf60: 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e {. return
bf70: 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 54 68 -code error "Th
bf80: 65 72 65 20 73 68 6f 75 6c 64 20 62 65 20 61 20 ere should be a
bf90: 70 6c 6f 74 20 77 69 74 68 20 61 20 6c 65 66 74 plot with a left
bfa0: 20 61 78 69 73 20 61 6c 72 65 61 64 79 20 64 65 axis already de
bfb0: 66 69 6e 65 64 22 0a 20 20 20 7d 0a 20 20 20 69 fined". }. i
bfc0: 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e f { [llength [in
bfd0: 66 6f 20 63 6f 6d 6d 61 6e 64 20 22 2a 5f 24 77 fo command "*_$w
bfe0: 22 20 5d 5d 20 3e 3d 20 32 20 7d 20 7b 0a 20 20 " ]] >= 2 } {.
bff0: 20 20 20 20 20 69 66 20 7b 20 5b 6c 6c 65 6e 67 if { [lleng
c000: 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 th [info command
c010: 20 22 72 69 67 68 74 5f 24 77 22 5d 5d 20 3d 3d "right_$w"]] ==
c020: 20 30 20 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 0 } {.
c030: 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65 return -code e
c040: 72 72 6f 72 20 22 54 68 65 72 65 20 73 68 6f 75 rror "There shou
c050: 6c 64 20 62 65 20 6f 6e 6c 79 20 6f 6e 65 20 70 ld be only one p
c060: 6c 6f 74 20 63 6f 6d 6d 61 6e 64 20 66 6f 72 20 lot command for
c070: 74 68 69 73 20 77 69 64 67 65 74 20 28 24 77 29 this widget ($w)
c080: 22 0a 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ". } else
c090: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 63 61 74 {. cat
c0a0: 63 68 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 ch {.
c0b0: 20 20 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 interp alias
c0c0: 20 7b 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d {} $newchart {}
c0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 . }.
c0e0: 20 20 20 20 20 7d 0a 20 20 20 7d 0a 0a 20 20 20 }. }..
c0f0: 66 6f 72 65 61 63 68 20 73 20 5b 61 72 72 61 79 foreach s [array
c100: 20 6e 61 6d 65 73 20 64 61 74 61 5f 73 65 72 69 names data_seri
c110: 65 73 20 22 72 24 77 2c 2a 22 5d 20 7b 0a 20 20 es "r$w,*"] {.
c120: 20 20 20 20 75 6e 73 65 74 20 64 61 74 61 5f 73 unset data_s
c130: 65 72 69 65 73 28 24 73 29 0a 20 20 20 7d 0a 0a eries($s). }..
c140: 20 20 20 73 65 74 20 74 79 70 65 20 5b 6c 69 6e set type [lin
c150: 64 65 78 20 5b 69 6e 74 65 72 70 20 61 6c 69 61 dex [interp alia
c160: 73 20 7b 7d 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 s {} [info comma
c170: 6e 64 20 22 2a 5f 24 77 22 5d 5d 20 31 5d 0a 0a nd "*_$w"]] 1]..
c180: 20 20 20 69 6e 74 65 72 70 20 61 6c 69 61 73 20 interp alias
c190: 7b 7d 20 24 6e 65 77 63 68 61 72 74 20 7b 7d 20 {} $newchart {}
c1a0: 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 50 6c 6f ::Plotchart::Plo
c1b0: 74 48 61 6e 64 6c 65 72 20 24 74 79 70 65 20 72 tHandler $type r
c1c0: 24 77 0a 20 20 20 69 6e 74 65 72 70 20 61 6c 69 $w. interp ali
c1d0: 61 73 20 7b 7d 20 72 24 77 20 20 20 20 20 20 20 as {} r$w
c1e0: 7b 7d 20 24 77 0a 20 20 20 43 6f 70 79 43 6f 6e {} $w. CopyCon
c1f0: 66 69 67 20 24 74 79 70 65 20 72 24 77 0a 0a 20 fig $type r$w..
c200: 20 20 73 65 74 20 78 6d 69 6e 20 24 73 63 61 6c set xmin $scal
c210: 69 6e 67 28 24 77 2c 78 6d 69 6e 29 0a 20 20 20 ing($w,xmin).
c220: 73 65 74 20 78 6d 61 78 20 24 73 63 61 6c 69 6e set xmax $scalin
c230: 67 28 24 77 2c 78 6d 61 78 29 0a 0a 20 20 20 73 g($w,xmax).. s
c240: 65 74 20 70 78 6d 69 6e 20 24 73 63 61 6c 69 6e et pxmin $scalin
c250: 67 28 24 77 2c 70 78 6d 69 6e 29 0a 20 20 20 73 g($w,pxmin). s
c260: 65 74 20 70 78 6d 61 78 20 24 73 63 61 6c 69 6e et pxmax $scalin
c270: 67 28 24 77 2c 70 78 6d 61 78 29 0a 20 20 20 73 g($w,pxmax). s
c280: 65 74 20 70 79 6d 69 6e 20 24 73 63 61 6c 69 6e et pymin $scalin
c290: 67 28 24 77 2c 70 79 6d 69 6e 29 0a 20 20 20 73 g($w,pymin). s
c2a0: 65 74 20 70 79 6d 61 78 20 24 73 63 61 6c 69 6e et pymax $scalin
c2b0: 67 28 24 77 2c 70 79 6d 61 78 29 0a 0a 20 20 20 g($w,pymax)..
c2c0: 66 6f 72 65 61 63 68 20 7b 79 6d 69 6e 20 79 6d foreach {ymin ym
c2d0: 61 78 20 79 64 65 6c 74 7d 20 24 79 73 63 61 6c ax ydelt} $yscal
c2e0: 65 20 7b 62 72 65 61 6b 7d 0a 0a 20 20 20 69 66 e {break}.. if
c2f0: 20 7b 20 24 79 64 65 6c 74 20 3d 3d 20 30 2e 30 { $ydelt == 0.0
c300: 20 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 } {. retur
c310: 6e 20 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 53 n -code error "S
c320: 74 65 70 20 73 69 7a 65 20 63 61 6e 20 6e 6f 74 tep size can not
c330: 20 62 65 20 7a 65 72 6f 22 0a 20 20 20 7d 0a 0a be zero". }..
c340: 20 20 20 69 66 20 7b 20 28 24 79 6d 61 78 2d 24 if { ($ymax-$
c350: 79 6d 69 6e 29 2a 24 79 64 65 6c 74 20 3c 20 30 ymin)*$ydelt < 0
c360: 2e 30 20 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 .0 } {. set
c370: 20 79 64 65 6c 74 20 5b 65 78 70 72 20 7b 2d 24 ydelt [expr {-$
c380: 79 64 65 6c 74 7d 5d 0a 20 20 20 7d 0a 0a 20 20 ydelt}]. }..
c390: 20 76 69 65 77 50 6f 72 74 20 20 20 20 20 20 20 viewPort
c3a0: 20 20 72 24 77 20 24 70 78 6d 69 6e 20 24 70 79 r$w $pxmin $py
c3b0: 6d 69 6e 20 24 70 78 6d 61 78 20 24 70 79 6d 61 min $pxmax $pyma
c3c0: 78 0a 20 20 20 77 6f 72 6c 64 43 6f 6f 72 64 69 x. worldCoordi
c3d0: 6e 61 74 65 73 20 72 24 77 20 24 78 6d 69 6e 20 nates r$w $xmin
c3e0: 20 24 79 6d 69 6e 20 20 24 78 6d 61 78 20 20 24 $ymin $xmax $
c3f0: 79 6d 61 78 0a 0a 20 20 20 44 72 61 77 52 69 67 ymax.. DrawRig
c400: 68 74 61 78 69 73 20 20 20 20 72 24 77 20 24 79 htaxis r$w $y
c410: 6d 69 6e 20 20 24 79 6d 61 78 20 20 24 79 64 65 min $ymax $yde
c420: 6c 74 0a 0a 20 20 20 23 44 65 66 61 75 6c 74 4c lt.. #DefaultL
c430: 65 67 65 6e 64 20 20 20 20 72 24 77 0a 20 20 20 egend r$w.
c440: 23 44 65 66 61 75 6c 74 42 61 6c 6c 6f 6f 6e 20 #DefaultBalloon
c450: 20 20 72 24 77 0a 0a 20 20 20 72 65 74 75 72 6e r$w.. return
c460: 20 24 6e 65 77 63 68 61 72 74 0a 7d 0a 0a 23 20 $newchart.}..#
c470: 63 72 65 61 74 65 33 44 52 69 62 62 6f 6e 43 68 create3DRibbonCh
c480: 61 72 74 20 2d 2d 0a 23 20 20 20 20 43 72 65 61 art --.# Crea
c490: 74 65 20 61 20 63 68 61 72 74 20 74 68 61 74 20 te a chart that
c4a0: 63 61 6e 20 64 69 73 70 6c 61 79 20 33 44 20 6c can display 3D l
c4b0: 69 6e 65 73 20 61 6e 64 20 61 72 65 61 73 0a 23 ines and areas.#
c4c0: 20 41 72 67 75 6d 65 6e 74 73 3a 0a 23 20 20 20 Arguments:.#
c4d0: 20 77 20 20 20 20 20 20 20 20 20 20 20 4e 61 6d w Nam
c4e0: 65 20 6f 66 20 74 68 65 20 63 61 6e 76 61 73 0a e of the canvas.
c4f0: 23 20 20 20 20 6e 61 6d 65 73 20 20 20 20 20 20 # names
c500: 20 4c 61 62 65 6c 73 20 61 6c 6f 6e 67 20 74 68 Labels along th
c510: 65 20 78 2d 61 78 69 73 0a 23 20 20 20 20 79 73 e x-axis.# ys
c520: 63 61 6c 65 20 20 20 20 20 20 4d 69 6e 69 6d 75 cale Minimu
c530: 6d 2c 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 73 m, maximum and s
c540: 74 65 70 20 66 6f 72 20 79 2d 61 78 69 73 0a 23 tep for y-axis.#
c550: 20 20 20 20 7a 73 63 61 6c 65 20 20 20 20 20 20 zscale
c560: 4d 69 6e 69 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d Minimum, maximum
c570: 20 61 6e 64 20 73 74 65 70 20 66 6f 72 20 7a 2d and step for z-
c580: 61 78 69 73 0a 23 20 52 65 73 75 6c 74 3a 0a 23 axis.# Result:.#
c590: 20 20 20 20 4e 61 6d 65 20 6f 66 20 61 20 6e 65 Name of a ne
c5a0: 77 20 63 6f 6d 6d 61 6e 64 0a 23 20 4e 6f 74 65 w command.# Note
c5b0: 3a 0a 23 20 20 20 20 54 68 65 20 65 6e 74 69 72 :.# The entir
c5c0: 65 20 63 61 6e 76 61 73 20 77 69 6c 6c 20 62 65 e canvas will be
c5d0: 20 64 65 64 69 63 61 74 65 64 20 74 6f 20 74 68 dedicated to th
c5e0: 65 20 33 44 20 63 68 61 72 74 0a 23 0a 70 72 6f e 3D chart.#.pro
c5f0: 63 20 3a 3a 50 6c 6f 74 63 68 61 72 74 3a 3a 63 c ::Plotchart::c
c600: 72 65 61 74 65 33 44 52 69 62 62 6f 6e 43 68 61 reate3DRibbonCha
c610: 72 74 20 7b 20 77 20 6e 61 6d 65 73 20 79 73 63 rt { w names ysc
c620: 61 6c 65 20 7a 73 63 61 6c 65 20 7d 20 7b 0a 20 ale zscale } {.
c630: 20 20 76 61 72 69 61 62 6c 65 20 64 61 74 61 5f variable data_
c640: 73 65 72 69 65 73 0a 0a 20 20 20 66 6f 72 65 61 series.. forea
c650: 63 68 20 73 20 5b 61 72 72 61 79 20 6e 61 6d 65 ch s [array name
c660: 73 20 64 61 74 61 5f 73 65 72 69 65 73 20 22 24 s data_series "$
c670: 77 2c 2a 22 5d 20 7b 0a 20 20 20 20 20 20 75 6e w,*"] {. un
c680: 73 65 74 20 64 61 74 61 5f 73 65 72 69 65 73 28 set data_series(
c690: 24 73 29 0a 20 20 20 7d 0a 0a 20 20 20 73 65 74 $s). }.. set
c6a0: 20 6e 65 77 63 68 61 72 74 20 22 33 64 72 69 62 newchart "3drib
c6b0: 62 6f 6e 5f 24 77 22 0a 20 20 20 69 6e 74 65 72 bon_$w". inter
c6c0: 70 20 61 6c 69 61 73 20 7b 7d 20 24 6e 65 77 63 p alias {} $newc
c6d0: 68 61 72 74 20 7b 7d 20 3a 3a 50 6c 6f 74 63 68 hart {} ::Plotch
c6e0: 61 72 74 3a 3a 50 6c 6f 74 48 61 6e 64 6c 65 72 art::PlotHandler
c6f0: 20 33 64 72 69 62 62 6f 6e 20 24 77 0a 20 20 20 3dribbon $w.
c700: 43 6f 70 79 43 6f 6e 66 69 67 20 33 64 72 69 62 CopyConfig 3drib
c710: 62 6f 6e 20 24 77 0a 0a 20 20 20 66 6f 72 65 61 bon $w.. forea
c720: 63 68 20 7b 70 78 6d 69 6e 20 70 79 6d 69 6e 20 ch {pxmin pymin
c730: 70 78 6d 61 78 20 70 79 6d 61 78 7d 20 5b 4d 61 pxmax pymax} [Ma
c740: 72 67 69 6e 73 33 44 50 6c 6f 74 20 24 77 5d 20 rgins3DPlot $w]
c750: 7b 62 72 65 61 6b 7d 0a 0a 20 20 20 66 6f 72 65 {break}.. fore
c760: 61 63 68 20 7b 78 6d 69 6e 20 78 6d 61 78 20 78 ach {xmin xmax x
c770: 73 74 65 70 7d 20 7b 30 2e 30 20 31 2e 30 20 30 step} {0.0 1.0 0
c780: 2e 30 7d 20 7b 62 72 65 61 6b 7d 0a 20 20 20 66 .0} {break}. f
c790: 6f 72 65 61 63 68 20 7b 79 6d 69 6e 20 79 6d 61 oreach {ymin yma
c7a0: 78 20 79 73 74 65 70 7d 20 24 79 73 63 61 6c 65 x ystep} $yscale
c7b0: 20 7b 62 72 65 61 6b 7d 0a 20 20 20 66 6f 72 65 {break}. fore
c7c0: 61 63 68 20 7b 7a 6d 69 6e 20 7a 6d 61 78 20 7a ach {zmin zmax z
c7d0: 73 74 65 70 7d 20 24 7a 73 63 61 6c 65 20 7b 62 step} $zscale {b
c7e0: 72 65 61 6b 7d 0a 0a 20 20 20 73 65 74 20 78 73 reak}.. set xs
c7f0: 74 65 70 20 5b 65 78 70 72 20 7b 31 2e 30 2f 5b tep [expr {1.0/[
c800: 6c 6c 65 6e 67 74 68 20 24 6e 61 6d 65 73 5d 7d llength $names]}
c810: 5d 0a 20 20 20 73 65 74 20 64 61 74 61 5f 73 65 ]. set data_se
c820: 72 69 65 73 28 24 77 2c 78 62 61 73 65 29 20 20 ries($w,xbase)
c830: 5b 65 78 70 72 20 7b 31 2e 30 2d 30 2e 31 35 2a [expr {1.0-0.15*
c840: 24 78 73 74 65 70 7d 5d 0a 20 20 20 73 65 74 20 $xstep}]. set
c850: 64 61 74 61 5f 73 65 72 69 65 73 28 24 77 2c 78 data_series($w,x
c860: 73 74 65 70 29 20 20 24 78 73 74 65 70 0a 20 20 step) $xstep.
c870: 20 73 65 74 20 64 61 74 61 5f 73 65 72 69 65 73 set data_series
c880: 28 24 77 2c 78 77 69 64 74 68 29 20 5b 65 78 70 ($w,xwidth) [exp
c890: 72 20 7b 30 2e 37 2a 24 78 73 74 65 70 7d 5d 0a r {0.7*$xstep}].
c8a0: 0a 20 20 20 76 69 65 77 50 6f 72 74 20 20 20 20 . viewPort
c8b0: 20 20 20 20 20 20 20 24 77 20 24 70 78 6d 69 6e $w $pxmin
c8c0: 20 24 70 79 6d 69 6e 20 24 70 78 6d 61 78 20 24 $pymin $pxmax $
c8d0: 70 79 6d 61 78 0a 20 20 20 77 6f 72 6c 64 33 44 pymax. world3D
c8e0: 43 6f 6f 72 64 69 6e 61 74 65 73 20 24 77 20 24 Coordinates $w $
c8f0: 78 6d 69 6e 20 20 24 79 6d 69 6e 20 20 24 7a 6d xmin $ymin $zm
c900: 69 6e 20 20 24 78 6d 61 78 20 20 24 79 6d 61 78 in $xmax $ymax
c910: 20 24 7a 6d 61 78 0a 0a 20 20 20 44 72 61 77 33 $zmax.. Draw3
c920: 44 41 78 65 73 20 20 20 20 20 20 20 20 20 24 77 DAxes $w
c930: 20 24 78 6d 69 6e 20 20 24 79 6d 69 6e 20 20 24 $xmin $ymin $
c940: 7a 6d 69 6e 20 20 24 78 6d 61 78 20 20 24 79 6d zmin $xmax $ym
c950: 61 78 20 24 7a 6d 61 78 20 5c 0a 20 20 20 20 20 ax $zmax \.
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c970: 20 20 20 20 24 78 73 74 65 70 20 24 79 73 74 65 $xstep $yste
c980: 70 20 24 7a 73 74 65 70 20 24 6e 61 6d 65 73 0a p $zstep $names.
c990: 20 20 20 44 65 66 61 75 6c 74 4c 65 67 65 6e 64 DefaultLegend
c9a0: 20 20 20 20 20 20 24 77 0a 20 20 20 44 65 66 61 $w. Defa
c9b0: 75 6c 74 42 61 6c 6c 6f 6f 6e 20 20 20 20 20 24 ultBalloon $
c9c0: 77 0a 0a 20 20 20 53 65 74 43 6f 6c 6f 75 72 73 w.. SetColours
c9d0: 20 24 77 20 67 72 65 79 20 62 6c 61 63 6b 0a 0a $w grey black..
c9e0: 20 20 20 72 65 74 75 72 6e 20 24 6e 65 77 63 68 return $newch
c9f0: 61 72 74 0a 7d 0a 0a 23 20 4c 6f 61 64 20 74 68 art.}..# Load th
ca00: 65 20 70 72 69 76 61 74 65 20 70 72 6f 63 65 64 e private proced
ca10: 75 72 65 73 0a 23 0a 73 6f 75 72 63 65 20 5b 66 ures.#.source [f
ca20: 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 ile join [file d
ca30: 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 irname [info scr
ca40: 69 70 74 5d 5d 20 22 70 6c 6f 74 70 72 69 76 2e ipt]] "plotpriv.
ca50: 74 63 6c 22 5d 0a 73 6f 75 72 63 65 20 5b 66 69 tcl"].source [fi
ca60: 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69 le join [file di
ca70: 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 rname [info scri
ca80: 70 74 5d 5d 20 22 70 6c 6f 74 61 78 69 73 2e 74 pt]] "plotaxis.t
ca90: 63 6c 22 5d 0a 73 6f 75 72 63 65 20 5b 66 69 6c cl"].source [fil
caa0: 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 e join [file dir
cab0: 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 name [info scrip
cac0: 74 5d 5d 20 22 70 6c 6f 74 33 64 2e 74 63 6c 22 t]] "plot3d.tcl"
cad0: 5d 0a 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a ].source [file j
cae0: 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d oin [file dirnam
caf0: 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d e [info script]]
cb00: 20 22 73 63 61 6c 69 6e 67 2e 74 63 6c 22 5d 0a "scaling.tcl"].
cb10: 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 source [file joi
cb20: 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 n [file dirname
cb30: 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 22 [info script]] "
cb40: 70 6c 6f 74 63 6f 6e 74 6f 75 72 2e 74 63 6c 22 plotcontour.tcl"
cb50: 5d 0a 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a ].source [file j
cb60: 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d oin [file dirnam
cb70: 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d e [info script]]
cb80: 20 22 70 6c 6f 74 67 61 6e 74 74 2e 74 63 6c 22 "plotgantt.tcl"
cb90: 5d 0a 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a ].source [file j
cba0: 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d oin [file dirnam
cbb0: 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d e [info script]]
cbc0: 20 22 70 6c 6f 74 62 75 73 69 6e 65 73 73 2e 74 "plotbusiness.t
cbd0: 63 6c 22 5d 0a 73 6f 75 72 63 65 20 5b 66 69 6c cl"].source [fil
cbe0: 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 e join [file dir
cbf0: 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 name [info scrip
cc00: 74 5d 5d 20 22 70 6c 6f 74 61 6e 6e 6f 74 2e 74 t]] "plotannot.t
cc10: 63 6c 22 5d 0a 73 6f 75 72 63 65 20 5b 66 69 6c cl"].source [fil
cc20: 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 e join [file dir
cc30: 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 name [info scrip
cc40: 74 5d 5d 20 22 70 6c 6f 74 63 6f 6e 66 69 67 2e t]] "plotconfig.
cc50: 74 63 6c 22 5d 0a 73 6f 75 72 63 65 20 5b 66 69 tcl"].source [fi
cc60: 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69 le join [file di
cc70: 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 rname [info scri
cc80: 70 74 5d 5d 20 22 70 6c 6f 74 70 61 63 6b 2e 74 pt]] "plotpack.t
cc90: 63 6c 22 5d 0a 23 73 6f 75 72 63 65 20 5b 66 69 cl"].#source [fi
cca0: 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69 le join [file di
ccb0: 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 rname [info scri
ccc0: 70 74 5d 5d 20 22 70 6c 6f 74 62 69 6e 64 2e 74 pt]] "plotbind.t
ccd0: 63 6c 22 5d 0a 0a 23 20 41 6e 6e 6f 75 6e 63 65 cl"]..# Announce
cce0: 20 6f 75 72 20 70 72 65 73 65 6e 63 65 0a 23 0a our presence.#.
ccf0: 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 package provide
cd00: 50 6c 6f 74 63 68 61 72 74 20 31 2e 36 2e 31 0a Plotchart 1.6.1.