Artifact d12412e3855269c391c299bfae140322541ca854:
0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a ###############.
0050: 23 0a 23 20 70 64 66 34 74 63 6c 5f 67 72 61 70 #.# pdf4tcl_grap
0060: 68 2e 74 63 6c 0a 23 0a 23 20 20 43 6f 70 79 72 h.tcl.#.# Copyr
0070: 69 67 68 74 20 28 43 29 20 32 30 31 37 20 4a 6f ight (C) 2017 Jo
0080: 65 72 67 20 4d 65 68 72 69 6e 67 2c 20 42 6f 63 erg Mehring, Boc
0090: 68 75 6d 2c 20 44 45 2c 20 3c 6a 2e 6d 65 68 72 hum, DE, <j.mehr
00a0: 69 6e 67 40 73 65 73 61 6d 2d 67 6d 62 68 2e 64 ing@sesam-gmbh.d
00b0: 65 3e 0a 23 20 20 41 6c 6c 20 72 69 67 68 74 73 e>.# All rights
00c0: 20 72 65 73 65 72 76 65 64 2e 20 28 42 53 44 2d reserved. (BSD-
00d0: 33 20 6c 69 63 65 6e 73 65 29 0a 23 0a 23 20 20 3 license).#.#
00e0: 52 65 64 69 73 74 72 69 62 75 74 69 6f 6e 20 61 Redistribution a
00f0: 6e 64 20 75 73 65 20 69 6e 20 73 6f 75 72 63 65 nd use in source
0100: 20 61 6e 64 20 62 69 6e 61 72 79 20 66 6f 72 6d and binary form
0110: 73 2c 20 77 69 74 68 20 6f 72 20 77 69 74 68 6f s, with or witho
0120: 75 74 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 2c ut modification,
0130: 0a 23 20 20 61 72 65 20 70 65 72 6d 69 74 74 65 .# are permitte
0140: 64 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20 d provided that
0150: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f the following co
0160: 6e 64 69 74 69 6f 6e 73 20 61 72 65 20 6d 65 74 nditions are met
0170: 3a 0a 23 0a 23 20 20 31 2e 20 52 65 64 69 73 74 :.#.# 1. Redist
0180: 72 69 62 75 74 69 6f 6e 73 20 6f 66 20 73 6f 75 ributions of sou
0190: 72 63 65 20 63 6f 64 65 20 6d 75 73 74 20 72 65 rce code must re
01a0: 74 61 69 6e 20 74 68 65 20 61 62 6f 76 65 20 63 tain the above c
01b0: 6f 70 79 72 69 67 68 74 20 6e 6f 74 69 63 65 2c opyright notice,
01c0: 20 74 68 69 73 0a 23 20 20 20 20 20 6c 69 73 74 this.# list
01d0: 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 of conditions a
01e0: 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 nd the following
01f0: 20 64 69 73 63 6c 61 69 6d 65 72 2e 0a 23 20 20 disclaimer..#
0200: 32 2e 20 52 65 64 69 73 74 72 69 62 75 74 69 6f 2. Redistributio
0210: 6e 73 20 69 6e 20 62 69 6e 61 72 79 20 66 6f 72 ns in binary for
0220: 6d 20 6d 75 73 74 20 72 65 70 72 6f 64 75 63 65 m must reproduce
0230: 20 74 68 65 20 61 62 6f 76 65 20 63 6f 70 79 72 the above copyr
0240: 69 67 68 74 20 6e 6f 74 69 63 65 2c 0a 23 20 20 ight notice,.#
0250: 20 20 20 74 68 69 73 20 6c 69 73 74 20 6f 66 20 this list of
0260: 63 6f 6e 64 69 74 69 6f 6e 73 20 61 6e 64 20 74 conditions and t
0270: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 73 he following dis
0280: 63 6c 61 69 6d 65 72 20 69 6e 20 74 68 65 20 64 claimer in the d
0290: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 23 20 20 ocumentation.#
02a0: 20 20 20 61 6e 64 2f 6f 72 20 6f 74 68 65 72 20 and/or other
02b0: 6d 61 74 65 72 69 61 6c 73 20 70 72 6f 76 69 64 materials provid
02c0: 65 64 20 77 69 74 68 20 74 68 65 20 64 69 73 74 ed with the dist
02d0: 72 69 62 75 74 69 6f 6e 2e 0a 23 20 20 33 2e 20 ribution..# 3.
02e0: 4e 65 69 74 68 65 72 20 74 68 65 20 6e 61 6d 65 Neither the name
02f0: 20 6f 66 20 74 68 65 20 70 72 6f 6a 65 63 74 20 of the project
0300: 6e 6f 72 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 nor the names of
0310: 20 69 74 73 20 63 6f 6e 74 72 69 62 75 74 6f 72 its contributor
0320: 73 20 6d 61 79 20 62 65 20 75 73 65 64 0a 23 20 s may be used.#
0330: 20 20 20 20 74 6f 20 65 6e 64 6f 72 73 65 20 6f to endorse o
0340: 72 20 70 72 6f 6d 6f 74 65 20 70 72 6f 64 75 63 r promote produc
0350: 74 73 20 64 65 72 69 76 65 64 20 66 72 6f 6d 20 ts derived from
0360: 74 68 69 73 20 73 6f 66 74 77 61 72 65 20 77 69 this software wi
0370: 74 68 6f 75 74 20 73 70 65 63 69 66 69 63 0a 23 thout specific.#
0380: 20 20 20 20 20 70 72 69 6f 72 20 77 72 69 74 74 prior writt
0390: 65 6e 20 70 65 72 6d 69 73 73 69 6f 6e 2e 0a 23 en permission..#
03a0: 0a 23 20 20 54 48 49 53 20 53 4f 46 54 57 41 52 .# THIS SOFTWAR
03b0: 45 20 49 53 20 50 52 4f 56 49 44 45 44 20 42 59 E IS PROVIDED BY
03c0: 20 54 48 45 20 43 4f 50 59 52 49 47 48 54 20 48 THE COPYRIGHT H
03d0: 4f 4c 44 45 52 53 20 41 4e 44 20 43 4f 4e 54 52 OLDERS AND CONTR
03e0: 49 42 55 54 4f 52 53 20 22 41 53 20 49 53 22 20 IBUTORS "AS IS"
03f0: 41 4e 44 20 41 4e 59 0a 23 20 20 45 58 50 52 45 AND ANY.# EXPRE
0400: 53 53 20 4f 52 20 49 4d 50 4c 49 45 44 20 57 41 SS OR IMPLIED WA
0410: 52 52 41 4e 54 49 45 53 2c 20 49 4e 43 4c 55 44 RRANTIES, INCLUD
0420: 49 4e 47 2c 20 42 55 54 20 4e 4f 54 20 4c 49 4d ING, BUT NOT LIM
0430: 49 54 45 44 20 54 4f 2c 20 54 48 45 20 49 4d 50 ITED TO, THE IMP
0440: 4c 49 45 44 20 57 41 52 52 41 4e 54 49 45 53 0a LIED WARRANTIES.
0450: 23 20 20 4f 46 20 4d 45 52 43 48 41 4e 54 41 42 # OF MERCHANTAB
0460: 49 4c 49 54 59 20 41 4e 44 20 46 49 54 4e 45 53 ILITY AND FITNES
0470: 53 20 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c S FOR A PARTICUL
0480: 41 52 20 50 55 52 50 4f 53 45 20 41 52 45 20 44 AR PURPOSE ARE D
0490: 49 53 43 4c 41 49 4d 45 44 2e 20 20 49 4e 20 4e ISCLAIMED. IN N
04a0: 4f 20 45 56 45 4e 54 0a 23 20 20 53 48 41 4c 4c O EVENT.# SHALL
04b0: 20 54 48 45 20 43 4f 50 59 52 49 47 48 54 20 4f THE COPYRIGHT O
04c0: 57 4e 45 52 20 4f 52 20 43 4f 4e 54 52 49 42 55 WNER OR CONTRIBU
04d0: 54 4f 52 53 20 42 45 20 4c 49 41 42 4c 45 20 46 TORS BE LIABLE F
04e0: 4f 52 20 41 4e 59 20 44 49 52 45 43 54 2c 20 49 OR ANY DIRECT, I
04f0: 4e 44 49 52 45 43 54 2c 0a 23 20 20 49 4e 43 49 NDIRECT,.# INCI
0500: 44 45 4e 54 41 4c 2c 20 53 50 45 43 49 41 4c 2c DENTAL, SPECIAL,
0510: 20 45 58 45 4d 50 4c 41 52 59 2c 20 4f 52 20 43 EXEMPLARY, OR C
0520: 4f 4e 53 45 51 55 45 4e 54 49 41 4c 20 44 41 4d ONSEQUENTIAL DAM
0530: 41 47 45 53 20 28 49 4e 43 4c 55 44 49 4e 47 2c AGES (INCLUDING,
0540: 20 42 55 54 20 4e 4f 54 20 4c 49 4d 49 54 45 44 BUT NOT LIMITED
0550: 0a 23 20 20 54 4f 2c 20 50 52 4f 43 55 52 45 4d .# TO, PROCUREM
0560: 45 4e 54 20 4f 46 20 53 55 42 53 54 49 54 55 54 ENT OF SUBSTITUT
0570: 45 20 47 4f 4f 44 53 20 4f 52 20 53 45 52 56 49 E GOODS OR SERVI
0580: 43 45 53 3b 20 4c 4f 53 53 20 4f 46 20 55 53 45 CES; LOSS OF USE
0590: 2c 20 44 41 54 41 2c 20 4f 52 20 50 52 4f 46 49 , DATA, OR PROFI
05a0: 54 53 3b 20 4f 52 0a 23 20 20 42 55 53 49 4e 45 TS; OR.# BUSINE
05b0: 53 53 20 49 4e 54 45 52 52 55 50 54 49 4f 4e 29 SS INTERRUPTION)
05c0: 20 48 4f 57 45 56 45 52 20 43 41 55 53 45 44 20 HOWEVER CAUSED
05d0: 41 4e 44 20 4f 4e 20 41 4e 59 20 54 48 45 4f 52 AND ON ANY THEOR
05e0: 59 20 4f 46 20 4c 49 41 42 49 4c 49 54 59 2c 20 Y OF LIABILITY,
05f0: 57 48 45 54 48 45 52 20 49 4e 0a 23 20 20 43 4f WHETHER IN.# CO
0600: 4e 54 52 41 43 54 2c 20 53 54 52 49 43 54 20 4c NTRACT, STRICT L
0610: 49 41 42 49 4c 49 54 59 2c 20 4f 52 20 54 4f 52 IABILITY, OR TOR
0620: 54 20 28 49 4e 43 4c 55 44 49 4e 47 20 4e 45 47 T (INCLUDING NEG
0630: 4c 49 47 45 4e 43 45 20 4f 52 20 4f 54 48 45 52 LIGENCE OR OTHER
0640: 57 49 53 45 29 20 41 52 49 53 49 4e 47 20 49 4e WISE) ARISING IN
0650: 0a 23 20 20 41 4e 59 20 57 41 59 20 4f 55 54 20 .# ANY WAY OUT
0660: 4f 46 20 54 48 45 20 55 53 45 20 4f 46 20 54 48 OF THE USE OF TH
0670: 49 53 20 53 4f 46 54 57 41 52 45 2c 20 45 56 45 IS SOFTWARE, EVE
0680: 4e 20 49 46 20 41 44 56 49 53 45 44 20 4f 46 20 N IF ADVISED OF
0690: 54 48 45 20 50 4f 53 53 49 42 49 4c 49 54 59 20 THE POSSIBILITY
06a0: 4f 46 0a 23 20 20 53 55 43 48 20 44 41 4d 41 47 OF.# SUCH DAMAG
06b0: 45 2e 0a 23 0a 23 0a 23 20 54 68 69 73 20 69 73 E..#.#.# This is
06c0: 20 61 6e 20 6f 75 74 70 75 74 20 65 6e 67 69 6e an output engin
06d0: 65 20 66 6f 72 20 22 67 72 61 70 68 2e 74 63 6c e for "graph.tcl
06e0: 22 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 42 " to implement B
06f0: 4c 54 20 28 6f 72 20 52 42 43 29 20 63 6f 6d 6d LT (or RBC) comm
0700: 61 6e 64 73 20 66 6f 72 0a 23 20 67 65 6e 65 72 ands for.# gener
0710: 61 74 69 6e 67 20 50 44 46 20 6f 75 74 70 75 74 ating PDF output
0720: 20 75 73 69 6e 67 20 74 68 65 20 22 70 64 66 34 using the "pdf4
0730: 74 63 6c 22 20 50 61 63 6b 61 67 65 2e 0a 23 0a tcl" Package..#.
0740: 23 20 4e 6f 69 63 65 3a 20 53 6f 20 66 61 72 2c # Noice: So far,
0750: 20 22 70 64 66 34 74 63 6c 22 20 6d 75 73 74 20 "pdf4tcl" must
0760: 62 65 20 70 61 74 63 68 65 64 20 74 6f 20 73 75 be patched to su
0770: 70 70 6f 72 74 20 66 75 6e 63 74 69 6f 6e 73 20 pport functions
0780: 73 75 63 68 20 61 73 20 0a 23 20 20 20 20 20 20 such as .#
0790: 20 20 6e 6f 6e 2d 63 6c 6f 73 65 64 20 70 6f 6c non-closed pol
07a0: 79 67 6f 6e 73 20 61 6e 64 20 63 6c 69 70 70 69 ygons and clippi
07b0: 6e 67 2e 20 59 6f 75 20 63 61 6e 20 64 6f 77 6e ng. You can down
07c0: 6c 6f 61 64 20 61 20 70 61 74 63 68 65 64 20 0a load a patched .
07d0: 23 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e # version
07e0: 20 66 72 6f 6d 20 68 65 72 65 20 28 49 20 68 6f from here (I ho
07f0: 70 65 20 74 68 65 20 61 75 74 68 6f 72 20 6f 66 pe the author of
0800: 20 22 70 64 66 34 74 63 6c 22 20 69 6e 63 6f 72 "pdf4tcl" incor
0810: 70 6f 72 61 74 65 73 0a 23 20 20 20 20 20 20 20 porates.#
0820: 20 74 68 69 73 20 70 61 74 63 68 20 69 6e 74 6f this patch into
0830: 20 68 69 73 20 73 6f 75 72 63 65 73 29 3a 0a 23 his sources):.#
0840: 0a 23 20 68 74 74 70 3a 2f 2f 73 65 73 61 6d 2d .# http://sesam-
0850: 67 6d 62 68 2e 6f 72 67 2f 69 6d 61 67 65 73 2f gmbh.org/images/
0860: 44 6f 77 6e 6c 6f 61 64 73 2f 70 75 62 6c 69 63 Downloads/public
0870: 2f 70 64 66 34 74 63 6c 30 39 31 70 31 2e 74 61 /pdf4tcl091p1.ta
0880: 72 2e 62 7a 32 0a 23 20 0a 23 20 55 73 61 67 65 r.bz2.# .# Usage
0890: 20 65 78 61 6d 70 6c 65 3a 0a 23 0a 23 20 20 20 example:.#.#
08a0: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require
08b0: 70 64 66 34 74 63 6c 3a 3a 67 72 61 70 68 0a 23 pdf4tcl::graph.#
08c0: 20 0a 23 20 20 20 70 64 66 34 74 63 6c 3a 3a 6e .# pdf4tcl::n
08d0: 65 77 20 6d 79 70 64 66 20 2d 70 61 70 65 72 20 ew mypdf -paper
08e0: 61 34 20 2d 75 6e 69 74 20 6d 6d 20 0a 23 20 20 a4 -unit mm .#
08f0: 20 6d 79 70 64 66 20 73 74 61 72 74 50 61 67 65 mypdf startPage
0900: 0a 23 20 20 20 6d 79 70 64 66 20 73 65 74 46 6f .# mypdf setFo
0910: 6e 74 20 34 20 48 65 6c 76 65 74 69 63 61 0a 23 nt 4 Helvetica.#
0920: 20 20 20 6d 79 70 64 66 20 74 65 78 74 20 22 48 mypdf text "H
0930: 65 6c 6c 6f 20 57 6f 72 6c 64 22 20 2d 78 20 31 ello World" -x 1
0940: 30 20 2d 79 20 31 30 0a 23 20 0a 23 20 20 20 67 0 -y 10.# .# g
0950: 72 61 70 68 3a 3a 73 65 74 75 70 20 70 64 66 34 raph::setup pdf4
0960: 74 63 6c 20 6d 79 70 64 66 0a 23 20 0a 23 20 20 tcl mypdf.# .#
0970: 20 73 65 74 20 6d 79 64 61 74 61 20 7b 32 31 20 set mydata {21
0980: 31 37 20 35 20 39 20 32 35 2e 34 7d 0a 23 20 0a 17 5 9 25.4}.# .
0990: 23 20 20 20 73 65 74 20 67 20 5b 67 72 61 70 68 # set g [graph
09a0: 3a 3a 67 72 61 70 68 20 2d 74 69 74 6c 65 20 22 ::graph -title "
09b0: 45 78 61 6d 70 6c 65 22 5d 0a 23 20 20 20 24 67 Example"].# $g
09c0: 20 61 78 69 73 20 63 72 65 61 74 65 20 79 33 20 axis create y3
09d0: 2d 63 6f 6c 6f 72 20 62 6c 75 65 0a 23 20 20 20 -color blue.#
09e0: 24 67 20 65 6c 65 6d 65 6e 74 20 63 72 65 61 74 $g element creat
09f0: 65 20 6c 69 6e 65 31 20 2d 6c 61 62 65 6c 20 22 e line1 -label "
0a00: 44 61 74 61 22 20 2d 79 64 61 74 61 20 6d 79 64 Data" -ydata myd
0a10: 61 74 61 20 2d 66 69 6c 6c 20 72 65 64 0a 23 20 ata -fill red.#
0a20: 20 20 24 67 20 67 72 69 64 20 63 6f 6e 66 69 67 $g grid config
0a30: 75 72 65 20 2d 68 69 64 65 20 6e 6f 0a 23 20 20 ure -hide no.#
0a40: 20 24 67 20 61 78 69 73 20 63 6f 6e 66 69 67 75 $g axis configu
0a50: 72 65 20 78 20 2d 6d 69 6e 20 30 20 2d 6d 61 78 re x -min 0 -max
0a60: 20 31 30 30 0a 23 20 20 20 24 67 20 61 78 69 73 100.# $g axis
0a70: 20 63 6f 6e 66 69 67 75 72 65 20 79 20 2d 6c 6f configure y -lo
0a80: 6f 73 65 20 6e 6f 20 2d 68 69 64 65 20 6e 6f 20 ose no -hide no
0a90: 2d 6d 61 78 20 32 35 20 2d 74 69 74 6c 65 20 41 -max 25 -title A
0aa0: 6c 70 68 61 0a 23 20 20 20 24 67 20 64 72 61 77 lpha.# $g draw
0ab0: 20 31 35 20 31 35 0a 23 20 20 20 24 67 20 64 65 15 15.# $g de
0ac0: 73 74 72 6f 79 0a 23 0a 23 20 20 20 6d 79 70 64 stroy.#.# mypd
0ad0: 66 20 77 72 69 74 65 20 2d 66 69 6c 65 20 67 72 f write -file gr
0ae0: 61 70 68 2e 70 64 66 0a 23 20 20 20 6d 79 70 64 aph.pdf.# mypd
0af0: 66 20 64 65 73 74 72 6f 79 0a 23 20 0a 23 0a 23 f destroy.# .#.#
0b00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a ##############..
0b50: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require
0b60: 70 64 66 34 74 63 6c 0a 70 61 63 6b 61 67 65 20 pdf4tcl.package
0b70: 72 65 71 75 69 72 65 20 67 72 61 70 68 0a 70 61 require graph.pa
0b80: 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 70 64 ckage provide pd
0b90: 66 34 74 63 6c 3a 3a 67 72 61 70 68 20 31 2e 30 f4tcl::graph 1.0
0ba0: 0a 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 ...namespace eva
0bb0: 6c 20 70 64 66 34 74 63 6c 3a 3a 67 72 61 70 68 l pdf4tcl::graph
0bc0: 20 7b 0a 20 20 6e 61 6d 65 73 70 61 63 65 20 65 {. namespace e
0bd0: 78 70 6f 72 74 20 5c 0a 20 20 20 20 47 65 74 4f xport \. GetO
0be0: 72 69 67 69 6e 20 5c 0a 20 20 20 20 43 61 6c 63 rigin \. Calc
0bf0: 58 59 20 5c 0a 20 20 20 20 72 67 62 64 61 72 6b XY \. rgbdark
0c00: 65 6e 20 5c 0a 20 20 20 20 72 67 62 6c 69 67 68 en \. rgbligh
0c10: 74 65 6e 20 5c 0a 20 20 20 20 47 65 74 52 47 42 ten \. GetRGB
0c20: 20 5c 0a 20 20 20 20 53 65 74 46 6f 6e 74 20 5c \. SetFont \
0c30: 0a 20 20 20 20 53 65 74 43 6f 6c 6f 72 20 5c 0a . SetColor \.
0c40: 20 20 20 20 53 65 74 4c 69 6e 65 77 69 64 74 68 SetLinewidth
0c50: 20 5c 0a 20 20 20 20 4c 69 6e 65 48 65 69 67 68 \. LineHeigh
0c60: 74 20 5c 0a 20 20 20 20 54 65 78 74 57 69 64 74 t \. TextWidt
0c70: 68 20 5c 0a 20 20 20 20 4d 61 6b 65 53 70 6c 69 h \. MakeSpli
0c80: 6e 65 44 61 74 61 20 5c 0a 20 20 20 20 53 65 74 neData \. Set
0c90: 44 61 73 68 20 5c 0a 20 20 20 20 4c 69 6e 65 20 Dash \. Line
0ca0: 5c 0a 20 20 20 20 43 6c 69 70 52 65 63 74 20 5c \. ClipRect \
0cb0: 0a 20 20 20 20 55 6e 63 6c 69 70 52 65 63 74 20 . UnclipRect
0cc0: 5c 0a 20 20 20 20 52 65 63 74 20 5c 0a 20 20 20 \. Rect \.
0cd0: 20 41 72 63 20 5c 0a 20 20 20 20 50 6f 6c 79 4f Arc \. PolyO
0ce0: 62 6a 65 63 74 20 5c 0a 20 20 20 20 54 65 78 74 bject \. Text
0cf0: 20 5c 0a 20 20 20 20 50 69 63 74 20 5c 0a 20 20 \. Pict \.
0d00: 20 20 4c 6f 61 64 50 69 63 74 20 5c 0a 20 20 20 LoadPict \.
0d10: 20 50 69 63 74 53 69 7a 65 0a 20 20 20 20 0a 7d PictSize. .}
0d20: 0a 0a 70 72 6f 63 20 70 64 66 34 74 63 6c 3a 3a ..proc pdf4tcl::
0d30: 67 72 61 70 68 3a 3a 47 65 74 4f 72 69 67 69 6e graph::GetOrigin
0d40: 20 7b 20 67 20 7d 20 7b 0a 20 20 73 65 74 20 6f { g } {. set o
0d50: 72 69 65 6e 74 20 5b 67 72 61 70 68 3a 3a 65 78 rient [graph::ex
0d60: 65 63 75 74 65 20 63 67 65 74 20 2d 6f 72 69 65 ecute cget -orie
0d70: 6e 74 5d 0a 20 20 73 65 74 20 70 61 70 65 72 20 nt]. set paper
0d80: 5b 67 72 61 70 68 3a 3a 65 78 65 63 75 74 65 20 [graph::execute
0d90: 63 67 65 74 20 2d 70 61 70 65 72 5d 0a 20 20 6c cget -paper]. l
0da0: 61 73 73 69 67 6e 20 5b 70 64 66 34 74 63 6c 3a assign [pdf4tcl:
0db0: 3a 67 65 74 50 61 70 65 72 53 69 7a 65 20 24 70 :getPaperSize $p
0dc0: 61 70 65 72 5d 20 77 50 74 20 68 50 74 0a 20 20 aper] wPt hPt.
0dd0: 73 65 74 20 77 69 64 74 68 20 20 5b 65 78 70 72 set width [expr
0de0: 20 7b 32 35 2e 35 20 2a 20 24 77 50 74 20 2f 20 {25.5 * $wPt /
0df0: 37 32 2e 30 7d 5d 0a 20 20 73 65 74 20 68 65 69 72.0}]. set hei
0e00: 67 68 74 20 5b 65 78 70 72 20 7b 32 35 2e 35 20 ght [expr {25.5
0e10: 2a 20 24 68 50 74 20 2f 20 37 32 2e 30 7d 5d 0a * $hPt / 72.0}].
0e20: 20 20 0a 20 20 67 72 61 70 68 3a 3a 73 65 74 5f . graph::set_
0e30: 6f 70 74 20 24 67 20 6f 72 69 65 6e 74 20 24 6f opt $g orient $o
0e40: 72 69 65 6e 74 0a 20 20 67 72 61 70 68 3a 3a 73 rient. graph::s
0e50: 65 74 5f 6f 70 74 20 24 67 20 70 61 70 65 72 20 et_opt $g paper
0e60: 20 24 70 61 70 65 72 0a 20 20 67 72 61 70 68 3a $paper. graph:
0e70: 3a 73 65 74 5f 6f 70 74 20 24 67 20 77 69 64 74 :set_opt $g widt
0e80: 68 20 20 24 77 69 64 74 68 0a 20 20 67 72 61 70 h $width. grap
0e90: 68 3a 3a 73 65 74 5f 6f 70 74 20 24 67 20 68 65 h::set_opt $g he
0ea0: 69 67 68 74 20 24 68 65 69 67 68 74 0a 20 20 0a ight $height. .
0eb0: 20 20 72 65 74 75 72 6e 20 24 6f 72 69 65 6e 74 return $orient
0ec0: 20 20 3b 23 20 66 61 6c 73 65 20 3d 20 62 6f 74 ;# false = bot
0ed0: 74 6f 6d 2c 20 74 72 75 65 20 3d 20 74 6f 70 0a tom, true = top.
0ee0: 7d 0a 0a 0a 70 72 6f 63 20 70 64 66 34 74 63 6c }...proc pdf4tcl
0ef0: 3a 3a 67 72 61 70 68 3a 3a 43 61 6c 63 58 59 20 ::graph::CalcXY
0f00: 7b 20 67 20 76 5f 78 20 76 5f 79 20 7d 20 7b 0a { g v_x v_y } {.
0f10: 20 20 75 70 76 61 72 20 24 76 5f 78 20 78 0a 20 upvar $v_x x.
0f20: 20 75 70 76 61 72 20 24 76 5f 79 20 79 0a 0a 20 upvar $v_y y..
0f30: 20 69 66 20 7b 5b 67 72 61 70 68 3a 3a 67 65 74 if {[graph::get
0f40: 5f 6f 70 74 20 24 67 20 6f 72 69 65 6e 74 5d 7d _opt $g orient]}
0f50: 20 7b 0a 20 20 20 20 73 65 74 20 79 20 5b 65 78 {. set y [ex
0f60: 70 72 20 7b 5b 67 72 61 70 68 3a 3a 67 65 74 5f pr {[graph::get_
0f70: 6f 70 74 20 24 67 20 68 65 69 67 68 74 5d 20 2d opt $g height] -
0f80: 20 24 79 7d 5d 0a 20 20 7d 0a 7d 0a 0a 0a 70 72 $y}]. }.}...pr
0f90: 6f 63 20 70 64 66 34 74 63 6c 3a 3a 67 72 61 70 oc pdf4tcl::grap
0fa0: 68 3a 3a 72 67 62 64 61 72 6b 65 6e 20 7b 20 72 h::rgbdarken { r
0fb0: 67 62 20 70 65 72 63 65 6e 74 20 7d 20 7b 09 23 gb percent } {.#
0fc0: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e internal use on
0fd0: 6c 79 0a 20 20 6c 61 73 73 69 67 6e 20 24 72 67 ly. lassign $rg
0fe0: 62 20 72 20 67 20 62 0a 20 20 73 65 74 20 64 69 b r g b. set di
0ff0: 66 66 20 5b 65 78 70 72 20 7b 32 35 36 2e 30 20 ff [expr {256.0
1000: 2a 20 24 70 65 72 63 65 6e 74 20 2f 20 31 30 30 * $percent / 100
1010: 2e 30 7d 5d 0a 20 20 73 65 74 20 72 20 5b 65 78 .0}]. set r [ex
1020: 70 72 20 7b 24 72 20 2d 20 24 64 69 66 66 7d 5d pr {$r - $diff}]
1030: 3b 20 69 66 20 7b 24 72 20 3c 20 30 7d 20 7b 20 ; if {$r < 0} {
1040: 73 65 74 20 72 20 30 20 7d 0a 20 20 73 65 74 20 set r 0 }. set
1050: 67 20 5b 65 78 70 72 20 7b 24 67 20 2d 20 24 64 g [expr {$g - $d
1060: 69 66 66 7d 5d 3b 20 69 66 20 7b 24 67 20 3c 20 iff}]; if {$g <
1070: 30 7d 20 7b 20 73 65 74 20 67 20 30 20 7d 0a 20 0} { set g 0 }.
1080: 20 73 65 74 20 62 20 5b 65 78 70 72 20 7b 24 62 set b [expr {$b
1090: 20 2d 20 24 64 69 66 66 7d 5d 3b 20 69 66 20 7b - $diff}]; if {
10a0: 24 62 20 3c 20 30 7d 20 7b 20 73 65 74 20 62 20 $b < 0} { set b
10b0: 30 20 7d 0a 20 20 72 65 74 75 72 6e 20 5b 6c 69 0 }. return [li
10c0: 73 74 20 24 72 20 24 67 20 24 62 5d 0a 7d 0a 0a st $r $g $b].}..
10d0: 0a 70 72 6f 63 20 70 64 66 34 74 63 6c 3a 3a 67 .proc pdf4tcl::g
10e0: 72 61 70 68 3a 3a 72 67 62 6c 69 67 68 74 65 6e raph::rgblighten
10f0: 20 7b 20 72 67 62 20 70 65 72 63 65 6e 74 20 7d { rgb percent }
1100: 20 7b 09 23 20 69 6e 74 65 72 6e 61 6c 20 75 73 {.# internal us
1110: 65 20 6f 6e 6c 79 0a 20 20 6c 61 73 73 69 67 6e e only. lassign
1120: 20 24 72 67 62 20 72 20 67 20 62 0a 20 20 73 65 $rgb r g b. se
1130: 74 20 64 69 66 66 20 5b 65 78 70 72 20 7b 32 35 t diff [expr {25
1140: 36 2e 30 20 2a 20 24 70 65 72 63 65 6e 74 20 2f 6.0 * $percent /
1150: 20 31 30 30 2e 30 7d 5d 0a 20 20 73 65 74 20 72 100.0}]. set r
1160: 20 5b 65 78 70 72 20 7b 24 72 20 2b 20 24 64 69 [expr {$r + $di
1170: 66 66 7d 5d 3b 20 69 66 20 7b 24 72 20 3e 20 32 ff}]; if {$r > 2
1180: 35 35 7d 20 7b 20 73 65 74 20 72 20 32 35 35 20 55} { set r 255
1190: 7d 0a 20 20 73 65 74 20 67 20 5b 65 78 70 72 20 }. set g [expr
11a0: 7b 24 67 20 2b 20 24 64 69 66 66 7d 5d 3b 20 69 {$g + $diff}]; i
11b0: 66 20 7b 24 67 20 3e 20 32 35 35 7d 20 7b 20 73 f {$g > 255} { s
11c0: 65 74 20 67 20 32 35 35 20 7d 0a 20 20 73 65 74 et g 255 }. set
11d0: 20 62 20 5b 65 78 70 72 20 7b 24 62 20 2b 20 24 b [expr {$b + $
11e0: 64 69 66 66 7d 5d 3b 20 69 66 20 7b 24 62 20 3e diff}]; if {$b >
11f0: 20 32 35 35 7d 20 7b 20 73 65 74 20 62 20 32 35 255} { set b 25
1200: 35 20 7d 0a 20 20 72 65 74 75 72 6e 20 5b 6c 69 5 }. return [li
1210: 73 74 20 24 72 20 24 67 20 24 62 5d 0a 7d 0a 0a st $r $g $b].}..
1220: 0a 70 72 6f 63 20 70 64 66 34 74 63 6c 3a 3a 67 .proc pdf4tcl::g
1230: 72 61 70 68 3a 3a 47 65 74 52 47 42 20 7b 20 63 raph::GetRGB { c
1240: 6f 6c 6f 72 20 7d 20 7b 09 23 20 69 6e 74 65 72 olor } {.# inter
1250: 6e 61 6c 20 75 73 65 20 6f 6e 6c 79 0a 20 20 73 nal use only. s
1260: 65 74 20 63 6f 6c 6f 72 20 5b 73 74 72 69 6e 67 et color [string
1270: 20 74 6f 6c 6f 77 65 72 20 5b 73 74 72 69 6e 67 tolower [string
1280: 20 74 72 69 6d 20 24 63 6f 6c 6f 72 5d 5d 0a 20 trim $color]].
1290: 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 5c if {[regexp {^\
12a0: 64 2b 5c 73 2b 5c 64 2b 5c 73 2b 5c 64 2b 24 7d d+\s+\d+\s+\d+$}
12b0: 20 24 63 6f 6c 6f 72 20 61 6c 6c 5d 7d 20 7b 0a $color all]} {.
12c0: 20 20 20 20 72 65 74 75 72 6e 20 5b 6a 6f 69 6e return [join
12d0: 20 24 63 6f 6c 6f 72 5d 0a 20 20 7d 20 65 6c 73 $color]. } els
12e0: 65 20 7b 0a 20 20 20 20 73 65 74 20 72 67 62 20 e {. set rgb
12f0: 7b 30 20 30 20 30 7d 0a 20 20 20 20 69 66 20 7b {0 0 0}. if {
1300: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 74 [info commands t
1310: 6b 5d 20 21 3d 20 7b 7d 7d 20 7b 0a 20 20 20 20 k] != {}} {.
1320: 20 20 23 20 66 69 6e 65 2c 20 74 6b 20 63 61 6e # fine, tk can
1330: 20 74 65 6c 6c 20 75 73 20 74 68 65 20 72 69 67 tell us the rig
1340: 68 74 20 72 67 62 20 76 61 6c 75 65 73 0a 20 20 ht rgb values.
1350: 20 20 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 set rc [catc
1360: 68 20 7b 20 73 65 74 20 72 67 62 31 36 20 5b 77 h { set rgb16 [w
1370: 69 6e 66 6f 20 72 67 62 20 2e 20 24 63 6f 6c 6f info rgb . $colo
1380: 72 5d 20 7d 5d 0a 20 20 20 20 20 20 69 66 20 7b r] }]. if {
1390: 24 72 63 20 3d 3d 20 30 7d 20 7b 0a 09 73 65 74 $rc == 0} {..set
13a0: 20 72 20 5b 65 78 70 72 20 7b 72 6f 75 6e 64 28 r [expr {round(
13b0: 5b 6c 69 6e 64 65 78 20 24 72 67 62 31 36 20 30 [lindex $rgb16 0
13c0: 5d 20 2f 20 32 35 36 2e 30 29 7d 5d 0a 09 73 65 ] / 256.0)}]..se
13d0: 74 20 67 20 5b 65 78 70 72 20 7b 72 6f 75 6e 64 t g [expr {round
13e0: 28 5b 6c 69 6e 64 65 78 20 24 72 67 62 31 36 20 ([lindex $rgb16
13f0: 31 5d 20 2f 20 32 35 36 2e 30 29 7d 5d 0a 09 73 1] / 256.0)}]..s
1400: 65 74 20 62 20 5b 65 78 70 72 20 7b 72 6f 75 6e et b [expr {roun
1410: 64 28 5b 6c 69 6e 64 65 78 20 24 72 67 62 31 36 d([lindex $rgb16
1420: 20 32 5d 20 2f 20 32 35 36 2e 30 29 7d 5d 0a 09 2] / 256.0)}]..
1430: 73 65 74 20 72 67 62 20 5b 6c 69 73 74 20 24 72 set rgb [list $r
1440: 20 24 67 20 24 62 5d 0a 20 20 20 20 20 20 7d 0a $g $b]. }.
1450: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 } else {.
1460: 20 20 20 23 20 6f 68 20 73 68 69 74 2c 20 6e 6f # oh shit, no
1470: 20 63 6f 6c 6f 72 20 6e 61 6d 65 73 20 61 76 61 color names ava
1480: 69 6c 61 62 6c 65 2c 20 6c 65 74 27 73 20 67 69 ilable, let's gi
1490: 76 65 20 73 6f 6d 65 20 62 61 73 69 63 20 63 6f ve some basic co
14a0: 6c 6f 72 73 0a 20 20 20 20 20 20 73 77 69 74 63 lors. switc
14b0: 68 20 2d 67 6c 6f 62 20 2d 2d 20 24 63 6f 6c 6f h -glob -- $colo
14c0: 72 20 7b 0a 09 7b 62 6c 61 63 6b 7d 20 20 20 20 r {..{black}
14d0: 7b 20 73 65 74 20 72 67 62 20 7b 20 20 30 20 20 { set rgb { 0
14e0: 20 30 20 20 20 30 7d 20 7d 0a 09 7b 77 68 69 74 0 0} }..{whit
14f0: 65 7d 20 20 20 20 7b 20 73 65 74 20 72 67 62 20 e} { set rgb
1500: 7b 32 35 35 20 32 35 35 20 32 35 35 7d 20 7d 0a {255 255 255} }.
1510: 20 20 20 20 20 20 20 20 7b 72 65 64 7d 20 20 20 {red}
1520: 20 20 20 7b 20 73 65 74 20 72 67 62 20 7b 32 35 { set rgb {25
1530: 35 20 20 20 30 20 20 20 30 7d 20 7d 0a 09 7b 67 5 0 0} }..{g
1540: 72 65 65 6e 7d 20 20 20 20 7b 20 73 65 74 20 72 reen} { set r
1550: 67 62 20 7b 20 20 30 20 32 35 35 20 20 20 30 7d gb { 0 255 0}
1560: 20 7d 0a 09 7b 62 6c 75 65 7d 20 20 20 20 20 7b }..{blue} {
1570: 20 73 65 74 20 72 67 62 20 7b 20 20 30 20 20 20 set rgb { 0
1580: 30 20 32 35 35 7d 20 7d 0a 09 7b 63 79 61 6e 7d 0 255} }..{cyan}
1590: 20 20 20 20 20 7b 20 73 65 74 20 72 67 62 20 7b { set rgb {
15a0: 20 20 30 20 32 35 35 20 32 35 35 7d 20 7d 0a 09 0 255 255} }..
15b0: 7b 6d 61 67 65 6e 74 61 7d 20 20 7b 20 73 65 74 {magenta} { set
15c0: 20 72 67 62 20 7b 32 35 35 20 20 20 30 20 32 35 rgb {255 0 25
15d0: 35 7d 20 7d 0a 09 7b 79 65 6c 6c 6f 77 7d 20 20 5} }..{yellow}
15e0: 20 7b 20 73 65 74 20 72 67 62 20 7b 32 35 35 20 { set rgb {255
15f0: 32 35 35 20 20 20 30 7d 20 7d 0a 09 7b 6f 72 61 255 0} }..{ora
1600: 6e 67 65 7d 20 20 20 7b 20 73 65 74 20 72 67 62 nge} { set rgb
1610: 20 7b 32 35 35 20 31 32 38 20 20 20 30 7d 20 7d {255 128 0} }
1620: 0a 09 7b 70 69 6e 6b 7d 20 20 20 20 20 7b 20 73 ..{pink} { s
1630: 65 74 20 72 67 62 20 7b 32 35 35 20 31 32 38 20 et rgb {255 128
1640: 31 39 32 7d 20 7d 0a 09 7b 70 75 72 70 6c 65 7d 192} }..{purple}
1650: 20 20 20 7b 20 73 65 74 20 72 67 62 20 7b 31 36 { set rgb {16
1660: 30 20 20 20 30 20 31 32 38 7d 20 7d 0a 09 7b 62 0 0 128} }..{b
1670: 72 6f 77 6e 7d 20 20 20 20 7b 20 73 65 74 20 72 rown} { set r
1680: 67 62 20 7b 31 32 38 20 20 20 30 20 20 20 30 7d gb {128 0 0}
1690: 20 7d 0a 09 7b 67 6f 6c 64 7d 20 20 20 20 20 7b }..{gold} {
16a0: 20 73 65 74 20 72 67 62 20 7b 32 35 35 20 32 31 set rgb {255 21
16b0: 35 20 20 20 30 7d 20 7d 0a 09 7b 76 69 6f 6c 65 5 0} }..{viole
16c0: 74 7d 20 20 20 7b 20 73 65 74 20 72 67 62 20 7b t} { set rgb {
16d0: 31 32 38 20 20 20 30 20 31 32 38 7d 20 7d 0a 09 128 0 128} }..
16e0: 7b 67 72 5b 61 65 5d 79 7d 20 20 7b 20 73 65 74 {gr[ae]y} { set
16f0: 20 72 67 62 20 7b 31 39 30 20 31 39 30 20 31 39 rgb {190 190 19
1700: 30 7d 20 7d 0a 09 7b 67 72 5b 61 65 5d 79 2a 7d 0} }..{gr[ae]y*}
1710: 20 7b 0a 09 20 20 73 65 74 20 78 20 5b 73 74 72 {.. set x [str
1720: 69 6e 67 20 72 61 6e 67 65 20 24 63 6f 6c 6f 72 ing range $color
1730: 20 34 20 65 6e 64 5d 0a 09 20 20 69 66 20 7b 5b 4 end].. if {[
1740: 73 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 string is intege
1750: 72 20 24 78 5d 7d 20 7b 0a 09 20 20 20 20 73 65 r $x]} {.. se
1760: 74 20 78 20 5b 65 78 70 72 20 7b 72 6f 75 6e 64 t x [expr {round
1770: 28 28 24 78 20 2f 20 31 30 30 2e 30 29 20 2a 20 (($x / 100.0) *
1780: 32 35 35 2e 30 29 7d 5d 0a 09 20 20 20 20 69 66 255.0)}].. if
1790: 20 7b 24 78 20 3e 20 32 35 35 7d 20 7b 20 73 65 {$x > 255} { se
17a0: 74 20 78 20 32 35 35 20 7d 0a 09 20 20 20 20 69 t x 255 }.. i
17b0: 66 20 7b 24 78 20 3c 20 20 20 30 7d 20 7b 20 73 f {$x < 0} { s
17c0: 65 74 20 78 20 20 20 30 20 7d 0a 09 20 20 20 20 et x 0 }..
17d0: 73 65 74 20 72 67 62 20 5b 6c 69 73 74 20 24 78 set rgb [list $x
17e0: 20 24 78 20 24 78 5d 0a 09 20 20 7d 0a 09 7d 0a $x $x].. }..}.
17f0: 09 7b 64 61 72 6b 2a 7d 20 7b 0a 09 20 20 73 65 .{dark*} {.. se
1800: 74 20 72 67 62 20 5b 47 65 74 52 47 42 20 5b 73 t rgb [GetRGB [s
1810: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 63 6f 6c tring range $col
1820: 6f 72 20 34 20 65 6e 64 5d 5d 0a 09 20 20 73 65 or 4 end]].. se
1830: 74 20 72 20 5b 65 78 70 72 20 7b 5b 6c 69 6e 64 t r [expr {[lind
1840: 65 78 20 24 72 67 62 20 30 5d 20 2f 20 32 7d 5d ex $rgb 0] / 2}]
1850: 0a 09 20 20 73 65 74 20 67 20 5b 65 78 70 72 20 .. set g [expr
1860: 7b 5b 6c 69 6e 64 65 78 20 24 72 67 62 20 31 5d {[lindex $rgb 1]
1870: 20 2f 20 32 7d 5d 0a 09 20 20 73 65 74 20 62 20 / 2}].. set b
1880: 5b 65 78 70 72 20 7b 5b 6c 69 6e 64 65 78 20 24 [expr {[lindex $
1890: 72 67 62 20 32 5d 20 2f 20 32 7d 5d 0a 09 20 20 rgb 2] / 2}]..
18a0: 73 65 74 20 72 67 62 20 5b 6c 69 73 74 20 24 72 set rgb [list $r
18b0: 20 24 67 20 24 62 5d 0a 09 7d 0a 09 7b 6c 69 67 $g $b]..}..{lig
18c0: 68 74 2a 7d 20 7b 0a 09 20 20 73 65 74 20 72 67 ht*} {.. set rg
18d0: 62 20 5b 47 65 74 52 47 42 20 5b 73 74 72 69 6e b [GetRGB [strin
18e0: 67 20 72 61 6e 67 65 20 24 63 6f 6c 6f 72 20 35 g range $color 5
18f0: 20 65 6e 64 5d 5d 0a 09 20 20 73 65 74 20 72 20 end]].. set r
1900: 5b 65 78 70 72 20 7b 32 35 35 20 2d 20 28 28 32 [expr {255 - ((2
1910: 35 35 20 2d 20 5b 6c 69 6e 64 65 78 20 24 72 67 55 - [lindex $rg
1920: 62 20 30 5d 29 20 2f 20 32 29 7d 5d 0a 09 20 20 b 0]) / 2)}]..
1930: 73 65 74 20 67 20 5b 65 78 70 72 20 7b 32 35 35 set g [expr {255
1940: 20 2d 20 28 28 32 35 35 20 2d 20 5b 6c 69 6e 64 - ((255 - [lind
1950: 65 78 20 24 72 67 62 20 31 5d 29 20 2f 20 32 29 ex $rgb 1]) / 2)
1960: 7d 5d 0a 09 20 20 73 65 74 20 62 20 5b 65 78 70 }].. set b [exp
1970: 72 20 7b 32 35 35 20 2d 20 28 28 32 35 35 20 2d r {255 - ((255 -
1980: 20 5b 6c 69 6e 64 65 78 20 24 72 67 62 20 32 5d [lindex $rgb 2]
1990: 29 20 2f 20 32 29 7d 5d 0a 09 20 20 73 65 74 20 ) / 2)}].. set
19a0: 72 67 62 20 5b 6c 69 73 74 20 24 72 20 24 67 20 rgb [list $r $g
19b0: 24 62 5d 0a 09 7d 0a 20 20 20 20 20 20 7d 0a 20 $b]..}. }.
19c0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 }. return
19d0: 5b 6a 6f 69 6e 20 24 72 67 62 5d 0a 20 20 7d 0a [join $rgb]. }.
19e0: 7d 0a 0a 0a 70 72 6f 63 20 70 64 66 34 74 63 6c }...proc pdf4tcl
19f0: 3a 3a 67 72 61 70 68 3a 3a 53 65 74 46 6f 6e 74 ::graph::SetFont
1a00: 20 7b 20 67 20 6e 61 6d 65 20 73 69 7a 65 20 7b { g name size {
1a10: 61 74 74 72 69 62 20 22 22 7d 20 7d 20 7b 0a 20 attrib ""} } {.
1a20: 20 73 65 74 20 66 6f 6e 74 20 5b 6c 69 73 74 20 set font [list
1a30: 24 6e 61 6d 65 20 24 73 69 7a 65 20 24 61 74 74 $name $size $att
1a40: 72 69 62 5d 0a 20 20 69 66 20 7b 5b 67 72 61 70 rib]. if {[grap
1a50: 68 3a 3a 67 65 74 5f 6f 70 74 20 24 67 20 66 6f h::get_opt $g fo
1a60: 6e 74 5d 20 3d 3d 20 24 66 6f 6e 74 7d 20 72 65 nt] == $font} re
1a70: 74 75 72 6e 0a 0a 20 20 73 65 74 20 62 6f 6c 64 turn.. set bold
1a80: 20 5b 72 65 67 65 78 70 20 62 6f 6c 64 20 24 61 [regexp bold $a
1a90: 74 74 72 69 62 5d 0a 20 20 73 65 74 20 69 74 61 ttrib]. set ita
1aa0: 6c 69 63 20 5b 72 65 67 65 78 70 20 69 74 61 6c lic [regexp ital
1ab0: 69 63 20 24 61 74 74 72 69 62 5d 0a 20 20 73 77 ic $attrib]. sw
1ac0: 69 74 63 68 20 24 6e 61 6d 65 20 7b 0a 20 20 20 itch $name {.
1ad0: 20 48 65 6c 76 65 74 69 63 61 20 2d 20 41 72 69 Helvetica - Ari
1ae0: 61 6c 20 2d 20 43 6f 75 72 69 65 72 20 7b 0a 20 al - Courier {.
1af0: 20 20 20 20 20 69 66 20 7b 24 62 6f 6c 64 20 26 if {$bold &
1b00: 26 20 24 69 74 61 6c 69 63 7d 20 7b 0a 20 20 20 & $italic} {.
1b10: 20 20 20 20 20 61 70 70 65 6e 64 20 6e 61 6d 65 append name
1b20: 20 2d 42 6f 6c 64 4f 62 6c 69 71 75 65 0a 20 20 -BoldOblique.
1b30: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 62 } elseif {$b
1b40: 6f 6c 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 61 old} {. a
1b50: 70 70 65 6e 64 20 6e 61 6d 65 20 2d 42 6f 6c 64 ppend name -Bold
1b60: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif
1b70: 7b 24 69 74 61 6c 69 63 7d 20 7b 0a 20 20 20 20 {$italic} {.
1b80: 20 20 20 20 61 70 70 65 6e 64 20 6e 61 6d 65 20 append name
1b90: 2d 4f 62 6c 69 71 75 65 0a 20 20 20 20 20 20 7d -Oblique. }
1ba0: 0a 20 20 20 20 7d 0a 20 20 20 20 54 69 6d 65 73 . }. Times
1bb0: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 62 6f {. if {$bo
1bc0: 6c 64 20 26 26 20 24 69 74 61 6c 69 63 7d 20 7b ld && $italic} {
1bd0: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 . append
1be0: 6e 61 6d 65 20 2d 42 6f 6c 64 49 74 61 6c 69 63 name -BoldItalic
1bf0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif
1c00: 7b 24 62 6f 6c 64 7d 20 7b 0a 20 20 20 20 20 20 {$bold} {.
1c10: 20 20 61 70 70 65 6e 64 20 6e 61 6d 65 20 2d 42 append name -B
1c20: 6f 6c 64 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 old. } else
1c30: 69 66 20 7b 24 69 74 61 6c 69 63 7d 20 7b 0a 20 if {$italic} {.
1c40: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 6e 61 append na
1c50: 6d 65 20 2d 49 74 61 6c 69 63 0a 20 20 20 20 20 me -Italic.
1c60: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 } else {.
1c70: 20 20 61 70 70 65 6e 64 20 6e 61 6d 65 20 2d 52 append name -R
1c80: 6f 6d 61 6e 0a 20 20 20 20 20 20 7d 0a 20 20 20 oman. }.
1c90: 20 7d 0a 20 20 7d 0a 20 20 67 72 61 70 68 3a 3a }. }. graph::
1ca0: 65 78 65 63 75 74 65 20 73 65 74 46 6f 6e 74 20 execute setFont
1cb0: 24 73 69 7a 65 20 24 6e 61 6d 65 0a 0a 20 20 67 $size $name.. g
1cc0: 72 61 70 68 3a 3a 73 65 74 5f 6f 70 74 20 24 67 raph::set_opt $g
1cd0: 20 66 6f 6e 74 20 24 66 6f 6e 74 0a 7d 0a 0a 0a font $font.}...
1ce0: 70 72 6f 63 20 70 64 66 34 74 63 6c 3a 3a 67 72 proc pdf4tcl::gr
1cf0: 61 70 68 3a 3a 4c 69 6e 65 48 65 69 67 68 74 20 aph::LineHeight
1d00: 7b 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 5b 67 {} {. return [g
1d10: 72 61 70 68 3a 3a 65 78 65 63 75 74 65 20 67 65 raph::execute ge
1d20: 74 46 6f 6e 74 4d 65 74 72 69 63 20 68 65 69 67 tFontMetric heig
1d30: 68 74 5d 0a 7d 0a 0a 0a 70 72 6f 63 20 70 64 66 ht].}...proc pdf
1d40: 34 74 63 6c 3a 3a 67 72 61 70 68 3a 3a 54 65 78 4tcl::graph::Tex
1d50: 74 57 69 64 74 68 20 7b 20 73 74 72 20 7d 20 7b tWidth { str } {
1d60: 0a 20 20 72 65 74 75 72 6e 20 5b 67 72 61 70 68 . return [graph
1d70: 3a 3a 65 78 65 63 75 74 65 20 67 65 74 53 74 72 ::execute getStr
1d80: 69 6e 67 57 69 64 74 68 20 24 73 74 72 5d 0a 7d ingWidth $str].}
1d90: 0a 0a 0a 70 72 6f 63 20 70 64 66 34 74 63 6c 3a ...proc pdf4tcl:
1da0: 3a 67 72 61 70 68 3a 3a 53 65 74 43 6f 6c 6f 72 :graph::SetColor
1db0: 20 7b 20 67 20 63 6f 6c 6f 72 20 7d 20 7b 0a 20 { g color } {.
1dc0: 20 67 72 61 70 68 3a 3a 73 65 74 5f 6f 70 74 20 graph::set_opt
1dd0: 24 67 20 63 6f 6c 6f 72 20 24 63 6f 6c 6f 72 0a $g color $color.
1de0: 20 20 73 65 74 20 72 67 62 20 5b 47 65 74 52 47 set rgb [GetRG
1df0: 42 20 24 63 6f 6c 6f 72 5d 0a 20 20 67 72 61 70 B $color]. grap
1e00: 68 3a 3a 73 65 74 5f 6f 70 74 20 24 67 20 72 67 h::set_opt $g rg
1e10: 62 63 6f 6c 6f 72 20 24 72 67 62 0a 0a 20 20 6c bcolor $rgb.. l
1e20: 61 73 73 69 67 6e 20 24 72 67 62 20 72 20 67 20 assign $rgb r g
1e30: 62 0a 20 20 67 72 61 70 68 3a 3a 65 78 65 63 75 b. graph::execu
1e40: 74 65 20 73 65 74 53 74 72 6f 6b 65 43 6f 6c 6f te setStrokeColo
1e50: 72 20 24 72 20 24 67 20 24 62 0a 20 20 67 72 61 r $r $g $b. gra
1e60: 70 68 3a 3a 65 78 65 63 75 74 65 20 73 65 74 46 ph::execute setF
1e70: 69 6c 6c 43 6f 6c 6f 72 20 24 72 20 24 67 20 24 illColor $r $g $
1e80: 62 0a 7d 0a 0a 0a 70 72 6f 63 20 70 64 66 34 74 b.}...proc pdf4t
1e90: 63 6c 3a 3a 67 72 61 70 68 3a 3a 53 65 74 4c 69 cl::graph::SetLi
1ea0: 6e 65 77 69 64 74 68 20 7b 20 67 20 77 69 64 74 newidth { g widt
1eb0: 68 20 7d 20 7b 0a 20 20 69 66 20 7b 24 77 69 64 h } {. if {$wid
1ec0: 74 68 20 21 3d 20 7b 7d 7d 20 7b 0a 20 20 20 20 th != {}} {.
1ed0: 69 66 20 7b 24 77 69 64 74 68 20 3c 3d 20 30 7d if {$width <= 0}
1ee0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 77 69 64 {. set wid
1ef0: 74 68 20 30 2e 30 31 0a 20 20 20 20 7d 0a 20 20 th 0.01. }.
1f00: 20 20 67 72 61 70 68 3a 3a 65 78 65 63 75 74 65 graph::execute
1f10: 20 73 65 74 4c 69 6e 65 57 69 64 74 68 20 5b 65 setLineWidth [e
1f20: 78 70 72 20 7b 37 32 20 2a 20 24 77 69 64 74 68 xpr {72 * $width
1f30: 20 2f 20 32 35 2e 34 7d 5d 0a 20 20 7d 0a 20 20 / 25.4}]. }.
1f40: 67 72 61 70 68 3a 3a 73 65 74 5f 6f 70 74 20 24 graph::set_opt $
1f50: 67 20 6c 69 6e 65 77 69 64 74 68 20 24 77 69 64 g linewidth $wid
1f60: 74 68 0a 7d 0a 0a 0a 70 72 6f 63 20 70 64 66 34 th.}...proc pdf4
1f70: 74 63 6c 3a 3a 67 72 61 70 68 3a 3a 53 70 6c 69 tcl::graph::Spli
1f80: 6e 65 49 6e 74 65 72 70 6f 6c 61 74 65 20 7b 79 neInterpolate {y
1f90: 30 20 79 31 20 79 32 20 79 33 20 6d 75 20 7b 74 0 y1 y2 y3 mu {t
1fa0: 65 6e 73 69 6f 6e 20 30 2e 30 7d 20 7b 62 69 61 ension 0.0} {bia
1fb0: 73 20 30 2e 30 7d 7d 20 7b 0a 20 20 73 65 74 20 s 0.0}} {. set
1fc0: 6d 75 32 20 5b 65 78 70 72 20 7b 24 6d 75 20 2a mu2 [expr {$mu *
1fd0: 20 24 6d 75 7d 5d 0a 20 20 73 65 74 20 6d 75 33 $mu}]. set mu3
1fe0: 20 5b 65 78 70 72 20 7b 24 6d 75 32 20 2a 20 24 [expr {$mu2 * $
1ff0: 6d 75 7d 5d 0a 0a 20 20 73 65 74 20 6d 30 20 20 mu}].. set m0
2000: 5b 65 78 70 72 20 7b 28 24 79 31 2d 24 79 30 29 [expr {($y1-$y0)
2010: 2a 28 31 2b 24 62 69 61 73 29 2a 28 31 2d 24 74 *(1+$bias)*(1-$t
2020: 65 6e 73 69 6f 6e 29 2f 32 20 2b 0a 20 20 20 20 ension)/2 +.
2030: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 24 79 ($y
2040: 32 2d 24 79 31 29 2a 28 31 2d 24 62 69 61 73 29 2-$y1)*(1-$bias)
2050: 2a 28 31 2d 24 74 65 6e 73 69 6f 6e 29 2f 32 7d *(1-$tension)/2}
2060: 5d 0a 20 20 73 65 74 20 6d 31 20 20 5b 65 78 70 ]. set m1 [exp
2070: 72 20 7b 28 24 79 32 2d 24 79 31 29 2a 28 31 2b r {($y2-$y1)*(1+
2080: 24 62 69 61 73 29 2a 28 31 2d 24 74 65 6e 73 69 $bias)*(1-$tensi
2090: 6f 6e 29 2f 32 20 2b 0a 20 20 20 20 20 20 20 20 on)/2 +.
20a0: 20 20 20 20 20 20 20 20 20 28 24 79 33 2d 24 79 ($y3-$y
20b0: 32 29 2a 28 31 2d 24 62 69 61 73 29 2a 28 31 2d 2)*(1-$bias)*(1-
20c0: 24 74 65 6e 73 69 6f 6e 29 2f 32 7d 5d 0a 0a 20 $tension)/2}]..
20d0: 20 73 65 74 20 61 30 20 20 5b 65 78 70 72 20 7b set a0 [expr {
20e0: 20 32 2a 24 6d 75 33 20 2d 20 33 2a 24 6d 75 32 2*$mu3 - 3*$mu2
20f0: 20 2b 20 31 7d 5d 0a 20 20 73 65 74 20 61 31 20 + 1}]. set a1
2100: 20 5b 65 78 70 72 20 7b 20 20 20 24 6d 75 33 20 [expr { $mu3
2110: 2d 20 32 2a 24 6d 75 32 20 2b 20 24 6d 75 7d 5d - 2*$mu2 + $mu}]
2120: 0a 20 20 73 65 74 20 61 32 20 20 5b 65 78 70 72 . set a2 [expr
2130: 20 7b 20 20 20 24 6d 75 33 20 2d 20 20 20 24 6d { $mu3 - $m
2140: 75 32 7d 5d 0a 20 20 73 65 74 20 61 33 20 20 5b u2}]. set a3 [
2150: 65 78 70 72 20 7b 2d 32 2a 24 6d 75 33 20 2b 20 expr {-2*$mu3 +
2160: 33 2a 24 6d 75 32 7d 5d 0a 0a 20 20 72 65 74 75 3*$mu2}].. retu
2170: 72 6e 20 5b 65 78 70 72 20 7b 24 61 30 2a 24 79 rn [expr {$a0*$y
2180: 31 2b 24 61 31 2a 24 6d 30 2b 24 61 32 2a 24 6d 1+$a1*$m0+$a2*$m
2190: 31 2b 24 61 33 2a 24 79 32 7d 5d 0a 7d 0a 0a 0a 1+$a3*$y2}].}...
21a0: 70 72 6f 63 20 70 64 66 34 74 63 6c 3a 3a 67 72 proc pdf4tcl::gr
21b0: 61 70 68 3a 3a 4d 61 6b 65 53 70 6c 69 6e 65 44 aph::MakeSplineD
21c0: 61 74 61 20 7b 20 76 5f 78 64 61 74 61 31 20 76 ata { v_xdata1 v
21d0: 5f 79 64 61 74 61 31 20 76 5f 78 64 61 74 61 32 _ydata1 v_xdata2
21e0: 20 76 5f 79 64 61 74 61 32 0a 20 20 20 20 20 20 v_ydata2.
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2210: 7b 73 74 65 70 73 20 30 7d 20 7b 74 65 6e 73 69 {steps 0} {tensi
2220: 6f 6e 20 30 2e 30 7d 20 7b 62 69 61 73 20 30 2e on 0.0} {bias 0.
2230: 30 7d 20 7d 20 7b 0a 20 20 75 70 76 61 72 20 24 0} } {. upvar $
2240: 76 5f 78 64 61 74 61 31 20 78 64 61 74 61 31 0a v_xdata1 xdata1.
2250: 20 20 75 70 76 61 72 20 24 76 5f 79 64 61 74 61 upvar $v_ydata
2260: 31 20 79 64 61 74 61 31 0a 20 20 75 70 76 61 72 1 ydata1. upvar
2270: 20 24 76 5f 78 64 61 74 61 32 20 78 64 61 74 61 $v_xdata2 xdata
2280: 32 0a 20 20 75 70 76 61 72 20 24 76 5f 79 64 61 2. upvar $v_yda
2290: 74 61 32 20 79 64 61 74 61 32 0a 0a 20 20 73 65 ta2 ydata2.. se
22a0: 74 20 78 64 61 74 61 32 20 7b 7d 0a 20 20 73 65 t xdata2 {}. se
22b0: 74 20 79 64 61 74 61 32 20 7b 7d 0a 0a 20 20 73 t ydata2 {}.. s
22c0: 65 74 20 78 63 6e 74 20 5b 6c 6c 65 6e 67 74 68 et xcnt [llength
22d0: 20 24 78 64 61 74 61 31 5d 0a 20 20 73 65 74 20 $xdata1]. set
22e0: 79 63 6e 74 20 5b 6c 6c 65 6e 67 74 68 20 24 79 ycnt [llength $y
22f0: 64 61 74 61 31 5d 0a 0a 20 20 69 66 20 7b 24 78 data1].. if {$x
2300: 63 6e 74 20 21 3d 20 24 79 63 6e 74 7d 20 7b 0a cnt != $ycnt} {.
2310: 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 return -code
2320: 20 65 72 72 6f 72 20 22 78 20 61 6e 64 20 79 20 error "x and y
2330: 64 61 74 61 20 63 6f 75 6e 74 20 6d 69 73 6d 61 data count misma
2340: 74 63 68 22 0a 20 20 7d 0a 0a 20 20 69 66 20 7b tch". }.. if {
2350: 24 79 63 6e 74 20 3c 20 33 7d 20 7b 0a 20 20 20 $ycnt < 3} {.
2360: 20 73 65 74 20 78 64 61 74 61 32 20 24 78 64 61 set xdata2 $xda
2370: 74 61 31 0a 20 20 20 20 73 65 74 20 79 64 61 74 ta1. set ydat
2380: 61 32 20 24 79 64 61 74 61 31 0a 20 20 20 20 72 a2 $ydata1. r
2390: 65 74 75 72 6e 0a 20 20 7d 0a 0a 20 20 69 66 20 eturn. }.. if
23a0: 7b 24 73 74 65 70 73 20 3d 3d 20 30 7d 20 7b 0a {$steps == 0} {.
23b0: 20 20 20 20 73 65 74 20 73 74 65 70 73 20 5b 65 set steps [e
23c0: 78 70 72 20 7b 32 30 30 20 2f 20 24 78 63 6e 74 xpr {200 / $xcnt
23d0: 7d 5d 0a 20 20 20 20 69 66 20 7b 24 73 74 65 70 }]. if {$step
23e0: 73 20 3c 20 32 7d 20 7b 0a 20 20 20 20 20 20 73 s < 2} {. s
23f0: 65 74 20 78 64 61 74 61 32 20 24 78 64 61 74 61 et xdata2 $xdata
2400: 31 0a 20 20 20 20 20 20 73 65 74 20 79 64 61 74 1. set ydat
2410: 61 32 20 24 79 64 61 74 61 31 0a 20 20 20 20 20 a2 $ydata1.
2420: 20 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 20 20 return. }.
2430: 7d 0a 0a 20 20 73 65 74 20 79 33 20 5b 6c 69 6e }.. set y3 [lin
2440: 64 65 78 20 24 79 64 61 74 61 31 20 32 5d 0a 20 dex $ydata1 2].
2450: 20 73 65 74 20 79 32 20 5b 6c 69 6e 64 65 78 20 set y2 [lindex
2460: 24 79 64 61 74 61 31 20 31 5d 0a 20 20 73 65 74 $ydata1 1]. set
2470: 20 79 31 20 5b 6c 69 6e 64 65 78 20 24 79 64 61 y1 [lindex $yda
2480: 74 61 31 20 30 5d 0a 20 20 73 65 74 20 64 79 20 ta1 0]. set dy
2490: 5b 65 78 70 72 20 7b 24 79 32 20 2d 20 24 79 31 [expr {$y2 - $y1
24a0: 7d 5d 0a 20 20 73 65 74 20 79 30 20 5b 65 78 70 }]. set y0 [exp
24b0: 72 20 7b 24 79 31 20 2d 20 24 64 79 7d 5d 0a 20 r {$y1 - $dy}].
24c0: 20 69 66 20 7b 24 79 33 20 3d 3d 20 7b 7d 7d 20 if {$y3 == {}}
24d0: 7b 0a 20 20 20 20 73 65 74 20 79 33 20 5b 65 78 {. set y3 [ex
24e0: 70 72 20 7b 24 79 32 20 2b 20 24 64 79 7d 5d 0a pr {$y2 + $dy}].
24f0: 20 20 7d 0a 20 20 73 65 74 20 78 30 20 5b 6c 69 }. set x0 [li
2500: 6e 64 65 78 20 24 78 64 61 74 61 31 20 30 5d 0a ndex $xdata1 0].
2510: 0a 20 20 73 65 74 20 64 6d 75 20 5b 65 78 70 72 . set dmu [expr
2520: 20 7b 31 2e 30 20 2f 20 24 73 74 65 70 73 7d 5d {1.0 / $steps}]
2530: 0a 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 64 78 .. for {set idx
2540: 20 31 7d 20 7b 24 69 64 78 20 3c 3d 20 24 79 63 1} {$idx <= $yc
2550: 6e 74 7d 20 7b 69 6e 63 72 20 69 64 78 7d 20 7b nt} {incr idx} {
2560: 0a 20 20 20 20 73 65 74 20 78 31 20 5b 6c 69 6e . set x1 [lin
2570: 64 65 78 20 24 78 64 61 74 61 31 20 24 69 64 78 dex $xdata1 $idx
2580: 5d 0a 20 20 20 20 69 66 20 7b 24 78 31 20 3d 3d ]. if {$x1 ==
2590: 20 7b 7d 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 {}} {. set
25a0: 20 78 31 20 5b 65 78 70 72 20 7b 24 78 30 20 2b x1 [expr {$x0 +
25b0: 20 24 64 78 7d 5d 0a 20 20 20 20 7d 20 65 6c 73 $dx}]. } els
25c0: 65 20 7b 0a 20 20 20 20 20 20 73 65 74 20 64 78 e {. set dx
25d0: 20 5b 65 78 70 72 20 7b 24 78 31 20 2d 20 24 78 [expr {$x1 - $x
25e0: 30 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 0}]. }.. s
25f0: 65 74 20 6d 75 20 30 2e 30 0a 20 20 20 20 66 6f et mu 0.0. fo
2600: 72 20 7b 73 65 74 20 6a 20 30 7d 20 7b 24 6a 20 r {set j 0} {$j
2610: 3c 20 24 73 74 65 70 73 7d 20 7b 69 6e 63 72 20 < $steps} {incr
2620: 6a 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 78 j} {. set x
2630: 20 5b 65 78 70 72 20 7b 24 78 30 20 2b 20 24 6d [expr {$x0 + $m
2640: 75 20 2a 20 24 64 78 7d 5d 0a 20 20 20 20 20 20 u * $dx}].
2650: 73 65 74 20 79 20 5b 53 70 6c 69 6e 65 49 6e 74 set y [SplineInt
2660: 65 72 70 6f 6c 61 74 65 20 24 79 30 20 24 79 31 erpolate $y0 $y1
2670: 20 24 79 32 20 24 79 33 20 24 6d 75 20 24 74 65 $y2 $y3 $mu $te
2680: 6e 73 69 6f 6e 20 24 62 69 61 73 5d 0a 20 20 20 nsion $bias].
2690: 20 20 20 73 65 74 20 6d 75 20 5b 65 78 70 72 20 set mu [expr
26a0: 7b 24 6d 75 20 2b 20 24 64 6d 75 7d 5d 0a 20 20 {$mu + $dmu}].
26b0: 20 20 20 20 6c 61 70 70 65 6e 64 20 78 64 61 74 lappend xdat
26c0: 61 32 20 24 78 0a 20 20 20 20 20 20 6c 61 70 70 a2 $x. lapp
26d0: 65 6e 64 20 79 64 61 74 61 32 20 24 79 0a 20 20 end ydata2 $y.
26e0: 20 20 20 20 69 66 20 7b 24 69 64 78 20 3d 3d 20 if {$idx ==
26f0: 24 79 63 6e 74 7d 20 62 72 65 61 6b 0a 20 20 20 $ycnt} break.
2700: 20 7d 0a 20 20 20 20 69 66 20 7b 24 69 64 78 20 }. if {$idx
2710: 3d 3d 20 24 79 63 6e 74 7d 20 62 72 65 61 6b 0a == $ycnt} break.
2720: 0a 20 20 20 20 73 65 74 20 78 30 20 24 78 31 0a . set x0 $x1.
2730: 0a 20 20 20 20 73 65 74 20 79 30 20 24 79 31 0a . set y0 $y1.
2740: 20 20 20 20 73 65 74 20 79 31 20 24 79 32 0a 20 set y1 $y2.
2750: 20 20 20 73 65 74 20 79 32 20 24 79 33 0a 20 20 set y2 $y3.
2760: 20 20 73 65 74 20 79 20 5b 6c 69 6e 64 65 78 20 set y [lindex
2770: 24 79 64 61 74 61 31 20 5b 65 78 70 72 20 7b 24 $ydata1 [expr {$
2780: 69 64 78 2b 32 7d 5d 5d 0a 20 20 20 20 69 66 20 idx+2}]]. if
2790: 7b 24 79 20 3d 3d 20 7b 7d 7d 20 7b 0a 20 20 20 {$y == {}} {.
27a0: 20 20 20 73 65 74 20 64 79 20 5b 65 78 70 72 20 set dy [expr
27b0: 7b 24 79 32 20 2d 20 24 79 31 7d 5d 0a 20 20 20 {$y2 - $y1}].
27c0: 20 20 20 73 65 74 20 79 33 20 5b 65 78 70 72 20 set y3 [expr
27d0: 7b 24 79 32 20 2b 20 24 64 79 7d 5d 0a 20 20 20 {$y2 + $dy}].
27e0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 } else {.
27f0: 73 65 74 20 79 33 20 24 79 0a 20 20 20 20 7d 0a set y3 $y. }.
2800: 20 20 7d 0a 7d 0a 0a 0a 70 72 6f 63 20 70 64 66 }.}...proc pdf
2810: 34 74 63 6c 3a 3a 67 72 61 70 68 3a 3a 53 65 74 4tcl::graph::Set
2820: 44 61 73 68 20 7b 20 67 20 7b 70 61 74 74 65 72 Dash { g {patter
2830: 6e 20 7b 7d 7d 20 7d 20 7b 0a 20 20 69 66 20 7b n {}} } {. if {
2840: 5b 72 65 67 65 78 70 20 7b 5e 5b 5c 2e 5c 2d 2c [regexp {^[\.\-,
2850: 5f 20 5d 2b 24 7d 20 24 70 61 74 74 65 72 6e 5d _ ]+$} $pattern]
2860: 7d 20 7b 0a 20 20 20 20 73 65 74 20 70 61 74 6c } {. set patl
2870: 73 74 20 7b 7d 0a 20 20 20 20 66 6f 72 65 61 63 st {}. foreac
2880: 68 20 69 74 65 6d 20 5b 73 70 6c 69 74 20 24 70 h item [split $p
2890: 61 74 74 65 72 6e 20 7b 7d 5d 20 7b 0a 20 20 20 attern {}] {.
28a0: 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 69 74 switch -- $it
28b0: 65 6d 20 7b 0a 20 20 20 20 20 20 20 20 22 2e 22 em {. "."
28c0: 20 7b 20 6c 61 70 70 65 6e 64 20 70 61 74 6c 73 { lappend patls
28d0: 74 20 32 20 34 20 7d 0a 09 22 2c 22 20 7b 20 6c t 2 4 }.."," { l
28e0: 61 70 70 65 6e 64 20 70 61 74 6c 73 74 20 34 20 append patlst 4
28f0: 34 20 7d 0a 09 22 2d 22 20 7b 20 6c 61 70 70 65 4 }.."-" { lappe
2900: 6e 64 20 70 61 74 6c 73 74 20 36 20 34 20 7d 0a nd patlst 6 4 }.
2910: 09 22 5f 22 20 7b 20 6c 61 70 70 65 6e 64 20 70 ."_" { lappend p
2920: 61 74 6c 73 74 20 38 20 34 20 7d 0a 09 22 20 22 atlst 8 4 }.." "
2930: 20 7b 0a 09 20 20 69 66 20 7b 24 70 61 74 6c 73 {.. if {$patls
2940: 74 20 21 3d 20 7b 7d 7d 20 7b 0a 09 20 20 20 20 t != {}} {..
2950: 73 65 74 20 6c 61 73 74 20 5b 6c 69 6e 64 65 78 set last [lindex
2960: 20 24 70 61 74 6c 73 74 20 65 6e 64 5d 0a 09 20 $patlst end]..
2970: 20 20 20 73 65 74 20 70 61 74 6c 73 74 20 5b 6c set patlst [l
2980: 72 65 70 6c 61 63 65 20 24 70 61 74 6c 73 74 20 replace $patlst
2990: 65 6e 64 20 65 6e 64 20 5b 65 78 70 72 20 7b 24 end end [expr {$
29a0: 6c 61 73 74 20 2b 34 7d 5d 5d 0a 09 20 20 7d 0a last +4}]].. }.
29b0: 09 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d .}. }. }
29c0: 0a 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e . set pattern
29d0: 20 24 70 61 74 6c 73 74 0a 20 20 7d 0a 20 20 67 $patlst. }. g
29e0: 72 61 70 68 3a 3a 73 65 74 5f 6f 70 74 20 24 67 raph::set_opt $g
29f0: 20 64 61 73 68 70 61 74 74 65 72 6e 20 24 70 61 dashpattern $pa
2a00: 74 74 65 72 6e 0a 0a 20 20 73 65 74 20 70 61 74 ttern.. set pat
2a10: 20 7b 7d 0a 20 20 66 6f 72 65 61 63 68 20 69 74 {}. foreach it
2a20: 65 6d 20 24 70 61 74 74 65 72 6e 20 7b 0a 20 20 em $pattern {.
2a30: 20 20 6c 61 70 70 65 6e 64 20 70 61 74 20 5b 65 lappend pat [e
2a40: 78 70 72 20 7b 24 69 74 65 6d 2f 33 2e 30 7d 5d xpr {$item/3.0}]
2a50: 0a 20 20 7d 0a 20 20 67 72 61 70 68 3a 3a 65 78 . }. graph::ex
2a60: 65 63 75 74 65 20 73 65 74 4c 69 6e 65 44 61 73 ecute setLineDas
2a70: 68 20 7b 2a 7d 24 70 61 74 0a 0a 20 20 72 65 74 h {*}$pat.. ret
2a80: 75 72 6e 20 5b 67 72 61 70 68 3a 3a 67 65 74 5f urn [graph::get_
2a90: 6f 70 74 20 24 67 20 64 61 73 68 70 61 74 74 65 opt $g dashpatte
2aa0: 72 6e 5d 0a 7d 0a 0a 0a 70 72 6f 63 20 70 64 66 rn].}...proc pdf
2ab0: 34 74 63 6c 3a 3a 67 72 61 70 68 3a 3a 4c 69 6e 4tcl::graph::Lin
2ac0: 65 20 7b 20 67 20 78 31 20 79 31 20 78 32 20 79 e { g x1 y1 x2 y
2ad0: 32 20 7d 20 7b 0a 20 20 43 61 6c 63 58 59 20 24 2 } {. CalcXY $
2ae0: 67 20 78 31 20 79 31 0a 20 20 43 61 6c 63 58 59 g x1 y1. CalcXY
2af0: 20 24 67 20 78 32 20 79 32 0a 0a 20 20 69 66 20 $g x2 y2.. if
2b00: 7b 5b 67 72 61 70 68 3a 3a 67 65 74 5f 6f 70 74 {[graph::get_opt
2b10: 20 24 67 20 6c 69 6e 65 77 69 64 74 68 5d 20 3e $g linewidth] >
2b20: 3d 20 30 7d 20 7b 0a 20 20 20 20 67 72 61 70 68 = 0} {. graph
2b30: 3a 3a 65 78 65 63 75 74 65 20 6c 69 6e 65 20 24 ::execute line $
2b40: 78 31 20 24 79 31 20 24 78 32 20 24 79 32 0a 20 x1 $y1 $x2 $y2.
2b50: 20 7d 0a 7d 0a 0a 0a 70 72 6f 63 20 70 64 66 34 }.}...proc pdf4
2b60: 74 63 6c 3a 3a 67 72 61 70 68 3a 3a 43 6c 69 70 tcl::graph::Clip
2b70: 52 65 63 74 20 7b 20 67 20 78 31 20 79 31 20 78 Rect { g x1 y1 x
2b80: 32 20 79 32 20 7d 20 7b 0a 20 20 43 61 6c 63 58 2 y2 } {. CalcX
2b90: 59 20 24 67 20 78 31 20 79 31 0a 20 20 43 61 6c Y $g x1 y1. Cal
2ba0: 63 58 59 20 24 67 20 78 32 20 79 32 0a 0a 20 20 cXY $g x2 y2..
2bb0: 67 72 61 70 68 3a 3a 65 78 65 63 75 74 65 20 67 graph::execute g
2bc0: 73 61 76 65 0a 20 20 73 65 74 20 77 20 5b 65 78 save. set w [ex
2bd0: 70 72 20 7b 61 62 73 28 24 78 32 20 2d 20 24 78 pr {abs($x2 - $x
2be0: 31 29 7d 5d 0a 20 20 73 65 74 20 68 20 5b 65 78 1)}]. set h [ex
2bf0: 70 72 20 7b 61 62 73 28 24 79 32 20 2d 20 24 79 pr {abs($y2 - $y
2c00: 31 29 7d 5d 0a 20 20 73 65 74 20 78 6c 20 5b 65 1)}]. set xl [e
2c10: 78 70 72 20 7b 28 24 78 31 20 3c 20 24 78 32 29 xpr {($x1 < $x2)
2c20: 3f 20 24 78 31 20 3a 20 24 78 32 7d 5d 0a 20 20 ? $x1 : $x2}].
2c30: 73 65 74 20 79 62 20 5b 65 78 70 72 20 7b 28 24 set yb [expr {($
2c40: 79 31 20 3c 20 24 79 32 29 3f 20 24 79 31 20 3a y1 < $y2)? $y1 :
2c50: 20 24 79 32 7d 5d 0a 20 20 67 72 61 70 68 3a 3a $y2}]. graph::
2c60: 65 78 65 63 75 74 65 20 63 6c 69 70 20 24 78 6c execute clip $xl
2c70: 20 24 79 62 20 24 77 20 24 68 0a 7d 0a 0a 0a 70 $yb $w $h.}...p
2c80: 72 6f 63 20 70 64 66 34 74 63 6c 3a 3a 67 72 61 roc pdf4tcl::gra
2c90: 70 68 3a 3a 55 6e 63 6c 69 70 52 65 63 74 20 7b ph::UnclipRect {
2ca0: 20 67 20 7d 20 7b 0a 20 20 67 72 61 70 68 3a 3a g } {. graph::
2cb0: 65 78 65 63 75 74 65 20 67 72 65 73 74 6f 72 65 execute grestore
2cc0: 0a 7d 0a 0a 0a 70 72 6f 63 20 70 64 66 34 74 63 .}...proc pdf4tc
2cd0: 6c 3a 3a 67 72 61 70 68 3a 3a 52 65 63 74 20 7b l::graph::Rect {
2ce0: 20 67 20 78 31 20 79 31 20 78 32 20 79 32 20 7b g x1 y1 x2 y2 {
2cf0: 20 66 69 6c 6c 63 6f 6c 6f 72 20 7b 7d 20 7d 20 fillcolor {} }
2d00: 7d 20 7b 0a 20 20 43 61 6c 63 58 59 20 24 67 20 } {. CalcXY $g
2d10: 78 31 20 79 31 0a 20 20 43 61 6c 63 58 59 20 24 x1 y1. CalcXY $
2d20: 67 20 78 32 20 79 32 0a 0a 20 20 69 66 20 7b 24 g x2 y2.. if {$
2d30: 66 69 6c 6c 63 6f 6c 6f 72 20 21 3d 20 22 22 7d fillcolor != ""}
2d40: 20 7b 0a 20 20 20 20 73 65 74 20 72 67 62 6f 72 {. set rgbor
2d50: 67 20 5b 67 72 61 70 68 3a 3a 67 65 74 5f 6f 70 g [graph::get_op
2d60: 74 20 24 67 20 72 67 62 63 6f 6c 6f 72 5d 0a 20 t $g rgbcolor].
2d70: 20 20 20 73 65 74 20 72 67 62 20 5b 47 65 74 52 set rgb [GetR
2d80: 47 42 20 24 66 69 6c 6c 63 6f 6c 6f 72 5d 0a 20 GB $fillcolor].
2d90: 20 7d 0a 20 20 73 65 74 20 77 20 5b 65 78 70 72 }. set w [expr
2da0: 20 7b 61 62 73 28 24 78 32 20 2d 20 24 78 31 29 {abs($x2 - $x1)
2db0: 7d 5d 0a 20 20 73 65 74 20 68 20 5b 65 78 70 72 }]. set h [expr
2dc0: 20 7b 61 62 73 28 24 79 32 20 2d 20 24 79 31 29 {abs($y2 - $y1)
2dd0: 7d 5d 0a 20 20 73 65 74 20 79 62 20 5b 65 78 70 }]. set yb [exp
2de0: 72 20 7b 28 24 79 31 20 3c 20 24 79 32 29 3f 20 r {($y1 < $y2)?
2df0: 24 79 31 20 3a 20 24 79 32 7d 5d 0a 20 20 73 65 $y1 : $y2}]. se
2e00: 74 20 73 74 72 6f 6b 65 20 5b 65 78 70 72 20 7b t stroke [expr {
2e10: 5b 67 72 61 70 68 3a 3a 67 65 74 5f 6f 70 74 20 [graph::get_opt
2e20: 24 67 20 6c 69 6e 65 77 69 64 74 68 5d 20 3e 3d $g linewidth] >=
2e30: 20 30 7d 5d 0a 20 20 69 66 20 7b 24 66 69 6c 6c 0}]. if {$fill
2e40: 63 6f 6c 6f 72 20 21 3d 20 22 22 7d 20 7b 0a 20 color != ""} {.
2e50: 20 20 20 6c 61 73 73 69 67 6e 20 24 72 67 62 20 lassign $rgb
2e60: 72 20 67 20 62 0a 20 20 20 20 67 72 61 70 68 3a r g b. graph:
2e70: 3a 65 78 65 63 75 74 65 20 73 65 74 46 69 6c 6c :execute setFill
2e80: 43 6f 6c 6f 72 20 24 72 20 24 67 20 24 62 0a 20 Color $r $g $b.
2e90: 20 20 20 67 72 61 70 68 3a 3a 65 78 65 63 75 74 graph::execut
2ea0: 65 20 72 65 63 74 61 6e 67 6c 65 20 24 78 31 20 e rectangle $x1
2eb0: 24 79 62 20 24 77 20 24 68 20 2d 73 74 72 6f 6b $yb $w $h -strok
2ec0: 65 20 24 73 74 72 6f 6b 65 20 2d 66 69 6c 6c 65 e $stroke -fille
2ed0: 64 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 d 1. } else {.
2ee0: 20 20 20 67 72 61 70 68 3a 3a 65 78 65 63 75 74 graph::execut
2ef0: 65 20 72 65 63 74 61 6e 67 6c 65 20 24 78 31 20 e rectangle $x1
2f00: 24 79 62 20 24 77 20 24 68 20 2d 73 74 72 6f 6b $yb $w $h -strok
2f10: 65 20 24 73 74 72 6f 6b 65 20 2d 66 69 6c 6c 65 e $stroke -fille
2f20: 64 20 30 0a 20 20 7d 0a 20 20 69 66 20 7b 24 66 d 0. }. if {$f
2f30: 69 6c 6c 63 6f 6c 6f 72 20 21 3d 20 22 22 7d 20 illcolor != ""}
2f40: 7b 0a 20 20 20 20 53 65 74 43 6f 6c 6f 72 20 24 {. SetColor $
2f50: 67 20 24 72 67 62 6f 72 67 0a 20 20 7d 0a 7d 0a g $rgborg. }.}.
2f60: 0a 0a 70 72 6f 63 20 70 64 66 34 74 63 6c 3a 3a ..proc pdf4tcl::
2f70: 67 72 61 70 68 3a 3a 41 72 63 20 7b 20 67 20 78 graph::Arc { g x
2f80: 20 79 20 72 20 61 6c 70 68 61 20 62 65 74 61 20 y r alpha beta
2f90: 7b 66 69 6c 6c 63 6f 6c 6f 72 20 22 22 7d 20 7b {fillcolor ""} {
2fa0: 73 6c 69 6e 65 73 20 6e 6f 7d 20 7d 20 7b 0a 20 slines no} } {.
2fb0: 20 43 61 6c 63 58 59 20 24 67 20 78 20 79 0a 0a CalcXY $g x y..
2fc0: 20 20 69 66 20 7b 24 66 69 6c 6c 63 6f 6c 6f 72 if {$fillcolor
2fd0: 20 21 3d 20 22 22 7d 20 7b 0a 20 20 20 20 73 65 != ""} {. se
2fe0: 74 20 72 67 62 6f 72 67 20 5b 67 72 61 70 68 3a t rgborg [graph:
2ff0: 3a 67 65 74 5f 6f 70 74 20 24 67 20 72 67 62 63 :get_opt $g rgbc
3000: 6f 6c 6f 72 5d 0a 20 20 20 20 73 65 74 20 72 67 olor]. set rg
3010: 62 20 5b 47 65 74 52 47 42 20 24 66 69 6c 6c 63 b [GetRGB $fillc
3020: 6f 6c 6f 72 5d 0a 20 20 7d 0a 20 20 73 65 74 20 olor]. }. set
3030: 64 65 6c 74 61 20 5b 65 78 70 72 20 7b 24 62 65 delta [expr {$be
3040: 74 61 20 2d 20 24 61 6c 70 68 61 7d 5d 0a 20 20 ta - $alpha}].
3050: 69 66 20 7b 24 66 69 6c 6c 63 6f 6c 6f 72 20 21 if {$fillcolor !
3060: 3d 20 22 22 7d 20 7b 0a 20 20 20 20 6c 61 73 73 = ""} {. lass
3070: 69 67 6e 20 24 72 67 62 20 72 64 20 67 6e 20 62 ign $rgb rd gn b
3080: 6c 0a 20 20 20 20 67 72 61 70 68 3a 3a 65 78 65 l. graph::exe
3090: 63 75 74 65 20 73 65 74 46 69 6c 6c 43 6f 6c 6f cute setFillColo
30a0: 72 20 24 72 64 20 24 67 6e 20 24 62 6c 0a 20 20 r $rd $gn $bl.
30b0: 20 20 67 72 61 70 68 3a 3a 65 78 65 63 75 74 65 graph::execute
30c0: 20 61 72 63 20 24 78 20 24 79 20 24 72 20 24 72 arc $x $y $r $r
30d0: 20 24 61 6c 70 68 61 20 24 64 65 6c 74 61 20 2d $alpha $delta -
30e0: 73 74 72 6f 6b 65 20 31 20 2d 66 69 6c 6c 65 64 stroke 1 -filled
30f0: 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 1. } else {.
3100: 20 20 67 72 61 70 68 3a 3a 65 78 65 63 75 74 65 graph::execute
3110: 20 61 72 63 20 24 78 20 24 79 20 24 72 20 24 72 arc $x $y $r $r
3120: 20 24 61 6c 70 68 61 20 24 64 65 6c 74 61 20 2d $alpha $delta -
3130: 73 74 72 6f 6b 65 20 31 20 2d 66 69 6c 6c 65 64 stroke 1 -filled
3140: 20 30 0a 20 20 7d 0a 20 20 69 66 20 7b 24 66 69 0. }. if {$fi
3150: 6c 6c 63 6f 6c 6f 72 20 21 3d 20 22 22 7d 20 7b llcolor != ""} {
3160: 0a 20 20 20 20 53 65 74 43 6f 6c 6f 72 20 24 67 . SetColor $g
3170: 20 24 72 67 62 6f 72 67 0a 20 20 7d 0a 7d 0a 0a $rgborg. }.}..
3180: 0a 70 72 6f 63 20 70 64 66 34 74 63 6c 3a 3a 67 .proc pdf4tcl::g
3190: 72 61 70 68 3a 3a 50 6f 6c 79 4f 62 6a 65 63 74 raph::PolyObject
31a0: 20 7b 20 67 20 61 72 67 76 20 7b 66 69 6c 6c 63 { g argv {fillc
31b0: 6f 6c 6f 72 20 7b 7d 7d 20 7d 20 7b 0a 20 20 69 olor {}} } {. i
31c0: 66 20 7b 24 66 69 6c 6c 63 6f 6c 6f 72 20 21 3d f {$fillcolor !=
31d0: 20 22 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 ""} {. set r
31e0: 67 62 6f 72 67 20 5b 67 72 61 70 68 3a 3a 67 65 gborg [graph::ge
31f0: 74 5f 6f 70 74 20 24 67 20 72 67 62 63 6f 6c 6f t_opt $g rgbcolo
3200: 72 5d 0a 20 20 20 20 73 65 74 20 72 67 62 20 5b r]. set rgb [
3210: 47 65 74 52 47 42 20 24 66 69 6c 6c 63 6f 6c 6f GetRGB $fillcolo
3220: 72 5d 0a 20 20 7d 0a 20 20 73 65 74 20 61 72 67 r]. }. set arg
3230: 63 20 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67 76 c [llength $argv
3240: 5d 0a 20 20 69 66 20 7b 24 61 72 67 63 20 21 3d ]. if {$argc !=
3250: 20 32 20 26 26 20 24 61 72 67 63 20 21 3d 20 33 2 && $argc != 3
3260: 7d 20 7b 0a 20 20 20 20 65 72 72 6f 72 20 22 73 } {. error "s
3270: 79 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20 50 yntax error in P
3280: 6f 6c 79 4f 62 6a 65 63 74 20 24 61 72 67 76 22 olyObject $argv"
3290: 0a 20 20 7d 0a 20 20 69 66 20 7b 24 61 72 67 63 . }. if {$argc
32a0: 20 3d 3d 20 32 7d 20 7b 0a 20 20 20 20 73 65 74 == 2} {. set
32b0: 20 78 4c 73 74 20 5b 6c 69 6e 64 65 78 20 24 61 xLst [lindex $a
32c0: 72 67 76 20 30 5d 0a 20 20 20 20 73 65 74 20 79 rgv 0]. set y
32d0: 4c 73 74 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 Lst [lindex $arg
32e0: 76 20 31 5d 0a 20 20 20 20 73 65 74 20 63 6e 74 v 1]. set cnt
32f0: 20 20 5b 6c 6c 65 6e 67 74 68 20 24 78 4c 73 74 [llength $xLst
3300: 5d 0a 20 20 20 20 73 65 74 20 6d 6f 64 65 20 78 ]. set mode x
3310: 79 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 y. } else {.
3320: 20 73 65 74 20 78 4c 73 74 20 5b 6c 69 6e 64 65 set xLst [linde
3330: 78 20 24 61 72 67 76 20 30 5d 0a 20 20 20 20 69 x $argv 0]. i
3340: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 78 4c 73 f {[llength $xLs
3350: 74 5d 20 3e 20 31 7d 20 7b 0a 20 20 20 20 20 20 t] > 1} {.
3360: 73 65 74 20 79 4c 73 74 20 7b 7d 0a 20 20 20 20 set yLst {}.
3370: 20 20 73 65 74 20 63 6e 74 20 20 5b 6c 6c 65 6e set cnt [llen
3380: 67 74 68 20 24 78 4c 73 74 5d 0a 20 20 20 20 20 gth $xLst].
3390: 20 73 65 74 20 79 56 61 6c 20 5b 6c 69 6e 64 65 set yVal [linde
33a0: 78 20 24 61 72 67 76 20 31 5d 0a 20 20 20 20 20 x $argv 1].
33b0: 20 73 65 74 20 79 41 64 64 20 5b 6c 69 6e 64 65 set yAdd [linde
33c0: 78 20 24 61 72 67 76 20 32 5d 0a 20 20 20 20 20 x $argv 2].
33d0: 20 73 65 74 20 6d 6f 64 65 20 79 69 6e 63 72 0a set mode yincr.
33e0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 } else {.
33f0: 20 20 20 73 65 74 20 78 4c 73 74 20 7b 7d 0a 20 set xLst {}.
3400: 20 20 20 20 20 73 65 74 20 78 56 61 6c 20 5b 6c set xVal [l
3410: 69 6e 64 65 78 20 24 61 72 67 76 20 30 5d 0a 20 index $argv 0].
3420: 20 20 20 20 20 73 65 74 20 78 41 64 64 20 5b 6c set xAdd [l
3430: 69 6e 64 65 78 20 24 61 72 67 76 20 31 5d 0a 20 index $argv 1].
3440: 20 20 20 20 20 73 65 74 20 79 4c 73 74 20 5b 6c set yLst [l
3450: 69 6e 64 65 78 20 24 61 72 67 76 20 32 5d 0a 20 index $argv 2].
3460: 20 20 20 20 20 73 65 74 20 63 6e 74 20 20 5b 6c set cnt [l
3470: 6c 65 6e 67 74 68 20 24 79 4c 73 74 5d 0a 20 20 length $yLst].
3480: 20 20 20 20 73 65 74 20 6d 6f 64 65 20 78 69 6e set mode xin
3490: 63 72 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 cr. }. }. i
34a0: 66 20 7b 24 63 6e 74 20 3d 3d 20 30 7d 20 72 65 f {$cnt == 0} re
34b0: 74 75 72 6e 0a 20 20 73 65 74 20 70 6f 6c 79 20 turn. set poly
34c0: 7b 7d 0a 20 20 73 77 69 74 63 68 20 24 6d 6f 64 {}. switch $mod
34d0: 65 20 7b 0a 20 20 20 20 78 79 20 7b 0a 20 20 20 e {. xy {.
34e0: 20 20 20 73 65 74 20 69 64 78 20 30 0a 20 20 20 set idx 0.
34f0: 20 20 20 66 6f 72 65 61 63 68 20 78 20 24 78 4c foreach x $xL
3500: 73 74 20 79 20 24 79 4c 73 74 20 7b 0a 20 20 20 st y $yLst {.
3510: 20 20 20 20 20 73 65 74 20 78 20 5b 66 6f 72 6d set x [form
3520: 61 74 20 25 2e 32 66 20 5b 6c 69 6e 64 65 78 20 at %.2f [lindex
3530: 24 78 4c 73 74 20 24 69 64 78 5d 5d 0a 20 20 20 $xLst $idx]].
3540: 20 20 20 20 20 73 65 74 20 79 20 5b 66 6f 72 6d set y [form
3550: 61 74 20 25 2e 32 66 20 5b 6c 69 6e 64 65 78 20 at %.2f [lindex
3560: 24 79 4c 73 74 20 24 69 64 78 5d 5d 0a 20 20 20 $yLst $idx]].
3570: 20 20 20 20 20 43 61 6c 63 58 59 20 24 67 20 78 CalcXY $g x
3580: 20 79 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 y. lappe
3590: 6e 64 20 70 6f 6c 79 20 24 78 20 24 79 0a 20 20 nd poly $x $y.
35a0: 20 20 20 20 20 20 69 6e 63 72 20 69 64 78 0a 20 incr idx.
35b0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 }. }.
35c0: 20 78 69 6e 63 72 20 7b 0a 20 20 20 20 20 20 66 xincr {. f
35d0: 6f 72 20 7b 73 65 74 20 69 64 78 20 30 7d 20 7b or {set idx 0} {
35e0: 24 69 64 78 20 3c 20 24 63 6e 74 7d 20 7b 69 6e $idx < $cnt} {in
35f0: 63 72 20 69 64 78 7d 20 7b 0a 20 20 20 20 20 20 cr idx} {.
3600: 20 20 73 65 74 20 79 20 5b 66 6f 72 6d 61 74 20 set y [format
3610: 25 2e 32 66 20 5b 6c 69 6e 64 65 78 20 24 79 4c %.2f [lindex $yL
3620: 73 74 20 24 69 64 78 5d 5d 0a 20 20 20 20 20 20 st $idx]].
3630: 20 20 69 66 20 7b 24 69 64 78 20 3d 3d 20 30 7d if {$idx == 0}
3640: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {. set
3650: 20 78 20 24 78 56 61 6c 0a 20 20 20 20 20 20 20 x $xVal.
3660: 20 20 20 43 61 6c 63 58 59 20 24 67 20 78 20 79 CalcXY $g x y
3670: 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 . lappe
3680: 6e 64 20 70 6f 6c 79 20 24 78 20 24 79 0a 20 20 nd poly $x $y.
3690: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 } else {.
36a0: 20 20 20 20 20 20 20 20 20 73 65 74 20 78 20 5b set x [
36b0: 66 6f 72 6d 61 74 20 25 2e 32 66 20 5b 65 78 70 format %.2f [exp
36c0: 72 20 7b 24 78 20 2b 20 24 78 41 64 64 7d 5d 5d r {$x + $xAdd}]]
36d0: 0a 20 20 20 20 20 20 20 20 20 20 43 61 6c 63 58 . CalcX
36e0: 59 20 24 67 20 78 20 79 0a 20 20 20 20 20 20 20 Y $g x y.
36f0: 20 20 20 6c 61 70 70 65 6e 64 20 70 6f 6c 79 20 lappend poly
3700: 24 78 20 24 79 0a 20 20 20 20 20 20 20 20 7d 0a $x $y. }.
3710: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 }. }.
3720: 20 20 79 69 6e 63 72 20 7b 0a 20 20 20 20 20 20 yincr {.
3730: 66 6f 72 20 7b 73 65 74 20 69 64 78 20 30 7d 20 for {set idx 0}
3740: 7b 24 69 64 78 20 3c 20 24 63 6e 74 7d 20 7b 69 {$idx < $cnt} {i
3750: 6e 63 72 20 69 64 78 7d 20 7b 0a 20 20 20 20 20 ncr idx} {.
3760: 20 20 20 73 65 74 20 78 20 5b 66 6f 72 6d 61 74 set x [format
3770: 20 25 2e 32 66 20 5b 6c 69 6e 64 65 78 20 24 78 %.2f [lindex $x
3780: 4c 73 74 20 24 69 64 78 5d 5d 0a 20 20 20 20 20 Lst $idx]].
3790: 20 20 20 69 66 20 7b 24 69 64 78 20 3d 3d 20 30 if {$idx == 0
37a0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73 65 } {. se
37b0: 74 20 79 20 24 79 56 61 6c 0a 20 20 20 20 20 20 t y $yVal.
37c0: 20 20 20 20 43 61 6c 63 58 59 20 24 67 20 78 20 CalcXY $g x
37d0: 79 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 y. lapp
37e0: 65 6e 64 20 70 6f 6c 79 20 24 78 20 24 79 0a 20 end poly $x $y.
37f0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a } else {.
3800: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 79 20 set y
3810: 5b 66 6f 72 6d 61 74 20 25 2e 32 66 20 5b 65 78 [format %.2f [ex
3820: 70 72 20 7b 24 79 20 2b 20 24 79 41 64 64 7d 5d pr {$y + $yAdd}]
3830: 5d 0a 20 20 20 20 20 20 20 20 20 20 43 61 6c 63 ]. Calc
3840: 58 59 20 24 67 20 78 20 79 0a 20 20 20 20 20 20 XY $g x y.
3850: 20 20 20 20 6c 61 70 70 65 6e 64 20 70 6f 6c 79 lappend poly
3860: 20 24 78 20 24 79 0a 20 20 20 20 20 20 20 20 7d $x $y. }
3870: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 . }. }.
3880: 20 7d 0a 20 20 69 66 20 7b 24 66 69 6c 6c 63 6f }. if {$fillco
3890: 6c 6f 72 20 21 3d 20 7b 7d 7d 20 7b 0a 20 20 20 lor != {}} {.
38a0: 20 6c 61 73 73 69 67 6e 20 24 66 69 6c 6c 63 6f lassign $fillco
38b0: 6c 6f 72 20 72 20 67 20 62 0a 20 20 20 20 67 72 lor r g b. gr
38c0: 61 70 68 3a 3a 65 78 65 63 75 74 65 20 73 65 74 aph::execute set
38d0: 46 69 6c 6c 43 6f 6c 6f 72 20 24 72 20 24 67 20 FillColor $r $g
38e0: 24 62 0a 20 20 20 20 67 72 61 70 68 3a 3a 65 78 $b. graph::ex
38f0: 65 63 75 74 65 20 70 6f 6c 79 67 6f 6e 20 7b 2a ecute polygon {*
3900: 7d 24 70 6f 6c 79 20 2d 73 74 72 6f 6b 65 20 31 }$poly -stroke 1
3910: 20 2d 66 69 6c 6c 65 64 20 31 0a 20 20 7d 20 65 -filled 1. } e
3920: 6c 73 65 20 7b 0a 20 20 20 20 67 72 61 70 68 3a lse {. graph:
3930: 3a 65 78 65 63 75 74 65 20 70 6f 6c 79 67 6f 6e :execute polygon
3940: 20 7b 2a 7d 24 70 6f 6c 79 20 2d 73 74 72 6f 6b {*}$poly -strok
3950: 65 20 31 20 2d 63 6c 6f 73 65 64 20 30 0a 20 20 e 1 -closed 0.
3960: 7d 0a 20 20 69 66 20 7b 24 66 69 6c 6c 63 6f 6c }. if {$fillcol
3970: 6f 72 20 21 3d 20 22 22 7d 20 7b 0a 20 20 20 20 or != ""} {.
3980: 53 65 74 43 6f 6c 6f 72 20 24 67 20 24 72 67 62 SetColor $g $rgb
3990: 6f 72 67 0a 20 20 7d 0a 7d 0a 0a 0a 70 72 6f 63 org. }.}...proc
39a0: 20 70 64 66 34 74 63 6c 3a 3a 67 72 61 70 68 3a pdf4tcl::graph:
39b0: 3a 54 65 78 74 20 7b 20 67 20 78 20 79 20 74 65 :Text { g x y te
39c0: 78 74 20 61 72 67 73 20 7d 20 7b 0a 20 20 69 66 xt args } {. if
39d0: 20 7b 24 74 65 78 74 20 3d 3d 20 22 22 7d 20 72 {$text == ""} r
39e0: 65 74 75 72 6e 0a 0a 20 20 43 61 6c 63 58 59 20 eturn.. CalcXY
39f0: 24 67 20 78 20 79 0a 0a 20 20 73 65 74 20 72 6f $g x y.. set ro
3a00: 74 61 74 69 6f 6e 20 5b 67 72 61 70 68 3a 3a 67 tation [graph::g
3a10: 65 74 5f 6f 70 74 20 24 67 20 72 6f 74 61 74 69 et_opt $g rotati
3a20: 6f 6e 5d 0a 0a 20 20 69 66 20 7b 24 61 72 67 73 on].. if {$args
3a30: 20 21 3d 20 7b 7d 7d 20 7b 0a 20 20 20 20 69 66 != {}} {. if
3a40: 20 7b 5b 73 65 74 20 69 64 78 20 5b 6c 73 65 61 {[set idx [lsea
3a50: 72 63 68 20 24 61 72 67 73 20 22 72 69 67 68 74 rch $args "right
3a60: 22 5d 5d 20 21 3d 20 2d 31 7d 20 7b 0a 20 20 20 "]] != -1} {.
3a70: 20 20 20 73 65 74 20 77 69 64 74 68 20 5b 6c 69 set width [li
3a80: 6e 64 65 78 20 24 61 72 67 73 20 5b 69 6e 63 72 ndex $args [incr
3a90: 20 69 64 78 5d 5d 0a 20 20 20 20 20 20 73 65 74 idx]]. set
3aa0: 20 74 77 20 5b 54 65 78 74 57 69 64 74 68 20 24 tw [TextWidth $
3ab0: 74 65 78 74 5d 0a 20 20 20 20 20 20 73 65 74 20 text]. set
3ac0: 78 20 5b 65 78 70 72 20 7b 24 78 20 2b 20 24 77 x [expr {$x + $w
3ad0: 69 64 74 68 20 2d 20 24 74 77 7d 5d 0a 20 20 20 idth - $tw}].
3ae0: 20 7d 0a 20 20 20 20 69 66 20 7b 5b 73 65 74 20 }. if {[set
3af0: 69 64 78 20 5b 6c 73 65 61 72 63 68 20 24 61 72 idx [lsearch $ar
3b00: 67 73 20 22 63 65 6e 74 65 72 22 5d 5d 20 21 3d gs "center"]] !=
3b10: 20 2d 31 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 -1} {. set
3b20: 20 77 69 64 74 68 20 5b 6c 69 6e 64 65 78 20 24 width [lindex $
3b30: 61 72 67 73 20 5b 69 6e 63 72 20 69 64 78 5d 5d args [incr idx]]
3b40: 0a 20 20 20 20 20 20 73 65 74 20 74 77 20 5b 54 . set tw [T
3b50: 65 78 74 57 69 64 74 68 20 24 74 65 78 74 5d 0a extWidth $text].
3b60: 20 20 20 20 20 20 73 65 74 20 78 20 5b 65 78 70 set x [exp
3b70: 72 20 7b 24 78 20 2b 20 28 24 77 69 64 74 68 20 r {$x + ($width
3b80: 2d 20 24 74 77 29 20 2f 20 32 2e 30 7d 5d 0a 20 - $tw) / 2.0}].
3b90: 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 5b 73 65 }. if {[se
3ba0: 74 20 69 64 78 20 5b 6c 73 65 61 72 63 68 20 24 t idx [lsearch $
3bb0: 61 72 67 73 20 22 72 6f 74 61 74 65 22 5d 5d 20 args "rotate"]]
3bc0: 21 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 20 20 73 != -1} {. s
3bd0: 65 74 20 61 6e 67 6c 65 20 5b 6c 69 6e 64 65 78 et angle [lindex
3be0: 20 24 61 72 67 73 20 5b 69 6e 63 72 20 69 64 78 $args [incr idx
3bf0: 5d 5d 0a 20 20 20 20 20 20 73 65 74 20 72 6f 74 ]]. set rot
3c00: 61 74 69 6f 6e 20 5b 65 78 70 72 20 7b 24 72 6f ation [expr {$ro
3c10: 74 61 74 69 6f 6e 20 2b 20 24 61 6e 67 6c 65 7d tation + $angle}
3c20: 5d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 ]. }. }.. i
3c30: 66 20 7b 24 72 6f 74 61 74 69 6f 6e 20 3d 3d 20 f {$rotation ==
3c40: 30 7d 20 7b 0a 20 20 20 20 67 72 61 70 68 3a 3a 0} {. graph::
3c50: 65 78 65 63 75 74 65 20 74 65 78 74 20 24 74 65 execute text $te
3c60: 78 74 20 2d 78 20 24 78 20 2d 79 20 24 79 0a 20 xt -x $x -y $y.
3c70: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 67 72 } else {. gr
3c80: 61 70 68 3a 3a 65 78 65 63 75 74 65 20 74 65 78 aph::execute tex
3c90: 74 20 24 74 65 78 74 20 2d 78 20 24 78 20 2d 79 t $text -x $x -y
3ca0: 20 24 79 20 2d 61 6e 67 6c 65 20 24 72 6f 74 61 $y -angle $rota
3cb0: 74 69 6f 6e 0a 20 20 7d 0a 7d 0a 0a 0a 70 72 6f tion. }.}...pro
3cc0: 63 20 70 64 66 34 74 63 6c 3a 3a 67 72 61 70 68 c pdf4tcl::graph
3cd0: 3a 3a 50 69 63 74 20 7b 20 67 20 78 20 79 20 6e ::Pict { g x y n
3ce0: 61 6d 65 20 7b 20 73 63 61 6c 65 20 31 2e 30 20 ame { scale 1.0
3cf0: 7d 20 7d 20 7b 0a 20 20 43 61 6c 63 58 59 20 24 } } {. CalcXY $
3d00: 67 20 78 20 79 0a 0a 20 20 69 66 20 7b 5b 6c 73 g x y.. if {[ls
3d10: 65 61 72 63 68 20 5b 67 72 61 70 68 3a 3a 67 65 earch [graph::ge
3d20: 74 5f 6f 70 74 20 24 67 20 70 69 63 74 73 5d 20 t_opt $g picts]
3d30: 24 6e 61 6d 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a $name] == -1} {.
3d40: 20 20 20 20 4c 6f 61 64 50 69 63 74 20 24 67 20 LoadPict $g
3d50: 24 6e 61 6d 65 0a 20 20 7d 0a 0a 20 20 73 65 74 $name. }.. set
3d60: 20 69 64 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 id [file tail $
3d70: 6e 61 6d 65 5d 0a 20 20 69 66 20 7b 24 73 63 61 name]. if {$sca
3d80: 6c 65 20 21 3d 20 31 2e 30 7d 20 7b 0a 20 20 20 le != 1.0} {.
3d90: 20 73 65 74 20 77 20 5b 65 78 70 72 20 7b 5b 67 set w [expr {[g
3da0: 72 61 70 68 3a 3a 67 65 74 5f 6f 70 74 20 24 67 raph::get_opt $g
3db0: 20 70 69 63 74 2c 24 6e 61 6d 65 2c 77 69 64 74 pict,$name,widt
3dc0: 68 5d 20 20 2a 20 24 73 63 61 6c 65 7d 5d 0a 20 h] * $scale}].
3dd0: 20 20 20 73 65 74 20 68 20 5b 65 78 70 72 20 7b set h [expr {
3de0: 5b 67 72 61 70 68 3a 3a 67 65 74 5f 6f 70 74 20 [graph::get_opt
3df0: 24 67 20 70 69 63 74 2c 24 6e 61 6d 65 2c 68 65 $g pict,$name,he
3e00: 69 67 68 74 5d 20 2a 20 24 73 63 61 6c 65 7d 5d ight] * $scale}]
3e10: 0a 20 20 20 20 67 72 61 70 68 3a 3a 65 78 65 63 . graph::exec
3e20: 75 74 65 20 70 75 74 49 6d 61 67 65 20 24 69 64 ute putImage $id
3e30: 20 24 78 20 24 79 20 2d 77 69 64 74 68 20 24 77 $x $y -width $w
3e40: 20 2d 68 65 69 67 68 74 20 24 68 0a 20 20 7d 20 -height $h. }
3e50: 65 6c 73 65 20 7b 0a 20 20 20 20 67 72 61 70 68 else {. graph
3e60: 3a 3a 65 78 65 63 75 74 65 20 70 75 74 49 6d 61 ::execute putIma
3e70: 67 65 20 24 69 64 20 24 78 20 24 79 0a 20 20 7d ge $id $x $y. }
3e80: 0a 7d 0a 0a 0a 70 72 6f 63 20 70 64 66 34 74 63 .}...proc pdf4tc
3e90: 6c 3a 3a 67 72 61 70 68 3a 3a 4c 6f 61 64 50 69 l::graph::LoadPi
3ea0: 63 74 20 7b 20 67 20 6e 61 6d 65 20 7d 20 7b 0a ct { g name } {.
3eb0: 20 20 73 65 74 20 64 69 72 6e 61 6d 65 20 20 20 set dirname
3ec0: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 6e [file dirname $n
3ed0: 61 6d 65 5d 0a 20 20 73 65 74 20 66 69 6c 65 6e ame]. set filen
3ee0: 61 6d 65 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 ame [file tail
3ef0: 24 6e 61 6d 65 5d 0a 20 20 73 65 74 20 65 78 74 $name]. set ext
3f00: 65 6e 73 69 6f 6e 20 5b 66 69 6c 65 20 65 78 74 ension [file ext
3f10: 65 6e 73 69 6f 6e 20 24 66 69 6c 65 6e 61 6d 65 ension $filename
3f20: 5d 0a 20 20 73 65 74 20 66 69 6c 65 6e 61 6d 65 ]. set filename
3f30: 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 [file rootname
3f40: 20 24 66 69 6c 65 6e 61 6d 65 5d 0a 0a 20 20 73 $filename].. s
3f50: 65 74 20 65 78 74 65 78 70 65 63 74 20 7b 2e 6a et extexpect {.j
3f60: 70 65 67 20 2e 6a 70 67 20 2e 70 6e 67 20 7b 7d peg .jpg .png {}
3f70: 7d 0a 0a 20 20 73 65 74 20 69 64 20 5b 66 69 6c }.. set id [fil
3f80: 65 20 74 61 69 6c 20 24 6e 61 6d 65 5d 0a 20 20 e tail $name].
3f90: 73 65 74 20 72 63 20 30 0a 20 20 66 6f 72 65 61 set rc 0. forea
3fa0: 63 68 20 65 78 74 20 24 65 78 74 65 78 70 65 63 ch ext $extexpec
3fb0: 74 20 7b 0a 20 20 20 20 73 65 74 20 66 69 6c 65 t {. set file
3fc0: 70 61 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 path [file join
3fd0: 24 64 69 72 6e 61 6d 65 20 24 66 69 6c 65 6e 61 $dirname $filena
3fe0: 6d 65 24 65 78 74 5d 0a 20 20 20 20 69 66 20 7b me$ext]. if {
3ff0: 5b 66 69 6c 65 20 72 65 61 64 61 62 6c 65 20 24 [file readable $
4000: 66 69 6c 65 70 61 74 68 5d 7d 20 7b 0a 20 20 20 filepath]} {.
4010: 20 20 20 67 72 61 70 68 3a 3a 65 78 65 63 75 74 graph::execut
4020: 65 20 61 64 64 49 6d 61 67 65 20 24 66 69 6c 65 e addImage $file
4030: 70 61 74 68 20 2d 69 64 20 24 69 64 20 2d 74 79 path -id $id -ty
4040: 70 65 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 pe [string range
4050: 20 24 65 78 74 20 31 20 65 6e 64 5d 0a 20 20 20 $ext 1 end].
4060: 20 20 20 73 65 74 20 72 63 20 31 0a 20 20 20 20 set rc 1.
4070: 20 20 62 72 65 61 6b 0a 20 20 20 20 7d 0a 20 20 break. }.
4080: 7d 0a 20 20 69 66 20 7b 24 72 63 20 3d 3d 20 30 }. if {$rc == 0
4090: 7d 20 7b 0a 20 20 20 20 65 72 72 6f 72 20 22 69 } {. error "i
40a0: 6d 61 67 65 20 66 69 6c 65 20 5c 22 24 6e 61 6d mage file \"$nam
40b0: 65 5c 5b 24 65 78 74 65 78 70 65 63 74 5c 5d 5c e\[$extexpect\]\
40c0: 22 20 6e 6f 74 20 66 6f 75 6e 64 22 0a 20 20 7d " not found". }
40d0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 66 6f 72 65 else {. fore
40e0: 61 63 68 20 7b 77 20 68 7d 20 5b 67 72 61 70 68 ach {w h} [graph
40f0: 3a 3a 65 78 65 63 75 74 65 20 67 65 74 49 6d 61 ::execute getIma
4100: 67 65 53 69 7a 65 20 24 69 64 5d 20 7b 7d 0a 20 geSize $id] {}.
4110: 20 20 20 67 72 61 70 68 3a 3a 73 65 74 5f 6f 70 graph::set_op
4120: 74 20 24 67 20 70 69 63 74 2c 24 6e 61 6d 65 2c t $g pict,$name,
4130: 64 61 74 61 20 20 20 7b 7d 0a 20 20 20 20 67 72 data {}. gr
4140: 61 70 68 3a 3a 73 65 74 5f 6f 70 74 20 24 67 20 aph::set_opt $g
4150: 70 69 63 74 2c 24 6e 61 6d 65 2c 77 69 64 74 68 pict,$name,width
4160: 20 20 5b 65 78 70 72 20 7b 32 35 2e 34 20 2a 20 [expr {25.4 *
4170: 24 77 20 2f 20 37 32 7d 5d 0a 20 20 20 20 67 72 $w / 72}]. gr
4180: 61 70 68 3a 3a 73 65 74 5f 6f 70 74 20 24 67 20 aph::set_opt $g
4190: 70 69 63 74 2c 24 6e 61 6d 65 2c 68 65 69 67 68 pict,$name,heigh
41a0: 74 20 5b 65 78 70 72 20 7b 32 35 2e 34 20 2a 20 t [expr {25.4 *
41b0: 24 68 20 2f 20 37 32 7d 5d 0a 20 20 20 20 67 72 $h / 72}]. gr
41c0: 61 70 68 3a 3a 61 70 70 65 6e 64 5f 6f 70 74 20 aph::append_opt
41d0: 70 69 63 74 73 20 24 6e 61 6d 65 0a 20 20 7d 0a picts $name. }.
41e0: 7d 0a 0a 0a 70 72 6f 63 20 70 64 66 34 74 63 6c }...proc pdf4tcl
41f0: 3a 3a 67 72 61 70 68 3a 3a 50 69 63 74 53 69 7a ::graph::PictSiz
4200: 65 20 7b 20 67 20 6e 61 6d 65 20 7d 20 7b 0a 20 e { g name } {.
4210: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist
4220: 73 20 67 72 61 70 68 28 24 67 2c 6f 70 74 73 2c s graph($g,opts,
4230: 70 69 63 74 2c 24 6e 61 6d 65 2c 64 61 74 61 29 pict,$name,data)
4240: 5d 7d 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 ]} {. return
4250: 5b 6c 69 73 74 20 5b 67 72 61 70 68 3a 3a 67 65 [list [graph::ge
4260: 74 5f 6f 70 74 20 24 67 20 70 69 63 74 2c 24 6e t_opt $g pict,$n
4270: 61 6d 65 2c 77 69 64 74 68 5d 20 5b 67 72 61 70 ame,width] [grap
4280: 68 3a 3a 67 65 74 5f 6f 70 74 20 24 67 20 70 69 h::get_opt $g pi
4290: 63 74 2c 24 6e 61 6d 65 2c 68 65 69 67 68 74 5d ct,$name,height]
42a0: 5d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7b ]. }. return {
42b0: 7d 0a 7d 0a }.}.