0000: 0d 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 ..package requir
0010: 65 20 63 6f 6d 70 61 73 73 5f 75 74 69 6c 73 3a e compass_utils:
0020: 3a 6d 61 74 68 0d 0a 70 61 63 6b 61 67 65 20 72 :math..package r
0030: 65 71 75 69 72 65 20 6d 61 74 68 3a 3a 6c 69 6e equire math::lin
0040: 65 61 72 61 6c 67 65 62 72 61 0d 0a 70 61 63 6b earalgebra..pack
0050: 61 67 65 20 72 65 71 75 69 72 65 20 63 6f 6d 70 age require comp
0060: 61 73 73 5f 75 74 69 6c 73 0d 0a 0d 0a 6e 61 6d ass_utils....nam
0070: 65 73 70 61 63 65 20 65 76 61 6c 20 6d 20 7b 0d espace eval m {.
0080: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 . namespace i
0090: 6d 70 6f 72 74 20 2d 66 6f 72 63 65 20 3a 3a 6d mport -force ::m
00a0: 61 74 68 3a 3a 6c 69 6e 65 61 72 61 6c 67 65 62 ath::linearalgeb
00b0: 72 61 3a 3a 2a 0d 0a 7d 0d 0a 0d 0a 6e 61 6d 65 ra::*..}....name
00c0: 73 70 61 63 65 20 65 76 61 6c 20 73 76 67 6d 6c space eval svgml
00d0: 20 7b 0d 0a 0d 0a 7d 0d 0a 0d 0a 23 20 70 61 63 {....}....# pac
00e0: 6b 61 67 65 20 72 65 20 63 6f 6d 70 61 73 73 5f kage re compass_
00f0: 75 74 69 6c 73 3a 3a 69 6d 67 0d 0a 23 20 63 75 utils::img..# cu
0100: 3a 3a 69 6d 67 3a 3a 63 6c 69 70 62 6f 61 72 64 ::img::clipboard
0110: 20 67 65 74 20 2d 74 79 70 65 20 69 6d 61 67 65 get -type image
0120: 2f 78 2d 69 6e 6b 73 63 61 70 65 2d 73 76 67 0d /x-inkscape-svg.
0130: 0a 0d 0a 23 20 67 69 64 5f 67 72 6f 75 70 73 5f ...# gid_groups_
0140: 63 6f 6e 64 73 3a 3a 61 70 70 6c 79 5f 63 6f 6e conds::apply_con
0150: 64 69 74 69 6f 6e 20 7b 20 61 72 67 73 20 7d 20 dition { args }
0160: 7b 0d 0a 23 20 20 20 20 20 76 61 72 69 61 62 6c {..# variabl
0170: 65 20 64 6f 63 0d 0a 23 20 20 20 20 20 0d 0a 23 e doc..# ..#
0180: 20 20 20 20 20 73 65 74 20 6f 70 74 69 6f 6e 61 set optiona
0190: 6c 20 7b 0d 0a 23 20 20 20 20 20 20 20 20 20 7b l {..# {
01a0: 20 2d 6f 76 20 70 6f 69 6e 74 7c 6c 69 6e 65 7c -ov point|line|
01b0: 73 75 72 66 61 63 65 7c 76 6f 6c 75 6d 65 20 22 surface|volume "
01c0: 22 20 7d 0d 0a 23 20 20 20 20 20 20 20 20 20 7b " }..# {
01d0: 20 2d 6e 6f 61 63 74 75 61 6c 69 7a 65 67 72 6f -noactualizegro
01e0: 75 70 73 20 22 22 20 30 20 7d 0d 0a 23 20 20 20 ups "" 0 }..#
01f0: 20 20 7d 0d 0a 23 20 20 20 20 20 73 65 74 20 63 }..# set c
0200: 6f 6d 70 75 6c 73 6f 72 79 20 22 78 70 61 74 68 ompulsory "xpath
0210: 43 6e 64 20 67 72 6f 75 70 5f 6e 61 6d 65 20 76 Cnd group_name v
0220: 61 6c 75 65 73 5f 64 69 63 74 22 0d 0a 23 20 7d alues_dict"..# }
0230: 0d 0a 23 20 73 65 74 20 6e 31 20 7b 63 6f 6e 74 ..# set n1 {cont
0240: 61 69 6e 65 72 5b 40 6e 3d 27 50 72 6f 70 65 72 ainer[@n='Proper
0250: 74 69 65 73 27 5d 2f 63 6f 6e 74 61 69 6e 65 72 ties']/container
0260: 5b 40 6e 3d 27 53 68 65 6c 6c 73 27 5d 2f 63 6f [@n='Shells']/co
0270: 6e 64 69 74 69 6f 6e 5b 40 6e 3d 27 49 73 6f 74 ndition[@n='Isot
0280: 72 6f 70 69 63 5f 53 68 65 6c 6c 27 5d 7d 0d 0a ropic_Shell']}..
0290: 23 20 73 65 74 20 6e 32 20 7b 63 6f 6e 74 61 69 # set n2 {contai
02a0: 6e 65 72 5b 40 6e 3d 27 43 6f 6e 64 69 74 69 6f ner[@n='Conditio
02b0: 6e 73 27 5d 2f 63 6f 6e 74 61 69 6e 65 72 5b 40 ns']/container[@
02c0: 6e 3d 27 43 6f 6e 73 74 72 61 69 6e 74 73 27 5d n='Constraints']
02d0: 2f 63 6f 6e 64 69 74 69 6f 6e 5b 40 6e 3d 27 46 /condition[@n='F
02e0: 69 78 65 64 5f 63 6f 6e 73 74 72 61 69 6e 74 73 ixed_constraints
02f0: 27 5d 7d 0d 0a 23 20 73 65 74 20 6e 33 20 7b 63 ']}..# set n3 {c
0300: 6f 6e 74 61 69 6e 65 72 5b 40 6e 3d 27 6c 6f 61 ontainer[@n='loa
0310: 64 63 61 73 65 73 27 5d 2f 62 6c 6f 63 6b 64 61 dcases']/blockda
0320: 74 61 5b 40 6e 3d 27 6c 6f 61 64 63 61 73 65 27 ta[@n='loadcase'
0330: 5d 5b 31 5d 2f 63 6f 6e 74 61 69 6e 65 72 5b 40 ][1]/container[@
0340: 6e 3d 27 53 68 65 6c 6c 73 27 5d 2f 63 6f 6e 64 n='Shells']/cond
0350: 69 74 69 6f 6e 5b 40 6e 3d 27 53 65 6c 66 5f 77 ition[@n='Self_w
0360: 65 69 67 68 74 5f 73 68 65 6c 6c 27 5d 7d 0d 0a eight_shell']}..
0370: 23 20 0d 0a 23 20 3c 67 69 64 70 6f 73 74 5f 62 # ..# <gidpost_b
0380: 61 74 63 68 20 76 65 72 73 69 6f 6e 3d 27 31 2e atch version='1.
0390: 30 27 3e 0d 0a 23 20 3c 61 20 6e 3d 22 63 72 65 0'>..# <a n="cre
03a0: 61 74 65 5f 6c 69 6e 65 22 20 61 3d 22 6c 69 6e ate_line" a="lin
03b0: 65 20 7b 7b 7b 7d 20 30 2e 30 20 30 2e 30 20 30 e {{{} 0.0 0.0 0
03c0: 2e 30 7d 20 7b 7b 7d 20 35 20 30 2e 30 20 30 2e .0} {{} 5 0.0 0.
03d0: 30 7d 20 7b 7b 63 6f 6f 72 64 73 5f 74 79 70 65 0} {{coords_type
03e0: 20 7b 72 65 6c 61 74 69 76 65 20 7b 30 2e 30 20 {relative {0.0
03f0: 31 20 30 2e 30 7d 7d 7d 7d 20 7b 7b 63 6f 6f 72 1 0.0}}}} {{coor
0400: 64 73 5f 74 79 70 65 20 7b 72 65 6c 61 74 69 76 ds_type {relativ
0410: 65 20 7b 2d 35 20 30 2e 30 20 30 2e 30 7d 7d 7d e {-5 0.0 0.0}}}
0420: 7d 20 7b 7b 63 6f 6f 72 64 73 5f 74 79 70 65 20 } {{coords_type
0430: 63 6c 6f 73 65 7d 20 30 2e 30 20 30 2e 30 20 30 close} 0.0 0.0 0
0440: 2e 30 7d 7d 22 20 66 3d 22 31 22 2f 3e 0d 0a 23 .0}}" f="1"/>..#
0450: 20 3c 61 20 6e 3d 27 63 72 65 61 74 65 5f 73 75 <a n='create_su
0460: 72 66 61 63 65 27 20 61 3d 27 62 79 5f 63 6f 6e rface' a='by_con
0470: 74 6f 75 72 20 7b 6c 61 73 74 2d 33 20 6c 61 73 tour {last-3 las
0480: 74 2d 32 20 6c 61 73 74 2d 31 20 6c 61 73 74 7d t-2 last-1 last}
0490: 27 2f 3e 0d 0a 23 20 0d 0a 23 20 3c 61 20 6e 3d '/>..# ..# <a n=
04a0: 22 73 74 61 72 74 5f 67 72 6f 75 70 22 20 61 3d "start_group" a=
04b0: 22 22 20 66 3d 22 22 2f 3e 0d 0a 23 20 3c 61 20 "" f=""/>..# <a
04c0: 6e 3d 27 63 72 65 61 74 65 5f 67 72 6f 75 70 27 n='create_group'
04d0: 20 61 3d 27 2d 6d 61 6b 65 5f 6e 61 6d 65 5f 75 a='-make_name_u
04e0: 6e 69 71 75 65 20 31 20 7b 4e 61 6d 65 20 7b 49 nique 1 {Name {I
04f0: 73 6f 74 72 6f 70 69 63 20 73 68 65 6c 6c 20 41 sotropic shell A
0500: 75 74 6f 7d 7d 27 20 66 3d 27 31 27 2f 3e 0d 0a uto}}' f='1'/>..
0510: 23 20 3c 61 20 6e 3d 27 61 64 64 5f 67 72 6f 75 # <a n='add_grou
0520: 70 5f 65 6e 74 69 74 69 65 73 27 20 61 3d 27 7b p_entities' a='{
0530: 49 73 6f 74 72 6f 70 69 63 20 73 68 65 6c 6c 20 Isotropic shell
0540: 41 75 74 6f 7d 20 7b 73 75 72 66 61 63 65 20 6c Auto} {surface l
0550: 61 73 74 7d 27 20 66 3d 27 31 27 2f 3e 0d 0a 23 ast}' f='1'/>..#
0560: 20 0d 0a 23 20 3c 61 20 6e 3d 22 67 69 64 5f 67 ..# <a n="gid_g
0570: 72 6f 75 70 73 5f 63 6f 6e 64 73 3a 3a 61 64 64 roups_conds::add
0580: 46 22 20 61 3d 22 7b 24 6e 31 7d 20 67 72 6f 75 F" a="{$n1} grou
0590: 70 20 7b 6e 20 7b 49 73 6f 74 72 6f 70 69 63 20 p {n {Isotropic
05a0: 73 68 65 6c 6c 20 41 75 74 6f 7d 7d 22 20 66 3d shell Auto}}" f=
05b0: 22 31 22 2f 3e 0d 0a 23 20 3c 61 20 6e 3d 22 67 "1"/>..# <a n="g
05c0: 69 64 5f 67 72 6f 75 70 73 5f 63 6f 6e 64 73 3a id_groups_conds:
05d0: 3a 61 64 64 46 22 20 61 3d 22 7b 24 6e 31 2f 67 :addF" a="{$n1/g
05e0: 72 6f 75 70 5b 40 6e 3d 27 49 73 6f 74 72 6f 70 roup[@n='Isotrop
05f0: 69 63 20 73 68 65 6c 6c 20 41 75 74 6f 27 5d 7d ic shell Auto']}
0600: 20 76 61 6c 75 65 20 7b 6e 20 54 68 69 63 6b 6e value {n Thickn
0610: 65 73 73 20 70 6e 20 54 68 69 63 6b 6e 65 73 73 ess pn Thickness
0620: 20 75 6e 69 74 5f 6d 61 67 6e 69 74 75 64 65 20 unit_magnitude
0630: 4c 20 73 74 61 74 65 20 7b 5b 63 68 65 63 6b 5f L state {[check_
0640: 73 74 61 74 65 20 7b 42 65 61 6d 73 5f 73 68 65 state {Beams_she
0650: 6c 6c 73 20 53 68 65 6c 6c 73 20 50 6c 61 6e 65 lls Shells Plane
0660: 5f 73 74 72 65 73 73 20 50 6c 61 74 65 73 20 42 _stress Plates B
0670: 65 61 6d 73 5f 73 68 65 6c 6c 73 5f 73 6f 6c 69 eams_shells_soli
0680: 64 73 20 41 6c 6c 7d 5d 7d 20 76 20 30 2e 30 20 ds All}]} v 0.0
0690: 75 6e 69 74 73 20 6d 7d 22 20 66 3d 22 31 22 2f units m}" f="1"/
06a0: 3e 0d 0a 23 20 3c 61 20 6e 3d 22 67 69 64 5f 67 >..# <a n="gid_g
06b0: 72 6f 75 70 73 5f 63 6f 6e 64 73 3a 3a 61 64 64 roups_conds::add
06c0: 46 22 20 61 3d 22 7b 24 6e 31 2f 67 72 6f 75 70 F" a="{$n1/group
06d0: 5b 40 6e 3d 27 49 73 6f 74 72 6f 70 69 63 20 73 [@n='Isotropic s
06e0: 68 65 6c 6c 20 41 75 74 6f 27 5d 7d 20 76 61 6c hell Auto']} val
06f0: 75 65 20 7b 6e 20 4d 61 74 65 72 69 61 6c 20 70 ue {n Material p
0700: 6e 20 4d 61 74 65 72 69 61 6c 20 65 64 69 74 61 n Material edita
0710: 62 6c 65 20 30 20 76 61 6c 75 65 73 5f 74 72 65 ble 0 values_tre
0720: 65 20 7b 5b 67 69 76 65 5f 6d 61 74 65 72 69 61 e {[give_materia
0730: 6c 73 5f 6c 69 73 74 20 2d 6e 6f 5f 68 61 73 5f ls_list -no_has_
0740: 63 6f 6e 74 61 69 6e 65 72 20 6d 61 74 65 72 69 container materi
0750: 61 6c 5f 61 6e 69 73 6f 74 72 6f 70 69 63 5f 65 al_anisotropic_e
0760: 6c 61 73 74 69 63 20 2d 68 61 73 5f 73 75 70 72 lastic -has_supr
0770: 61 5f 63 6f 6e 74 61 69 6e 65 72 20 53 74 72 75 a_container Stru
0780: 63 74 75 72 61 6c 5d 7d 20 73 74 61 74 65 20 7b ctural]} state {
0790: 7d 20 76 20 7b 53 74 65 65 6c 20 53 2d 33 35 35 } v {Steel S-355
07a0: 4e 7d 7d 22 20 66 3d 22 31 22 2f 3e 0d 0a 23 20 N}}" f="1"/>..#
07b0: 3c 61 20 6e 3d 22 67 69 64 5f 67 72 6f 75 70 73 <a n="gid_groups
07c0: 5f 63 6f 6e 64 73 3a 3a 61 64 64 46 22 20 61 3d _conds::addF" a=
07d0: 22 7b 24 6e 31 2f 67 72 6f 75 70 5b 40 6e 3d 27 "{$n1/group[@n='
07e0: 49 73 6f 74 72 6f 70 69 63 20 73 68 65 6c 6c 20 Isotropic shell
07f0: 41 75 74 6f 27 5d 7d 20 76 61 6c 75 65 20 7b 6e Auto']} value {n
0800: 20 45 20 70 6e 20 45 20 68 65 6c 70 20 7b 59 6f E pn E help {Yo
0810: 75 6e 67 20 6d 6f 64 75 6c 75 73 7d 20 75 6e 69 ung modulus} uni
0820: 74 5f 6d 61 67 6e 69 74 75 64 65 20 50 20 73 74 t_magnitude P st
0830: 61 74 65 20 7b 7d 20 76 20 32 2e 31 65 31 31 20 ate {} v 2.1e11
0840: 75 6e 69 74 73 20 4e 2f 6d 5e 32 7d 22 20 66 3d units N/m^2}" f=
0850: 22 31 22 2f 3e 0d 0a 23 20 3c 61 20 6e 3d 22 67 "1"/>..# <a n="g
0860: 69 64 5f 67 72 6f 75 70 73 5f 63 6f 6e 64 73 3a id_groups_conds:
0870: 3a 61 64 64 46 22 20 61 3d 22 7b 24 6e 31 2f 67 :addF" a="{$n1/g
0880: 72 6f 75 70 5b 40 6e 3d 27 49 73 6f 74 72 6f 70 roup[@n='Isotrop
0890: 69 63 20 73 68 65 6c 6c 20 41 75 74 6f 27 5d 7d ic shell Auto']}
08a0: 20 76 61 6c 75 65 20 7b 6e 20 6e 75 20 70 6e 20 value {n nu pn
08b0: 7b 5c 75 30 33 62 64 7d 20 68 65 6c 70 20 7b 50 {\u03bd} help {P
08c0: 6f 69 73 73 6f 6e 20 63 6f 65 66 66 69 63 69 65 oisson coefficie
08d0: 6e 74 7d 20 73 74 72 69 6e 67 5f 69 73 20 64 6f nt} string_is do
08e0: 75 62 6c 65 20 73 74 61 74 65 20 7b 7d 20 76 20 uble state {} v
08f0: 30 2e 33 7d 22 20 66 3d 22 31 22 2f 3e 0d 0a 23 0.3}" f="1"/>..#
0900: 20 3c 61 20 6e 3d 22 67 69 64 5f 67 72 6f 75 70 <a n="gid_group
0910: 73 5f 63 6f 6e 64 73 3a 3a 61 64 64 46 22 20 61 s_conds::addF" a
0920: 3d 22 7b 24 6e 31 2f 67 72 6f 75 70 5b 40 6e 3d ="{$n1/group[@n=
0930: 27 49 73 6f 74 72 6f 70 69 63 20 73 68 65 6c 6c 'Isotropic shell
0940: 20 41 75 74 6f 27 5d 7d 20 76 61 6c 75 65 20 7b Auto']} value {
0950: 6e 20 53 70 65 63 69 66 69 63 5f 77 65 69 67 68 n Specific_weigh
0960: 74 20 70 6e 20 7b 53 70 65 63 69 66 69 63 20 77 t pn {Specific w
0970: 65 69 67 68 74 7d 20 75 6e 69 74 5f 6d 61 67 6e eight} unit_magn
0980: 69 74 75 64 65 20 46 2f 4c 5e 33 20 73 74 61 74 itude F/L^3 stat
0990: 65 20 7b 7d 20 76 20 37 36 39 33 30 20 75 6e 69 e {} v 76930 uni
09a0: 74 73 20 4e 2f 6d 5e 33 7d 22 20 66 3d 22 31 22 ts N/m^3}" f="1"
09b0: 2f 3e 0d 0a 23 20 3c 61 20 6e 3d 22 63 68 61 6e />..# <a n="chan
09c0: 67 65 5f 67 72 6f 75 70 5f 70 72 6f 70 65 72 74 ge_group_propert
09d0: 69 65 73 22 20 61 3d 22 7b 7b 49 73 6f 74 72 6f ies" a="{{Isotro
09e0: 70 69 63 20 73 68 65 6c 6c 20 41 75 74 6f 7d 7d pic shell Auto}}
09f0: 20 74 79 70 65 20 42 43 22 20 66 3d 22 31 22 2f type BC" f="1"/
0a00: 3e 0d 0a 23 20 3c 61 20 6e 3d 22 65 6e 64 5f 67 >..# <a n="end_g
0a10: 72 6f 75 70 22 20 70 6e 3d 22 22 20 61 3d 22 22 roup" pn="" a=""
0a20: 20 66 3d 22 22 2f 3e 0d 0a 23 20 0d 0a 23 20 3c f=""/>..# ..# <
0a30: 61 20 6e 3d 22 67 69 64 5f 67 72 6f 75 70 73 5f a n="gid_groups_
0a40: 63 6f 6e 64 73 3a 3a 61 64 64 46 22 20 61 3d 22 conds::addF" a="
0a50: 7b 24 6e 32 7d 20 67 72 6f 75 70 20 7b 6e 20 7b {$n2} group {n {
0a60: 46 69 78 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 Fixed constraint
0a70: 73 20 41 75 74 6f 32 7d 20 6f 76 20 70 6f 69 6e s Auto2} ov poin
0a80: 74 7d 22 20 66 3d 22 31 22 2f 3e 0d 0a 23 20 3c t}" f="1"/>..# <
0a90: 61 20 6e 3d 22 67 69 64 5f 67 72 6f 75 70 73 5f a n="gid_groups_
0aa0: 63 6f 6e 64 73 3a 3a 61 64 64 46 22 20 61 3d 22 conds::addF" a="
0ab0: 7b 24 6e 32 2f 67 72 6f 75 70 5b 40 6e 3d 27 46 {$n2/group[@n='F
0ac0: 69 78 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 ixed constraints
0ad0: 20 41 75 74 6f 32 27 5d 7d 20 63 6f 6e 74 61 69 Auto2']} contai
0ae0: 6e 65 72 20 7b 6e 20 41 63 74 69 76 61 74 69 6f ner {n Activatio
0af0: 6e 20 70 6e 20 41 63 74 69 76 61 74 69 6f 6e 7d n pn Activation}
0b00: 22 20 66 3d 22 31 22 2f 3e 0d 0a 23 20 3c 61 20 " f="1"/>..# <a
0b10: 6e 3d 22 67 69 64 5f 67 72 6f 75 70 73 5f 63 6f n="gid_groups_co
0b20: 6e 64 73 3a 3a 61 64 64 46 22 20 61 3d 22 7b 24 nds::addF" a="{$
0b30: 6e 32 2f 67 72 6f 75 70 5b 40 6e 3d 27 46 69 78 n2/group[@n='Fix
0b40: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 41 ed constraints A
0b50: 75 74 6f 32 27 5d 2f 63 6f 6e 74 61 69 6e 65 72 uto2']/container
0b60: 5b 40 6e 3d 27 41 63 74 69 76 61 74 69 6f 6e 27 [@n='Activation'
0b70: 5d 7d 20 76 61 6c 75 65 20 7b 6e 20 58 5f 43 6f ]} value {n X_Co
0b80: 6e 73 74 72 61 69 6e 74 20 70 6e 20 7b 58 20 43 nstraint pn {X C
0b90: 6f 6e 73 74 72 61 69 6e 74 7d 20 76 61 6c 75 65 onstraint} value
0ba0: 73 20 31 2c 30 20 73 74 61 74 65 20 7b 5b 63 68 s 1,0 state {[ch
0bb0: 65 63 6b 5f 73 74 61 74 65 5f 69 6e 76 20 50 6c eck_state_inv Pl
0bc0: 61 74 65 73 5d 7d 20 76 20 31 7d 22 20 66 3d 22 ates]} v 1}" f="
0bd0: 31 22 2f 3e 0d 0a 23 20 3c 61 20 6e 3d 22 67 69 1"/>..# <a n="gi
0be0: 64 5f 67 72 6f 75 70 73 5f 63 6f 6e 64 73 3a 3a d_groups_conds::
0bf0: 61 64 64 46 22 20 61 3d 22 7b 24 6e 32 2f 67 72 addF" a="{$n2/gr
0c00: 6f 75 70 5b 40 6e 3d 27 46 69 78 65 64 20 63 6f oup[@n='Fixed co
0c10: 6e 73 74 72 61 69 6e 74 73 20 41 75 74 6f 32 27 nstraints Auto2'
0c20: 5d 2f 63 6f 6e 74 61 69 6e 65 72 5b 40 6e 3d 27 ]/container[@n='
0c30: 41 63 74 69 76 61 74 69 6f 6e 27 5d 7d 20 76 61 Activation']} va
0c40: 6c 75 65 20 7b 6e 20 59 5f 43 6f 6e 73 74 72 61 lue {n Y_Constra
0c50: 69 6e 74 20 70 6e 20 7b 59 20 43 6f 6e 73 74 72 int pn {Y Constr
0c60: 61 69 6e 74 7d 20 76 61 6c 75 65 73 20 31 2c 30 aint} values 1,0
0c70: 20 73 74 61 74 65 20 7b 5b 63 68 65 63 6b 5f 73 state {[check_s
0c80: 74 61 74 65 5f 69 6e 76 20 50 6c 61 74 65 73 5d tate_inv Plates]
0c90: 7d 20 76 20 31 7d 22 20 66 3d 22 31 22 2f 3e 0d } v 1}" f="1"/>.
0ca0: 0a 23 20 3c 61 20 6e 3d 22 67 69 64 5f 67 72 6f .# <a n="gid_gro
0cb0: 75 70 73 5f 63 6f 6e 64 73 3a 3a 61 64 64 46 22 ups_conds::addF"
0cc0: 20 61 3d 22 7b 24 6e 32 2f 67 72 6f 75 70 5b 40 a="{$n2/group[@
0cd0: 6e 3d 27 46 69 78 65 64 20 63 6f 6e 73 74 72 61 n='Fixed constra
0ce0: 69 6e 74 73 20 41 75 74 6f 32 27 5d 2f 63 6f 6e ints Auto2']/con
0cf0: 74 61 69 6e 65 72 5b 40 6e 3d 27 41 63 74 69 76 tainer[@n='Activ
0d00: 61 74 69 6f 6e 27 5d 7d 20 76 61 6c 75 65 20 7b ation']} value {
0d10: 6e 20 5a 5f 43 6f 6e 73 74 72 61 69 6e 74 20 70 n Z_Constraint p
0d20: 6e 20 7b 5a 20 43 6f 6e 73 74 72 61 69 6e 74 7d n {Z Constraint}
0d30: 20 76 61 6c 75 65 73 20 31 2c 30 20 73 74 61 74 values 1,0 stat
0d40: 65 20 7b 5b 63 68 65 63 6b 5f 73 74 61 74 65 5f e {[check_state_
0d50: 69 6e 76 20 7b 50 6c 61 6e 65 5f 73 74 72 61 69 inv {Plane_strai
0d60: 6e 20 50 6c 61 6e 65 5f 73 74 72 65 73 73 7d 5d n Plane_stress}]
0d70: 7d 20 76 20 31 7d 22 20 66 3d 22 31 22 2f 3e 0d } v 1}" f="1"/>.
0d80: 0a 23 20 3c 61 20 6e 3d 22 67 69 64 5f 67 72 6f .# <a n="gid_gro
0d90: 75 70 73 5f 63 6f 6e 64 73 3a 3a 61 64 64 46 22 ups_conds::addF"
0da0: 20 61 3d 22 7b 24 6e 32 2f 67 72 6f 75 70 5b 40 a="{$n2/group[@
0db0: 6e 3d 27 46 69 78 65 64 20 63 6f 6e 73 74 72 61 n='Fixed constra
0dc0: 69 6e 74 73 20 41 75 74 6f 32 27 5d 2f 63 6f 6e ints Auto2']/con
0dd0: 74 61 69 6e 65 72 5b 40 6e 3d 27 41 63 74 69 76 tainer[@n='Activ
0de0: 61 74 69 6f 6e 27 5d 7d 20 76 61 6c 75 65 20 7b ation']} value {
0df0: 6e 20 74 68 65 74 61 5f 78 5f 43 6f 6e 73 74 72 n theta_x_Constr
0e00: 61 69 6e 74 20 70 6e 20 7b 3f 78 20 43 6f 6e 73 aint pn {?x Cons
0e10: 74 72 61 69 6e 74 7d 20 76 61 6c 75 65 73 20 31 traint} values 1
0e20: 2c 30 20 73 74 61 74 65 20 7b 5b 63 68 65 63 6b ,0 state {[check
0e30: 5f 73 74 61 74 65 5f 69 6e 76 20 7b 50 6c 61 6e _state_inv {Plan
0e40: 65 5f 73 74 72 61 69 6e 20 50 6c 61 6e 65 5f 73 e_strain Plane_s
0e50: 74 72 65 73 73 20 50 6c 61 74 65 73 20 53 6f 6c tress Plates Sol
0e60: 69 64 73 7d 5d 7d 20 76 20 30 7d 22 20 66 3d 22 ids}]} v 0}" f="
0e70: 31 22 2f 3e 0d 0a 23 20 3c 61 20 6e 3d 22 67 69 1"/>..# <a n="gi
0e80: 64 5f 67 72 6f 75 70 73 5f 63 6f 6e 64 73 3a 3a d_groups_conds::
0e90: 61 64 64 46 22 20 61 3d 22 7b 24 6e 32 2f 67 72 addF" a="{$n2/gr
0ea0: 6f 75 70 5b 40 6e 3d 27 46 69 78 65 64 20 63 6f oup[@n='Fixed co
0eb0: 6e 73 74 72 61 69 6e 74 73 20 41 75 74 6f 32 27 nstraints Auto2'
0ec0: 5d 2f 63 6f 6e 74 61 69 6e 65 72 5b 40 6e 3d 27 ]/container[@n='
0ed0: 41 63 74 69 76 61 74 69 6f 6e 27 5d 7d 20 76 61 Activation']} va
0ee0: 6c 75 65 20 7b 6e 20 74 68 65 74 61 5f 79 5f 43 lue {n theta_y_C
0ef0: 6f 6e 73 74 72 61 69 6e 74 20 70 6e 20 7b 3f 79 onstraint pn {?y
0f00: 20 43 6f 6e 73 74 72 61 69 6e 74 7d 20 76 61 6c Constraint} val
0f10: 75 65 73 20 31 2c 30 20 73 74 61 74 65 20 7b 5b ues 1,0 state {[
0f20: 63 68 65 63 6b 5f 73 74 61 74 65 5f 69 6e 76 20 check_state_inv
0f30: 7b 50 6c 61 6e 65 5f 73 74 72 61 69 6e 20 50 6c {Plane_strain Pl
0f40: 61 6e 65 5f 73 74 72 65 73 73 20 53 6f 6c 69 64 ane_stress Solid
0f50: 73 7d 5d 7d 20 76 20 30 7d 22 20 66 3d 22 31 22 s}]} v 0}" f="1"
0f60: 2f 3e 0d 0a 23 20 3c 61 20 6e 3d 22 67 69 64 5f />..# <a n="gid_
0f70: 67 72 6f 75 70 73 5f 63 6f 6e 64 73 3a 3a 61 64 groups_conds::ad
0f80: 64 46 22 20 61 3d 22 7b 24 6e 32 2f 67 72 6f 75 dF" a="{$n2/grou
0f90: 70 5b 40 6e 3d 27 46 69 78 65 64 20 63 6f 6e 73 p[@n='Fixed cons
0fa0: 74 72 61 69 6e 74 73 20 41 75 74 6f 32 27 5d 2f traints Auto2']/
0fb0: 63 6f 6e 74 61 69 6e 65 72 5b 40 6e 3d 27 41 63 container[@n='Ac
0fc0: 74 69 76 61 74 69 6f 6e 27 5d 7d 20 76 61 6c 75 tivation']} valu
0fd0: 65 20 7b 6e 20 74 68 65 74 61 5f 7a 5f 43 6f 6e e {n theta_z_Con
0fe0: 73 74 72 61 69 6e 74 20 70 6e 20 7b 3f 7a 20 43 straint pn {?z C
0ff0: 6f 6e 73 74 72 61 69 6e 74 7d 20 76 61 6c 75 65 onstraint} value
1000: 73 20 31 2c 30 20 73 74 61 74 65 20 7b 5b 63 68 s 1,0 state {[ch
1010: 65 63 6b 5f 73 74 61 74 65 5f 69 6e 76 20 7b 50 eck_state_inv {P
1020: 6c 61 6e 65 5f 73 74 72 61 69 6e 20 50 6c 61 6e lane_strain Plan
1030: 65 5f 73 74 72 65 73 73 20 53 6f 6c 69 64 73 7d e_stress Solids}
1040: 5d 7d 20 76 20 31 7d 22 20 66 3d 22 31 22 2f 3e ]} v 1}" f="1"/>
1050: 0d 0a 23 20 3c 61 20 6e 3d 22 67 69 64 5f 67 72 ..# <a n="gid_gr
1060: 6f 75 70 73 5f 63 6f 6e 64 73 3a 3a 61 64 64 46 oups_conds::addF
1070: 22 20 61 3d 22 7b 24 6e 32 2f 67 72 6f 75 70 5b " a="{$n2/group[
1080: 40 6e 3d 27 46 69 78 65 64 20 63 6f 6e 73 74 72 @n='Fixed constr
1090: 61 69 6e 74 73 20 41 75 74 6f 32 27 5d 2f 63 6f aints Auto2']/co
10a0: 6e 74 61 69 6e 65 72 5b 40 6e 3d 27 41 63 74 69 ntainer[@n='Acti
10b0: 76 61 74 69 6f 6e 27 5d 7d 20 76 61 6c 75 65 20 vation']} value
10c0: 7b 6e 20 4c 6f 63 61 6c 5f 61 78 65 73 20 70 6e {n Local_axes pn
10d0: 20 7b 4c 6f 63 61 6c 20 61 78 65 73 7d 20 76 61 {Local axes} va
10e0: 6c 75 65 73 20 30 2c 31 20 65 64 69 74 61 62 6c lues 0,1 editabl
10f0: 65 20 30 20 6c 6f 63 61 6c 5f 61 78 65 73 20 64 e 0 local_axes d
1100: 69 73 61 62 6c 65 64 20 68 65 6c 70 20 7b 49 66 isabled help {If
1110: 20 74 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 the direction t
1120: 6f 20 64 65 66 69 6e 65 20 69 73 20 6e 6f 74 20 o define is not
1130: 63 6f 69 6e 63 69 64 65 6e 74 20 77 69 74 68 20 coincident with
1140: 74 68 65 20 67 6c 6f 62 61 6c 20 61 78 65 73 2c the global axes,
1150: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 it is possible
1160: 74 6f 20 64 65 66 69 6e 65 20 61 20 73 65 74 20 to define a set
1170: 6f 66 20 6c 6f 63 61 6c 20 61 78 65 73 20 61 6e of local axes an
1180: 64 20 64 65 66 69 6e 65 20 74 68 65 20 64 69 73 d define the dis
1190: 70 6c 61 63 65 6d 65 6e 74 73 20 72 65 6c 61 74 placements relat
11a0: 65 64 20 74 6f 20 74 68 61 74 20 6c 6f 63 61 6c ed to that local
11b0: 20 61 78 65 73 7d 20 73 74 61 74 65 20 7b 7d 20 axes} state {}
11c0: 76 20 30 7d 22 20 66 3d 22 31 22 2f 3e 0d 0a 23 v 0}" f="1"/>..#
11d0: 20 3c 61 20 6e 3d 22 67 69 64 5f 67 72 6f 75 70 <a n="gid_group
11e0: 73 5f 63 6f 6e 64 73 3a 3a 61 64 64 46 22 20 61 s_conds::addF" a
11f0: 3d 22 7b 24 6e 32 2f 67 72 6f 75 70 5b 40 6e 3d ="{$n2/group[@n=
1200: 27 46 69 78 65 64 20 63 6f 6e 73 74 72 61 69 6e 'Fixed constrain
1210: 74 73 20 41 75 74 6f 32 27 5d 7d 20 63 6f 6e 74 ts Auto2']} cont
1220: 61 69 6e 65 72 20 7b 6e 20 56 61 6c 75 65 73 20 ainer {n Values
1230: 70 6e 20 56 61 6c 75 65 73 7d 22 20 66 3d 22 31 pn Values}" f="1
1240: 22 2f 3e 0d 0a 23 20 3c 61 20 6e 3d 22 67 69 64 "/>..# <a n="gid
1250: 5f 67 72 6f 75 70 73 5f 63 6f 6e 64 73 3a 3a 61 _groups_conds::a
1260: 64 64 46 22 20 61 3d 22 7b 24 6e 32 2f 67 72 6f ddF" a="{$n2/gro
1270: 75 70 5b 40 6e 3d 27 46 69 78 65 64 20 63 6f 6e up[@n='Fixed con
1280: 73 74 72 61 69 6e 74 73 20 41 75 74 6f 32 27 5d straints Auto2']
1290: 2f 63 6f 6e 74 61 69 6e 65 72 5b 40 6e 3d 27 56 /container[@n='V
12a0: 61 6c 75 65 73 27 5d 7d 20 76 61 6c 75 65 20 7b alues']} value {
12b0: 6e 20 58 5f 56 61 6c 75 65 20 70 6e 20 7b 58 20 n X_Value pn {X
12c0: 76 61 6c 75 65 7d 20 75 6e 69 74 5f 6d 61 67 6e value} unit_magn
12d0: 69 74 75 64 65 20 4c 20 73 74 61 74 65 20 7b 5b itude L state {[
12e0: 63 68 65 63 6b 5f 73 74 61 74 65 5f 69 6e 76 20 check_state_inv
12f0: 50 6c 61 74 65 73 5d 7d 20 76 20 30 2e 30 20 75 Plates]} v 0.0 u
1300: 6e 69 74 73 20 6d 7d 22 20 66 3d 22 31 22 2f 3e nits m}" f="1"/>
1310: 0d 0a 23 20 3c 61 20 6e 3d 22 67 69 64 5f 67 72 ..# <a n="gid_gr
1320: 6f 75 70 73 5f 63 6f 6e 64 73 3a 3a 61 64 64 46 oups_conds::addF
1330: 22 20 61 3d 22 7b 24 6e 32 2f 67 72 6f 75 70 5b " a="{$n2/group[
1340: 40 6e 3d 27 46 69 78 65 64 20 63 6f 6e 73 74 72 @n='Fixed constr
1350: 61 69 6e 74 73 20 41 75 74 6f 32 27 5d 2f 63 6f aints Auto2']/co
1360: 6e 74 61 69 6e 65 72 5b 40 6e 3d 27 56 61 6c 75 ntainer[@n='Valu
1370: 65 73 27 5d 7d 20 76 61 6c 75 65 20 7b 6e 20 59 es']} value {n Y
1380: 5f 56 61 6c 75 65 20 70 6e 20 7b 59 20 76 61 6c _Value pn {Y val
1390: 75 65 7d 20 75 6e 69 74 5f 6d 61 67 6e 69 74 75 ue} unit_magnitu
13a0: 64 65 20 4c 20 73 74 61 74 65 20 7b 5b 63 68 65 de L state {[che
13b0: 63 6b 5f 73 74 61 74 65 5f 69 6e 76 20 50 6c 61 ck_state_inv Pla
13c0: 74 65 73 5d 7d 20 76 20 30 2e 30 20 75 6e 69 74 tes]} v 0.0 unit
13d0: 73 20 6d 7d 22 20 66 3d 22 31 22 2f 3e 0d 0a 23 s m}" f="1"/>..#
13e0: 20 3c 61 20 6e 3d 22 67 69 64 5f 67 72 6f 75 70 <a n="gid_group
13f0: 73 5f 63 6f 6e 64 73 3a 3a 61 64 64 46 22 20 61 s_conds::addF" a
1400: 3d 22 7b 24 6e 32 2f 67 72 6f 75 70 5b 40 6e 3d ="{$n2/group[@n=
1410: 27 46 69 78 65 64 20 63 6f 6e 73 74 72 61 69 6e 'Fixed constrain
1420: 74 73 20 41 75 74 6f 32 27 5d 2f 63 6f 6e 74 61 ts Auto2']/conta
1430: 69 6e 65 72 5b 40 6e 3d 27 56 61 6c 75 65 73 27 iner[@n='Values'
1440: 5d 7d 20 76 61 6c 75 65 20 7b 6e 20 5a 5f 56 61 ]} value {n Z_Va
1450: 6c 75 65 20 70 6e 20 7b 5a 20 76 61 6c 75 65 7d lue pn {Z value}
1460: 20 75 6e 69 74 5f 6d 61 67 6e 69 74 75 64 65 20 unit_magnitude
1470: 4c 20 73 74 61 74 65 20 7b 5b 63 68 65 63 6b 5f L state {[check_
1480: 73 74 61 74 65 5f 69 6e 76 20 7b 50 6c 61 6e 65 state_inv {Plane
1490: 5f 73 74 72 61 69 6e 20 50 6c 61 6e 65 5f 73 74 _strain Plane_st
14a0: 72 65 73 73 7d 5d 7d 20 76 20 30 2e 30 20 75 6e ress}]} v 0.0 un
14b0: 69 74 73 20 6d 7d 22 20 66 3d 22 31 22 2f 3e 0d its m}" f="1"/>.
14c0: 0a 23 20 3c 61 20 6e 3d 22 67 69 64 5f 67 72 6f .# <a n="gid_gro
14d0: 75 70 73 5f 63 6f 6e 64 73 3a 3a 61 64 64 46 22 ups_conds::addF"
14e0: 20 61 3d 22 7b 24 6e 32 2f 67 72 6f 75 70 5b 40 a="{$n2/group[@
14f0: 6e 3d 27 46 69 78 65 64 20 63 6f 6e 73 74 72 61 n='Fixed constra
1500: 69 6e 74 73 20 41 75 74 6f 32 27 5d 2f 63 6f 6e ints Auto2']/con
1510: 74 61 69 6e 65 72 5b 40 6e 3d 27 56 61 6c 75 65 tainer[@n='Value
1520: 73 27 5d 7d 20 76 61 6c 75 65 20 7b 6e 20 74 68 s']} value {n th
1530: 65 74 61 5f 78 5f 56 61 6c 75 65 20 70 6e 20 7b eta_x_Value pn {
1540: 3f 78 20 76 61 6c 75 65 7d 20 75 6e 69 74 5f 6d ?x value} unit_m
1550: 61 67 6e 69 74 75 64 65 20 52 6f 74 61 74 69 6f agnitude Rotatio
1560: 6e 20 73 74 61 74 65 20 7b 5b 63 68 65 63 6b 5f n state {[check_
1570: 73 74 61 74 65 5f 69 6e 76 20 7b 50 6c 61 6e 65 state_inv {Plane
1580: 5f 73 74 72 61 69 6e 20 50 6c 61 6e 65 5f 73 74 _strain Plane_st
1590: 72 65 73 73 20 50 6c 61 74 65 73 20 53 6f 6c 69 ress Plates Soli
15a0: 64 73 7d 5d 7d 20 76 20 30 2e 30 20 75 6e 69 74 ds}]} v 0.0 unit
15b0: 73 20 64 65 67 7d 22 20 66 3d 22 31 22 2f 3e 0d s deg}" f="1"/>.
15c0: 0a 23 20 3c 61 20 6e 3d 22 67 69 64 5f 67 72 6f .# <a n="gid_gro
15d0: 75 70 73 5f 63 6f 6e 64 73 3a 3a 61 64 64 46 22 ups_conds::addF"
15e0: 20 61 3d 22 7b 24 6e 32 2f 67 72 6f 75 70 5b 40 a="{$n2/group[@
15f0: 6e 3d 27 46 69 78 65 64 20 63 6f 6e 73 74 72 61 n='Fixed constra
1600: 69 6e 74 73 20 41 75 74 6f 32 27 5d 2f 63 6f 6e ints Auto2']/con
1610: 74 61 69 6e 65 72 5b 40 6e 3d 27 56 61 6c 75 65 tainer[@n='Value
1620: 73 27 5d 7d 20 76 61 6c 75 65 20 7b 6e 20 74 68 s']} value {n th
1630: 65 74 61 5f 79 5f 56 61 6c 75 65 20 70 6e 20 7b eta_y_Value pn {
1640: 3f 79 20 76 61 6c 75 65 7d 20 75 6e 69 74 5f 6d ?y value} unit_m
1650: 61 67 6e 69 74 75 64 65 20 52 6f 74 61 74 69 6f agnitude Rotatio
1660: 6e 20 73 74 61 74 65 20 7b 5b 63 68 65 63 6b 5f n state {[check_
1670: 73 74 61 74 65 5f 69 6e 76 20 7b 50 6c 61 6e 65 state_inv {Plane
1680: 5f 73 74 72 61 69 6e 20 50 6c 61 6e 65 5f 73 74 _strain Plane_st
1690: 72 65 73 73 20 53 6f 6c 69 64 73 7d 5d 7d 20 76 ress Solids}]} v
16a0: 20 30 2e 30 20 75 6e 69 74 73 20 64 65 67 7d 22 0.0 units deg}"
16b0: 20 66 3d 22 31 22 2f 3e 0d 0a 23 20 3c 61 20 6e f="1"/>..# <a n
16c0: 3d 22 67 69 64 5f 67 72 6f 75 70 73 5f 63 6f 6e ="gid_groups_con
16d0: 64 73 3a 3a 61 64 64 46 22 20 61 3d 22 7b 24 6e ds::addF" a="{$n
16e0: 32 2f 67 72 6f 75 70 5b 40 6e 3d 27 46 69 78 65 2/group[@n='Fixe
16f0: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 41 75 d constraints Au
1700: 74 6f 32 27 5d 2f 63 6f 6e 74 61 69 6e 65 72 5b to2']/container[
1710: 40 6e 3d 27 56 61 6c 75 65 73 27 5d 7d 20 76 61 @n='Values']} va
1720: 6c 75 65 20 7b 6e 20 74 68 65 74 61 5f 7a 5f 56 lue {n theta_z_V
1730: 61 6c 75 65 20 70 6e 20 7b 3f 7a 20 76 61 6c 75 alue pn {?z valu
1740: 65 7d 20 75 6e 69 74 5f 6d 61 67 6e 69 74 75 64 e} unit_magnitud
1750: 65 20 52 6f 74 61 74 69 6f 6e 20 73 74 61 74 65 e Rotation state
1760: 20 7b 5b 63 68 65 63 6b 5f 73 74 61 74 65 5f 69 {[check_state_i
1770: 6e 76 20 7b 50 6c 61 6e 65 5f 73 74 72 61 69 6e nv {Plane_strain
1780: 20 50 6c 61 6e 65 5f 73 74 72 65 73 73 20 53 6f Plane_stress So
1790: 6c 69 64 73 7d 5d 7d 20 76 20 30 2e 30 20 75 6e lids}]} v 0.0 un
17a0: 69 74 73 20 64 65 67 7d 22 20 66 3d 22 31 22 2f its deg}" f="1"/
17b0: 3e 0d 0a 23 20 0d 0a 23 20 3c 61 20 6e 3d 22 67 >..# ..# <a n="g
17c0: 69 64 5f 67 72 6f 75 70 73 5f 63 6f 6e 64 73 3a id_groups_conds:
17d0: 3a 61 64 64 46 22 20 61 3d 22 7b 24 6e 33 7d 20 :addF" a="{$n3}
17e0: 67 72 6f 75 70 20 7b 6e 20 7b 53 65 6c 66 20 77 group {n {Self w
17f0: 65 69 67 68 74 20 6c 6f 61 64 20 41 75 74 6f 7d eight load Auto}
1800: 7d 22 20 66 3d 22 31 22 2f 3e 0d 0a 23 20 3c 61 }" f="1"/>..# <a
1810: 20 6e 3d 22 63 68 61 6e 67 65 5f 67 72 6f 75 70 n="change_group
1820: 5f 70 72 6f 70 65 72 74 69 65 73 22 20 70 6e 3d _properties" pn=
1830: 22 43 68 61 6e 67 65 20 67 72 6f 75 70 20 70 72 "Change group pr
1840: 6f 70 65 72 74 69 65 73 20 74 6f 20 67 72 6f 75 operties to grou
1850: 70 20 53 65 6c 66 20 77 65 69 67 68 74 20 6c 6f p Self weight lo
1860: 61 64 20 41 75 74 6f 20 2d 20 74 79 70 65 20 3d ad Auto - type =
1870: 20 42 43 22 20 61 3d 22 7b 7b 53 65 6c 66 20 77 BC" a="{{Self w
1880: 65 69 67 68 74 20 6c 6f 61 64 20 41 75 74 6f 7d eight load Auto}
1890: 7d 20 74 79 70 65 20 42 43 22 20 66 3d 22 31 22 } type BC" f="1"
18a0: 2f 3e 0d 0a 23 20 3c 61 20 6e 3d 22 67 69 64 5f />..# <a n="gid_
18b0: 67 72 6f 75 70 73 5f 63 6f 6e 64 73 3a 3a 73 65 groups_conds::se
18c0: 74 41 74 74 72 69 62 75 74 65 73 46 22 20 70 6e tAttributesF" pn
18d0: 3d 22 73 65 74 61 74 74 72 69 62 75 74 65 73 22 ="setattributes"
18e0: 20 61 3d 22 7b 63 6f 6e 74 61 69 6e 65 72 5b 40 a="{container[@
18f0: 6e 3d 27 6c 6f 61 64 63 61 73 65 73 27 5d 2f 62 n='loadcases']/b
1900: 6c 6f 63 6b 64 61 74 61 5b 40 6e 3d 27 6c 6f 61 lockdata[@n='loa
1910: 64 63 61 73 65 27 5d 5b 31 5d 7d 20 7b 61 63 74 dcase'][1]} {act
1920: 69 76 65 20 31 7d 22 20 66 3d 22 31 22 2f 3e 0d ive 1}" f="1"/>.
1930: 0a 23 20 0d 0a 23 20 3c 2f 67 69 64 70 6f 73 74 .# ..# </gidpost
1940: 5f 62 61 74 63 68 3e 0d 0a 0d 0a 70 72 6f 63 20 _batch>....proc
1950: 73 76 67 6d 6c 3a 3a 70 61 72 73 65 5f 70 72 6f svgml::parse_pro
1960: 70 73 20 7b 20 63 6f 6e 74 65 6e 74 20 61 63 63 ps { content acc
1970: 65 70 74 5f 61 64 64 20 6c 69 6e 65 20 7d 20 7b ept_add line } {
1980: 0d 0a 20 20 20 20 0d 0a 20 20 20 20 73 65 74 20 .. .. set
1990: 70 72 6f 70 73 20 22 22 0d 0a 20 20 20 20 69 66 props "".. if
19a0: 20 7b 20 21 24 61 63 63 65 70 74 5f 61 64 64 20 { !$accept_add
19b0: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 } {.. set
19c0: 20 72 65 78 20 7b 28 29 5c 6d 28 5b 61 2d 7a 41 rex {()\m([a-zA
19d0: 2d 5a 5d 5b 2d 5c 77 5d 2a 29 5c 73 2a 3a 28 5b -Z][-\w]*)\s*:([
19e0: 5e 3b 5d 2a 29 3b 7d 0d 0a 20 20 20 20 7d 20 65 ^;]*);}.. } e
19f0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 lse {.. s
1a00: 65 74 20 72 65 78 20 7b 28 5c 2b 29 3f 5c 6d 28 et rex {(\+)?\m(
1a10: 5b 61 2d 7a 41 2d 5a 5d 5b 2d 5c 77 5d 2a 29 5c [a-zA-Z][-\w]*)\
1a20: 73 2a 3a 28 5b 5e 3b 5d 2a 29 3b 7d 0d 0a 20 20 s*:([^;]*);}..
1a30: 20 20 7d 0d 0a 20 20 20 20 73 65 74 20 63 20 30 }.. set c 0
1a40: 0d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 22 61 .. foreach "a
1a50: 6c 6c 49 20 61 64 64 49 20 6e 49 20 76 49 22 20 llI addI nI vI"
1a60: 5b 72 65 67 65 78 70 20 2d 69 6e 6c 69 6e 65 20 [regexp -inline
1a70: 2d 61 6c 6c 20 2d 69 6e 64 69 63 65 73 20 24 72 -all -indices $r
1a80: 65 78 20 24 63 6f 6e 74 65 6e 74 5d 20 7b 0d 0a ex $content] {..
1a90: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach
1aa0: 69 20 5b 6c 69 73 74 20 61 64 64 20 6e 20 76 5d i [list add n v]
1ab0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
1ac0: 73 65 74 20 24 69 20 5b 73 74 72 69 6e 67 20 72 set $i [string r
1ad0: 61 6e 67 65 20 24 63 6f 6e 74 65 6e 74 20 7b 2a ange $content {*
1ae0: 7d 5b 73 65 74 20 24 7b 69 7d 49 5d 5d 0d 0a 20 }[set ${i}I]]..
1af0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
1b00: 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 28 regsub -all {(
1b10: 3f 69 29 28 5e 7c 5b 5e 5c 5c 5d 29 5c 5c 30 30 ?i)(^|[^\\])\\00
1b20: 33 42 7d 20 24 76 20 7b 5c 31 3b 7d 20 76 0d 0a 3B} $v {\1;} v..
1b30: 20 20 20 20 20 20 20 20 72 65 67 73 75 62 20 2d regsub -
1b40: 61 6c 6c 20 7b 28 3f 69 29 5c 5c 28 5c 5c 30 30 all {(?i)\\(\\00
1b50: 33 42 29 7d 20 24 76 20 7b 5c 31 7d 20 76 0d 0a 3B)} $v {\1} v..
1b60: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 20 21 .. if { !
1b70: 24 61 63 63 65 70 74 5f 61 64 64 20 7d 20 7b 0d $accept_add } {.
1b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 . lap
1b90: 70 65 6e 64 20 70 72 6f 70 73 20 24 6e 20 24 76 pend props $n $v
1ba0: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else
1bb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
1bc0: 6c 61 70 70 65 6e 64 20 70 72 6f 70 73 20 24 61 lappend props $a
1bd0: 64 64 20 24 6e 20 24 76 0d 0a 20 20 20 20 20 20 dd $n $v..
1be0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 }.. set
1bf0: 20 70 72 65 76 20 5b 73 74 72 69 6e 67 20 72 61 prev [string ra
1c00: 6e 67 65 20 24 63 6f 6e 74 65 6e 74 20 24 63 20 nge $content $c
1c10: 5b 6c 69 6e 64 65 78 20 24 61 6c 6c 49 20 30 5d [lindex $allI 0]
1c20: 2d 31 5d 0d 0a 20 20 20 20 20 20 20 20 69 66 20 -1].. if
1c30: 7b 20 5b 72 65 67 65 78 70 20 7b 5c 77 2b 7d 20 { [regexp {\w+}
1c40: 24 70 72 65 76 5d 20 7d 20 7b 0d 0a 20 20 20 20 $prev] } {..
1c50: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 65 error "e
1c60: 72 72 6f 72 20 77 69 74 68 20 64 61 74 61 20 27 rror with data '
1c70: 24 70 72 65 76 27 20 2d 2d 2d 20 24 6c 69 6e 65 $prev' --- $line
1c80: 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ".. }..
1c90: 20 20 20 20 20 20 73 65 74 20 63 20 5b 65 78 70 set c [exp
1ca0: 72 20 7b 5b 6c 69 6e 64 65 78 20 24 61 6c 6c 49 r {[lindex $allI
1cb0: 20 31 5d 2b 31 7d 5d 20 0d 0a 20 20 20 20 7d 0d 1]+1}] .. }.
1cc0: 0a 20 20 20 20 73 65 74 20 70 72 65 76 20 5b 73 . set prev [s
1cd0: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 63 6f 6e tring range $con
1ce0: 74 65 6e 74 20 24 63 20 65 6e 64 5d 0d 0a 20 20 tent $c end]..
1cf0: 20 20 69 66 20 7b 20 5b 72 65 67 65 78 70 20 7b if { [regexp {
1d00: 5c 77 2b 7d 20 24 70 72 65 76 5d 20 7d 20 7b 0d \w+} $prev] } {.
1d10: 0a 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 . error "
1d20: 65 72 72 6f 72 20 77 69 74 68 20 64 61 74 61 20 error with data
1d30: 27 24 70 72 65 76 27 20 2d 2d 2d 20 24 6c 69 6e '$prev' --- $lin
1d40: 65 22 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 72 e".. }.. r
1d50: 65 74 75 72 6e 20 24 70 72 6f 70 73 0d 0a 7d 0d eturn $props..}.
1d60: 0a 0d 0a 70 72 6f 63 20 73 76 67 6d 6c 3a 3a 61 ...proc svgml::a
1d70: 70 70 65 6e 64 5f 6c 69 6e 65 20 7b 20 64 5f 6e ppend_line { d_n
1d80: 61 6d 65 20 69 64 20 6c 69 6e 65 20 63 6f 6e 74 ame id line cont
1d90: 65 6e 74 20 7d 20 7b 0d 0a 20 20 20 20 75 70 76 ent } {.. upv
1da0: 61 72 20 24 64 5f 6e 61 6d 65 20 64 0d 0a 20 20 ar $d_name d..
1db0: 20 20 0d 0a 20 20 20 20 64 69 63 74 20 73 65 74 .. dict set
1dc0: 20 64 20 69 64 73 20 24 69 64 20 6c 69 6e 65 20 d ids $id line
1dd0: 24 6c 69 6e 65 0d 0a 20 20 20 20 64 69 63 74 20 $line.. dict
1de0: 73 65 74 20 64 20 69 64 73 20 24 69 64 20 70 72 set d ids $id pr
1df0: 6f 70 73 20 5b 70 61 72 73 65 5f 70 72 6f 70 73 ops [parse_props
1e00: 20 24 63 6f 6e 74 65 6e 74 20 30 20 24 6c 69 6e $content 0 $lin
1e10: 65 5d 0d 0a 7d 0d 0a 0d 0a 70 72 6f 63 20 73 76 e]..}....proc sv
1e20: 67 6d 6c 3a 3a 73 65 74 5f 65 72 72 6f 72 20 7b gml::set_error {
1e30: 20 64 20 69 64 20 74 78 74 20 7d 20 7b 0d 0a 20 d id txt } {..
1e40: 20 20 20 65 72 72 6f 72 20 22 65 72 72 6f 72 3a error "error:
1e50: 20 24 74 78 74 20 2d 2d 2d 20 6c 69 6e 65 3a 5b $txt --- line:[
1e60: 64 69 63 74 20 67 65 74 20 24 64 20 69 64 73 20 dict get $d ids
1e70: 24 69 64 20 6c 69 6e 65 5d 22 0d 0a 7d 0d 0a 0d $id line]"..}...
1e80: 0a 70 72 6f 63 20 73 76 67 6d 6c 3a 3a 67 69 76 .proc svgml::giv
1e90: 65 5f 70 72 6f 70 20 7b 20 64 20 69 64 20 6e 61 e_prop { d id na
1ea0: 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 0d 0a 20 20 me } {.. ..
1eb0: 20 20 69 66 20 7b 20 21 5b 64 69 63 74 20 65 78 if { ![dict ex
1ec0: 69 73 74 73 20 24 64 20 69 64 73 20 24 69 64 20 ists $d ids $id
1ed0: 70 72 6f 70 73 20 24 6e 61 6d 65 5d 20 7d 20 7b props $name] } {
1ee0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 5f 65 72 .. set_er
1ef0: 72 6f 72 20 24 64 20 24 69 64 20 22 70 72 6f 70 ror $d $id "prop
1f00: 65 72 74 79 20 27 24 6e 61 6d 65 27 20 64 6f 65 erty '$name' doe
1f10: 73 20 6e 6f 74 20 65 78 69 73 74 22 0d 0a 20 20 s not exist"..
1f20: 20 20 7d 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 }.. return
1f30: 5b 64 69 63 74 20 67 65 74 20 24 64 20 69 64 73 [dict get $d ids
1f40: 20 24 69 64 20 70 72 6f 70 73 20 24 6e 61 6d 65 $id props $name
1f50: 5d 0d 0a 7d 0d 0a 0d 0a 70 72 6f 63 20 73 76 67 ]..}....proc svg
1f60: 6d 6c 3a 3a 67 69 76 65 5f 70 72 6f 70 44 20 7b ml::give_propD {
1f70: 20 64 20 69 64 20 6e 61 6d 65 20 64 65 66 61 75 d id name defau
1f80: 6c 74 20 7d 20 7b 0d 0a 20 20 20 20 0d 0a 20 20 lt } {.. ..
1f90: 20 20 69 66 20 7b 20 21 5b 64 69 63 74 20 65 78 if { ![dict ex
1fa0: 69 73 74 73 20 24 64 20 69 64 73 20 24 69 64 20 ists $d ids $id
1fb0: 70 72 6f 70 73 20 24 6e 61 6d 65 5d 20 7d 20 7b props $name] } {
1fc0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return
1fd0: 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 7d $default.. }
1fe0: 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 64 69 .. return [di
1ff0: 63 74 20 67 65 74 20 24 64 20 69 64 73 20 24 69 ct get $d ids $i
2000: 64 20 70 72 6f 70 73 20 24 6e 61 6d 65 5d 0d 0a d props $name]..
2010: 7d 0d 0a 0d 0a 70 72 6f 63 20 73 76 67 6d 6c 3a }....proc svgml:
2020: 3a 62 62 6f 78 5f 74 6f 5f 70 6f 69 6e 74 73 20 :bbox_to_points
2030: 7b 20 62 62 6f 78 20 7d 20 7b 0d 0a 20 20 20 20 { bbox } {..
2040: 6c 61 73 73 69 67 6e 20 24 62 62 6f 78 20 78 20 lassign $bbox x
2050: 79 20 77 20 68 20 20 0d 0a 20 20 20 20 72 65 74 y w h .. ret
2060: 75 72 6e 20 5b 6c 69 73 74 20 22 24 78 20 24 79 urn [list "$x $y
2070: 22 20 5b 6c 69 73 74 20 5b 65 78 70 72 20 7b 24 " [list [expr {$
2080: 78 2b 24 77 7d 5d 20 5b 65 78 70 72 20 7b 24 79 x+$w}] [expr {$y
2090: 2b 24 68 7d 5d 5d 5d 0d 0a 7d 0d 0a 0d 0a 70 72 +$h}]]]..}....pr
20a0: 6f 63 20 73 76 67 6d 6c 3a 3a 61 64 64 5f 74 6f oc svgml::add_to
20b0: 5f 62 62 6f 78 20 7b 20 69 64 20 62 62 6f 78 20 _bbox { id bbox
20c0: 7d 20 7b 0d 0a 20 20 20 20 76 61 72 69 61 62 6c } {.. variabl
20d0: 65 20 64 0d 0a 20 20 20 20 0d 0a 20 20 20 20 69 e d.. .. i
20e0: 66 20 7b 20 5b 64 69 63 74 20 65 78 69 73 74 73 f { [dict exists
20f0: 20 64 20 69 64 73 20 24 69 64 20 62 62 6f 78 5d d ids $id bbox]
2100: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 } {.. se
2110: 74 20 70 6e 74 73 20 22 22 0d 0a 20 20 20 20 20 t pnts ""..
2120: 20 20 20 6c 61 70 70 65 6e 64 20 70 6e 74 73 20 lappend pnts
2130: 7b 2a 7d 5b 62 62 6f 78 5f 74 6f 5f 70 6f 69 6e {*}[bbox_to_poin
2140: 74 73 20 5b 64 69 63 74 20 67 65 74 20 64 20 69 ts [dict get d i
2150: 64 73 20 24 69 64 20 62 62 6f 78 5d 5d 0d 0a 20 ds $id bbox]]..
2160: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 lappend p
2170: 6e 74 73 20 7b 2a 7d 5b 62 62 6f 78 5f 74 6f 5f nts {*}[bbox_to_
2180: 70 6f 69 6e 74 73 20 24 62 62 6f 78 5d 0d 0a 20 points $bbox]..
2190: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 foreach p
21a0: 6e 74 20 24 70 6e 74 73 20 7b 0d 0a 20 20 20 20 nt $pnts {..
21b0: 20 20 20 20 20 20 20 20 69 66 20 7b 20 21 5b 69 if { ![i
21c0: 6e 66 6f 20 65 78 69 73 74 73 20 78 30 5d 20 7c nfo exists x0] |
21d0: 7c 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 20 30 | [lindex $pnt 0
21e0: 5d 3c 24 78 30 20 7d 20 7b 20 73 65 74 20 78 30 ]<$x0 } { set x0
21f0: 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 20 30 5d [lindex $pnt 0]
2200: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
2210: 69 66 20 7b 20 21 5b 69 6e 66 6f 20 65 78 69 73 if { ![info exis
2220: 74 73 20 79 30 5d 20 7c 7c 20 5b 6c 69 6e 64 65 ts y0] || [linde
2230: 78 20 24 70 6e 74 20 31 5d 3c 24 79 30 20 7d 20 x $pnt 1]<$y0 }
2240: 7b 20 73 65 74 20 79 30 20 5b 6c 69 6e 64 65 78 { set y0 [lindex
2250: 20 24 70 6e 74 20 31 5d 20 7d 0d 0a 20 20 20 20 $pnt 1] }..
2260: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 }.. f
2270: 6f 72 65 61 63 68 20 70 6e 74 20 24 70 6e 74 73 oreach pnt $pnts
2280: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2290: 69 66 20 7b 20 21 5b 69 6e 66 6f 20 65 78 69 73 if { ![info exis
22a0: 74 73 20 77 5d 20 7c 7c 20 5b 6c 69 6e 64 65 78 ts w] || [lindex
22b0: 20 24 70 6e 74 20 30 5d 2d 24 78 30 20 3e 20 24 $pnt 0]-$x0 > $
22c0: 77 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 w } {..
22d0: 20 20 20 20 20 20 20 73 65 74 20 77 20 5b 65 78 set w [ex
22e0: 70 72 20 7b 5b 6c 69 6e 64 65 78 20 24 70 6e 74 pr {[lindex $pnt
22f0: 20 30 5d 2d 24 78 30 7d 5d 0d 0a 20 20 20 20 20 0]-$x0}]..
2300: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
2310: 20 20 20 20 20 20 69 66 20 7b 20 21 5b 69 6e 66 if { ![inf
2320: 6f 20 65 78 69 73 74 73 20 68 5d 20 7c 7c 20 5b o exists h] || [
2330: 6c 69 6e 64 65 78 20 24 70 6e 74 20 31 5d 2d 24 lindex $pnt 1]-$
2340: 79 30 20 3e 20 24 68 20 7d 20 7b 0d 0a 20 20 20 y0 > $h } {..
2350: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
2360: 20 68 20 5b 65 78 70 72 20 7b 5b 6c 69 6e 64 65 h [expr {[linde
2370: 78 20 24 70 6e 74 20 31 5d 2d 24 79 30 7d 5d 0d x $pnt 1]-$y0}].
2380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
2390: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
23a0: 20 20 20 73 65 74 20 62 62 6f 78 20 5b 6c 69 73 set bbox [lis
23b0: 74 20 24 78 30 20 24 79 30 20 24 77 20 24 68 5d t $x0 $y0 $w $h]
23c0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 64 69 63 .. }.. dic
23d0: 74 20 73 65 74 20 64 20 69 64 73 20 24 69 64 20 t set d ids $id
23e0: 62 62 6f 78 20 24 62 62 6f 78 0d 0a 7d 0d 0a 0d bbox $bbox..}...
23f0: 0a 70 72 6f 63 20 73 76 67 6d 6c 3a 3a 72 6f 74 .proc svgml::rot
2400: 61 74 65 5f 61 6e 67 6c 65 73 20 7b 20 61 6e 67 ate_angles { ang
2410: 6c 65 78 79 20 61 6e 67 6c 65 7a 20 7d 20 7b 0d lexy anglez } {.
2420: 0a 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 73 . .. s
2430: 65 74 20 61 6e 67 6c 65 78 79 5f 52 20 5b 65 78 et anglexy_R [ex
2440: 70 72 20 7b 24 6d 3a 3a 64 65 67 74 6f 72 61 64 pr {$m::degtorad
2450: 2a 28 24 61 6e 67 6c 65 78 79 2b 39 30 2e 30 29 *($anglexy+90.0)
2460: 7d 5d 0d 0a 20 20 20 20 73 65 74 20 61 6e 67 6c }].. set angl
2470: 65 7a 5f 52 20 5b 65 78 70 72 20 7b 2d 31 2e 30 ez_R [expr {-1.0
2480: 2a 24 6d 3a 3a 64 65 67 74 6f 72 61 64 2a 28 24 *$m::degtorad*($
2490: 61 6e 67 6c 65 7a 2d 39 30 2e 30 29 7d 5d 0d 0a anglez-90.0)}]..
24a0: 20 20 20 20 73 65 74 20 61 20 5b 6d 3a 3a 71 75 set a [m::qu
24b0: 61 74 65 72 6e 69 6f 6e 3a 3a 72 6f 74 61 74 69 aternion::rotati
24c0: 6f 6e 20 5b 6c 69 73 74 20 30 2e 30 20 30 2e 30 on [list 0.0 0.0
24d0: 20 31 2e 30 5d 20 24 61 6e 67 6c 65 78 79 5f 52 1.0] $anglexy_R
24e0: 5d 0d 0a 20 20 20 20 73 65 74 20 6e 65 77 61 78 ].. set newax
24f0: 69 73 20 5b 6d 3a 3a 71 75 61 74 65 72 6e 69 6f is [m::quaternio
2500: 6e 3a 3a 72 6f 74 61 74 69 6f 6e 20 5b 6c 69 73 n::rotation [lis
2510: 74 20 31 2e 30 20 30 2e 30 20 30 2e 30 5d 20 24 t 1.0 0.0 0.0] $
2520: 61 6e 67 6c 65 7a 5f 52 5d 0d 0a 20 20 20 20 73 anglez_R].. s
2530: 65 74 20 72 6f 74 61 74 69 6f 6e 5f 76 65 63 74 et rotation_vect
2540: 6f 72 20 5b 6d 3a 3a 71 75 61 74 65 72 6e 69 6f or [m::quaternio
2550: 6e 3a 3a 6d 75 6c 74 69 70 6c 79 20 24 61 20 24 n::multiply $a $
2560: 6e 65 77 61 78 69 73 5d 0d 0a 20 20 20 20 72 65 newaxis].. re
2570: 74 75 72 6e 20 5b 6d 3a 3a 71 75 61 74 65 72 6e turn [m::quatern
2580: 69 6f 6e 3a 3a 6e 6f 72 6d 61 6c 69 7a 65 50 20 ion::normalizeP
2590: 24 72 6f 74 61 74 69 6f 6e 5f 76 65 63 74 6f 72 $rotation_vector
25a0: 20 36 5d 0d 0a 7d 0d 0a 0d 0a 70 72 6f 63 20 73 6]..}....proc s
25b0: 76 67 6d 6c 3a 3a 69 73 5f 6e 75 6d 62 65 72 20 vgml::is_number
25c0: 7b 20 74 65 78 74 20 7d 20 7b 0d 0a 0d 0a 20 20 { text } {....
25d0: 20 20 69 66 20 7b 20 5b 73 63 61 6e 20 24 74 65 if { [scan $te
25e0: 78 74 20 22 25 66 20 25 6e 22 20 6e 75 6d 62 65 xt "%f %n" numbe
25f0: 72 20 6c 65 6e 5d 20 3d 3d 20 30 20 7d 20 7b 20 r len] == 0 } {
2600: 72 65 74 75 72 6e 20 30 20 7d 0d 0a 20 20 20 20 return 0 }..
2610: 69 66 20 7b 20 21 5b 69 6e 66 6f 20 65 78 69 73 if { ![info exis
2620: 74 73 20 6c 65 6e 5d 20 7d 20 7b 20 72 65 74 75 ts len] } { retu
2630: 72 6e 20 30 20 7d 0d 0a 20 20 20 20 69 66 20 7b rn 0 }.. if {
2640: 20 24 6c 65 6e 20 21 3d 20 5b 73 74 72 69 6e 67 $len != [string
2650: 20 6c 65 6e 67 74 68 20 24 74 65 78 74 5d 20 7d length $text] }
2660: 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0d 0a 20 { return 0 }..
2670: 20 20 20 72 65 74 75 72 6e 20 31 0d 0a 7d 0d 0a return 1..}..
2680: 0d 0a 23 20 78 2c 79 20 77 68 65 72 65 20 76 61 ..# x,y where va
2690: 6c 75 65 73 20 61 72 65 3a 20 2d 31 2c 30 2c 31 lues are: -1,0,1
26a0: 0d 0a 70 72 6f 63 20 73 76 67 6d 6c 3a 3a 67 69 ..proc svgml::gi
26b0: 76 65 5f 61 6e 63 68 6f 72 5f 61 78 65 73 20 7b ve_anchor_axes {
26c0: 20 64 20 69 64 20 7d 20 7b 0d 0a 20 20 20 20 0d d id } {.. .
26d0: 0a 20 20 20 20 73 65 74 20 61 6e 63 68 6f 72 20 . set anchor
26e0: 5b 73 70 6c 69 74 20 5b 67 69 76 65 5f 70 72 6f [split [give_pro
26f0: 70 44 20 24 64 20 24 69 64 20 61 6e 63 68 6f 72 pD $d $id anchor
2700: 20 22 22 5d 20 22 22 5d 0d 0a 20 20 20 20 0d 0a ""] ""].. ..
2710: 20 20 20 20 6c 61 73 73 69 67 6e 20 22 30 20 30 lassign "0 0
2720: 22 20 78 20 79 0d 0a 20 20 20 20 20 20 20 20 0d " x y.. .
2730: 0a 20 20 20 20 69 66 20 7b 20 22 77 22 20 69 6e . if { "w" in
2740: 20 24 61 6e 63 68 6f 72 20 26 26 20 22 65 22 20 $anchor && "e"
2750: 69 6e 20 24 61 6e 63 68 6f 72 20 7d 20 7b 0d 0a in $anchor } {..
2760: 20 20 20 20 20 20 20 20 73 65 74 20 78 20 30 0d set x 0.
2770: 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 . } elseif {
2780: 22 77 22 20 69 6e 20 24 61 6e 63 68 6f 72 20 7d "w" in $anchor }
2790: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set
27a0: 78 20 31 0d 0a 20 20 20 20 7d 20 65 6c 73 65 69 x 1.. } elsei
27b0: 66 20 7b 20 22 65 22 20 69 6e 20 24 61 6e 63 68 f { "e" in $anch
27c0: 6f 72 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 or } {..
27d0: 73 65 74 20 78 20 2d 31 0d 0a 20 20 20 20 7d 0d set x -1.. }.
27e0: 0a 20 20 20 20 69 66 20 7b 20 22 6e 22 20 69 6e . if { "n" in
27f0: 20 24 61 6e 63 68 6f 72 20 26 26 20 22 73 22 20 $anchor && "s"
2800: 69 6e 20 24 61 6e 63 68 6f 72 20 7d 20 7b 0d 0a in $anchor } {..
2810: 20 20 20 20 20 20 20 20 73 65 74 20 79 20 30 0d set y 0.
2820: 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 . } elseif {
2830: 22 6e 22 20 69 6e 20 24 61 6e 63 68 6f 72 20 7d "n" in $anchor }
2840: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set
2850: 79 20 31 0d 0a 20 20 20 20 7d 20 65 6c 73 65 69 y 1.. } elsei
2860: 66 20 7b 20 22 73 22 20 69 6e 20 24 61 6e 63 68 f { "s" in $anch
2870: 6f 72 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 or } {..
2880: 73 65 74 20 79 20 2d 31 0d 0a 20 20 20 20 7d 0d set y -1.. }.
2890: 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 . return [lis
28a0: 74 20 24 78 20 24 79 5d 0d 0a 7d 0d 0a 0d 0a 70 t $x $y]..}....p
28b0: 72 6f 63 20 73 76 67 6d 6c 3a 3a 73 70 6c 69 74 roc svgml::split
28c0: 5f 74 65 78 74 20 7b 20 74 65 78 74 20 7d 20 7b _text { text } {
28d0: 0d 0a 20 20 20 20 0d 0a 20 20 20 20 73 65 74 20 .. .. set
28e0: 72 65 74 20 22 22 0d 0a 20 20 20 20 69 66 20 7b ret "".. if {
28f0: 20 5b 72 65 67 65 78 70 20 7b 5c 6e 7d 20 24 74 [regexp {\n} $t
2900: 65 78 74 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ext] } {..
2910: 20 20 73 65 74 20 69 6c 69 6e 65 20 30 0d 0a 20 set iline 0..
2920: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6c foreach l
2930: 69 6e 65 20 5b 73 70 6c 69 74 20 24 74 65 78 74 ine [split $text
2940: 20 5c 6e 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 \n] {..
2950: 20 20 20 20 73 65 74 20 72 65 74 4c 20 5b 73 70 set retL [sp
2960: 6c 69 74 5f 74 65 78 74 20 24 6c 69 6e 65 5d 0d lit_text $line].
2970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
2980: 7b 20 24 69 6c 69 6e 65 20 3e 20 30 20 26 26 20 { $iline > 0 &&
2990: 5b 6c 6c 65 6e 67 74 68 20 24 72 65 74 4c 5d 20 [llength $retL]
29a0: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
29b0: 20 20 20 20 20 6c 73 65 74 20 72 65 74 4c 20 30 lset retL 0
29c0: 20 30 20 5b 6c 69 73 74 20 7b 2a 7d 5b 6c 69 6e 0 [list {*}[lin
29d0: 64 65 78 20 24 72 65 74 4c 20 30 20 30 5d 20 6e dex $retL 0 0] n
29e0: 65 77 6c 69 6e 65 5d 0d 0a 20 20 20 20 20 20 20 ewline]..
29f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
2a00: 20 20 20 20 69 6e 63 72 20 69 6c 69 6e 65 0d 0a incr iline..
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 lapp
2a20: 65 6e 64 20 72 65 74 20 7b 2a 7d 24 72 65 74 4c end ret {*}$retL
2a30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
2a40: 20 7d 20 65 6c 73 65 69 66 20 7b 20 5b 72 65 67 } elseif { [reg
2a50: 65 78 70 20 2d 69 6e 64 69 63 65 73 20 7b 5b 7e exp -indices {[~
2a60: 5e 2a 5f 5d 7b 31 2c 32 7d 7d 20 24 74 65 78 74 ^*_]{1,2}} $text
2a70: 20 69 64 78 73 5d 20 7d 20 7b 0d 0a 20 20 20 20 idxs] } {..
2a80: 20 20 20 20 73 65 74 20 76 20 5b 73 74 72 69 6e set v [strin
2a90: 67 20 72 61 6e 67 65 20 24 74 65 78 74 20 7b 2a g range $text {*
2aa0: 7d 24 69 64 78 73 5d 0d 0a 20 20 20 20 20 20 20 }$idxs]..
2ab0: 20 73 65 74 20 63 20 5b 65 78 70 72 20 7b 5b 6c set c [expr {[l
2ac0: 69 6e 64 65 78 20 24 69 64 78 73 20 31 5d 2b 31 index $idxs 1]+1
2ad0: 7d 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 }].. set
2ae0: 72 65 78 20 22 5c 5c 5b 73 74 72 69 6e 67 20 69 rex "\\[string i
2af0: 6e 64 65 78 20 24 76 20 30 5d 5c 7b 5b 73 74 72 ndex $v 0]\{[str
2b00: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 5d 5c 7d ing length $v]\}
2b10: 22 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 20 ".. if {
2b20: 21 5b 72 65 67 65 78 70 20 2d 73 74 61 72 74 20 ![regexp -start
2b30: 24 63 20 2d 69 6e 64 69 63 65 73 20 24 72 65 78 $c -indices $rex
2b40: 20 24 74 65 78 74 20 69 64 78 73 4e 5d 20 7d 20 $text idxsN] }
2b50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 {.. r
2b60: 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b 6c 69 73 eturn [list [lis
2b70: 74 20 22 22 20 24 74 65 78 74 5d 5d 0d 0a 20 20 t "" $text]]..
2b80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
2b90: 20 73 65 74 20 73 74 72 20 5b 73 74 72 69 6e 67 set str [string
2ba0: 20 72 61 6e 67 65 20 24 74 65 78 74 20 30 20 5b range $text 0 [
2bb0: 6c 69 6e 64 65 78 20 24 69 64 78 73 20 30 5d 2d lindex $idxs 0]-
2bc0: 31 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 1].. set
2bd0: 72 65 74 4c 20 5b 73 70 6c 69 74 5f 74 65 78 74 retL [split_text
2be0: 20 24 73 74 72 5d 0d 0a 20 20 20 20 20 20 20 20 $str]..
2bf0: 6c 61 70 70 65 6e 64 20 72 65 74 20 7b 2a 7d 24 lappend ret {*}$
2c00: 72 65 74 4c 0d 0a 20 20 20 20 20 20 20 20 0d 0a retL.. ..
2c10: 20 20 20 20 20 20 20 20 73 65 74 20 74 79 70 65 set type
2c20: 73 20 5b 6c 69 73 74 20 7b 7e 20 73 75 62 7d 20 s [list {~ sub}
2c30: 7b 5e 20 73 75 70 7d 20 7b 2a 20 69 74 61 6c 69 {^ sup} {* itali
2c40: 63 7d 20 7b 5f 20 69 74 61 6c 69 63 7d 20 7b 2a c} {_ italic} {*
2c50: 2a 20 62 6f 6c 64 7d 20 7b 5f 5f 20 62 6f 6c 64 * bold} {__ bold
2c60: 7d 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 }].. set
2c70: 69 70 6f 73 20 5b 6c 73 65 61 72 63 68 20 2d 69 ipos [lsearch -i
2c80: 6e 64 65 78 20 30 20 2d 65 78 61 63 74 20 24 74 ndex 0 -exact $t
2c90: 79 70 65 73 20 24 76 5d 0d 0a 20 20 20 20 20 20 ypes $v]..
2ca0: 20 20 73 65 74 20 74 79 70 65 20 5b 6c 69 6e 64 set type [lind
2cb0: 65 78 20 24 74 79 70 65 73 20 24 69 70 6f 73 20 ex $types $ipos
2cc0: 31 5d 0d 0a 20 20 20 20 20 20 20 20 0d 0a 20 20 1].. ..
2cd0: 20 20 20 20 20 20 73 65 74 20 73 74 72 20 5b 73 set str [s
2ce0: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 74 65 78 tring range $tex
2cf0: 74 20 24 63 20 5b 6c 69 6e 64 65 78 20 24 69 64 t $c [lindex $id
2d00: 78 73 4e 20 30 5d 2d 31 5d 0d 0a 20 20 20 20 20 xsN 0]-1]..
2d10: 20 20 20 73 65 74 20 72 65 74 4c 20 5b 73 70 6c set retL [spl
2d20: 69 74 5f 74 65 78 74 20 24 73 74 72 5d 0d 0a 20 it_text $str]..
2d30: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 foreach i
2d40: 20 24 72 65 74 4c 20 7b 0d 0a 20 20 20 20 20 20 $retL {..
2d50: 20 20 20 20 20 20 6c 73 65 74 20 69 20 30 20 5b lset i 0 [
2d60: 6c 69 73 74 20 7b 2a 7d 5b 6c 69 6e 64 65 78 20 list {*}[lindex
2d70: 24 69 20 30 5d 20 24 74 79 70 65 5d 0d 0a 20 20 $i 0] $type]..
2d80: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen
2d90: 64 20 72 65 74 20 24 69 0d 0a 20 20 20 20 20 20 d ret $i..
2da0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 0d 0a 20 }.. ..
2db0: 20 20 20 20 20 20 20 73 65 74 20 73 74 72 20 5b set str [
2dc0: 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 74 65 string range $te
2dd0: 78 74 20 5b 6c 69 6e 64 65 78 20 24 69 64 78 73 xt [lindex $idxs
2de0: 4e 20 31 5d 2b 31 20 65 6e 64 5d 0d 0a 20 20 20 N 1]+1 end]..
2df0: 20 20 20 20 20 73 65 74 20 72 65 74 4c 20 5b 73 set retL [s
2e00: 70 6c 69 74 5f 74 65 78 74 20 24 73 74 72 5d 0d plit_text $str].
2e10: 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 . lappend
2e20: 20 72 65 74 20 7b 2a 7d 24 72 65 74 4c 0d 0a 20 ret {*}$retL..
2e30: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 5b 73 } elseif { [s
2e40: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 74 65 tring length $te
2e50: 78 74 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 xt] } {..
2e60: 20 6c 61 70 70 65 6e 64 20 72 65 74 20 5b 6c 69 lappend ret [li
2e70: 73 74 20 22 22 20 24 74 65 78 74 5d 0d 0a 20 20 st "" $text]..
2e80: 20 20 7d 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 }.. return
2e90: 24 72 65 74 0d 0a 7d 0d 0a 0d 0a 70 72 6f 63 20 $ret..}....proc
2ea0: 73 76 67 6d 6c 3a 3a 78 6d 6c 5f 71 75 6f 74 65 svgml::xml_quote
2eb0: 20 7b 20 74 65 78 74 20 7d 20 7b 0d 0a 20 20 20 { text } {..
2ec0: 20 73 65 74 20 6d 61 70 20 5b 6c 69 73 74 20 22 set map [list "
2ed0: 3c 22 20 22 26 6c 74 3b 22 20 22 3e 22 20 22 26 <" "<" ">" "&
2ee0: 67 74 3b 22 20 22 26 22 20 22 26 61 6d 70 3b 22 gt;" "&" "&"
2ef0: 5d 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 73 ].. return [s
2f00: 74 72 69 6e 67 20 6d 61 70 20 24 6d 61 70 20 24 tring map $map $
2f10: 74 65 78 74 5d 0d 0a 7d 0d 0a 0d 0a 70 72 6f 63 text]..}....proc
2f20: 20 73 76 67 6d 6c 3a 3a 61 70 70 65 6e 64 5f 74 svgml::append_t
2f30: 73 70 61 6e 73 20 7b 20 78 20 74 65 78 74 20 7d spans { x text }
2f40: 20 7b 0d 0a 20 20 20 20 0d 0a 20 20 20 20 72 65 {.. .. re
2f50: 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 20 5c 74 5d gsub -all {[ \t]
2f60: 2b 7d 20 24 74 65 78 74 20 7b 20 7d 20 74 65 78 +} $text { } tex
2f70: 74 0d 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 t.. regsub -a
2f80: 6c 6c 20 7b 5b 20 5c 74 5d 2a 5c 6e 5b 20 5c 74 ll {[ \t]*\n[ \t
2f90: 5d 2a 7d 20 24 74 65 78 74 20 22 5c 6e 22 20 74 ]*} $text "\n" t
2fa0: 65 78 74 0d 0a 20 20 20 20 0d 0a 20 20 20 20 73 ext.. .. s
2fb0: 65 74 20 78 6d 6c 20 22 22 0d 0a 20 20 20 20 66 et xml "".. f
2fc0: 6f 72 65 61 63 68 20 69 20 5b 73 76 67 6d 6c 3a oreach i [svgml:
2fd0: 3a 73 70 6c 69 74 5f 74 65 78 74 20 24 74 65 78 :split_text $tex
2fe0: 74 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61 t] {.. la
2ff0: 73 73 69 67 6e 20 24 69 20 74 79 70 65 73 20 74 ssign $i types t
3000: 78 74 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 xt.. appe
3010: 6e 64 20 78 6d 6c 20 22 3c 74 73 70 61 6e 22 0d nd xml "<tspan".
3020: 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74 20 . set st
3030: 22 22 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 "".. fore
3040: 61 63 68 20 74 79 70 65 20 24 74 79 70 65 73 20 ach type $types
3050: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {.. s
3060: 77 69 74 63 68 20 24 74 79 70 65 20 7b 0d 0a 20 witch $type {..
3070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e n
3080: 65 77 6c 69 6e 65 20 7b 20 61 70 70 65 6e 64 20 ewline { append
3090: 78 6d 6c 20 22 20 78 3d 27 24 78 27 20 64 79 3d xml " x='$x' dy=
30a0: 27 31 2e 32 65 6d 27 22 20 7d 0d 0a 20 20 20 20 '1.2em'" }..
30b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 20 sub
30c0: 7b 20 61 70 70 65 6e 64 20 73 74 20 22 66 6f 6e { append st "fon
30d0: 74 2d 73 69 7a 65 3a 36 35 25 3b 62 61 73 65 6c t-size:65%;basel
30e0: 69 6e 65 2d 73 68 69 66 74 3a 73 75 62 3b 22 20 ine-shift:sub;"
30f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
3100: 20 20 20 73 75 70 20 7b 20 61 70 70 65 6e 64 20 sup { append
3110: 73 74 20 22 66 6f 6e 74 2d 73 69 7a 65 3a 36 35 st "font-size:65
3120: 25 3b 62 61 73 65 6c 69 6e 65 2d 73 68 69 66 74 %;baseline-shift
3130: 3a 73 75 70 3b 22 20 7d 0d 0a 20 20 20 20 20 20 :sup;" }..
3140: 20 20 20 20 20 20 20 20 20 20 69 74 61 6c 69 63 italic
3150: 20 7b 20 61 70 70 65 6e 64 20 73 74 20 22 66 6f { append st "fo
3160: 6e 74 2d 73 74 79 6c 65 3a 69 74 61 6c 69 63 3b nt-style:italic;
3170: 22 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " }..
3180: 20 20 20 20 20 62 6f 6c 64 20 7b 20 61 70 70 65 bold { appe
3190: 6e 64 20 73 74 20 22 66 6f 6e 74 2d 77 65 69 67 nd st "font-weig
31a0: 68 74 3a 62 6f 6c 64 3b 22 20 7d 0d 0a 20 20 20 ht:bold;" }..
31b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
31c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 }.. i
31d0: 66 20 7b 20 24 73 74 20 6e 65 20 22 22 20 7d 20 f { $st ne "" }
31e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 {.. a
31f0: 70 70 65 6e 64 20 78 6d 6c 20 22 20 73 74 79 6c ppend xml " styl
3200: 65 3d 27 24 73 74 27 22 0d 0a 20 20 20 20 20 20 e='$st'"..
3210: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 61 70 70 }.. app
3220: 65 6e 64 20 78 6d 6c 20 22 3e 5b 78 6d 6c 5f 71 end xml ">[xml_q
3230: 75 6f 74 65 20 24 74 78 74 5d 3c 2f 74 73 70 61 uote $txt]</tspa
3240: 6e 3e 22 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 n>".. }..
3250: 72 65 74 75 72 6e 20 24 78 6d 6c 0d 0a 7d 0d 0a return $xml..}..
3260: 0d 0a 70 72 6f 63 20 73 76 67 6d 6c 3a 3a 63 72 ..proc svgml::cr
3270: 65 61 74 65 20 7b 20 74 78 74 20 7d 20 7b 0d 0a eate { txt } {..
3280: 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 0d 0a variable d..
3290: 20 20 20 20 76 61 72 69 61 62 6c 65 20 78 6d 6c variable xml
32a0: 0d 0a 20 20 20 20 0d 0a 23 23 23 23 23 23 23 23 .. ..########
32b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
32c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
32d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
32e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
32f0: 23 23 23 23 23 23 23 23 23 0d 0a 23 20 20 20 20 #########..#
3300: 69 6e 69 74 69 61 6c 20 70 61 72 73 69 6e 67 20 initial parsing
3310: 62 79 20 6c 69 6e 65 73 0d 0a 23 23 23 23 23 23 by lines..######
3320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3360: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20 ###########..
3370: 20 0d 0a 20 20 20 20 6c 61 73 73 69 67 6e 20 22 .. lassign "
3380: 22 20 64 20 6c 69 6e 65 0d 0a 20 20 20 20 0d 0a " d line.. ..
3390: 20 20 20 20 64 69 63 74 20 73 65 74 20 64 20 63 dict set d c
33a0: 6c 61 73 73 65 73 20 22 22 0d 0a 20 20 20 20 0d lasses "".. .
33b0: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6c 6e 20 . foreach ln
33c0: 5b 73 70 6c 69 74 20 24 74 78 74 20 5c 6e 5d 20 [split $txt \n]
33d0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 67 73 75 {.. regsu
33e0: 62 20 2d 61 6c 6c 20 7b 3c 21 2d 2d 2e 2a 3f 20 b -all {<!--.*?
33f0: 2d 2d 3e 7d 20 24 6c 6e 20 7b 7d 20 6c 6e 0d 0a -->} $ln {} ln..
3400: 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 72 65 if { [re
3410: 67 65 78 70 20 7b 28 2e 2a 5b 5e 5c 5c 5d 29 5c gexp {(.*[^\\])\
3420: 5c 5c 73 2a 24 7d 20 24 6c 6e 20 7b 7d 20 70 72 \\s*$} $ln {} pr
3430: 65 66 69 78 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 efix] } {..
3440: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 6c 69 append li
3450: 6e 65 20 24 70 72 65 66 69 78 0d 0a 20 20 20 20 ne $prefix..
3460: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 continue
3470: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else
3480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
3490: 61 70 70 65 6e 64 20 6c 69 6e 65 20 24 6c 6e 20 append line $ln
34a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
34b0: 20 20 20 20 20 69 66 20 7b 20 5b 72 65 67 65 78 if { [regex
34c0: 70 20 7b 5e 5c 73 2a 5c 2b 73 76 67 6d 6c 28 5c p {^\s*\+svgml(\
34d0: 53 2b 29 5c 73 2b 28 2e 2a 29 7d 20 24 6c 69 6e S+)\s+(.*)} $lin
34e0: 65 20 7b 7d 20 76 65 72 73 69 6f 6e 20 63 6f 6e e {} version con
34f0: 74 65 6e 74 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 tent] } {..
3500: 20 20 20 20 20 20 20 61 70 70 65 6e 64 5f 6c 69 append_li
3510: 6e 65 20 64 20 30 20 24 6c 69 6e 65 20 24 63 6f ne d 0 $line $co
3520: 6e 74 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 ntent..
3530: 20 20 20 64 69 63 74 20 73 65 74 20 64 20 76 65 dict set d ve
3540: 72 73 69 6f 6e 20 24 76 65 72 73 69 6f 6e 0d 0a rsion $version..
3550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se
3560: 74 20 77 69 64 74 68 20 5b 67 69 76 65 5f 70 72 t width [give_pr
3570: 6f 70 20 24 64 20 30 20 77 69 64 74 68 5d 0d 0a op $d 0 width]..
3580: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
3590: 68 65 69 67 68 74 20 5b 67 69 76 65 5f 70 72 6f height [give_pro
35a0: 70 20 24 64 20 30 20 68 65 69 67 68 74 5d 0d 0a p $d 0 height]..
35b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
35c0: 20 7b 20 5b 72 65 67 65 78 70 20 7b 28 5c 64 2b { [regexp {(\d+
35d0: 29 25 7d 20 24 68 65 69 67 68 74 20 7b 7d 20 70 )%} $height {} p
35e0: 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ] } {..
35f0: 20 20 20 20 20 20 20 73 65 74 20 68 65 69 67 68 set heigh
3600: 74 20 5b 65 78 70 72 20 7b 69 6e 74 28 24 70 2f t [expr {int($p/
3610: 31 30 30 2e 30 2a 24 77 69 64 74 68 29 7d 5d 0d 100.0*$width)}].
3620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
3630: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 63 74 dict
3640: 20 73 65 74 20 64 20 69 64 73 20 5f 5f 52 4f 4f set d ids __ROO
3650: 54 20 62 62 6f 78 20 5b 6c 69 73 74 20 30 20 30 T bbox [list 0 0
3660: 20 31 30 30 20 31 30 30 5d 0d 0a 20 20 20 20 20 100 100]..
3670: 20 20 20 20 20 20 20 64 69 63 74 20 73 65 74 20 dict set
3680: 64 20 69 64 73 20 5f 5f 52 4f 4f 54 20 70 72 6f d ids __ROOT pro
3690: 70 73 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 ps ""..
36a0: 20 20 20 64 69 63 74 20 73 65 74 20 64 20 69 64 dict set d id
36b0: 73 20 30 20 62 62 6f 78 20 5b 6c 69 73 74 20 30 s 0 bbox [list 0
36c0: 20 30 20 24 77 69 64 74 68 20 24 68 65 69 67 68 0 $width $heigh
36d0: 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t]..
36e0: 64 69 63 74 20 73 65 74 20 64 20 69 64 73 20 30 dict set d ids 0
36f0: 20 62 62 6f 78 4c 20 5b 64 69 63 74 20 67 65 74 bboxL [dict get
3700: 20 24 64 20 69 64 73 20 30 20 62 62 6f 78 5d 0d $d ids 0 bbox].
3710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 69 63 . dic
3720: 74 20 73 65 74 20 64 20 69 64 73 20 30 20 61 6e t set d ids 0 an
3730: 67 6c 65 20 30 0d 0a 20 20 20 20 20 20 20 20 7d gle 0.. }
3740: 20 65 6c 73 65 69 66 20 7b 20 5b 72 65 67 65 78 elseif { [regex
3750: 70 20 7b 5e 5c 73 2a 5c 2b 61 6c 69 61 73 5c 73 p {^\s*\+alias\s
3760: 2b 28 5c 53 2e 2a 29 7d 20 24 6c 69 6e 65 20 7b +(\S.*)} $line {
3770: 7d 20 63 6f 6e 74 65 6e 74 5d 20 7d 20 7b 0d 0a } content] } {..
3780: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore
3790: 61 63 68 20 22 6c 6f 6e 67 20 73 68 6f 72 74 22 ach "long short"
37a0: 20 5b 70 61 72 73 65 5f 70 72 6f 70 73 20 24 63 [parse_props $c
37b0: 6f 6e 74 65 6e 74 20 30 20 24 6c 69 6e 65 5d 20 ontent 0 $line]
37c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
37d0: 20 20 20 64 69 63 74 20 73 65 74 20 64 20 61 6c dict set d al
37e0: 69 61 73 20 24 73 68 6f 72 74 20 24 6c 6f 6e 67 ias $short $long
37f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
3800: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 . } elsei
3810: 66 20 7b 20 5b 72 65 67 65 78 70 20 7b 5e 5c 73 f { [regexp {^\s
3820: 2a 5c 2b 76 61 72 69 61 62 6c 65 73 5c 73 2b 28 *\+variables\s+(
3830: 5c 53 2e 2a 29 7d 20 24 6c 69 6e 65 20 7b 7d 20 \S.*)} $line {}
3840: 63 6f 6e 74 65 6e 74 5d 20 7d 20 7b 0d 0a 20 20 content] } {..
3850: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac
3860: 68 20 22 61 64 64 20 6e 20 76 22 20 5b 70 61 72 h "add n v" [par
3870: 73 65 5f 70 72 6f 70 73 20 24 63 6f 6e 74 65 6e se_props $conten
3880: 74 20 31 20 24 6c 69 6e 65 5d 20 7b 0d 0a 20 20 t 1 $line] {..
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
38a0: 20 7b 20 24 61 64 64 20 6e 65 20 22 22 20 7d 20 { $add ne "" }
38b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
38c0: 20 20 20 20 20 20 20 73 65 74 20 76 4f 6c 64 20 set vOld
38d0: 5b 64 69 63 74 20 67 65 74 20 24 64 20 76 61 72 [dict get $d var
38e0: 69 61 62 6c 65 73 20 24 6e 5d 0d 0a 20 20 20 20 iables $n]..
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3900: 61 70 70 65 6e 64 20 76 4f 6c 64 20 24 76 0d 0a append vOld $v..
3910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3920: 20 20 20 20 64 69 63 74 20 73 65 74 20 64 20 76 dict set d v
3930: 61 72 69 61 62 6c 65 73 20 24 6e 20 24 76 4f 6c ariables $n $vOl
3940: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 d..
3950: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 5b 64 } elseif { [d
3960: 69 63 74 20 65 78 69 73 74 73 20 24 64 20 76 61 ict exists $d va
3970: 72 69 61 62 6c 65 73 20 24 6e 5d 20 7d 20 7b 0d riables $n] } {.
3980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3990: 20 20 20 20 20 65 72 72 6f 72 20 22 72 65 70 65 error "repe
39a0: 61 74 65 64 20 76 61 72 69 61 62 6c 65 20 27 24 ated variable '$
39b0: 6c 69 6e 65 27 22 0d 0a 20 20 20 20 20 20 20 20 line'"..
39c0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else {
39d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
39e0: 20 20 20 20 20 20 64 69 63 74 20 73 65 74 20 64 dict set d
39f0: 20 76 61 72 69 61 62 6c 65 73 20 24 6e 20 24 76 variables $n $v
3a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3a10: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
3a20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }.. } el
3a30: 73 65 69 66 20 7b 20 5b 72 65 67 65 78 70 20 7b seif { [regexp {
3a40: 5e 5c 73 2a 28 5c 77 5c 53 2a 29 5c 73 2b 28 5c ^\s*(\w\S*)\s+(\
3a50: 77 2b 29 5c 73 2b 28 5c 53 2e 2a 29 7d 20 24 6c w+)\s+(\S.*)} $l
3a60: 69 6e 65 20 7b 7d 20 69 64 20 63 6d 64 20 63 6f ine {} id cmd co
3a70: 6e 74 65 6e 74 5d 20 7d 20 7b 0d 0a 20 20 20 20 ntent] } {..
3a80: 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 64 69 if { [di
3a90: 63 74 20 65 78 69 73 74 73 20 24 64 20 69 64 73 ct exists $d ids
3aa0: 20 24 69 64 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 $id] } {..
3ab0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 5f 65 set_e
3ac0: 72 72 6f 72 20 24 64 20 24 69 64 20 22 72 65 70 rror $d $id "rep
3ad0: 65 61 74 65 64 20 69 64 20 69 6e 20 6c 69 6e 65 eated id in line
3ae0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ".. }
3af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 70 .. ap
3b00: 70 65 6e 64 5f 6c 69 6e 65 20 64 20 24 69 64 20 pend_line d $id
3b10: 24 6c 69 6e 65 20 24 63 6f 6e 74 65 6e 74 0d 0a $line $content..
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 63 74 dict
3b30: 20 73 65 74 20 64 20 69 64 73 20 24 69 64 20 63 set d ids $id c
3b40: 6d 64 20 24 63 6d 64 0d 0a 20 20 20 20 20 20 20 md $cmd..
3b50: 20 20 20 20 20 64 69 63 74 20 73 65 74 20 64 20 dict set d
3b60: 69 64 73 5f 73 68 6f 72 74 20 5b 6c 69 6e 64 65 ids_short [linde
3b70: 78 20 5b 73 70 6c 69 74 20 24 69 64 20 2e 5d 20 x [split $id .]
3b80: 65 6e 64 5d 20 24 69 64 0d 0a 20 20 20 20 20 20 end] $id..
3b90: 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 5b 72 65 } elseif { [re
3ba0: 67 65 78 70 20 7b 5e 5c 73 2a 5c 2e 28 5c 53 2b gexp {^\s*\.(\S+
3bb0: 29 5c 73 2b 28 5c 53 2e 2a 29 7d 20 24 6c 69 6e )\s+(\S.*)} $lin
3bc0: 65 20 7b 7d 20 63 6c 61 73 73 20 63 6f 6e 74 65 e {} class conte
3bd0: 6e 74 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 nt] } {..
3be0: 20 20 20 20 20 64 69 63 74 20 73 65 74 20 64 20 dict set d
3bf0: 63 6c 61 73 73 65 73 20 24 63 6c 61 73 73 20 24 classes $class $
3c00: 63 6f 6e 74 65 6e 74 0d 0a 20 20 20 20 20 20 20 content..
3c10: 20 7d 20 65 6c 73 65 69 66 20 7b 20 21 5b 72 65 } elseif { ![re
3c20: 67 65 78 70 20 7b 5e 5c 73 2a 24 7c 5e 5c 73 2a gexp {^\s*$|^\s*
3c30: 23 7d 20 24 6c 69 6e 65 5d 20 7d 20 7b 0d 0a 20 #} $line] } {..
3c40: 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
3c50: 20 22 75 6e 6b 6e 6f 77 6e 20 6c 69 6e 65 20 27 "unknown line '
3c60: 24 6c 69 6e 65 27 22 0d 0a 20 20 20 20 20 20 20 $line'"..
3c70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 }.. set
3c80: 6c 69 6e 65 20 22 22 0d 0a 20 20 20 20 7d 0d 0a line "".. }..
3c90: 20 20 20 20 0d 0a 23 23 23 23 23 23 23 23 23 23 ..##########
3ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3cb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3ce0: 23 23 23 23 23 23 23 0d 0a 23 20 20 20 20 73 75 #######..# su
3cf0: 62 73 74 69 74 75 74 65 20 61 6c 69 61 73 20 61 bstitute alias a
3d00: 6e 64 20 76 61 72 69 61 62 6c 65 73 0d 0a 23 23 nd variables..##
3d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d ###############.
3d60: 0a 20 20 20 20 0d 0a 20 20 20 20 66 6f 72 65 61 . .. forea
3d70: 63 68 20 69 64 20 5b 64 69 63 74 20 6b 65 79 73 ch id [dict keys
3d80: 20 5b 64 69 63 74 20 67 65 74 20 24 64 20 69 64 [dict get $d id
3d90: 73 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 s]] {.. s
3da0: 65 74 20 70 20 22 22 0d 0a 20 20 20 20 20 20 20 et p ""..
3db0: 20 66 6f 72 65 61 63 68 20 22 6e 20 76 22 20 5b foreach "n v" [
3dc0: 64 69 63 74 20 67 65 74 20 24 64 20 69 64 73 20 dict get $d ids
3dd0: 24 69 64 20 70 72 6f 70 73 5d 20 7b 0d 0a 20 20 $id props] {..
3de0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 20 set n
3df0: 5b 64 69 63 74 5f 67 65 74 64 20 24 64 20 61 6c [dict_getd $d al
3e00: 69 61 73 20 24 6e 20 24 6e 5d 0d 0a 20 20 20 20 ias $n $n]..
3e10: 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 72 65 if { [re
3e20: 67 65 78 70 20 7b 5e 5c 73 2a 3a 28 5c 77 5b 2d gexp {^\s*:(\w[-
3e30: 5c 77 5d 2a 29 7d 20 24 76 20 7b 7d 20 76 61 72 \w]*)} $v {} var
3e40: 69 61 62 6c 65 5d 20 7d 20 7b 0d 0a 20 20 20 20 iable] } {..
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if {
3e60: 20 21 5b 64 69 63 74 20 65 78 69 73 74 73 20 24 ![dict exists $
3e70: 64 20 76 61 72 69 61 62 6c 65 73 20 24 76 61 72 d variables $var
3e80: 69 61 62 6c 65 5d 20 7d 20 7b 0d 0a 20 20 20 20 iable] } {..
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ea0: 73 65 74 5f 65 72 72 6f 72 20 24 64 20 24 69 64 set_error $d $id
3eb0: 20 22 75 6e 6b 6e 6f 77 6e 20 76 61 72 69 61 62 "unknown variab
3ec0: 6c 65 20 27 24 76 61 72 69 61 62 6c 65 27 22 20 le '$variable'"
3ed0: 20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3ee0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
3ef0: 20 20 20 20 20 20 73 65 74 20 76 20 5b 64 69 63 set v [dic
3f00: 74 20 67 65 74 20 24 64 20 76 61 72 69 61 62 6c t get $d variabl
3f10: 65 73 20 24 76 61 72 69 61 62 6c 65 5d 0d 0a 20 es $variable]..
3f20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
3f30: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 20 set v
3f40: 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e [subst -nocomman
3f50: 64 73 20 2d 6e 6f 76 61 72 69 61 62 6c 65 73 20 ds -novariables
3f60: 24 76 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 $v]..
3f70: 20 6c 61 70 70 65 6e 64 20 70 20 24 6e 20 24 76 lappend p $n $v
3f80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
3f90: 20 20 20 20 20 64 69 63 74 20 73 65 74 20 64 20 dict set d
3fa0: 69 64 73 20 24 69 64 20 70 72 6f 70 73 20 24 70 ids $id props $p
3fb0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 0d 0a 23 .. }.. ..#
3fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4010: 0d 0a 23 20 20 20 20 68 65 61 64 65 72 0d 0a 23 ..# header..#
4020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4070: 0d 0a 20 20 20 20 0d 0a 20 20 20 20 69 66 20 7b .. .. if {
4080: 20 21 5b 64 69 63 74 20 65 78 69 73 74 73 20 24 ![dict exists $
4090: 64 20 69 64 73 20 30 5d 20 7d 20 7b 0d 0a 20 20 d ids 0] } {..
40a0: 20 20 20 20 20 20 65 72 72 6f 72 20 22 74 68 65 error "the
40b0: 72 65 20 69 73 20 6e 6f 20 73 76 67 6d 6c 20 68 re is no svgml h
40c0: 65 61 64 65 72 22 0d 0a 20 20 20 20 7d 0d 0a 20 eader".. }..
40d0: 20 20 20 6c 61 73 73 69 67 6e 20 5b 64 69 63 74 lassign [dict
40e0: 20 67 65 74 20 24 64 20 69 64 73 20 30 20 62 62 get $d ids 0 bb
40f0: 6f 78 5d 20 2d 20 2d 20 77 69 64 74 68 20 68 65 ox] - - width he
4100: 69 67 68 74 0d 0a 20 20 20 20 0d 0a 20 20 20 20 ight.. ..
4110: 73 65 74 20 78 6d 6c 48 20 22 3c 3f 78 6d 6c 20 set xmlH "<?xml
4120: 76 65 72 73 69 6f 6e 3d 27 31 2e 30 27 20 65 6e version='1.0' en
4130: 63 6f 64 69 6e 67 3d 27 55 54 46 2d 38 27 20 73 coding='UTF-8' s
4140: 74 61 6e 64 61 6c 6f 6e 65 3d 27 6e 6f 27 3f 3e tandalone='no'?>
4150: 5c 6e 22 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 \n".. append
4160: 78 6d 6c 48 20 22 3c 73 76 67 20 78 6d 6c 6e 73 xmlH "<svg xmlns
4170: 3d 27 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e ='http://www.w3.
4180: 6f 72 67 2f 32 30 30 30 2f 73 76 67 27 20 22 0d org/2000/svg' ".
4190: 0a 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 48 . append xmlH
41a0: 20 22 78 6d 6c 6e 73 3a 78 6c 69 6e 6b 3d 27 68 "xmlns:xlink='h
41b0: 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 ttp://www.w3.org
41c0: 2f 31 39 39 39 2f 78 6c 69 6e 6b 27 20 76 65 72 /1999/xlink' ver
41d0: 73 69 6f 6e 3d 27 31 2e 31 27 20 22 0d 0a 20 20 sion='1.1' "..
41e0: 20 20 61 70 70 65 6e 64 20 78 6d 6c 48 20 22 77 append xmlH "w
41f0: 69 64 74 68 3d 27 24 77 69 64 74 68 27 20 68 65 idth='$width' he
4200: 69 67 68 74 3d 27 24 68 65 69 67 68 74 27 3e 5c ight='$height'>\
4210: 6e 22 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 78 n".. append x
4220: 6d 6c 48 20 22 3c 21 2d 2d 63 72 65 61 74 65 64 mlH "<!--created
4230: 20 77 69 74 68 20 73 76 67 6d 6c 2d 52 61 6d 44 with svgml-RamD
4240: 65 62 75 67 67 65 72 20 3c 68 74 74 70 3a 2f 2f ebugger <http://
4250: 77 77 77 2e 63 6f 6d 70 61 73 73 69 73 2e 63 6f www.compassis.co
4260: 6d 2f 72 61 6d 64 65 62 75 67 67 65 72 3e 2d 2d m/ramdebugger>--
4270: 3e 22 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 78 >".. append x
4280: 6d 6c 48 20 22 3c 64 65 66 73 3e 5c 6e 22 0d 0a mlH "<defs>\n"..
4290: 20 20 20 20 0d 0a 20 20 20 20 73 65 74 20 73 74 .. set st
42a0: 50 20 22 73 74 72 6f 6b 65 3a 23 30 30 30 30 30 P "stroke:#00000
42b0: 30 3b 73 74 72 6f 6b 65 2d 77 69 64 74 68 3a 31 0;stroke-width:1
42c0: 70 74 3b 66 69 6c 6c 3a 23 30 30 30 30 30 30 3b pt;fill:#000000;
42d0: 22 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 78 6d ".. append xm
42e0: 6c 48 20 22 3c 6d 61 72 6b 65 72 20 6f 72 69 65 lH "<marker orie
42f0: 6e 74 3d 27 61 75 74 6f 27 20 72 65 66 59 3d 27 nt='auto' refY='
4300: 30 2e 30 27 20 72 65 66 58 3d 27 2d 34 2e 35 27 0.0' refX='-4.5'
4310: 20 69 64 3d 27 54 72 69 61 6e 67 6c 65 49 6e 4c id='TriangleInL
4320: 27 20 73 74 79 6c 65 3d 27 6f 76 65 72 66 6c 6f ' style='overflo
4330: 77 3a 76 69 73 69 62 6c 65 27 3e 5c 6e 22 0d 0a w:visible'>\n"..
4340: 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 48 20 append xmlH
4350: 22 3c 70 61 74 68 20 64 3d 27 4d 20 34 2e 35 2c "<path d='M 4.5,
4360: 30 2e 30 20 4c 20 2d 32 2e 33 2c 34 2e 30 20 4c 0.0 L -2.3,4.0 L
4370: 20 2d 32 2e 33 2c 2d 34 2e 30 20 4c 20 34 2e 35 -2.3,-4.0 L 4.5
4380: 2c 30 2e 30 20 7a 27 20 22 0d 0a 20 20 20 20 61 ,0.0 z' ".. a
4390: 70 70 65 6e 64 20 78 6d 6c 48 20 22 66 69 6c 6c ppend xmlH "fill
43a0: 3d 27 63 6f 6e 74 65 78 74 2d 73 74 72 6f 6b 65 ='context-stroke
43b0: 27 20 73 74 72 6f 6b 65 3d 27 63 6f 6e 74 65 78 ' stroke='contex
43c0: 74 2d 73 74 72 6f 6b 65 27 20 73 74 79 6c 65 3d t-stroke' style=
43d0: 27 24 73 74 50 27 20 74 72 61 6e 73 66 6f 72 6d '$stP' transform
43e0: 3d 27 73 63 61 6c 65 28 2d 31 2e 30 29 27 2f 3e ='scale(-1.0)'/>
43f0: 5c 6e 22 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 \n".. append
4400: 78 6d 6c 48 20 22 3c 2f 6d 61 72 6b 65 72 3e 5c xmlH "</marker>\
4410: 6e 22 0d 0a 20 20 20 20 0d 0a 20 20 20 20 61 70 n".. .. ap
4420: 70 65 6e 64 20 78 6d 6c 48 20 22 3c 6d 61 72 6b pend xmlH "<mark
4430: 65 72 20 6f 72 69 65 6e 74 3d 27 61 75 74 6f 27 er orient='auto'
4440: 20 72 65 66 59 3d 27 30 2e 30 27 20 72 65 66 58 refY='0.0' refX
4450: 3d 27 34 2e 35 27 20 69 64 3d 27 54 72 69 61 6e ='4.5' id='Trian
4460: 67 6c 65 4f 75 74 4c 27 20 73 74 79 6c 65 3d 27 gleOutL' style='
4470: 6f 76 65 72 66 6c 6f 77 3a 76 69 73 69 62 6c 65 overflow:visible
4480: 27 3e 5c 6e 22 0d 0a 20 20 20 20 61 70 70 65 6e '>\n".. appen
4490: 64 20 78 6d 6c 48 20 22 3c 70 61 74 68 20 64 3d d xmlH "<path d=
44a0: 27 4d 20 34 2e 35 2c 30 2e 30 20 4c 20 2d 32 2e 'M 4.5,0.0 L -2.
44b0: 33 2c 34 2e 30 20 4c 20 2d 32 2e 33 2c 2d 34 2e 3,4.0 L -2.3,-4.
44c0: 30 20 4c 20 34 2e 35 2c 30 2e 30 20 7a 27 20 22 0 L 4.5,0.0 z' "
44d0: 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c .. append xml
44e0: 48 20 22 66 69 6c 6c 3d 27 63 6f 6e 74 65 78 74 H "fill='context
44f0: 2d 73 74 72 6f 6b 65 27 20 73 74 72 6f 6b 65 3d -stroke' stroke=
4500: 27 63 6f 6e 74 65 78 74 2d 73 74 72 6f 6b 65 27 'context-stroke'
4510: 20 73 74 79 6c 65 3d 27 24 73 74 50 27 2f 3e 5c style='$stP'/>\
4520: 6e 22 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 78 n".. append x
4530: 6d 6c 48 20 22 3c 2f 6d 61 72 6b 65 72 3e 5c 6e mlH "</marker>\n
4540: 22 0d 0a 20 20 20 20 0d 0a 20 20 20 20 61 70 70 ".. .. app
4550: 65 6e 64 20 78 6d 6c 48 20 22 3c 6d 61 72 6b 65 end xmlH "<marke
4560: 72 20 6f 72 69 65 6e 74 3d 27 61 75 74 6f 27 20 r orient='auto'
4570: 72 65 66 59 3d 27 30 2e 30 27 20 72 65 66 58 3d refY='0.0' refX=
4580: 27 30 2e 30 27 20 69 64 3d 27 63 69 72 63 6c 65 '0.0' id='circle
4590: 27 20 73 74 79 6c 65 3d 27 6f 76 65 72 66 6c 6f ' style='overflo
45a0: 77 3a 76 69 73 69 62 6c 65 27 3e 5c 6e 22 0d 0a w:visible'>\n"..
45b0: 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 48 20 append xmlH
45c0: 22 3c 63 69 72 63 6c 65 20 63 78 3d 27 30 2e 30 "<circle cx='0.0
45d0: 27 20 63 79 3d 27 30 27 20 72 3d 27 31 2e 35 27 ' cy='0' r='1.5'
45e0: 20 22 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 78 ".. append x
45f0: 6d 6c 48 20 22 66 69 6c 6c 3d 27 63 6f 6e 74 65 mlH "fill='conte
4600: 78 74 2d 73 74 72 6f 6b 65 27 20 73 74 72 6f 6b xt-stroke' strok
4610: 65 3d 27 63 6f 6e 74 65 78 74 2d 73 74 72 6f 6b e='context-strok
4620: 65 27 20 73 74 79 6c 65 3d 27 24 73 74 50 27 2f e' style='$stP'/
4630: 3e 5c 6e 22 0d 0a 20 20 20 20 61 70 70 65 6e 64 >\n".. append
4640: 20 78 6d 6c 48 20 22 3c 2f 6d 61 72 6b 65 72 3e xmlH "</marker>
4650: 5c 6e 22 0d 0a 20 20 20 20 0d 0a 20 20 20 20 61 \n".. .. a
4660: 70 70 65 6e 64 20 78 6d 6c 48 20 22 3c 66 69 6c ppend xmlH "<fil
4670: 74 65 72 20 69 64 3d 27 73 68 61 64 6f 77 27 20 ter id='shadow'
4680: 78 3d 27 2d 32 30 25 27 20 79 3d 27 2d 32 30 25 x='-20%' y='-20%
4690: 27 20 77 69 64 74 68 3d 27 31 34 30 25 27 20 68 ' width='140%' h
46a0: 65 69 67 68 74 3d 27 31 34 30 25 27 3e 22 0d 0a eight='140%'>"..
46b0: 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 48 20 append xmlH
46c0: 22 3c 66 65 47 61 75 73 73 69 61 6e 42 6c 75 72 "<feGaussianBlur
46d0: 20 73 74 64 44 65 76 69 61 74 69 6f 6e 3d 27 32 stdDeviation='2
46e0: 20 32 27 20 72 65 73 75 6c 74 3d 27 73 68 61 64 2' result='shad
46f0: 6f 77 27 2f 3e 22 0d 0a 20 20 20 20 61 70 70 65 ow'/>".. appe
4700: 6e 64 20 78 6d 6c 48 20 22 3c 66 65 4f 66 66 73 nd xmlH "<feOffs
4710: 65 74 20 64 78 3d 27 36 27 20 64 79 3d 27 36 27 et dx='6' dy='6'
4720: 2f 3e 22 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 />".. append
4730: 78 6d 6c 48 20 22 3c 2f 66 69 6c 74 65 72 3e 22 xmlH "</filter>"
4740: 0d 0a 20 20 20 20 0d 0a 20 20 20 20 61 70 70 65 .. .. appe
4750: 6e 64 20 78 6d 6c 48 20 22 3c 66 69 6c 74 65 72 nd xmlH "<filter
4760: 20 69 64 3d 27 67 6c 6f 77 27 20 78 3d 27 2d 33 id='glow' x='-3
4770: 30 25 27 20 79 3d 27 2d 33 30 25 27 20 77 69 64 0%' y='-30%' wid
4780: 74 68 3d 27 31 36 30 25 27 20 68 65 69 67 68 74 th='160%' height
4790: 3d 27 31 36 30 25 27 3e 22 0d 0a 20 20 20 20 61 ='160%'>".. a
47a0: 70 70 65 6e 64 20 78 6d 6c 48 20 22 3c 66 65 47 ppend xmlH "<feG
47b0: 61 75 73 73 69 61 6e 42 6c 75 72 20 73 74 64 44 aussianBlur stdD
47c0: 65 76 69 61 74 69 6f 6e 3d 27 31 30 20 31 30 27 eviation='10 10'
47d0: 20 72 65 73 75 6c 74 3d 27 67 6c 6f 77 27 2f 3e result='glow'/>
47e0: 22 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 78 6d ".. append xm
47f0: 6c 48 20 22 3c 66 65 4d 65 72 67 65 3e 22 0d 0a lH "<feMerge>"..
4800: 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 48 20 append xmlH
4810: 22 3c 66 65 4d 65 72 67 65 4e 6f 64 65 20 69 6e "<feMergeNode in
4820: 3d 27 67 6c 6f 77 27 2f 3e 22 0d 0a 20 20 20 20 ='glow'/>"..
4830: 61 70 70 65 6e 64 20 78 6d 6c 48 20 22 3c 66 65 append xmlH "<fe
4840: 4d 65 72 67 65 4e 6f 64 65 20 69 6e 3d 27 67 6c MergeNode in='gl
4850: 6f 77 27 2f 3e 22 0d 0a 20 20 20 20 61 70 70 65 ow'/>".. appe
4860: 6e 64 20 78 6d 6c 48 20 22 3c 66 65 4d 65 72 67 nd xmlH "<feMerg
4870: 65 4e 6f 64 65 20 69 6e 3d 27 67 6c 6f 77 27 2f eNode in='glow'/
4880: 3e 22 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 78 >".. append x
4890: 6d 6c 48 20 22 3c 2f 66 65 4d 65 72 67 65 3e 22 mlH "</feMerge>"
48a0: 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c .. append xml
48b0: 48 20 22 3c 2f 66 69 6c 74 65 72 3e 22 0d 0a 20 H "</filter>"..
48c0: 20 20 20 0d 0a 20 20 20 20 64 69 63 74 20 66 6f .. dict fo
48d0: 72 20 22 63 6c 61 73 73 20 63 6f 6e 74 65 6e 74 r "class content
48e0: 22 20 5b 64 69 63 74 20 67 65 74 20 24 64 20 63 " [dict get $d c
48f0: 6c 61 73 73 65 73 5d 20 7b 0d 0a 20 20 20 20 20 lasses] {..
4900: 20 20 20 73 65 74 20 63 20 22 22 0d 0a 20 20 20 set c ""..
4910: 20 20 20 20 20 66 6f 72 65 61 63 68 20 63 6f 6e foreach con
4920: 74 65 6e 74 49 20 5b 73 70 6c 69 74 20 24 63 6f tentI [split $co
4930: 6e 74 65 6e 74 20 22 3b 22 5d 20 7b 0d 0a 20 20 ntent ";"] {..
4940: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 if { $
4950: 63 6f 6e 74 65 6e 74 49 20 65 71 20 22 22 20 7d contentI eq "" }
4960: 20 7b 20 63 6f 6e 74 69 6e 75 65 20 7d 0d 0a 20 { continue }..
4970: 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 73 69 lassi
4980: 67 6e 20 5b 73 70 6c 69 74 20 24 63 6f 6e 74 65 gn [split $conte
4990: 6e 74 49 20 3a 5d 20 6e 20 76 0d 0a 20 20 20 20 ntI :] n v..
49a0: 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 6e 20 if { $n
49b0: 65 71 20 22 66 69 6c 6c 22 20 26 26 20 5b 72 65 eq "fill" && [re
49c0: 67 65 78 70 20 7b 72 61 64 69 61 6c 2d 67 72 61 gexp {radial-gra
49d0: 64 69 65 6e 74 5c 28 28 2e 2a 29 5c 29 7d 20 24 dient\((.*)\)} $
49e0: 76 20 7b 7d 20 76 73 5d 20 7d 20 7b 0d 0a 20 20 v {} vs] } {..
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 la
4a00: 73 73 69 67 6e 20 5b 73 70 6c 69 74 20 24 76 73 ssign [split $vs
4a10: 20 2c 5d 20 63 6f 6c 6f 72 31 20 63 6f 6c 6f 72 ,] color1 color
4a20: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2..
4a30: 20 20 20 69 66 20 7b 20 21 5b 69 6e 66 6f 20 65 if { ![info e
4a40: 78 69 73 74 73 20 72 61 64 69 61 6c 5f 67 72 61 xists radial_gra
4a50: 64 69 65 6e 74 5d 20 7d 20 7b 0d 0a 20 20 20 20 dient] } {..
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4a70: 73 65 74 20 72 61 64 69 61 6c 5f 67 72 61 64 69 set radial_gradi
4a80: 65 6e 74 20 31 0d 0a 20 20 20 20 20 20 20 20 20 ent 1..
4a90: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {.
4aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4ab0: 20 20 20 20 20 69 6e 63 72 20 72 61 64 69 61 6c incr radial
4ac0: 5f 67 72 61 64 69 65 6e 74 0d 0a 20 20 20 20 20 _gradient..
4ad0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
4af0: 74 20 69 64 20 72 61 64 69 61 6c 5f 67 72 61 64 t id radial_grad
4b00: 69 65 6e 74 24 72 61 64 69 61 6c 5f 67 72 61 64 ient$radial_grad
4b10: 69 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 ient..
4b20: 20 20 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c append xml
4b30: 48 20 22 3c 72 61 64 69 61 6c 47 72 61 64 69 65 H "<radialGradie
4b40: 6e 74 20 69 64 3d 27 24 69 64 27 20 63 78 3d 27 nt id='$id' cx='
4b50: 35 30 25 27 20 63 79 3d 27 35 30 25 27 20 72 3d 50%' cy='50%' r=
4b60: 27 35 30 25 27 20 66 78 3d 27 35 30 25 27 20 66 '50%' fx='50%' f
4b70: 79 3d 27 35 30 25 27 3e 5c 6e 22 0d 0a 20 20 20 y='50%'>\n"..
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70 70 app
4b90: 65 6e 64 20 78 6d 6c 48 20 22 3c 73 74 6f 70 20 end xmlH "<stop
4ba0: 6f 66 66 73 65 74 3d 27 30 25 27 20 73 74 79 6c offset='0%' styl
4bb0: 65 3d 27 73 74 6f 70 2d 63 6f 6c 6f 72 3a 24 63 e='stop-color:$c
4bc0: 6f 6c 6f 72 31 3b 73 74 6f 70 2d 6f 70 61 63 69 olor1;stop-opaci
4bd0: 74 79 3a 30 27 20 2f 3e 5c 6e 22 0d 0a 20 20 20 ty:0' />\n"..
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70 70 app
4bf0: 65 6e 64 20 78 6d 6c 48 20 22 3c 73 74 6f 70 20 end xmlH "<stop
4c00: 6f 66 66 73 65 74 3d 27 31 30 30 25 27 20 73 74 offset='100%' st
4c10: 79 6c 65 3d 27 73 74 6f 70 2d 63 6f 6c 6f 72 3a yle='stop-color:
4c20: 24 63 6f 6c 6f 72 32 3b 73 74 6f 70 2d 6f 70 61 $color2;stop-opa
4c30: 63 69 74 79 3a 31 27 20 2f 3e 5c 6e 22 0d 0a 20 city:1' />\n"..
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
4c50: 70 70 65 6e 64 20 78 6d 6c 48 20 22 3c 2f 72 61 ppend xmlH "</ra
4c60: 64 69 61 6c 47 72 61 64 69 65 6e 74 3e 5c 6e 22 dialGradient>\n"
4c70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
4c80: 20 20 73 65 74 20 76 20 22 75 72 6c 28 23 24 69 set v "url(#$i
4c90: 64 29 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 d)"..
4ca0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
4cb0: 61 70 70 65 6e 64 20 63 20 22 24 6e 3a 24 76 3b append c "$n:$v;
4cc0: 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ".. }..
4cd0: 20 20 20 20 20 20 64 69 63 74 20 73 65 74 20 64 dict set d
4ce0: 20 63 6c 61 73 73 65 73 20 24 63 6c 61 73 73 20 classes $class
4cf0: 24 63 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 0d $c.. }.. .
4d00: 0a 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 48 . append xmlH
4d10: 20 22 3c 2f 64 65 66 73 3e 5c 6e 22 0d 0a 20 20 "</defs>\n"..
4d20: 20 20 20 20 20 20 0d 0a 23 23 23 23 23 23 23 23 ..########
4d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4d70: 23 23 23 23 23 23 23 23 23 0d 0a 23 20 20 20 20 #########..#
4d80: 6c 6f 6f 70 20 6f 6e 20 65 6e 74 69 74 69 65 73 loop on entities
4d90: 2e 20 54 68 65 20 74 72 69 65 73 20 61 72 65 20 . The tries are
4da0: 68 65 72 65 20 74 6f 20 73 6f 6c 76 65 20 64 65 here to solve de
4db0: 70 65 6e 64 65 6e 63 69 65 73 20 6f 66 20 64 65 pendencies of de
4dc0: 70 65 6e 64 65 6e 63 69 65 73 0d 0a 23 23 23 23 pendencies..####
4dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
4e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 #############..
4e20: 20 20 20 0d 0a 20 20 20 20 66 6f 72 20 7b 20 73 .. for { s
4e30: 65 74 20 69 5f 74 72 79 20 30 20 7d 20 7b 20 24 et i_try 0 } { $
4e40: 69 5f 74 72 79 20 3c 20 31 30 20 7d 20 7b 20 69 i_try < 10 } { i
4e50: 6e 63 72 20 69 5f 74 72 79 20 7d 20 7b 0d 0a 20 ncr i_try } {..
4e60: 20 20 20 20 20 20 20 73 65 74 20 78 6d 6c 20 24 set xml $
4e70: 78 6d 6c 48 0d 0a 20 20 20 20 20 20 20 20 64 69 xmlH.. di
4e80: 63 74 20 73 65 74 20 64 20 6e 65 65 64 73 5f 72 ct set d needs_r
4e90: 65 63 61 6c 63 75 6c 61 74 65 20 30 0d 0a 20 20 ecalculate 0..
4ea0: 20 20 20 20 20 20 64 69 63 74 20 66 6f 72 20 22 dict for "
4eb0: 69 64 20 65 6e 74 22 20 5b 64 69 63 74 20 67 65 id ent" [dict ge
4ec0: 74 20 24 64 20 69 64 73 5d 20 7b 0d 0a 20 20 20 t $d ids] {..
4ed0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 69 if { $i
4ee0: 64 20 69 6e 20 22 30 20 5f 5f 52 4f 4f 54 22 20 d in "0 __ROOT"
4ef0: 7d 20 7b 20 63 6f 6e 74 69 6e 75 65 20 7d 0d 0a } { continue }..
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 31 if 1
4f10: 20 7b 20 70 75 74 73 20 22 24 69 5f 74 72 79 20 { puts "$i_try
4f20: 20 20 5b 64 69 63 74 20 67 65 74 20 24 65 6e 74 [dict get $ent
4f30: 20 6c 69 6e 65 5d 22 20 7d 0d 0a 20 20 20 20 20 line]" }..
4f40: 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 ..
4f50: 20 20 20 20 20 73 65 74 20 72 65 74 20 5b 63 61 set ret [ca
4f60: 74 63 68 20 7b 20 63 72 65 61 74 65 5f 65 6e 74 tch { create_ent
4f70: 69 74 79 20 24 69 64 20 22 22 20 7d 20 73 74 72 ity $id "" } str
4f80: 20 6f 70 74 73 5d 0d 0a 20 20 20 20 20 20 20 20 opts]..
4f90: 20 20 20 20 69 66 20 7b 20 24 72 65 74 20 21 3d if { $ret !=
4fa0: 20 30 20 26 26 20 24 72 65 74 20 21 3d 20 34 20 0 && $ret != 4
4fb0: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
4fc0: 20 20 20 20 20 65 72 72 6f 72 20 24 73 74 72 20 error $str
4fd0: 5b 64 69 63 74 20 67 65 74 20 24 6f 70 74 73 20 [dict get $opts
4fe0: 2d 65 72 72 6f 72 69 6e 66 6f 5d 0d 0a 20 20 20 -errorinfo]..
4ff0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 } elsei
5000: 66 20 7b 20 24 72 65 74 20 3d 3d 20 34 20 7d 20 f { $ret == 4 }
5010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
5020: 20 20 20 64 69 63 74 20 73 65 74 20 64 20 6e 65 dict set d ne
5030: 65 64 73 5f 72 65 63 61 6c 63 75 6c 61 74 65 20 eds_recalculate
5040: 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 1.. }
5050: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
5060: 20 20 20 20 20 69 66 20 7b 20 21 5b 64 69 63 74 if { ![dict
5070: 20 67 65 74 20 24 64 20 6e 65 65 64 73 5f 72 65 get $d needs_re
5080: 63 61 6c 63 75 6c 61 74 65 5d 20 7d 20 7b 0d 0a calculate] } {..
5090: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 brea
50a0: 6b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 k.. }..
50b0: 20 20 7d 0d 0a 20 20 20 20 61 70 70 65 6e 64 20 }.. append
50c0: 78 6d 6c 20 22 3c 2f 73 76 67 3e 5c 6e 22 0d 0a xml "</svg>\n"..
50d0: 20 20 20 20 72 65 74 75 72 6e 20 24 78 6d 6c 0d return $xml.
50e0: 0a 7d 0d 0a 0d 0a 70 72 6f 63 20 73 76 67 6d 6c .}....proc svgml
50f0: 3a 3a 72 65 73 6f 6c 76 65 5f 69 64 20 7b 20 69 ::resolve_id { i
5100: 64 20 69 64 5f 66 72 6f 6d 20 7d 20 7b 0d 0a 20 d id_from } {..
5110: 20 20 20 76 61 72 69 61 62 6c 65 20 64 0d 0a 20 variable d..
5120: 20 20 20 0d 0a 20 20 20 20 69 66 20 7b 20 24 69 .. if { $i
5130: 64 20 65 71 20 22 22 20 7d 20 7b 20 72 65 74 75 d eq "" } { retu
5140: 72 6e 20 30 20 7d 0d 0a 20 20 20 20 0d 0a 20 20 rn 0 }.. ..
5150: 20 20 69 66 20 7b 20 21 5b 64 69 63 74 20 65 78 if { ![dict ex
5160: 69 73 74 73 20 24 64 20 69 64 73 20 24 69 64 5d ists $d ids $id]
5170: 20 26 26 20 5b 64 69 63 74 20 65 78 69 73 74 73 && [dict exists
5180: 20 24 64 20 69 64 73 5f 73 68 6f 72 74 20 24 69 $d ids_short $i
5190: 64 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 d] } {..
51a0: 73 65 74 20 69 64 20 5b 64 69 63 74 20 67 65 74 set id [dict get
51b0: 20 24 64 20 69 64 73 5f 73 68 6f 72 74 20 24 69 $d ids_short $i
51c0: 64 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 69 d].. }.. i
51d0: 66 20 7b 20 21 5b 64 69 63 74 20 65 78 69 73 74 f { ![dict exist
51e0: 73 20 24 64 20 69 64 73 20 24 69 64 5d 20 7d 20 s $d ids $id] }
51f0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 5f 65 {.. set_e
5200: 72 72 6f 72 20 24 64 20 24 69 64 5f 66 72 6f 6d rror $d $id_from
5210: 20 22 75 6e 6b 6e 6f 77 6e 20 69 64 20 23 24 69 "unknown id #$i
5220: 64 22 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 72 d".. }.. r
5230: 65 74 75 72 6e 20 24 69 64 0d 0a 7d 0d 0a 0d 0a eturn $id..}....
5240: 70 72 6f 63 20 73 76 67 6d 6c 3a 3a 63 61 6c 63 proc svgml::calc
5250: 75 6c 61 74 65 5f 70 61 72 65 6e 74 20 7b 20 69 ulate_parent { i
5260: 64 20 7d 20 7b 0d 0a 20 20 20 20 76 61 72 69 61 d } {.. varia
5270: 62 6c 65 20 64 0d 0a 20 20 20 20 0d 0a 20 20 20 ble d.. ..
5280: 20 73 65 74 20 70 61 72 65 6e 74 20 5b 6a 6f 69 set parent [joi
5290: 6e 20 5b 6c 72 61 6e 67 65 20 5b 73 70 6c 69 74 n [lrange [split
52a0: 20 24 69 64 20 2e 5d 20 30 20 65 6e 64 2d 31 5d $id .] 0 end-1]
52b0: 20 22 2e 22 5d 0d 0a 20 20 20 20 72 65 74 75 72 "."].. retur
52c0: 6e 20 5b 72 65 73 6f 6c 76 65 5f 69 64 20 24 70 n [resolve_id $p
52d0: 61 72 65 6e 74 20 24 69 64 5d 0d 0a 7d 0d 0a 70 arent $id]..}..p
52e0: 72 6f 63 20 73 76 67 6d 6c 3a 3a 63 6f 70 79 5f roc svgml::copy_
52f0: 6f 70 65 72 61 74 69 6f 6e 20 7b 20 69 64 20 70 operation { id p
5300: 6e 74 20 6e 70 6f 69 6e 74 20 63 6f 70 79 5f 69 nt npoint copy_i
5310: 6e 66 6f 20 7d 20 7b 0d 0a 20 20 20 20 76 61 72 nfo } {.. var
5320: 69 61 62 6c 65 20 64 0d 0a 0d 0a 20 20 20 20 73 iable d.... s
5330: 65 74 20 63 6d 64 20 5b 64 69 63 74 20 67 65 74 et cmd [dict get
5340: 20 24 64 20 69 64 73 20 24 69 64 20 63 6d 64 5d $d ids $id cmd]
5350: 0d 0a 20 20 20 20 73 65 74 20 63 20 5b 64 69 63 .. set c [dic
5360: 74 5f 67 65 74 64 20 24 63 6f 70 79 5f 69 6e 66 t_getd $copy_inf
5370: 6f 20 6f 70 65 72 61 74 69 6f 6e 73 20 22 22 5d o operations ""]
5380: 0d 0a 20 20 20 20 0d 0a 20 20 20 20 6c 61 73 73 .. .. lass
5390: 69 67 6e 20 24 70 6e 74 20 6e 20 78 20 79 20 7a ign $pnt n x y z
53a0: 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 parameters..
53b0: 20 73 65 74 20 70 20 5b 6c 69 73 74 20 24 78 20 set p [list $x
53c0: 24 79 5d 0d 0a 20 20 20 20 73 65 74 20 70 5f 70 $y].. set p_p
53d0: 72 65 76 20 24 70 0d 0a 20 20 20 20 0d 0a 20 20 rev $p.. ..
53e0: 20 20 69 66 20 7b 20 24 6e 20 6e 69 20 22 7a 20 if { $n ni "z
53f0: 5a 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 Z" } {..
5400: 66 6f 72 20 7b 20 73 65 74 20 69 20 30 20 7d 20 for { set i 0 }
5410: 7b 20 24 69 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 { $i < [llength
5420: 24 63 5d 20 7d 20 7b 20 69 6e 63 72 20 69 20 7d $c] } { incr i }
5430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
5440: 73 65 74 20 63 49 20 5b 6c 69 6e 64 65 78 20 24 set cI [lindex $
5450: 63 20 24 69 5d 0d 0a 20 20 20 20 20 20 20 20 20 c $i]..
5460: 20 20 20 69 66 20 7b 20 5b 64 69 63 74 20 73 69 if { [dict si
5470: 7a 65 20 5b 64 69 63 74 20 67 65 74 20 24 63 49 ze [dict get $cI
5480: 20 64 65 6c 74 61 5f 70 6f 69 6e 74 73 5d 5d 20 delta_points]]
5490: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
54a0: 20 20 20 20 20 73 65 74 20 64 69 73 74 5f 6d 61 set dist_ma
54b0: 78 20 30 2e 30 0d 0a 20 20 20 20 20 20 20 20 20 x 0.0..
54c0: 20 20 20 20 20 20 20 73 65 74 20 64 65 6c 74 61 set delta
54d0: 73 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 s ""..
54e0: 20 20 20 20 20 20 64 69 63 74 20 66 6f 72 20 22 dict for "
54f0: 70 4c 20 76 4c 22 20 5b 64 69 63 74 20 67 65 74 pL vL" [dict get
5500: 20 24 63 49 20 64 65 6c 74 61 5f 70 6f 69 6e 74 $cI delta_point
5510: 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 s] {..
5520: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 set di
5530: 73 74 20 5b 6d 3a 3a 6e 6f 72 6d 5f 74 77 6f 20 st [m::norm_two
5540: 5b 6d 3a 3a 73 75 62 20 24 70 20 24 70 4c 5d 5d [m::sub $p $pL]]
5550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5560: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 64 65 lappend de
5570: 6c 74 61 73 20 24 64 69 73 74 20 24 76 4c 0d 0a ltas $dist $vL..
5580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5590: 20 20 20 20 69 66 20 7b 20 24 64 69 73 74 20 3e if { $dist >
55a0: 20 24 64 69 73 74 5f 6d 61 78 20 7d 20 7b 0d 0a $dist_max } {..
55b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
55c0: 20 20 20 20 20 20 20 20 73 65 74 20 64 69 73 74 set dist
55d0: 5f 6d 61 78 20 24 64 69 73 74 0d 0a 20 20 20 20 _max $dist..
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
55f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
5600: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
5610: 20 20 20 20 20 20 73 65 74 20 64 65 6c 74 61 20 set delta
5620: 22 30 20 30 22 0d 0a 20 20 20 20 20 20 20 20 20 "0 0"..
5630: 20 20 20 20 20 20 20 73 65 74 20 66 61 63 5f 74 set fac_t
5640: 6f 74 20 30 2e 30 0d 0a 20 20 20 20 20 20 20 20 ot 0.0..
5650: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach
5660: 22 64 69 73 74 20 76 22 20 24 64 65 6c 74 61 73 "dist v" $deltas
5670: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
5680: 20 20 20 20 20 20 20 20 73 65 74 20 66 61 63 20 set fac
5690: 5b 65 78 70 72 20 7b 28 24 64 69 73 74 5f 6d 61 [expr {($dist_ma
56a0: 78 2d 24 64 69 73 74 29 2a 2a 33 7d 5d 0d 0a 20 x-$dist)**3}]..
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
56c0: 20 20 20 73 65 74 20 64 65 6c 74 61 20 5b 6d 3a set delta [m:
56d0: 3a 61 78 70 79 20 24 66 61 63 20 24 76 20 24 64 :axpy $fac $v $d
56e0: 65 6c 74 61 5d 0d 0a 20 20 20 20 20 20 20 20 20 elta]..
56f0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66 set f
5700: 61 63 5f 74 6f 74 20 5b 65 78 70 72 20 7b 24 66 ac_tot [expr {$f
5710: 61 63 5f 74 6f 74 2b 24 66 61 63 7d 5d 20 20 20 ac_tot+$fac}]
5720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5730: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
5740: 20 20 20 20 20 69 66 20 7b 20 24 66 61 63 5f 74 if { $fac_t
5750: 6f 74 20 21 3d 20 30 20 7d 20 7b 0d 0a 20 20 20 ot != 0 } {..
5760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5770: 20 73 65 74 20 64 65 6c 74 61 20 5b 6d 3a 3a 73 set delta [m::s
5780: 63 61 6c 65 20 5b 65 78 70 72 20 7b 31 2e 30 2f cale [expr {1.0/
5790: 24 66 61 63 5f 74 6f 74 7d 5d 20 24 64 65 6c 74 $fac_tot}] $delt
57a0: 61 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 a]..
57b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
57c0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {..
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
57e0: 20 64 65 6c 74 61 20 5b 64 69 63 74 20 67 65 74 delta [dict get
57f0: 20 24 63 49 20 64 65 6c 74 61 5d 0d 0a 20 20 20 $cI delta]..
5800: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
5810: 20 20 20 20 20 20 20 20 73 65 74 20 70 20 5b 6d set p [m
5820: 3a 3a 61 64 64 20 24 70 20 24 64 65 6c 74 61 5d ::add $p $delta]
5830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
5840: 20 7b 20 24 69 20 3c 20 5b 6c 6c 65 6e 67 74 68 { $i < [llength
5850: 20 24 63 5d 2d 31 20 7d 20 7b 0d 0a 20 20 20 20 $c]-1 } {..
5860: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
5870: 70 5f 70 72 65 76 20 5b 6d 3a 3a 61 64 64 20 24 p_prev [m::add $
5880: 70 5f 70 72 65 76 20 24 64 65 6c 74 61 5d 20 20 p_prev $delta]
5890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
58a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }..
58b0: 7d 0d 0a 20 20 20 20 0d 0a 20 20 20 20 69 66 20 }.. .. if
58c0: 7b 20 5b 64 69 63 74 20 67 65 74 20 24 63 6f 70 { [dict get $cop
58d0: 79 5f 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 5d 20 y_info connect]
58e0: 6e 65 20 22 22 20 26 26 20 24 63 6d 64 20 6e 65 ne "" && $cmd ne
58f0: 20 22 63 6f 70 79 22 20 7d 20 7b 0d 0a 20 20 20 "copy" } {..
5900: 20 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c regsub -all
5910: 20 7b 5c 2e 7d 20 20 5b 64 69 63 74 20 67 65 74 {\.} [dict get
5920: 20 24 63 6f 70 79 5f 69 6e 66 6f 20 69 64 5d 20 $copy_info id]
5930: 5f 20 69 64 46 0d 0a 20 20 20 20 20 20 20 20 73 _ idF.. s
5940: 65 74 20 69 64 43 20 5f 5f 63 6f 70 79 5f 24 7b et idC __copy_${
5950: 69 64 46 7d 5f 24 7b 6e 70 6f 69 6e 74 7d 5f 5b idF}_${npoint}_[
5960: 6c 6c 65 6e 67 74 68 20 24 63 5d 0d 0a 0d 0a 20 llength $c]....
5970: 20 20 20 20 20 20 20 73 65 74 20 70 4c 69 73 74 set pList
5980: 20 22 22 0d 0a 20 20 20 20 20 20 20 20 69 66 20 "".. if
5990: 7b 20 5b 64 69 63 74 20 67 65 74 20 24 63 6f 70 { [dict get $cop
59a0: 79 5f 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 5d 20 y_info connect]
59b0: 65 71 20 22 70 6f 69 6e 74 73 22 20 7d 20 7b 0d eq "points" } {.
59c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
59d0: 7b 20 24 6e 20 69 6e 20 22 70 6f 69 6e 74 20 4d { $n in "point M
59e0: 20 4c 20 6c 20 41 20 61 22 20 7d 20 7b 0d 0a 20 L l A a" } {..
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
5a00: 65 74 20 70 4c 69 73 74 20 22 70 6f 69 6e 74 3a et pList "point:
5a10: 23 5f 5f 52 4f 4f 54 2c 5b 6a 6f 69 6e 20 24 70 #__ROOT,[join $p
5a20: 5f 70 72 65 76 20 2c 5d 2c 23 5f 5f 52 4f 4f 54 _prev ,],#__ROOT
5a30: 2c 5b 6a 6f 69 6e 20 24 70 20 2c 5d 3b 22 0d 0a ,[join $p ,];"..
5a40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
5a50: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 } elseif
5a60: 7b 20 5b 64 69 63 74 20 67 65 74 20 24 63 6f 70 { [dict get $cop
5a70: 79 5f 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 5d 20 y_info connect]
5a80: 65 71 20 22 6c 69 6e 65 73 22 20 7d 20 7b 0d 0a eq "lines" } {..
5a90: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
5aa0: 6f 6b 20 22 70 6f 69 6e 74 20 4d 20 4c 20 6c 20 ok "point M L l
5ab0: 41 20 61 20 7a 20 5a 22 0d 0a 20 20 20 20 20 20 A a z Z"..
5ac0: 20 20 20 20 20 20 69 66 20 7b 20 24 6e 20 69 6e if { $n in
5ad0: 20 24 6f 6b 20 26 26 20 5b 64 69 63 74 20 65 78 $ok && [dict ex
5ae0: 69 73 74 73 20 24 64 20 70 72 65 76 5f 63 6f 70 ists $d prev_cop
5af0: 79 5f 69 6e 66 6f 20 24 69 64 46 5d 20 26 26 20 y_info $idF] &&
5b00: 24 6e 70 6f 69 6e 74 20 3e 20 30 20 7d 20 7b 0d $npoint > 0 } {.
5b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5b20: 20 73 65 74 20 63 20 5b 64 69 63 74 5f 67 65 74 set c [dict_get
5b30: 64 20 24 64 20 70 72 65 76 5f 63 6f 70 79 5f 69 d $d prev_copy_i
5b40: 6e 66 6f 20 24 69 64 46 20 22 22 5d 0d 0a 20 20 nfo $idF ""]..
5b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
5b60: 20 7b 20 24 6e 20 69 6e 20 22 70 6f 69 6e 74 20 { $n in "point
5b70: 4d 20 4c 20 6c 20 41 20 61 22 20 7d 20 7b 0d 0a M L l A a" } {..
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5b90: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 20 5b 6c lappend c [l
5ba0: 69 73 74 20 24 6e 20 24 70 5f 70 72 65 76 20 24 ist $n $p_prev $
5bb0: 70 20 24 70 6e 74 5d 0d 0a 20 20 20 20 20 20 20 p $pnt]..
5bc0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else
5bd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
5be0: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 lappend c
5bf0: 20 5b 64 69 63 74 20 67 65 74 20 24 64 20 70 72 [dict get $d pr
5c00: 65 76 5f 63 6f 70 79 5f 69 6e 66 6f 30 20 24 69 ev_copy_info0 $i
5c10: 64 46 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 dF]..
5c20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
5c30: 20 20 20 20 20 20 20 20 73 65 74 20 70 4c 69 73 set pLis
5c40: 74 20 22 70 6f 69 6e 74 3a 22 0d 0a 20 20 20 20 t "point:"..
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
5c60: 69 64 78 20 30 0d 0a 20 20 20 20 20 20 20 20 20 idx 0..
5c70: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 foreach i
5c80: 20 24 63 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 $c {..
5c90: 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 73 69 lassi
5ca0: 67 6e 20 24 69 20 6e 4c 20 70 5f 70 72 65 76 4c gn $i nL p_prevL
5cb0: 20 70 4c 20 70 6e 74 4c 0d 0a 20 20 20 20 20 20 pL pntL..
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
5cd0: 20 7b 20 24 69 64 78 20 3d 3d 20 30 20 7c 7c 20 { $idx == 0 ||
5ce0: 24 6e 4c 20 69 6e 20 22 70 6f 69 6e 74 20 4d 22 $nL in "point M"
5cf0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
5d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70 ap
5d10: 70 65 6e 64 20 70 4c 69 73 74 20 23 5f 5f 52 4f pend pList #__RO
5d20: 4f 54 2c 5b 6a 6f 69 6e 20 24 70 5f 70 72 65 76 OT,[join $p_prev
5d30: 4c 20 2c 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 L ,],..
5d40: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els
5d50: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {..
5d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70 70 app
5d70: 65 6e 64 20 70 4c 69 73 74 20 22 23 5f 5f 52 4f end pList "#__RO
5d80: 4f 54 2c 24 6e 4c 2c 22 0d 0a 20 20 20 20 20 20 OT,$nL,"..
5d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5da0: 20 20 69 66 20 7b 20 5b 6c 69 6e 64 65 78 20 24 if { [lindex $
5db0: 70 6e 74 4c 20 34 5d 20 6e 65 20 22 22 20 7d 20 pntL 4] ne "" }
5dc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
5dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
5de0: 70 70 65 6e 64 20 70 4c 69 73 74 20 22 5b 6a 6f ppend pList "[jo
5df0: 69 6e 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 4c in [lindex $pntL
5e00: 20 34 5d 20 2c 5d 2c 22 0d 0a 20 20 20 20 20 20 4] ,],"..
5e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5e20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70 70 app
5e40: 65 6e 64 20 70 4c 69 73 74 20 22 5b 6a 6f 69 6e end pList "[join
5e50: 20 24 70 5f 70 72 65 76 4c 20 2c 5d 2c 22 0d 0a $p_prevL ,],"..
5e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5e70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
5e80: 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 incr
5e90: 69 64 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 idx..
5ea0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
5eb0: 20 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e 20 lassign
5ec0: 22 22 20 6e 4c 5f 70 72 65 76 20 70 6e 74 5f 70 "" nL_prev pnt_p
5ed0: 72 65 76 4c 0d 0a 20 20 20 20 20 20 20 20 20 20 revL..
5ee0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 foreach i
5ef0: 5b 6c 72 65 76 65 72 73 65 20 24 63 5d 20 7b 0d [lreverse $c] {.
5f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5f10: 20 20 20 20 20 6c 61 73 73 69 67 6e 20 24 69 20 lassign $i
5f20: 6e 4c 20 70 5f 70 72 65 76 4c 20 70 4c 20 70 6e nL p_prevL pL pn
5f30: 74 4c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 tL..
5f40: 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 69 64 if { $id
5f50: 78 20 3d 3d 20 30 20 7c 7c 20 24 6e 4c 20 69 6e x == 0 || $nL in
5f60: 20 22 70 6f 69 6e 74 20 4d 22 20 7d 20 7b 0d 0a "point M" } {..
5f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5f80: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 70 append p
5f90: 4c 69 73 74 20 23 5f 5f 52 4f 4f 54 2c 5b 6a 6f List #__ROOT,[jo
5fa0: 69 6e 20 24 70 4c 20 2c 5d 2c 0d 0a 20 20 20 20 in $pL ,],..
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5fc0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {..
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5fe0: 20 20 61 70 70 65 6e 64 20 70 4c 69 73 74 20 22 append pList "
5ff0: 23 5f 5f 52 4f 4f 54 2c 24 6e 4c 2c 22 0d 0a 20 #__ROOT,$nL,"..
6000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6010: 20 20 20 20 20 20 20 69 66 20 7b 20 5b 6c 69 6e if { [lin
6020: 64 65 78 20 24 70 6e 74 5f 70 72 65 76 4c 20 34 dex $pnt_prevL 4
6030: 5d 20 6e 65 20 22 22 20 7d 20 7b 0d 0a 20 20 20 ] ne "" } {..
6040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6050: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 72 set par
6060: 61 6d 73 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 ams [lindex $pnt
6070: 5f 70 72 65 76 4c 20 34 5d 0d 0a 20 20 20 20 20 _prevL 4]..
6080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6090: 20 20 20 20 20 20 20 6c 73 65 74 20 70 61 72 61 lset para
60a0: 6d 73 20 33 20 5b 65 78 70 72 20 7b 28 5b 6c 69 ms 3 [expr {([li
60b0: 6e 64 65 78 20 24 70 61 72 61 6d 73 20 33 5d 29 ndex $params 3])
60c0: 3f 30 3a 31 7d 5d 0d 0a 20 20 20 20 20 20 20 20 ?0:1}]..
60d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
60e0: 20 20 20 20 61 70 70 65 6e 64 20 70 4c 69 73 74 append pList
60f0: 20 22 5b 6a 6f 69 6e 20 24 70 61 72 61 6d 73 20 "[join $params
6100: 2c 5d 2c 22 0d 0a 20 20 20 20 20 20 20 20 20 20 ,],"..
6110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
6120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6130: 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 append
6140: 70 4c 69 73 74 20 22 5b 6a 6f 69 6e 20 24 70 4c pList "[join $pL
6150: 20 2c 5d 2c 22 0d 0a 20 20 20 20 20 20 20 20 20 ,],"..
6160: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
6170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6180: 20 20 73 65 74 20 6e 4c 5f 70 72 65 76 20 24 6e set nL_prev $n
6190: 4c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 L..
61a0: 20 20 20 20 20 20 20 73 65 74 20 70 6e 74 5f 70 set pnt_p
61b0: 72 65 76 4c 20 24 70 6e 74 4c 0d 0a 20 20 20 20 revL $pntL..
61c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
61d0: 69 6e 63 72 20 69 64 78 0d 0a 20 20 20 20 20 20 incr idx..
61e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
61f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70 70 app
6200: 65 6e 64 20 70 4c 69 73 74 20 22 7a 3b 22 0d 0a end pList "z;"..
6210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6220: 73 65 74 20 63 20 5b 6c 72 61 6e 67 65 20 24 63 set c [lrange $c
6230: 20 65 6e 64 20 65 6e 64 5d 0d 0a 20 20 20 20 20 end end]..
6240: 20 20 20 20 20 20 20 20 20 20 20 64 69 63 74 20 dict
6250: 73 65 74 20 64 20 70 72 65 76 5f 63 6f 70 79 5f set d prev_copy_
6260: 69 6e 66 6f 20 24 69 64 46 20 24 63 0d 0a 20 20 info $idF $c..
6270: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
6280: 69 66 20 7b 20 24 6e 20 6e 69 20 22 7a 20 5a 22 if { $n ni "z Z"
6290: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
62a0: 20 20 20 20 20 20 69 66 20 7b 20 24 6e 70 6f 69 if { $npoi
62b0: 6e 74 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 20 20 nt == 0 } {..
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
62d0: 20 64 69 63 74 20 73 65 74 20 64 20 70 72 65 76 dict set d prev
62e0: 5f 63 6f 70 79 5f 69 6e 66 6f 30 20 24 69 64 46 _copy_info0 $idF
62f0: 20 5b 6c 69 73 74 20 24 6e 20 24 70 5f 70 72 65 [list $n $p_pre
6300: 76 20 24 70 20 24 70 6e 74 5d 0d 0a 20 20 20 20 v $p $pnt]..
6310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6320: 73 65 74 20 63 20 22 22 0d 0a 20 20 20 20 20 20 set c ""..
6330: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
6340: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
6350: 20 20 20 20 20 20 20 20 73 65 74 20 63 20 5b 64 set c [d
6360: 69 63 74 5f 67 65 74 64 20 24 64 20 70 72 65 76 ict_getd $d prev
6370: 5f 63 6f 70 79 5f 69 6e 66 6f 20 24 69 64 46 20 _copy_info $idF
6380: 22 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ""]..
6390: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
63a0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend
63b0: 63 20 5b 6c 69 73 74 20 24 6e 20 24 70 5f 70 72 c [list $n $p_pr
63c0: 65 76 20 24 70 20 24 70 6e 74 5d 0d 0a 20 20 20 ev $p $pnt]..
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 63 dic
63e0: 74 20 73 65 74 20 64 20 70 72 65 76 5f 63 6f 70 t set d prev_cop
63f0: 79 5f 69 6e 66 6f 20 24 69 64 46 20 24 63 0d 0a y_info $idF $c..
6400: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
6410: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
6420: 20 20 69 66 20 7b 20 24 70 4c 69 73 74 20 6e 65 if { $pList ne
6430: 20 22 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 "" } {..
6440: 20 20 20 20 20 73 65 74 20 63 6f 6e 74 65 6e 74 set content
6450: 20 22 24 70 4c 69 73 74 22 0d 0a 20 20 20 20 20 "$pList"..
6460: 20 20 20 20 20 20 20 69 66 20 7b 20 5b 64 69 63 if { [dic
6470: 74 20 67 65 74 20 24 63 6f 70 79 5f 69 6e 66 6f t get $copy_info
6480: 20 73 74 79 6c 65 5f 6e 61 6d 65 5d 20 6e 65 20 style_name] ne
6490: 22 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 "" } {..
64a0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 append c
64b0: 6f 6e 74 65 6e 74 20 22 20 63 6c 61 73 73 3a 5b ontent " class:[
64c0: 64 69 63 74 20 67 65 74 20 24 63 6f 70 79 5f 69 dict get $copy_i
64d0: 6e 66 6f 20 73 74 79 6c 65 5f 6e 61 6d 65 5d 3b nfo style_name];
64e0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ".. }
64f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se
6500: 74 20 6c 69 6e 65 20 22 24 69 64 43 20 6c 69 6e t line "$idC lin
6510: 65 20 24 63 6f 6e 74 65 6e 74 22 0d 0a 20 20 20 e $content"..
6520: 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 21 5b if { ![
6530: 64 69 63 74 20 65 78 69 73 74 73 20 24 64 20 69 dict exists $d i
6540: 64 73 20 24 69 64 43 5d 20 7d 20 7b 0d 0a 20 20 ds $idC] } {..
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70 ap
6560: 70 65 6e 64 5f 6c 69 6e 65 20 64 20 24 69 64 43 pend_line d $idC
6570: 20 24 6c 69 6e 65 20 24 63 6f 6e 74 65 6e 74 0d $line $content.
6580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6590: 20 64 69 63 74 20 73 65 74 20 64 20 69 64 73 20 dict set d ids
65a0: 24 69 64 43 20 63 6d 64 20 6c 69 6e 65 0d 0a 20 $idC cmd line..
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
65c0: 69 63 74 20 73 65 74 20 64 20 6e 65 65 64 73 5f ict set d needs_
65d0: 72 65 63 61 6c 63 75 6c 61 74 65 20 31 0d 0a 20 recalculate 1..
65e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
65f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }..
6600: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 72 65 70 return [lrep
6610: 6c 61 63 65 20 24 70 6e 74 20 31 20 32 20 7b 2a lace $pnt 1 2 {*
6620: 7d 24 70 5d 0d 0a 7d 0d 0a 0d 0a 70 72 6f 63 20 }$p]..}....proc
6630: 73 76 67 6d 6c 3a 3a 70 72 6f 63 65 73 73 5f 63 svgml::process_c
6640: 75 62 65 20 7b 20 69 64 20 77 68 61 74 20 61 72 ube { id what ar
6650: 67 73 20 7d 20 7b 0d 0a 20 20 20 20 76 61 72 69 gs } {.. vari
6660: 61 62 6c 65 20 64 0d 0a 20 20 20 20 0d 0a 20 20 able d.. ..
6670: 20 20 6c 61 73 73 69 67 6e 20 5b 64 69 63 74 20 lassign [dict
6680: 67 65 74 20 24 64 20 69 64 73 20 24 69 64 20 62 get $d ids $id b
6690: 62 6f 78 5d 20 78 30 20 79 30 20 77 20 68 0d 0a box] x0 y0 w h..
66a0: 20 20 20 20 73 65 74 20 70 6e 74 73 20 5b 64 69 set pnts [di
66b0: 63 74 20 67 65 74 20 24 64 20 69 64 73 20 24 69 ct get $d ids $i
66c0: 64 20 70 6e 74 73 5d 0d 0a 20 20 20 20 0d 0a 20 d pnts].. ..
66d0: 20 20 20 73 65 74 20 61 6e 67 6c 65 73 20 5b 67 set angles [g
66e0: 69 76 65 5f 70 72 6f 70 44 20 24 64 20 24 69 64 ive_propD $d $id
66f0: 20 61 6e 67 6c 65 73 20 22 34 35 64 65 67 2c 34 angles "45deg,4
6700: 35 64 65 67 22 5d 0d 0a 20 20 20 20 73 65 74 20 5deg"].. set
6710: 61 6e 67 6c 65 73 4c 69 73 74 20 5b 73 70 6c 69 anglesList [spli
6720: 74 20 24 61 6e 67 6c 65 73 20 22 2c 22 5d 0d 0a t $angles ","]..
6730: 20 20 20 20 69 66 20 7b 20 5b 6c 6c 65 6e 67 74 if { [llengt
6740: 68 20 24 61 6e 67 6c 65 73 4c 69 73 74 5d 20 21 h $anglesList] !
6750: 3d 20 32 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 = 2 } {..
6760: 20 73 65 74 5f 65 72 72 6f 72 20 24 64 20 24 69 set_error $d $i
6770: 64 20 22 70 72 6f 70 65 72 74 69 65 73 20 61 6e d "properties an
6780: 67 6c 65 73 20 6d 75 73 74 20 62 65 3a 20 61 6e gles must be: an
6790: 67 6c 65 73 3a 34 35 64 65 67 2c 34 35 64 65 67 gles:45deg,45deg
67a0: 3b 22 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 73 ;".. }.. s
67b0: 65 74 20 61 6e 67 6c 65 73 4e 20 22 22 0d 0a 20 et anglesN ""..
67c0: 20 20 20 66 6f 72 65 61 63 68 20 61 20 24 61 6e foreach a $an
67d0: 67 6c 65 73 4c 69 73 74 20 7b 0d 0a 20 20 20 20 glesList {..
67e0: 20 20 20 20 69 66 20 7b 20 5b 72 65 67 65 78 70 if { [regexp
67f0: 20 7b 5e 5c 73 2a 28 5b 2d 2b 5c 64 2e 65 5d 2b {^\s*([-+\d.e]+
6800: 29 5c 73 2a 64 65 67 5c 73 2a 24 7d 20 24 61 20 )\s*deg\s*$} $a
6810: 7b 7d 20 76 61 6c 75 65 5d 20 7d 20 7b 0d 0a 20 {} value] } {..
6820: 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe
6830: 6e 64 20 61 6e 67 6c 65 73 4e 20 24 76 61 6c 75 nd anglesN $valu
6840: 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 e.. } els
6850: 65 69 66 20 7b 20 5b 72 65 67 65 78 70 20 7b 5e eif { [regexp {^
6860: 5c 73 2a 28 5b 2d 2b 5c 64 2e 65 5d 2b 29 5c 73 \s*([-+\d.e]+)\s
6870: 2a 72 61 64 5c 73 2a 24 7d 20 24 61 20 7b 7d 20 *rad\s*$} $a {}
6880: 76 61 6c 75 65 5d 20 7d 20 7b 0d 0a 20 20 20 20 value] } {..
6890: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend
68a0: 61 6e 67 6c 65 73 4e 20 5b 65 78 70 72 20 7b 24 anglesN [expr {$
68b0: 6d 3a 3a 72 61 64 74 6f 64 65 67 2a 24 76 61 6c m::radtodeg*$val
68c0: 75 65 7d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 ue}].. }
68d0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {..
68e0: 20 20 20 20 73 65 74 5f 65 72 72 6f 72 20 24 64 set_error $d
68f0: 20 24 69 64 20 22 70 72 6f 70 65 72 74 69 65 73 $id "properties
6900: 20 61 6e 67 6c 65 73 20 6d 75 73 74 20 62 65 3a angles must be:
6910: 20 61 6e 67 6c 65 73 3a 34 35 64 65 67 2c 34 35 angles:45deg,45
6920: 64 65 67 3b 22 0d 0a 20 20 20 20 20 20 20 20 7d deg;".. }
6930: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 73 65 74 .. }.. set
6940: 20 71 20 5b 73 76 67 6d 6c 3a 3a 72 6f 74 61 74 q [svgml::rotat
6950: 65 5f 61 6e 67 6c 65 73 20 7b 2a 7d 24 61 6e 67 e_angles {*}$ang
6960: 6c 65 73 4e 5d 0d 0a 20 20 20 20 0d 0a 20 20 20 lesN].. ..
6970: 20 73 65 74 20 69 70 6f 73 20 5b 6c 73 65 61 72 set ipos [lsear
6980: 63 68 20 2d 69 6e 64 65 78 20 30 20 24 70 6e 74 ch -index 0 $pnt
6990: 73 20 22 77 69 64 74 68 2d 68 65 69 67 68 74 22 s "width-height"
69a0: 5d 0d 0a 20 20 20 20 73 65 74 20 68 65 69 67 68 ].. set heigh
69b0: 74 20 22 22 0d 0a 20 20 20 20 69 66 20 7b 20 24 t "".. if { $
69c0: 69 70 6f 73 20 21 3d 20 2d 31 20 7d 20 7b 0d 0a ipos != -1 } {..
69d0: 20 20 20 20 20 20 20 20 73 65 74 20 68 65 69 67 set heig
69e0: 68 74 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 73 ht [lindex $pnts
69f0: 20 24 69 70 6f 73 20 33 5d 0d 0a 20 20 20 20 7d $ipos 3].. }
6a00: 0d 0a 20 20 20 20 69 66 20 7b 20 24 68 65 69 67 .. if { $heig
6a10: 68 74 20 65 71 20 22 22 20 7d 20 7b 0d 0a 20 20 ht eq "" } {..
6a20: 20 20 20 20 20 20 73 65 74 20 68 65 69 67 68 74 set height
6a30: 20 24 77 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 $w.. }..
6a40: 0d 0a 20 20 20 20 73 65 74 20 70 6f 69 6e 74 5f .. set point_
6a50: 74 6f 5f 61 78 65 73 20 7b 7b 30 20 30 20 30 7d to_axes {{0 0 0}
6a60: 20 7b 31 20 30 20 30 7d 20 7b 31 20 31 20 30 7d {1 0 0} {1 1 0}
6a70: 20 7b 30 20 31 20 30 7d 20 7b 30 20 30 20 31 7d {0 1 0} {0 0 1}
6a80: 20 7b 31 20 30 20 31 7d 20 7b 31 20 31 20 31 7d {1 0 1} {1 1 1}
6a90: 20 7b 30 20 31 20 31 7d 7d 0d 0a 20 20 20 20 73 {0 1 1}}.. s
6aa0: 65 74 20 66 61 63 65 5f 74 6f 5f 70 6f 69 6e 74 et face_to_point
6ab0: 73 20 7b 7b 30 20 31 20 32 20 33 7d 20 7b 30 20 s {{0 1 2 3} {0
6ac0: 34 20 35 20 31 7d 20 7b 31 20 32 20 36 20 35 7d 4 5 1} {1 2 6 5}
6ad0: 20 7b 33 20 37 20 36 20 32 7d 20 7b 30 20 33 20 {3 7 6 2} {0 3
6ae0: 37 20 34 7d 20 7b 34 20 35 20 36 20 37 7d 7d 0d 7 4} {4 5 6 7}}.
6af0: 0a 20 20 20 20 73 65 74 20 61 72 69 73 74 65 5f . set ariste_
6b00: 74 6f 5f 70 6f 69 6e 74 73 20 7b 7b 30 20 31 7d to_points {{0 1}
6b10: 20 7b 31 20 32 7d 20 7b 33 20 32 7d 20 7b 30 20 {1 2} {3 2} {0
6b20: 33 7d 20 7b 30 20 34 7d 20 7b 31 20 35 7d 20 7b 3} {0 4} {1 5} {
6b30: 32 20 36 7d 20 7b 33 20 37 7d 20 7b 34 20 35 7d 2 6} {3 7} {4 5}
6b40: 20 7b 35 20 36 7d 20 7b 37 20 36 7d 20 7b 34 20 {5 6} {7 6} {4
6b50: 37 7d 7d 0d 0a 20 20 20 20 73 65 74 20 66 61 63 7}}.. set fac
6b60: 65 5f 74 6f 5f 6e 6f 72 6d 61 6c 20 7b 32 20 31 e_to_normal {2 1
6b70: 20 30 20 31 20 30 20 32 7d 0d 0a 20 20 20 20 73 0 1 0 2}.. s
6b80: 65 74 20 66 61 63 65 5f 74 6f 5f 6e 6f 72 6d 61 et face_to_norma
6b90: 6c 5f 70 72 65 76 5f 6e 65 78 74 20 7b 30 20 30 l_prev_next {0 0
6ba0: 20 31 20 31 20 30 20 31 7d 0d 0a 20 20 20 20 0d 1 1 0 1}.. .
6bb0: 0a 20 20 20 20 73 65 74 20 70 30 20 5b 6c 69 73 . set p0 [lis
6bc0: 74 20 5b 65 78 70 72 20 7b 24 78 30 2b 30 2e 35 t [expr {$x0+0.5
6bd0: 2a 24 77 7d 5d 20 5b 65 78 70 72 20 7b 24 79 30 *$w}] [expr {$y0
6be0: 2b 30 2e 35 2a 24 68 7d 5d 5d 0d 0a 20 20 20 20 +0.5*$h}]]..
6bf0: 0d 0a 20 20 20 20 69 66 20 7b 20 24 77 68 61 74 .. if { $what
6c00: 20 65 71 20 22 66 61 63 65 73 22 20 7d 20 7b 0d eq "faces" } {.
6c10: 0a 20 20 20 20 20 20 20 20 73 65 74 20 69 64 78 . set idx
6c20: 5f 66 61 63 65 73 20 5b 6c 69 73 74 20 30 20 31 _faces [list 0 1
6c30: 20 34 20 32 20 33 20 35 5d 0d 0a 20 20 20 20 20 4 2 3 5]..
6c40: 20 20 20 73 65 74 20 66 61 63 65 73 20 22 22 0d set faces "".
6c50: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach
6c60: 20 69 64 78 5f 66 61 63 65 20 24 69 64 78 5f 66 idx_face $idx_f
6c70: 61 63 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 aces {..
6c80: 20 20 20 20 73 65 74 20 66 61 63 65 20 22 24 69 set face "$i
6c90: 64 78 5f 66 61 63 65 22 0d 0a 20 20 20 20 20 20 dx_face"..
6ca0: 20 20 20 20 20 20 73 65 74 20 63 65 6e 74 65 72 set center
6cb0: 5f 66 61 63 65 20 22 30 20 30 22 0d 0a 20 20 20 _face "0 0"..
6cc0: 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 20 73 for { s
6cd0: 65 74 20 69 20 30 20 7d 20 7b 20 24 69 20 3c 20 et i 0 } { $i <
6ce0: 34 20 7d 20 7b 20 69 6e 63 72 20 69 20 7d 20 7b 4 } { incr i } {
6cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
6d00: 20 20 73 65 74 20 69 64 78 5f 70 6f 69 6e 74 20 set idx_point
6d10: 5b 6c 69 6e 64 65 78 20 24 66 61 63 65 5f 74 6f [lindex $face_to
6d20: 5f 70 6f 69 6e 74 73 20 24 69 64 78 5f 66 61 63 _points $idx_fac
6d30: 65 20 24 69 5d 0d 0a 20 20 20 20 20 20 20 20 20 e $i]..
6d40: 20 20 20 20 20 20 20 73 65 74 20 76 4c 20 5b 6c set vL [l
6d50: 69 6e 64 65 78 20 24 70 6f 69 6e 74 5f 74 6f 5f index $point_to_
6d60: 61 78 65 73 20 24 69 64 78 5f 70 6f 69 6e 74 5d axes $idx_point]
6d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
6d80: 20 20 73 65 74 20 78 4c 20 5b 65 78 70 72 20 7b set xL [expr {
6d90: 28 2d 31 2b 32 2a 5b 6c 69 6e 64 65 78 20 24 76 (-1+2*[lindex $v
6da0: 4c 20 30 5d 29 2a 30 2e 35 2a 24 77 7d 5d 0d 0a L 0])*0.5*$w}]..
6db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6dc0: 73 65 74 20 79 4c 20 5b 65 78 70 72 20 7b 28 2d set yL [expr {(-
6dd0: 31 2b 32 2a 5b 6c 69 6e 64 65 78 20 24 76 4c 20 1+2*[lindex $vL
6de0: 31 5d 29 2a 30 2e 35 2a 24 68 7d 5d 0d 0a 20 20 1])*0.5*$h}]..
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
6e00: 74 20 7a 4c 20 5b 65 78 70 72 20 7b 5b 6c 69 6e t zL [expr {[lin
6e10: 64 65 78 20 24 76 4c 20 32 5d 2a 24 68 65 69 67 dex $vL 2]*$heig
6e20: 68 74 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ht}]..
6e30: 20 20 20 20 20 20 73 65 74 20 76 20 5b 6d 3a 3a set v [m::
6e40: 6d 61 74 6d 75 6c 20 5b 6d 3a 3a 74 72 61 6e 73 matmul [m::trans
6e50: 70 6f 73 65 20 5b 6d 3a 3a 71 75 61 74 65 72 6e pose [m::quatern
6e60: 69 6f 6e 3a 3a 6d 61 74 72 69 78 20 24 71 5d 5d ion::matrix $q]]
6e70: 20 5b 6c 69 73 74 20 24 78 4c 20 24 79 4c 20 24 [list $xL $yL $
6e80: 7a 4c 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 zL]]..
6e90: 20 20 20 20 20 20 73 65 74 20 76 20 5b 6c 69 73 set v [lis
6ea0: 74 20 5b 6c 69 6e 64 65 78 20 24 76 20 30 5d 20 t [lindex $v 0]
6eb0: 5b 65 78 70 72 20 7b 2d 31 2a 5b 6c 69 6e 64 65 [expr {-1*[linde
6ec0: 78 20 24 76 20 31 5d 7d 5d 5d 0d 0a 20 20 20 20 x $v 1]}]]..
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
6ee0: 70 6e 74 20 5b 6d 3a 3a 61 64 64 20 24 70 30 20 pnt [m::add $p0
6ef0: 24 76 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 $v]..
6f00: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 66 61 63 lappend fac
6f10: 65 20 24 70 6e 74 0d 0a 20 20 20 20 20 20 20 20 e $pnt..
6f20: 20 20 20 20 20 20 20 20 73 65 74 20 63 65 6e 74 set cent
6f30: 65 72 5f 66 61 63 65 20 5b 6d 3a 3a 61 78 70 79 er_face [m::axpy
6f40: 20 30 2e 32 35 20 24 70 6e 74 20 24 63 65 6e 74 0.25 $pnt $cent
6f50: 65 72 5f 66 61 63 65 5d 0d 0a 20 20 20 20 20 20 er_face]..
6f60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
6f70: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 66 61 63 lappend fac
6f80: 65 73 20 24 66 61 63 65 0d 0a 20 20 20 20 20 20 es $face..
6f90: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.. ret
6fa0: 75 72 6e 20 24 66 61 63 65 73 0d 0a 20 20 20 20 urn $faces..
6fb0: 7d 20 65 6c 73 65 69 66 20 7b 20 24 77 68 61 74 } elseif { $what
6fc0: 20 65 71 20 22 64 72 61 77 5f 6c 61 62 65 6c 73 eq "draw_labels
6fd0: 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 " } {.. s
6fe0: 65 74 20 78 6d 6c 20 22 22 0d 0a 20 20 20 20 20 et xml ""..
6ff0: 20 20 20 0d 0a 20 20 20 20 20 20 20 20 69 66 20 .. if
7000: 7b 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 { [lindex $args
7010: 30 5d 20 69 6e 20 22 66 61 63 65 20 61 6c 6c 22 0] in "face all"
7020: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
7030: 20 20 66 6f 72 20 7b 20 73 65 74 20 69 64 78 5f for { set idx_
7040: 66 61 63 65 20 30 20 7d 20 7b 20 24 69 64 78 5f face 0 } { $idx_
7050: 66 61 63 65 20 3c 20 36 20 7d 20 7b 20 69 6e 63 face < 6 } { inc
7060: 72 20 69 64 78 5f 66 61 63 65 20 7d 20 7b 0d 0a r idx_face } {..
7070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7080: 73 65 74 20 63 65 6e 74 65 72 5f 66 61 63 65 20 set center_face
7090: 22 30 20 30 22 0d 0a 20 20 20 20 20 20 20 20 20 "0 0"..
70a0: 20 20 20 20 20 20 20 66 6f 72 20 7b 20 73 65 74 for { set
70b0: 20 69 20 30 20 7d 20 7b 20 24 69 20 3c 20 34 20 i 0 } { $i < 4
70c0: 7d 20 7b 20 69 6e 63 72 20 69 20 7d 20 7b 0d 0a } { incr i } {..
70d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
70e0: 20 20 20 20 73 65 74 20 69 64 78 5f 70 6f 69 6e set idx_poin
70f0: 74 20 5b 6c 69 6e 64 65 78 20 24 66 61 63 65 5f t [lindex $face_
7100: 74 6f 5f 70 6f 69 6e 74 73 20 24 69 64 78 5f 66 to_points $idx_f
7110: 61 63 65 20 24 69 5d 0d 0a 20 20 20 20 20 20 20 ace $i]..
7120: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
7130: 20 76 4c 20 5b 6c 69 6e 64 65 78 20 24 70 6f 69 vL [lindex $poi
7140: 6e 74 5f 74 6f 5f 61 78 65 73 20 24 69 64 78 5f nt_to_axes $idx_
7150: 70 6f 69 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 point]..
7160: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
7170: 78 4c 20 5b 65 78 70 72 20 7b 28 2d 31 2b 32 2a xL [expr {(-1+2*
7180: 5b 6c 69 6e 64 65 78 20 24 76 4c 20 30 5d 29 2a [lindex $vL 0])*
7190: 30 2e 35 2a 24 77 7d 5d 0d 0a 20 20 20 20 20 20 0.5*$w}]..
71a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
71b0: 74 20 79 4c 20 5b 65 78 70 72 20 7b 28 2d 31 2b t yL [expr {(-1+
71c0: 32 2a 5b 6c 69 6e 64 65 78 20 24 76 4c 20 31 5d 2*[lindex $vL 1]
71d0: 29 2a 30 2e 35 2a 24 68 7d 5d 0d 0a 20 20 20 20 )*0.5*$h}]..
71e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
71f0: 73 65 74 20 7a 4c 20 5b 65 78 70 72 20 7b 5b 6c set zL [expr {[l
7200: 69 6e 64 65 78 20 24 76 4c 20 32 5d 2a 24 68 65 index $vL 2]*$he
7210: 69 67 68 74 7d 5d 0d 0a 20 20 20 20 20 20 20 20 ight}]..
7220: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
7230: 76 20 5b 6d 3a 3a 6d 61 74 6d 75 6c 20 5b 6d 3a v [m::matmul [m:
7240: 3a 74 72 61 6e 73 70 6f 73 65 20 5b 6d 3a 3a 71 :transpose [m::q
7250: 75 61 74 65 72 6e 69 6f 6e 3a 3a 6d 61 74 72 69 uaternion::matri
7260: 78 20 24 71 5d 5d 20 5b 6c 69 73 74 20 24 78 4c x $q]] [list $xL
7270: 20 24 79 4c 20 24 7a 4c 5d 5d 0d 0a 20 20 20 20 $yL $zL]]..
7280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7290: 73 65 74 20 76 20 5b 6c 69 73 74 20 5b 6c 69 6e set v [list [lin
72a0: 64 65 78 20 24 76 20 30 5d 20 5b 65 78 70 72 20 dex $v 0] [expr
72b0: 7b 2d 31 2a 5b 6c 69 6e 64 65 78 20 24 76 20 31 {-1*[lindex $v 1
72c0: 5d 7d 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ]}]]..
72d0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6e set pn
72e0: 74 20 5b 6d 3a 3a 61 64 64 20 24 70 30 20 24 76 t [m::add $p0 $v
72f0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
7300: 20 20 20 20 20 20 20 73 65 74 20 63 65 6e 74 65 set cente
7310: 72 5f 66 61 63 65 20 5b 6d 3a 3a 61 78 70 79 20 r_face [m::axpy
7320: 30 2e 32 35 20 24 70 6e 74 20 24 63 65 6e 74 65 0.25 $pnt $cente
7330: 72 5f 66 61 63 65 5d 0d 0a 20 20 20 20 20 20 20 r_face]..
7340: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
7350: 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 73 lass
7360: 69 67 6e 20 24 63 65 6e 74 65 72 5f 66 61 63 65 ign $center_face
7370: 20 78 20 79 0d 0a 20 20 20 20 20 20 20 20 20 20 x y..
7380: 20 20 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c append xml
7390: 20 5b 66 6f 72 6d 61 74 20 22 3c 74 65 78 74 20 [format "<text
73a0: 78 3d 27 25 2e 34 67 27 20 79 3d 27 25 2e 33 67 x='%.4g' y='%.3g
73b0: 27 20 73 74 79 6c 65 3d 27 66 69 6c 6c 3a 20 72 ' style='fill: r
73c0: 65 64 3b 27 3e 22 20 24 78 20 24 79 5d 0d 0a 20 ed;'>" $x $y]..
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
73e0: 70 70 65 6e 64 20 78 6d 6c 20 22 5b 65 78 70 72 ppend xml "[expr
73f0: 20 7b 24 69 64 78 5f 66 61 63 65 2b 31 7d 5d 3c {$idx_face+1}]<
7400: 2f 74 65 78 74 3e 22 0d 0a 20 20 20 20 20 20 20 /text>"..
7410: 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 ..
7420: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 set s
7430: 74 79 6c 65 20 22 73 74 72 6f 6b 65 2d 77 69 64 tyle "stroke-wid
7440: 74 68 3a 20 31 2e 30 70 78 3b 20 73 74 72 6f 6b th: 1.0px; strok
7450: 65 3a 20 62 6c 61 63 6b 3b 66 69 6c 6c 3a 6e 6f e: black;fill:no
7460: 6e 65 3b 6d 61 72 6b 65 72 2d 65 6e 64 3a 75 72 ne;marker-end:ur
7470: 6c 28 23 54 72 69 61 6e 67 6c 65 4f 75 74 4c 29 l(#TriangleOutL)
7480: 3b 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ;"..
7490: 20 20 20 20 73 65 74 20 73 74 79 6c 65 54 20 22 set styleT "
74a0: 66 6f 6e 74 2d 73 69 7a 65 3a 20 31 38 70 78 3b font-size: 18px;
74b0: 20 66 69 6c 6c 3a 20 62 6c 61 63 6b 3b 20 66 6f fill: black; fo
74c0: 6e 74 2d 66 61 6d 69 6c 79 3a 20 73 61 6e 73 2d nt-family: sans-
74d0: 73 65 72 69 66 3b 22 0d 0a 20 20 20 20 20 20 20 serif;"..
74e0: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6e 74 set pnt
74f0: 20 5b 70 72 6f 63 65 73 73 5f 63 75 62 65 20 24 [process_cube $
7500: 69 64 20 66 61 63 65 20 5b 65 78 70 72 20 7b 24 id face [expr {$
7510: 69 64 78 5f 66 61 63 65 2b 31 7d 5d 20 37 30 20 idx_face+1}] 70
7520: 35 30 5d 20 0d 0a 20 20 20 20 20 20 20 20 20 20 50] ..
7530: 20 20 20 20 20 20 73 65 74 20 70 6e 74 20 5b 6d set pnt [m
7540: 3a 3a 61 64 64 20 24 63 65 6e 74 65 72 5f 66 61 ::add $center_fa
7550: 63 65 20 5b 6d 3a 3a 73 63 61 6c 65 20 35 30 20 ce [m::scale 50
7560: 5b 6d 3a 3a 75 6e 69 74 4c 65 6e 67 74 68 56 65 [m::unitLengthVe
7570: 63 74 6f 72 20 5b 6d 3a 3a 73 75 62 20 24 70 6e ctor [m::sub $pn
7580: 74 20 24 63 65 6e 74 65 72 5f 66 61 63 65 5d 5d t $center_face]]
7590: 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ]]..
75a0: 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 22 append xml "
75b0: 3c 70 61 74 68 20 64 3d 27 4d 24 63 65 6e 74 65 <path d='M$cente
75c0: 72 5f 66 61 63 65 20 4c 24 70 6e 74 27 20 73 74 r_face L$pnt' st
75d0: 79 6c 65 3d 27 24 73 74 79 6c 65 27 2f 3e 22 0d yle='$style'/>".
75e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
75f0: 20 61 70 70 65 6e 64 20 78 6d 6c 20 5b 66 6f 72 append xml [for
7600: 6d 61 74 20 22 3c 74 65 78 74 20 78 3d 27 25 2e mat "<text x='%.
7610: 33 67 27 20 79 3d 27 25 2e 33 67 27 20 73 74 79 3g' y='%.3g' sty
7620: 6c 65 3d 27 25 73 27 3e 78 27 3c 2f 74 65 78 74 le='%s'>x'</text
7630: 3e 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 >" \..
7640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c [l
7650: 69 6e 64 65 78 20 24 70 6e 74 20 30 5d 20 5b 6c index $pnt 0] [l
7660: 69 6e 64 65 78 20 24 70 6e 74 20 31 5d 20 24 73 index $pnt 1] $s
7670: 74 79 6c 65 54 5d 0d 0a 20 20 20 20 20 20 20 20 tyleT]..
7680: 20 20 20 20 20 20 20 20 73 65 74 20 70 6e 74 20 set pnt
7690: 5b 70 72 6f 63 65 73 73 5f 63 75 62 65 20 24 69 [process_cube $i
76a0: 64 20 66 61 63 65 20 5b 65 78 70 72 20 7b 24 69 d face [expr {$i
76b0: 64 78 5f 66 61 63 65 2b 31 7d 5d 20 35 30 20 37 dx_face+1}] 50 7
76c0: 30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0]..
76d0: 20 20 20 20 73 65 74 20 70 6e 74 20 5b 6d 3a 3a set pnt [m::
76e0: 61 64 64 20 24 63 65 6e 74 65 72 5f 66 61 63 65 add $center_face
76f0: 20 5b 6d 3a 3a 73 63 61 6c 65 20 35 30 20 5b 6d [m::scale 50 [m
7700: 3a 3a 75 6e 69 74 4c 65 6e 67 74 68 56 65 63 74 ::unitLengthVect
7710: 6f 72 20 5b 6d 3a 3a 73 75 62 20 24 70 6e 74 20 or [m::sub $pnt
7720: 24 63 65 6e 74 65 72 5f 66 61 63 65 5d 5d 5d 5d $center_face]]]]
7730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
7740: 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 22 3c 70 append xml "<p
7750: 61 74 68 20 64 3d 27 4d 24 63 65 6e 74 65 72 5f ath d='M$center_
7760: 66 61 63 65 20 4c 24 70 6e 74 27 20 73 74 79 6c face L$pnt' styl
7770: 65 3d 27 24 73 74 79 6c 65 27 2f 3e 22 0d 0a 20 e='$style'/>"..
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
7790: 70 70 65 6e 64 20 78 6d 6c 20 5b 66 6f 72 6d 61 ppend xml [forma
77a0: 74 20 22 3c 74 65 78 74 20 78 3d 27 25 2e 33 67 t "<text x='%.3g
77b0: 27 20 79 3d 27 25 2e 33 67 27 20 73 74 79 6c 65 ' y='%.3g' style
77c0: 3d 27 25 73 27 3e 79 27 3c 2f 74 65 78 74 3e 22 ='%s'>y'</text>"
77d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \..
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 6e [lin
77f0: 64 65 78 20 24 70 6e 74 20 30 5d 20 5b 6c 69 6e dex $pnt 0] [lin
7800: 64 65 78 20 24 70 6e 74 20 31 5d 20 24 73 74 79 dex $pnt 1] $sty
7810: 6c 65 54 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 leT]..
7820: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }..
7830: 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 6c 69 if { [li
7840: 6e 64 65 78 20 24 61 72 67 73 20 30 5d 20 69 6e ndex $args 0] in
7850: 20 22 61 72 69 73 74 65 20 61 6c 6c 22 20 7d 20 "ariste all" }
7860: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 {.. f
7870: 6f 72 20 7b 20 73 65 74 20 69 64 78 5f 61 72 69 or { set idx_ari
7880: 73 74 65 20 30 20 7d 20 7b 20 24 69 64 78 5f 61 ste 0 } { $idx_a
7890: 72 69 73 74 65 20 3c 20 31 32 20 7d 20 7b 20 69 riste < 12 } { i
78a0: 6e 63 72 20 69 64 78 5f 61 72 69 73 74 65 20 7d ncr idx_ariste }
78b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
78c0: 20 20 20 20 73 65 74 20 63 65 6e 74 65 72 5f 61 set center_a
78d0: 72 69 73 74 65 20 22 30 20 30 22 0d 0a 20 20 20 riste "0 0"..
78e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for
78f0: 20 7b 20 73 65 74 20 69 20 30 20 7d 20 7b 20 24 { set i 0 } { $
7900: 69 20 3c 20 32 20 7d 20 7b 20 69 6e 63 72 20 69 i < 2 } { incr i
7910: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
7920: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 64 set id
7930: 78 5f 70 6f 69 6e 74 20 5b 6c 69 6e 64 65 78 20 x_point [lindex
7940: 24 61 72 69 73 74 65 5f 74 6f 5f 70 6f 69 6e 74 $ariste_to_point
7950: 73 20 24 69 64 78 5f 61 72 69 73 74 65 20 24 69 s $idx_ariste $i
7960: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
7970: 20 20 20 20 20 20 20 73 65 74 20 76 4c 20 5b 6c set vL [l
7980: 69 6e 64 65 78 20 24 70 6f 69 6e 74 5f 74 6f 5f index $point_to_
7990: 61 78 65 73 20 24 69 64 78 5f 70 6f 69 6e 74 5d axes $idx_point]
79a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
79b0: 20 20 20 20 20 20 73 65 74 20 78 4c 20 5b 65 78 set xL [ex
79c0: 70 72 20 7b 28 2d 31 2b 32 2a 5b 6c 69 6e 64 65 pr {(-1+2*[linde
79d0: 78 20 24 76 4c 20 30 5d 29 2a 30 2e 35 2a 24 77 x $vL 0])*0.5*$w
79e0: 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }]..
79f0: 20 20 20 20 20 20 20 20 73 65 74 20 79 4c 20 5b set yL [
7a00: 65 78 70 72 20 7b 28 2d 31 2b 32 2a 5b 6c 69 6e expr {(-1+2*[lin
7a10: 64 65 78 20 24 76 4c 20 31 5d 29 2a 30 2e 35 2a dex $vL 1])*0.5*
7a20: 24 68 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 $h}]..
7a30: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7a 4c set zL
7a40: 20 5b 65 78 70 72 20 7b 5b 6c 69 6e 64 65 78 20 [expr {[lindex
7a50: 24 76 4c 20 32 5d 2a 24 68 65 69 67 68 74 7d 5d $vL 2]*$height}]
7a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
7a70: 20 20 20 20 20 20 73 65 74 20 76 20 5b 6d 3a 3a set v [m::
7a80: 6d 61 74 6d 75 6c 20 5b 6d 3a 3a 74 72 61 6e 73 matmul [m::trans
7a90: 70 6f 73 65 20 5b 6d 3a 3a 71 75 61 74 65 72 6e pose [m::quatern
7aa0: 69 6f 6e 3a 3a 6d 61 74 72 69 78 20 24 71 5d 5d ion::matrix $q]]
7ab0: 20 5b 6c 69 73 74 20 24 78 4c 20 24 79 4c 20 24 [list $xL $yL $
7ac0: 7a 4c 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 zL]]..
7ad0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 20 set v
7ae0: 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 76 [list [lindex $v
7af0: 20 30 5d 20 5b 65 78 70 72 20 7b 2d 31 2a 5b 6c 0] [expr {-1*[l
7b00: 69 6e 64 65 78 20 24 76 20 31 5d 7d 5d 5d 0d 0a index $v 1]}]]..
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b20: 20 20 20 20 73 65 74 20 70 6e 74 20 5b 6d 3a 3a set pnt [m::
7b30: 61 64 64 20 24 70 30 20 24 76 5d 0d 0a 20 20 20 add $p0 $v]..
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b50: 20 73 65 74 20 63 65 6e 74 65 72 5f 61 72 69 73 set center_aris
7b60: 74 65 20 5b 6d 3a 3a 61 78 70 79 20 30 2e 35 20 te [m::axpy 0.5
7b70: 24 70 6e 74 20 24 63 65 6e 74 65 72 5f 61 72 69 $pnt $center_ari
7b80: 73 74 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ste]..
7b90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
7ba0: 20 20 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e lassign
7bb0: 20 24 63 65 6e 74 65 72 5f 61 72 69 73 74 65 20 $center_ariste
7bc0: 78 20 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x y..
7bd0: 20 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 append xml
7be0: 5b 66 6f 72 6d 61 74 20 22 3c 74 65 78 74 20 78 [format "<text x
7bf0: 3d 27 25 2e 33 67 27 20 79 3d 27 25 2e 33 67 27 ='%.3g' y='%.3g'
7c00: 20 73 74 79 6c 65 3d 27 66 69 6c 6c 3a 20 62 6c style='fill: bl
7c10: 75 65 3b 27 3e 22 20 24 78 20 24 79 5d 0d 0a 20 ue;'>" $x $y]..
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
7c30: 70 70 65 6e 64 20 78 6d 6c 20 22 5b 65 78 70 72 ppend xml "[expr
7c40: 20 7b 24 69 64 78 5f 61 72 69 73 74 65 2b 31 7d {$idx_ariste+1}
7c50: 5d 3c 2f 74 65 78 74 3e 22 0d 0a 20 20 20 20 20 ]</text>"..
7c60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
7c70: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.. if
7c80: 7b 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 { [lindex $args
7c90: 30 5d 20 69 6e 20 22 76 65 72 74 65 78 20 61 6c 0] in "vertex al
7ca0: 6c 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 l" } {..
7cb0: 20 20 20 20 66 6f 72 20 7b 20 73 65 74 20 69 64 for { set id
7cc0: 78 5f 70 6f 69 6e 74 20 30 20 7d 20 7b 20 24 69 x_point 0 } { $i
7cd0: 64 78 5f 70 6f 69 6e 74 20 3c 20 38 20 7d 20 7b dx_point < 8 } {
7ce0: 20 69 6e 63 72 20 69 64 78 5f 70 6f 69 6e 74 20 incr idx_point
7cf0: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
7d00: 20 20 20 20 20 73 65 74 20 76 4c 20 5b 6c 69 6e set vL [lin
7d10: 64 65 78 20 24 70 6f 69 6e 74 5f 74 6f 5f 61 78 dex $point_to_ax
7d20: 65 73 20 24 69 64 78 5f 70 6f 69 6e 74 5d 0d 0a es $idx_point]..
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7d40: 73 65 74 20 78 4c 20 5b 65 78 70 72 20 7b 28 2d set xL [expr {(-
7d50: 31 2b 32 2a 5b 6c 69 6e 64 65 78 20 24 76 4c 20 1+2*[lindex $vL
7d60: 30 5d 29 2a 30 2e 35 2a 24 77 7d 5d 0d 0a 20 20 0])*0.5*$w}]..
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
7d80: 74 20 79 4c 20 5b 65 78 70 72 20 7b 28 2d 31 2b t yL [expr {(-1+
7d90: 32 2a 5b 6c 69 6e 64 65 78 20 24 76 4c 20 31 5d 2*[lindex $vL 1]
7da0: 29 2a 30 2e 35 2a 24 68 7d 5d 0d 0a 20 20 20 20 )*0.5*$h}]..
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
7dc0: 7a 4c 20 5b 65 78 70 72 20 7b 5b 6c 69 6e 64 65 zL [expr {[linde
7dd0: 78 20 24 76 4c 20 32 5d 2a 24 68 65 69 67 68 74 x $vL 2]*$height
7de0: 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }]..
7df0: 20 20 20 20 73 65 74 20 76 20 5b 6d 3a 3a 6d 61 set v [m::ma
7e00: 74 6d 75 6c 20 5b 6d 3a 3a 74 72 61 6e 73 70 6f tmul [m::transpo
7e10: 73 65 20 5b 6d 3a 3a 71 75 61 74 65 72 6e 69 6f se [m::quaternio
7e20: 6e 3a 3a 6d 61 74 72 69 78 20 24 71 5d 5d 20 5b n::matrix $q]] [
7e30: 6c 69 73 74 20 24 78 4c 20 24 79 4c 20 24 7a 4c list $xL $yL $zL
7e40: 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ]]..
7e50: 20 20 20 20 73 65 74 20 76 20 5b 6c 69 73 74 20 set v [list
7e60: 5b 6c 69 6e 64 65 78 20 24 76 20 30 5d 20 5b 65 [lindex $v 0] [e
7e70: 78 70 72 20 7b 2d 31 2a 5b 6c 69 6e 64 65 78 20 xpr {-1*[lindex
7e80: 24 76 20 31 5d 7d 5d 5d 0d 0a 20 20 20 20 20 20 $v 1]}]]..
7e90: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6e set pn
7ea0: 74 20 5b 6d 3a 3a 61 64 64 20 24 70 30 20 24 76 t [m::add $p0 $v
7eb0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
7ec0: 20 20 20 6c 61 73 73 69 67 6e 20 24 70 6e 74 20 lassign $pnt
7ed0: 78 20 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x y..
7ee0: 20 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 append xml
7ef0: 5b 66 6f 72 6d 61 74 20 22 3c 74 65 78 74 20 78 [format "<text x
7f00: 3d 27 25 2e 33 67 27 20 79 3d 27 25 2e 33 67 27 ='%.3g' y='%.3g'
7f10: 20 73 74 79 6c 65 3d 27 66 69 6c 6c 3a 20 67 72 style='fill: gr
7f20: 65 65 6e 3b 27 3e 22 20 24 78 20 24 79 5d 0d 0a een;'>" $x $y]..
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7f40: 61 70 70 65 6e 64 20 78 6d 6c 20 22 5b 65 78 70 append xml "[exp
7f50: 72 20 7b 24 69 64 78 5f 70 6f 69 6e 74 2b 31 7d r {$idx_point+1}
7f60: 5d 3c 2f 74 65 78 74 3e 22 0d 0a 20 20 20 20 20 ]</text>"..
7f70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
7f80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.. ret
7f90: 75 72 6e 20 24 78 6d 6c 0d 0a 20 20 20 20 7d 20 urn $xml.. }
7fa0: 65 6c 73 65 69 66 20 7b 20 24 77 68 61 74 20 65 elseif { $what e
7fb0: 71 20 22 66 61 63 65 22 20 7d 20 7b 0d 0a 20 20 q "face" } {..
7fc0: 20 20 20 20 20 20 6c 61 73 73 69 67 6e 20 24 61 lassign $a
7fd0: 72 67 73 20 69 64 78 5f 66 61 63 65 20 78 20 79 rgs idx_face x y
7fe0: 20 7a 0d 0a 20 20 20 20 20 20 20 20 69 6e 63 72 z.. incr
7ff0: 20 69 64 78 5f 66 61 63 65 20 2d 31 0d 0a 20 20 idx_face -1..
8000: 20 20 20 20 20 20 73 65 74 20 78 20 5b 65 78 70 set x [exp
8010: 72 20 7b 24 78 2f 31 30 30 2e 30 7d 5d 0d 0a 20 r {$x/100.0}]..
8020: 20 20 20 20 20 20 20 73 65 74 20 79 20 5b 65 78 set y [ex
8030: 70 72 20 7b 24 79 2f 31 30 30 2e 30 7d 5d 0d 0a pr {$y/100.0}]..
8040: 20 20 20 20 20 20 20 20 73 65 74 20 7a 20 5b 65 set z [e
8050: 78 70 72 20 7b 28 24 7a 20 65 71 20 22 22 29 3f xpr {($z eq "")?
8060: 30 3a 24 7a 2f 31 30 30 2e 30 7d 5d 0d 0a 20 20 0:$z/100.0}]..
8070: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 30 lappend p0
8080: 20 30 2e 30 0d 0a 20 20 20 20 20 20 20 20 0d 0a 0.0.. ..
8090: 20 20 20 20 20 20 20 20 73 65 74 20 66 61 63 65 set face
80a0: 20 22 22 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 "".. for
80b0: 20 7b 20 73 65 74 20 69 20 30 20 7d 20 7b 20 24 { set i 0 } { $
80c0: 69 20 3c 20 34 20 7d 20 7b 20 69 6e 63 72 20 69 i < 4 } { incr i
80d0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
80e0: 20 20 73 65 74 20 69 64 78 5f 70 6f 69 6e 74 20 set idx_point
80f0: 5b 6c 69 6e 64 65 78 20 24 66 61 63 65 5f 74 6f [lindex $face_to
8100: 5f 70 6f 69 6e 74 73 20 24 69 64 78 5f 66 61 63 _points $idx_fac
8110: 65 20 24 69 5d 0d 0a 20 20 20 20 20 20 20 20 20 e $i]..
8120: 20 20 20 73 65 74 20 76 4c 20 5b 6c 69 6e 64 65 set vL [linde
8130: 78 20 24 70 6f 69 6e 74 5f 74 6f 5f 61 78 65 73 x $point_to_axes
8140: 20 24 69 64 78 5f 70 6f 69 6e 74 5d 0d 0a 20 20 $idx_point]..
8150: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 78 4c set xL
8160: 20 5b 65 78 70 72 20 7b 28 2d 31 2b 32 2a 5b 6c [expr {(-1+2*[l
8170: 69 6e 64 65 78 20 24 76 4c 20 30 5d 29 2a 30 2e index $vL 0])*0.
8180: 35 2a 24 77 7d 5d 0d 0a 20 20 20 20 20 20 20 20 5*$w}]..
8190: 20 20 20 20 73 65 74 20 79 4c 20 5b 65 78 70 72 set yL [expr
81a0: 20 7b 28 2d 31 2b 32 2a 5b 6c 69 6e 64 65 78 20 {(-1+2*[lindex
81b0: 24 76 4c 20 31 5d 29 2a 30 2e 35 2a 24 68 7d 5d $vL 1])*0.5*$h}]
81c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se
81d0: 74 20 7a 4c 20 5b 65 78 70 72 20 7b 5b 6c 69 6e t zL [expr {[lin
81e0: 64 65 78 20 24 76 4c 20 32 5d 2a 24 68 65 69 67 dex $vL 2]*$heig
81f0: 68 74 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ht}]..
8200: 20 20 73 65 74 20 76 20 5b 6d 3a 3a 6d 61 74 6d set v [m::matm
8210: 75 6c 20 5b 6d 3a 3a 74 72 61 6e 73 70 6f 73 65 ul [m::transpose
8220: 20 5b 6d 3a 3a 71 75 61 74 65 72 6e 69 6f 6e 3a [m::quaternion:
8230: 3a 6d 61 74 72 69 78 20 24 71 5d 5d 20 5b 6c 69 :matrix $q]] [li
8240: 73 74 20 24 78 4c 20 24 79 4c 20 24 7a 4c 5d 5d st $xL $yL $zL]]
8250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se
8260: 74 20 76 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 t v [list [linde
8270: 78 20 24 76 20 30 5d 20 5b 65 78 70 72 20 7b 2d x $v 0] [expr {-
8280: 31 2a 5b 6c 69 6e 64 65 78 20 24 76 20 31 5d 7d 1*[lindex $v 1]}
8290: 5d 20 5b 6c 69 6e 64 65 78 20 24 76 20 32 5d 5d ] [lindex $v 2]]
82a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se
82b0: 74 20 70 6e 74 20 5b 6d 3a 3a 61 64 64 20 24 70 t pnt [m::add $p
82c0: 30 20 24 76 5d 0d 0a 20 20 20 20 20 20 20 20 20 0 $v]..
82d0: 20 20 20 6c 61 70 70 65 6e 64 20 66 61 63 65 20 lappend face
82e0: 24 70 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d $pnt.. }.
82f0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 72 . set nor
8300: 6d 61 6c 20 5b 6d 3a 3a 76 65 63 74 6f 72 5f 6e mal [m::vector_n
8310: 6f 72 6d 61 6c 5f 74 72 69 61 6e 67 6c 65 20 7b ormal_triangle {
8320: 2a 7d 5b 6c 72 61 6e 67 65 20 24 66 61 63 65 20 *}[lrange $face
8330: 30 20 32 5d 5d 0d 0a 20 20 20 20 20 20 20 20 73 0 2]].. s
8340: 65 74 20 73 69 67 6e 20 5b 65 78 70 72 20 7b 28 et sign [expr {(
8350: 5b 6c 69 6e 64 65 78 20 24 66 61 63 65 5f 74 6f [lindex $face_to
8360: 5f 6e 6f 72 6d 61 6c 5f 70 72 65 76 5f 6e 65 78 _normal_prev_nex
8370: 74 20 24 69 64 78 5f 66 61 63 65 5d 3d 3d 31 29 t $idx_face]==1)
8380: 3f 2d 31 3a 31 7d 5d 0d 0a 20 20 20 20 20 20 20 ?-1:1}]..
8390: 20 73 65 74 20 6e 6f 72 6d 61 6c 20 5b 6d 3a 3a set normal [m::
83a0: 73 63 61 6c 65 20 5b 65 78 70 72 20 7b 24 73 69 scale [expr {$si
83b0: 67 6e 2a 24 77 7d 5d 20 5b 6d 3a 3a 75 6e 69 74 gn*$w}] [m::unit
83c0: 4c 65 6e 67 74 68 56 65 63 74 6f 72 20 24 6e 6f LengthVector $no
83d0: 72 6d 61 6c 5d 5d 0d 0a 20 20 20 20 20 20 20 20 rmal]]..
83e0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 78 .. set dx
83f0: 20 5b 6d 3a 3a 73 63 61 6c 65 20 24 78 20 5b 6d [m::scale $x [m
8400: 3a 3a 73 75 62 20 5b 6c 69 6e 64 65 78 20 24 66 ::sub [lindex $f
8410: 61 63 65 20 31 5d 20 5b 6c 69 6e 64 65 78 20 24 ace 1] [lindex $
8420: 66 61 63 65 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 face 0]]]..
8430: 20 20 20 73 65 74 20 64 79 20 5b 6d 3a 3a 73 63 set dy [m::sc
8440: 61 6c 65 20 24 79 20 5b 6d 3a 3a 73 75 62 20 5b ale $y [m::sub [
8450: 6c 69 6e 64 65 78 20 24 66 61 63 65 20 33 5d 20 lindex $face 3]
8460: 5b 6c 69 6e 64 65 78 20 24 66 61 63 65 20 30 5d [lindex $face 0]
8470: 5d 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 ]].. set
8480: 64 7a 20 5b 6d 3a 3a 73 63 61 6c 65 20 24 7a 20 dz [m::scale $z
8490: 24 6e 6f 72 6d 61 6c 5d 0d 0a 20 20 20 20 20 20 $normal]..
84a0: 20 20 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .. set
84b0: 70 20 5b 6d 3a 3a 61 64 64 20 5b 6c 69 6e 64 65 p [m::add [linde
84c0: 78 20 24 66 61 63 65 20 30 5d 20 5b 6d 3a 3a 61 x $face 0] [m::a
84d0: 64 64 20 24 64 78 20 5b 6d 3a 3a 61 64 64 20 24 dd $dx [m::add $
84e0: 64 79 20 24 64 7a 5d 5d 5d 0d 0a 20 20 20 20 20 dy $dz]]]..
84f0: 20 20 20 72 65 74 75 72 6e 20 5b 6c 72 61 6e 67 return [lrang
8500: 65 20 24 70 20 30 20 31 5d 0d 0a 20 20 20 20 7d e $p 0 1].. }
8510: 20 65 6c 73 65 69 66 20 7b 20 24 77 68 61 74 20 elseif { $what
8520: 65 71 20 22 76 65 72 74 65 78 22 20 7d 20 7b 0d eq "vertex" } {.
8530: 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 . lappend
8540: 20 70 30 20 30 2e 30 0d 0a 20 20 20 20 20 20 20 p0 0.0..
8550: 20 6c 61 73 73 69 67 6e 20 24 61 72 67 73 20 69 lassign $args i
8560: 64 78 5f 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 dx_point..
8570: 20 20 69 6e 63 72 20 69 64 78 5f 70 6f 69 6e 74 incr idx_point
8580: 20 2d 31 0d 0a 20 20 20 20 20 20 20 20 73 65 74 -1.. set
8590: 20 76 4c 20 5b 6c 69 6e 64 65 78 20 24 70 6f 69 vL [lindex $poi
85a0: 6e 74 5f 74 6f 5f 61 78 65 73 20 24 69 64 78 5f nt_to_axes $idx_
85b0: 70 6f 69 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 point]..
85c0: 73 65 74 20 78 4c 20 5b 65 78 70 72 20 7b 28 2d set xL [expr {(-
85d0: 31 2b 32 2a 5b 6c 69 6e 64 65 78 20 24 76 4c 20 1+2*[lindex $vL
85e0: 30 5d 29 2a 30 2e 35 2a 24 77 7d 5d 0d 0a 20 20 0])*0.5*$w}]..
85f0: 20 20 20 20 20 20 73 65 74 20 79 4c 20 5b 65 78 set yL [ex
8600: 70 72 20 7b 28 2d 31 2b 32 2a 5b 6c 69 6e 64 65 pr {(-1+2*[linde
8610: 78 20 24 76 4c 20 31 5d 29 2a 30 2e 35 2a 24 68 x $vL 1])*0.5*$h
8620: 7d 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 }].. set
8630: 7a 4c 20 5b 65 78 70 72 20 7b 5b 6c 69 6e 64 65 zL [expr {[linde
8640: 78 20 24 76 4c 20 32 5d 2a 24 68 65 69 67 68 74 x $vL 2]*$height
8650: 7d 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 }].. set
8660: 76 20 5b 6d 3a 3a 6d 61 74 6d 75 6c 20 5b 6d 3a v [m::matmul [m:
8670: 3a 74 72 61 6e 73 70 6f 73 65 20 5b 6d 3a 3a 71 :transpose [m::q
8680: 75 61 74 65 72 6e 69 6f 6e 3a 3a 6d 61 74 72 69 uaternion::matri
8690: 78 20 24 71 5d 5d 20 5b 6c 69 73 74 20 24 78 4c x $q]] [list $xL
86a0: 20 24 79 4c 20 24 7a 4c 5d 5d 0d 0a 20 20 20 20 $yL $zL]]..
86b0: 20 20 20 20 73 65 74 20 76 20 5b 6c 69 73 74 20 set v [list
86c0: 5b 6c 69 6e 64 65 78 20 24 76 20 30 5d 20 5b 65 [lindex $v 0] [e
86d0: 78 70 72 20 7b 2d 31 2a 5b 6c 69 6e 64 65 78 20 xpr {-1*[lindex
86e0: 24 76 20 31 5d 7d 5d 20 5b 6c 69 6e 64 65 78 20 $v 1]}] [lindex
86f0: 24 76 20 32 5d 5d 0d 0a 20 20 20 20 20 20 20 20 $v 2]]..
8700: 73 65 74 20 70 6e 74 20 5b 6d 3a 3a 61 64 64 20 set pnt [m::add
8710: 24 70 30 20 24 76 5d 0d 0a 20 20 20 20 20 20 20 $p0 $v]..
8720: 20 72 65 74 75 72 6e 20 5b 6c 72 61 6e 67 65 20 return [lrange
8730: 24 70 6e 74 20 30 20 31 5d 0d 0a 20 20 20 20 7d $pnt 0 1].. }
8740: 0d 0a 7d 0d 0a 0d 0a 70 72 6f 63 20 73 76 67 6d ..}....proc svgm
8750: 6c 3a 3a 67 65 74 5f 67 65 6f 6d 65 74 72 79 5f l::get_geometry_
8760: 70 6f 69 6e 74 20 7b 20 69 64 20 76 65 72 74 65 point { id verte
8770: 78 5f 61 72 69 73 74 65 5f 66 61 63 65 20 70 6e x_ariste_face pn
8780: 74 73 47 20 6e 75 6d 20 61 72 67 73 20 7d 20 7b tsG num args } {
8790: 0d 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 .. variable d
87a0: 0d 0a 20 20 20 20 0d 0a 20 20 20 20 0d 0a 20 20 .. .. ..
87b0: 20 20 69 66 20 7b 20 5b 64 69 63 74 20 67 65 74 if { [dict get
87c0: 20 24 64 20 69 64 73 20 24 69 64 20 63 6d 64 5d $d ids $id cmd]
87d0: 20 65 71 20 22 63 75 62 65 22 20 7d 20 7b 0d 0a eq "cube" } {..
87e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [
87f0: 70 72 6f 63 65 73 73 5f 63 75 62 65 20 24 69 64 process_cube $id
8800: 20 24 76 65 72 74 65 78 5f 61 72 69 73 74 65 5f $vertex_ariste_
8810: 66 61 63 65 20 24 6e 75 6d 20 7b 2a 7d 24 61 72 face $num {*}$ar
8820: 67 73 5d 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 gs].. } else
8830: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 20 {.. if {
8840: 24 76 65 72 74 65 78 5f 61 72 69 73 74 65 5f 66 $vertex_ariste_f
8850: 61 63 65 20 65 71 20 22 66 61 63 65 22 20 7d 20 ace eq "face" }
8860: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {.. s
8870: 65 74 5f 65 72 72 6f 72 20 24 64 20 24 69 64 20 et_error $d $id
8880: 22 66 61 63 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 "face only allow
8890: 65 64 20 66 6f 72 20 27 63 75 62 65 27 22 0d 0a ed for 'cube'"..
88a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
88b0: 20 20 20 69 66 20 7b 20 24 76 65 72 74 65 78 5f if { $vertex_
88c0: 61 72 69 73 74 65 5f 66 61 63 65 20 65 71 20 22 ariste_face eq "
88d0: 61 72 69 73 74 65 22 20 7d 20 7b 0d 0a 20 20 20 ariste" } {..
88e0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 6c if { [l
88f0: 69 6e 64 65 78 20 24 61 72 67 73 20 30 5d 20 6e index $args 0] n
8900: 65 20 22 6e 6f 72 6d 61 6c 22 20 7d 20 7b 0d 0a e "normal" } {..
8910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8920: 73 65 74 20 63 6f 6f 72 64 20 5b 65 78 70 72 20 set coord [expr
8930: 7b 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 30 {[lindex $args 0
8940: 5d 2f 31 30 30 2e 30 7d 5d 0d 0a 20 20 20 20 20 ]/100.0}]..
8950: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
8960: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 }.. set
8970: 20 69 64 78 20 31 0d 0a 20 20 20 20 20 20 20 20 idx 1..
8980: 73 65 74 20 70 6e 74 73 20 5b 64 69 63 74 5f 67 set pnts [dict_g
8990: 65 74 64 20 24 64 20 69 64 73 20 24 69 64 20 70 etd $d ids $id p
89a0: 6e 74 73 20 22 22 5d 0d 0a 20 20 20 20 20 20 20 nts ""]..
89b0: 20 66 6f 72 20 7b 20 73 65 74 20 69 20 30 20 7d for { set i 0 }
89c0: 20 7b 20 24 69 20 3c 20 5b 6c 6c 65 6e 67 74 68 { $i < [llength
89d0: 20 24 70 6e 74 73 5d 20 7d 20 7b 20 69 6e 63 72 $pnts] } { incr
89e0: 20 69 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 i } {..
89f0: 20 20 20 20 6c 61 73 73 69 67 6e 20 5b 6c 69 6e lassign [lin
8a00: 64 65 78 20 24 70 6e 74 73 20 24 69 5d 20 74 79 dex $pnts $i] ty
8a10: 70 65 20 78 20 79 0d 0a 20 20 20 20 20 20 20 20 pe x y..
8a20: 20 20 20 20 69 66 20 7b 20 24 74 79 70 65 20 69 if { $type i
8a30: 6e 20 22 7a 20 5a 20 71 20 51 20 63 20 43 20 43 n "z Z q Q c C C
8a40: 32 22 20 7d 20 7b 20 63 6f 6e 74 69 6e 75 65 20 2" } { continue
8a50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 }.. i
8a60: 66 20 7b 20 24 6e 75 6d 20 3d 3d 20 24 69 64 78 f { $num == $idx
8a70: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
8a80: 20 20 20 20 20 20 69 66 20 7b 20 24 76 65 72 74 if { $vert
8a90: 65 78 5f 61 72 69 73 74 65 5f 66 61 63 65 20 65 ex_ariste_face e
8aa0: 71 20 22 76 65 72 74 65 78 22 20 7d 20 7b 0d 0a q "vertex" } {..
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8ac0: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 return [list
8ad0: 20 24 78 20 24 79 5d 0d 0a 20 20 20 20 20 20 20 $x $y]..
8ae0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else
8af0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
8b00: 20 20 20 20 20 20 20 73 65 74 20 69 5f 6e 65 78 set i_nex
8b10: 74 20 24 69 0d 0a 20 20 20 20 20 20 20 20 20 20 t $i..
8b20: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 20 for {
8b30: 73 65 74 20 69 5f 74 72 79 20 30 20 7d 20 7b 20 set i_try 0 } {
8b40: 24 69 5f 74 72 79 20 3c 20 33 20 7d 20 7b 20 69 $i_try < 3 } { i
8b50: 6e 63 72 20 69 5f 74 72 79 20 7d 20 7b 0d 0a 20 ncr i_try } {..
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8b70: 20 20 20 20 20 20 20 69 66 20 7b 20 24 69 5f 6e if { $i_n
8b80: 65 78 74 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 ext < [llength $
8b90: 70 6e 74 73 5d 2d 31 20 7d 20 7b 0d 0a 20 20 20 pnts]-1 } {..
8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8bb0: 20 20 20 20 20 20 20 20 20 73 65 74 20 69 5f 6e set i_n
8bc0: 65 78 74 20 5b 65 78 70 72 20 7b 24 69 5f 6e 65 ext [expr {$i_ne
8bd0: 78 74 2b 31 7d 5d 0d 0a 20 20 20 20 20 20 20 20 xt+1}]..
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8bf0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {..
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8c10: 20 20 20 20 20 20 73 65 74 20 69 5f 6e 65 78 74 set i_next
8c20: 20 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0..
8c30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8c50: 20 20 20 20 20 20 20 69 66 20 7b 20 5b 6c 69 6e if { [lin
8c60: 64 65 78 20 24 70 6e 74 73 20 24 69 5f 6e 65 78 dex $pnts $i_nex
8c70: 74 5d 20 6e 69 20 22 7a 20 5a 22 20 7d 20 7b 0d t] ni "z Z" } {.
8c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 bre
8ca0: 61 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ak..
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8cd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
8ce0: 20 20 20 20 20 20 20 20 20 20 6c 61 73 73 69 67 lassig
8cf0: 6e 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 73 20 n [lindex $pnts
8d00: 24 69 5f 6e 65 78 74 5d 20 74 79 70 65 5f 6e 20 $i_next] type_n
8d10: 78 5f 6e 20 79 5f 6e 0d 0a 20 20 20 20 20 20 20 x_n y_n..
8d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
8d30: 7b 20 24 74 79 70 65 5f 6e 20 69 6e 20 22 51 20 { $type_n in "Q
8d40: 43 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 C" } {..
8d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8d60: 69 66 20 7b 20 5b 6c 69 6e 64 65 78 20 24 61 72 if { [lindex $ar
8d70: 67 73 20 30 5d 20 65 71 20 22 6e 6f 72 6d 61 6c gs 0] eq "normal
8d80: 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 " } {..
8d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8da0: 20 20 20 73 65 74 5f 65 72 72 6f 72 20 24 64 20 set_error $d
8db0: 24 69 64 20 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 $id "not impleme
8dc0: 6e 74 65 64 20 61 72 69 73 74 65 2c 6e 2c 6e 6f nted ariste,n,no
8dd0: 72 6d 61 6c 20 69 6e 20 71 75 61 64 72 61 74 69 rmal in quadrati
8de0: 63 20 6f 72 20 63 75 62 69 63 20 70 61 74 68 22 c or cubic path"
8df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8e00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8e20: 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 20 20 ..
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
8e40: 74 20 62 70 6e 74 73 20 5b 6c 69 73 74 20 24 78 t bpnts [list $x
8e50: 20 24 79 20 24 78 5f 6e 20 24 79 5f 6e 5d 0d 0a $y $x_n $y_n]..
8e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8e70: 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 74 79 if { $ty
8e80: 70 65 5f 6e 20 69 6e 20 22 43 22 20 7d 20 7b 0d pe_n in "C" } {.
8e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 las
8eb0: 73 69 67 6e 20 5b 6c 69 6e 64 65 78 20 24 70 6e sign [lindex $pn
8ec0: 74 73 20 24 69 5f 6e 65 78 74 5d 20 74 79 70 65 ts $i_next] type
8ed0: 5f 6e 20 78 5f 6e 20 79 5f 6e 20 7a 5f 6e 20 78 _n x_n y_n z_n x
8ee0: 43 20 79 43 20 7a 43 0d 0a 20 20 20 20 20 20 20 C yC zC..
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8f00: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 62 70 6e lappend bpn
8f10: 74 73 20 24 78 43 20 24 79 43 0d 0a 20 20 20 20 ts $xC $yC..
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8f30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
8f50: 65 74 20 69 5f 6e 65 78 74 32 20 24 69 5f 6e 65 et i_next2 $i_ne
8f60: 78 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 xt..
8f70: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 for
8f80: 7b 20 73 65 74 20 69 5f 74 72 79 20 30 20 7d 20 { set i_try 0 }
8f90: 7b 20 24 69 5f 74 72 79 20 3c 20 33 20 7d 20 7b { $i_try < 3 } {
8fa0: 20 69 6e 63 72 20 69 5f 74 72 79 20 7d 20 7b 0d incr i_try } {.
8fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
8fd0: 7b 20 24 69 5f 6e 65 78 74 32 20 3c 20 5b 6c 6c { $i_next2 < [ll
8fe0: 65 6e 67 74 68 20 24 70 6e 74 73 5d 2d 31 20 7d ength $pnts]-1 }
8ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
9000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9010: 20 20 20 20 73 65 74 20 69 5f 6e 65 78 74 32 20 set i_next2
9020: 5b 65 78 70 72 20 7b 24 69 5f 6e 65 78 74 32 2b [expr {$i_next2+
9030: 31 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 1}]..
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9050: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {..
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9070: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 set i
9080: 5f 6e 65 78 74 32 20 30 0d 0a 20 20 20 20 20 20 _next2 0..
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90c0: 20 20 20 20 20 69 66 20 7b 20 5b 6c 69 6e 64 65 if { [linde
90d0: 78 20 24 70 6e 74 73 20 24 69 5f 6e 65 78 74 32 x $pnts $i_next2
90e0: 5d 20 6e 69 20 22 7a 20 5a 22 20 7d 20 7b 0d 0a ] ni "z Z" } {..
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9110: 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 20 break..
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
9150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9160: 20 20 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e lassign
9170: 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 73 20 24 [lindex $pnts $
9180: 69 5f 6e 65 78 74 32 5d 20 74 79 70 65 5f 6e 32 i_next2] type_n2
9190: 20 78 5f 6e 32 20 79 5f 6e 32 0d 0a 20 20 20 20 x_n2 y_n2..
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
91b0: 20 20 20 20 69 66 20 7b 20 24 74 79 70 65 5f 6e if { $type_n
91c0: 32 20 6e 65 20 22 70 6f 69 6e 74 22 20 7d 20 7b 2 ne "point" } {
91d0: 20 65 72 72 6f 72 20 22 61 61 20 24 74 79 70 65 error "aa $type
91e0: 5f 6e 32 22 20 7d 0d 0a 20 20 20 20 20 20 20 20 _n2" }..
91f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9200: 6c 61 70 70 65 6e 64 20 62 70 6e 74 73 20 24 78 lappend bpnts $x
9210: 5f 6e 32 20 24 79 5f 6e 32 0d 0a 20 20 20 20 20 _n2 $y_n2..
9220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9230: 20 20 20 69 66 20 7b 20 24 74 79 70 65 5f 6e 20 if { $type_n
9240: 69 6e 20 22 51 22 20 7d 20 7b 0d 0a 20 20 20 20 in "Q" } {..
9250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9260: 20 20 20 20 20 20 20 20 73 65 74 20 70 6e 74 20 set pnt
9270: 5b 6d 3a 3a 65 76 61 6c 5f 71 75 61 64 72 61 74 [m::eval_quadrat
9280: 69 63 5f 62 65 7a 69 65 72 20 7b 2a 7d 24 62 70 ic_bezier {*}$bp
9290: 6e 74 73 20 24 63 6f 6f 72 64 5d 0d 0a 20 20 20 nts $coord]..
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
92b0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {..
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
92d0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p
92e0: 6e 74 20 5b 6d 3a 3a 65 76 61 6c 5f 63 75 62 69 nt [m::eval_cubi
92f0: 63 5f 62 65 7a 69 65 72 20 7b 2a 7d 24 62 70 6e c_bezier {*}$bpn
9300: 74 73 20 24 63 6f 6f 72 64 5d 20 0d 0a 20 20 20 ts $coord] ..
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9320: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
9330: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el
9340: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {..
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
9360: 20 7b 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 { [lindex $args
9370: 20 30 5d 20 65 71 20 22 6e 6f 72 6d 61 6c 22 20 0] eq "normal"
9380: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
9390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93a0: 20 6c 61 73 73 69 67 6e 20 5b 6c 69 6e 64 65 78 lassign [lindex
93b0: 20 24 70 6e 74 73 47 20 65 6e 64 5d 20 74 79 70 $pntsG end] typ
93c0: 65 50 20 78 50 20 79 50 0d 0a 20 20 20 20 20 20 eP xP yP..
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93e0: 20 20 20 20 20 20 73 65 74 20 76 20 5b 6d 3a 3a set v [m::
93f0: 73 75 62 20 22 24 78 20 24 79 22 20 22 24 78 50 sub "$x $y" "$xP
9400: 20 24 79 50 22 5d 0d 0a 20 20 20 20 20 20 20 20 $yP"]..
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9420: 20 20 20 20 73 65 74 20 74 20 5b 6d 3a 3a 73 75 set t [m::su
9430: 62 20 22 24 78 5f 6e 20 24 79 5f 6e 22 20 22 24 b "$x_n $y_n" "$
9440: 78 20 24 79 22 5d 0d 0a 20 20 20 20 20 20 20 20 x $y"]..
9450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9460: 20 20 20 20 73 65 74 20 6e 20 5b 6c 69 73 74 20 set n [list
9470: 5b 65 78 70 72 20 7b 2d 31 2a 5b 6c 69 6e 64 65 [expr {-1*[linde
9480: 78 20 24 74 20 31 5d 7d 5d 20 5b 6c 69 6e 64 65 x $t 1]}] [linde
9490: 78 20 24 74 20 30 5d 5d 0d 0a 20 20 20 20 20 20 x $t 0]]..
94a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
94b0: 20 20 20 20 20 20 73 65 74 20 6e 30 20 5b 6d 3a set n0 [m:
94c0: 3a 75 6e 69 74 4c 65 6e 67 74 68 56 65 63 74 6f :unitLengthVecto
94d0: 72 20 24 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r $n]..
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
94f0: 20 20 20 73 65 74 20 64 6f 74 20 5b 6d 3a 3a 64 set dot [m::d
9500: 6f 74 70 72 6f 64 75 63 74 20 24 76 20 24 6e 30 otproduct $v $n0
9510: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
9530: 65 74 20 70 6e 74 20 5b 6d 3a 3a 61 78 70 79 20 et pnt [m::axpy
9540: 24 64 6f 74 20 24 6e 30 20 22 24 78 50 20 24 79 $dot $n0 "$xP $y
9550: 50 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 P"]..
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 } e
9570: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {..
9580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9590: 20 20 20 73 65 74 20 70 6e 74 20 5b 6d 3a 3a 65 set pnt [m::e
95a0: 76 61 6c 5f 6c 69 6e 65 61 72 20 24 78 20 24 79 val_linear $x $y
95b0: 20 24 78 5f 6e 20 24 79 5f 6e 20 24 63 6f 6f 72 $x_n $y_n $coor
95c0: 64 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d]..
95d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
9600: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b if { [
9610: 6c 6c 65 6e 67 74 68 20 24 61 72 67 73 5d 20 3e llength $args] >
9620: 20 31 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 1 } {..
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9640: 73 65 74 20 74 20 5b 6d 3a 3a 73 75 62 20 22 24 set t [m::sub "$
9650: 78 5f 6e 20 24 79 5f 6e 22 20 22 24 78 20 24 79 x_n $y_n" "$x $y
9660: 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "]..
9670: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
9680: 6e 20 5b 6c 69 73 74 20 5b 65 78 70 72 20 7b 2d n [list [expr {-
9690: 31 2a 5b 6c 69 6e 64 65 78 20 24 74 20 31 5d 7d 1*[lindex $t 1]}
96a0: 5d 20 5b 6c 69 6e 64 65 78 20 24 74 20 30 5d 5d ] [lindex $t 0]]
96b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
96c0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f set co
96d0: 6f 72 64 59 20 5b 65 78 70 72 20 7b 5b 6c 69 6e ordY [expr {[lin
96e0: 64 65 78 20 24 61 72 67 73 20 31 5d 2f 31 30 30 dex $args 1]/100
96f0: 2e 30 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 .0}]..
9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
9710: 74 20 70 6e 74 20 5b 6d 3a 3a 61 78 70 79 20 24 t pnt [m::axpy $
9720: 63 6f 6f 72 64 59 20 24 6e 20 24 70 6e 74 5d 0d coordY $n $pnt].
9730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9740: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
9750: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
9760: 72 6e 20 24 70 6e 74 0d 0a 20 20 20 20 20 20 20 rn $pnt..
9770: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
9780: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
9790: 20 20 20 20 20 20 20 69 6e 63 72 20 69 64 78 0d incr idx.
97a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }..
97b0: 7d 0d 0a 20 20 20 20 69 66 20 7b 20 24 6e 75 6d }.. if { $num
97c0: 20 3c 3d 20 30 20 7c 7c 20 24 6e 75 6d 20 3e 20 <= 0 || $num >
97d0: 5b 6c 6c 65 6e 67 74 68 20 24 70 6e 74 73 5d 20 [llength $pnts]
97e0: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 } {.. set
97f0: 5f 65 72 72 6f 72 20 24 64 20 24 69 64 20 22 69 _error $d $id "i
9800: 6e 63 6f 72 72 65 63 74 20 70 6f 69 6e 74 20 6e ncorrect point n
9810: 75 6d 20 6d 75 73 74 20 62 65 20 3e 30 20 3c 6e um must be >0 <n
9820: 70 6f 69 6e 74 73 22 0d 0a 20 20 20 20 20 20 20 points"..
9830: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 7d 0d 0a return.. }..
9840: 20 20 20 20 73 65 74 5f 65 72 72 6f 72 20 24 64 set_error $d
9850: 20 24 69 64 20 22 69 6e 63 6f 72 72 65 63 74 20 $id "incorrect
9860: 70 6f 69 6e 74 22 0d 0a 7d 0d 0a 0d 0a 70 72 6f point"..}....pro
9870: 63 20 73 76 67 6d 6c 3a 3a 74 72 61 6e 73 66 6f c svgml::transfo
9880: 72 6d 20 7b 20 70 6e 74 20 74 79 70 65 20 62 62 rm { pnt type bb
9890: 6f 78 50 78 20 62 62 6f 78 50 79 20 62 62 6f 78 oxPx bboxPy bbox
98a0: 50 7a 20 7d 20 7b 0d 0a 20 20 20 20 0d 0a 20 20 Pz } {.. ..
98b0: 20 20 6c 61 73 73 69 67 6e 20 24 70 6e 74 20 78 lassign $pnt x
98c0: 20 79 20 7a 0d 0a 20 20 20 20 0d 0a 20 20 20 20 y z.. ..
98d0: 69 66 20 7b 20 24 74 79 70 65 20 69 6e 20 22 70 if { $type in "p
98e0: 6f 69 6e 74 20 4d 20 4c 20 43 20 51 20 41 22 20 oint M L C Q A"
98f0: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 } {.. set
9900: 20 78 20 5b 65 78 70 72 20 7b 5b 6c 69 6e 64 65 x [expr {[linde
9910: 78 20 24 62 62 6f 78 50 78 20 30 5d 2b 24 78 2f x $bboxPx 0]+$x/
9920: 31 30 30 2e 30 2a 5b 6c 69 6e 64 65 78 20 24 62 100.0*[lindex $b
9930: 62 6f 78 50 78 20 32 5d 7d 5d 0d 0a 20 20 20 20 boxPx 2]}]..
9940: 20 20 20 20 73 65 74 20 79 20 5b 65 78 70 72 20 set y [expr
9950: 7b 5b 6c 69 6e 64 65 78 20 24 62 62 6f 78 50 79 {[lindex $bboxPy
9960: 20 31 5d 2b 24 79 2f 31 30 30 2e 30 2a 5b 6c 69 1]+$y/100.0*[li
9970: 6e 64 65 78 20 24 62 62 6f 78 50 79 20 33 5d 7d ndex $bboxPy 3]}
9980: 5d 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 20 ].. if {
9990: 24 7a 20 6e 65 20 22 22 20 7d 20 7b 0d 0a 20 20 $z ne "" } {..
99a0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7a 20 set z
99b0: 5b 65 78 70 72 20 7b 5b 6c 69 6e 64 65 78 20 24 [expr {[lindex $
99c0: 62 62 6f 78 50 7a 20 30 5d 2b 24 7a 2f 31 30 30 bboxPz 0]+$z/100
99d0: 2e 30 2a 5b 6c 69 6e 64 65 78 20 24 62 62 6f 78 .0*[lindex $bbox
99e0: 50 7a 20 32 5d 7d 5d 0d 0a 20 20 20 20 20 20 20 Pz 2]}]..
99f0: 20 7d 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b }.. } else {
9a00: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 78 20 .. set x
9a10: 5b 65 78 70 72 20 7b 24 78 2f 31 30 30 2e 30 2a [expr {$x/100.0*
9a20: 5b 6c 69 6e 64 65 78 20 24 62 62 6f 78 50 78 20 [lindex $bboxPx
9a30: 32 5d 7d 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 2]}].. se
9a40: 74 20 79 20 5b 65 78 70 72 20 7b 24 79 2f 31 30 t y [expr {$y/10
9a50: 30 2e 30 2a 5b 6c 69 6e 64 65 78 20 24 62 62 6f 0.0*[lindex $bbo
9a60: 78 50 79 20 33 5d 7d 5d 0d 0a 20 20 20 20 20 20 xPy 3]}]..
9a70: 20 20 69 66 20 7b 20 24 7a 20 6e 65 20 22 22 20 if { $z ne ""
9a80: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
9a90: 20 73 65 74 20 7a 20 5b 65 78 70 72 20 7b 24 7a set z [expr {$z
9aa0: 2f 31 30 30 2e 30 2a 5b 6c 69 6e 64 65 78 20 24 /100.0*[lindex $
9ab0: 62 62 6f 78 50 7a 20 32 5d 7d 5d 0d 0a 20 20 20 bboxPz 2]}]..
9ac0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 }.. }..
9ad0: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list
9ae0: 24 78 20 24 79 20 24 7a 5d 0d 0a 7d 0d 0a 0d 0a $x $y $z]..}....
9af0: 70 72 6f 63 20 73 76 67 6d 6c 3a 3a 63 61 6c 63 proc svgml::calc
9b00: 75 6c 61 74 65 5f 70 6f 69 6e 74 73 20 7b 20 69 ulate_points { i
9b10: 64 20 63 6f 70 79 5f 69 6e 66 6f 20 7d 20 7b 0d d copy_info } {.
9b20: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 64 0d . variable d.
9b30: 0a 20 20 20 20 0d 0a 20 20 20 20 73 65 74 20 70 . .. set p
9b40: 61 72 65 6e 74 20 5b 63 61 6c 63 75 6c 61 74 65 arent [calculate
9b50: 5f 70 61 72 65 6e 74 20 24 69 64 5d 0d 0a 20 20 _parent $id]..
9b60: 20 20 0d 0a 20 20 20 20 73 65 74 20 70 6e 74 73 .. set pnts
9b70: 20 22 22 0d 0a 20 20 20 20 66 6f 72 65 61 63 68 "".. foreach
9b80: 20 22 6e 20 76 22 20 5b 64 69 63 74 20 67 65 74 "n v" [dict get
9b90: 20 24 64 20 69 64 73 20 24 69 64 20 70 72 6f 70 $d ids $id prop
9ba0: 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 s] {.. if
9bb0: 20 7b 20 24 6e 20 6e 69 20 22 70 6f 69 6e 74 20 { $n ni "point
9bc0: 64 65 6c 74 61 2d 70 6f 69 6e 74 20 77 69 64 74 delta-point widt
9bd0: 68 2d 68 65 69 67 68 74 22 20 7d 20 7b 20 63 6f h-height" } { co
9be0: 6e 74 69 6e 75 65 20 7d 0d 0a 20 20 20 20 20 20 ntinue }..
9bf0: 20 20 23 70 75 74 73 20 22 2d 2d 2d 63 61 6c 63 #puts "---calc
9c00: 75 6c 61 74 65 5f 70 6f 69 6e 74 73 20 24 6e 20 ulate_points $n
9c10: 2d 2d 2d 20 24 76 22 0d 0a 20 20 20 20 20 20 20 --- $v"..
9c20: 20 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 .. set p
9c30: 61 72 65 6e 74 4c 20 24 70 61 72 65 6e 74 0d 0a arentL $parent..
9c40: 20 20 20 20 20 20 20 20 73 65 74 20 70 6e 74 20 set pnt
9c50: 22 22 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 "".. set
9c60: 6e 4c 20 24 6e 0d 0a 20 20 20 20 20 20 20 20 73 nL $n.. s
9c70: 65 74 20 70 61 72 65 6e 74 73 20 22 22 0d 0a 20 et parents ""..
9c80: 20 20 20 20 20 20 20 73 65 74 20 63 61 6c 63 75 set calcu
9c90: 6c 61 74 65 5f 74 79 70 65 20 22 22 0d 0a 20 20 late_type ""..
9ca0: 20 20 20 20 20 20 73 65 74 20 76 4c 69 73 74 20 set vList
9cb0: 5b 73 70 6c 69 74 20 24 76 20 2c 5d 0d 0a 20 20 [split $v ,]..
9cc0: 20 20 20 20 20 20 66 6f 72 20 7b 20 73 65 74 20 for { set
9cd0: 69 20 30 20 7d 20 7b 20 24 69 20 3c 20 5b 6c 6c i 0 } { $i < [ll
9ce0: 65 6e 67 74 68 20 24 76 4c 69 73 74 5d 20 7d 20 ength $vList] }
9cf0: 7b 20 69 6e 63 72 20 69 20 7d 20 7b 0d 0a 20 20 { incr i } {..
9d00: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 20 set c
9d10: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 6c 69 [string trim [li
9d20: 6e 64 65 78 20 24 76 4c 69 73 74 20 24 69 5d 5d ndex $vList $i]]
9d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
9d40: 20 7b 20 5b 72 65 67 65 78 70 20 7b 5e 23 28 5c { [regexp {^#(\
9d50: 53 2b 29 24 7d 20 24 63 20 7b 7d 20 69 64 50 5d S+)$} $c {} idP]
9d60: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
9d70: 20 20 20 20 20 20 73 65 74 20 70 61 72 65 6e 74 set parent
9d80: 4c 20 5b 72 65 73 6f 6c 76 65 5f 69 64 20 24 69 L [resolve_id $i
9d90: 64 50 20 24 69 64 5d 0d 0a 20 20 20 20 20 20 20 dP $id]..
9da0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 } elseif {
9db0: 5b 72 65 67 65 78 70 20 7b 5e 28 5b 2d 2b 5c 64 [regexp {^([-+\d
9dc0: 2e 5d 2b 29 24 7d 20 24 63 20 7b 7d 20 76 61 6c .]+)$} $c {} val
9dd0: 75 65 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 ue] } {..
9de0: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 lappend
9df0: 20 70 6e 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 pnt $value..
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 lap
9e10: 70 65 6e 64 20 70 61 72 65 6e 74 73 20 24 70 61 pend parents $pa
9e20: 72 65 6e 74 4c 0d 0a 20 20 20 20 20 20 20 20 20 rentL..
9e30: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 5b 72 } elseif { [r
9e40: 65 67 65 78 70 20 7b 5e 6e 6f 72 6d 61 6c 24 7d egexp {^normal$}
9e50: 20 24 63 20 76 61 6c 75 65 5d 20 7d 20 7b 0d 0a $c value] } {..
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9e70: 6c 61 70 70 65 6e 64 20 70 6e 74 20 24 76 61 6c lappend pnt $val
9e80: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ue..
9e90: 20 20 20 20 6c 61 70 70 65 6e 64 20 70 61 72 65 lappend pare
9ea0: 6e 74 73 20 24 70 61 72 65 6e 74 4c 0d 0a 20 20 nts $parentL..
9eb0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
9ec0: 69 66 20 7b 20 5b 72 65 67 65 78 70 20 7b 5e 5b if { [regexp {^[
9ed0: 6d 4d 43 63 71 51 7a 5a 6c 4c 5d 24 7d 20 24 63 mMCcqQzZlL]$} $c
9ee0: 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ] } {..
9ef0: 20 20 20 20 20 20 20 73 65 74 20 6e 4c 20 24 63 set nL $c
9f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. }
9f10: 65 6c 73 65 69 66 20 7b 20 5b 72 65 67 65 78 70 elseif { [regexp
9f20: 20 7b 5e 5b 61 41 5d 24 7d 20 24 63 5d 20 7d 20 {^[aA]$} $c] }
9f30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
9f40: 20 20 20 73 65 74 20 6e 4c 20 24 63 0d 0a 20 20 set nL $c..
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
9f60: 74 20 70 61 72 61 6d 65 74 65 72 73 20 5b 6c 72 t parameters [lr
9f70: 61 6e 67 65 20 24 76 4c 69 73 74 20 24 69 2b 31 ange $vList $i+1
9f80: 20 24 69 2b 35 5d 0d 0a 20 20 20 20 20 20 20 20 $i+5]..
9f90: 20 20 20 20 20 20 20 20 69 6e 63 72 20 69 20 35 incr i 5
9fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
9fb0: 20 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20 continue..
9fc0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 } elseif
9fd0: 20 7b 20 5b 72 65 67 65 78 70 20 7b 5e 41 41 24 { [regexp {^AA$
9fe0: 7d 20 24 63 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 } $c] } {..
9ff0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e set n
a000: 4c 20 24 63 0d 0a 20 20 20 20 20 20 20 20 20 20 L $c..
a010: 20 20 20 20 20 20 73 65 74 20 70 61 72 61 6d 65 set parame
a020: 74 65 72 73 20 5b 6c 72 61 6e 67 65 20 24 76 4c ters [lrange $vL
a030: 69 73 74 20 24 69 2b 31 20 24 69 2b 31 5d 0d 0a ist $i+1 $i+1]..
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a050: 69 6e 63 72 20 69 20 31 0d 0a 20 20 20 20 20 20 incr i 1..
a060: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e contin
a070: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ue..
a080: 7d 20 65 6c 73 65 69 66 20 7b 20 5b 72 65 67 65 } elseif { [rege
a090: 78 70 20 7b 76 65 72 74 65 78 7c 61 72 69 73 74 xp {vertex|arist
a0a0: 65 7c 66 61 63 65 7d 20 24 63 5d 20 7d 20 7b 0d e|face} $c] } {.
a0b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a0c0: 20 73 65 74 20 63 61 6c 63 75 6c 61 74 65 5f 74 set calculate_t
a0d0: 79 70 65 20 24 63 0d 0a 20 20 20 20 20 20 20 20 ype $c..
a0e0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {..
a0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
a100: 74 5f 65 72 72 6f 72 20 24 64 20 24 69 64 20 22 t_error $d $id "
a110: 69 6e 63 6f 72 72 65 63 74 20 66 6f 72 6d 61 74 incorrect format
a120: 20 27 24 6e 3a 24 76 27 22 0d 0a 20 20 20 20 20 '$n:$v'"..
a130: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
a140: 20 20 20 20 20 20 69 66 20 7b 20 24 6e 4c 20 69 if { $nL i
a150: 6e 20 22 7a 20 5a 22 20 7d 20 7b 0d 0a 20 20 20 n "z Z" } {..
a160: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 lap
a170: 70 65 6e 64 20 70 6e 74 73 20 5b 6c 69 73 74 20 pend pnts [list
a180: 7a 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 z]..
a190: 20 20 20 20 69 66 20 7b 20 5b 64 69 63 74 20 73 if { [dict s
a1a0: 69 7a 65 20 24 63 6f 70 79 5f 69 6e 66 6f 5d 20 ize $copy_info]
a1b0: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
a1c0: 20 20 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e lassign
a1d0: 20 5b 63 6f 70 79 5f 6f 70 65 72 61 74 69 6f 6e [copy_operation
a1e0: 20 24 69 64 20 5b 6c 69 73 74 20 24 6e 4c 20 22 $id [list $nL "
a1f0: 22 20 22 22 5d 20 5b 6c 6c 65 6e 67 74 68 20 24 " ""] [llength $
a200: 70 6e 74 73 5d 20 24 63 6f 70 79 5f 69 6e 66 6f pnts] $copy_info
a210: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
a220: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
a230: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 20 0d continue .
a240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
a250: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if {
a260: 20 24 63 61 6c 63 75 6c 61 74 65 5f 74 79 70 65 $calculate_type
a270: 20 65 71 20 22 76 65 72 74 65 78 22 20 7d 20 7b eq "vertex" } {
a280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
a290: 20 20 69 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 if { [llength
a2a0: 24 70 6e 74 5d 20 3c 20 31 20 7d 20 7b 0d 0a 20 $pnt] < 1 } {..
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a2c0: 20 20 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 continue..
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el
a2f0: 73 65 69 66 20 7b 20 24 63 61 6c 63 75 6c 61 74 seif { $calculat
a300: 65 5f 74 79 70 65 20 65 71 20 22 61 72 69 73 74 e_type eq "arist
a310: 65 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 e" } {..
a320: 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 6c 6c if { [ll
a330: 65 6e 67 74 68 20 24 70 6e 74 5d 20 3c 20 32 20 ength $pnt] < 2
a340: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
a350: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 continu
a360: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e..
a370: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
a380: 20 20 20 20 20 20 69 66 20 7b 20 5b 6c 6c 65 6e if { [llen
a390: 67 74 68 20 24 70 6e 74 5d 20 3d 3d 20 32 20 26 gth $pnt] == 2 &
a3a0: 26 20 24 69 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 & $i == [llength
a3b0: 20 24 76 4c 69 73 74 5d 2d 32 20 26 26 20 0d 0a $vList]-2 && ..
a3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a3d0: 20 20 20 20 5b 69 73 5f 6e 75 6d 62 65 72 20 5b [is_number [
a3e0: 6c 69 6e 64 65 78 20 24 76 4c 69 73 74 20 24 69 lindex $vList $i
a3f0: 2b 31 5d 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 +1]] } {..
a400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
a410: 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 ntinue..
a420: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
a430: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 } elseif
a440: 7b 20 24 63 61 6c 63 75 6c 61 74 65 5f 74 79 70 { $calculate_typ
a450: 65 20 65 71 20 22 66 61 63 65 22 20 7d 20 7b 0d e eq "face" } {.
a460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a470: 20 69 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 24 if { [llength $
a480: 70 6e 74 5d 20 3c 20 33 20 7d 20 7b 0d 0a 20 20 pnt] < 3 } {..
a490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a4a0: 20 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20 continue..
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
a4d0: 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 24 70 6e f { [llength $pn
a4e0: 74 5d 20 3d 3d 20 33 20 26 26 20 24 69 20 3d 3d t] == 3 && $i ==
a4f0: 20 5b 6c 6c 65 6e 67 74 68 20 24 76 4c 69 73 74 [llength $vList
a500: 5d 2d 32 20 26 26 20 0d 0a 20 20 20 20 20 20 20 ]-2 && ..
a510: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 73 [is
a520: 5f 6e 75 6d 62 65 72 20 5b 6c 69 6e 64 65 78 20 _number [lindex
a530: 24 76 4c 69 73 74 20 24 69 2b 31 5d 5d 20 7d 20 $vList $i+1]] }
a540: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
a550: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0d continue.
a560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a570: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
a580: 7d 20 65 6c 73 65 69 66 20 7b 20 24 6e 4c 20 65 } elseif { $nL e
a590: 71 20 22 77 69 64 74 68 2d 68 65 69 67 68 74 22 q "width-height"
a5a0: 20 26 26 20 5b 6c 6c 65 6e 67 74 68 20 24 76 4c && [llength $vL
a5b0: 69 73 74 5d 20 3d 3d 20 33 20 26 26 20 5c 0d 0a ist] == 3 && \..
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a5d0: 5b 6c 6c 65 6e 67 74 68 20 24 70 6e 74 5d 20 3c [llength $pnt] <
a5e0: 20 33 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 3 } {..
a5f0: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 continue
a600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. }
a610: 65 6c 73 65 69 66 20 7b 20 5b 6c 6c 65 6e 67 74 elseif { [llengt
a620: 68 20 24 70 6e 74 5d 20 3c 20 32 20 7d 20 7b 0d h $pnt] < 2 } {.
a630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a640: 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 continue..
a650: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
a660: 20 20 20 20 20 20 6c 61 73 73 69 67 6e 20 24 70 lassign $p
a670: 6e 74 20 78 20 79 20 7a 0d 0a 20 20 20 20 20 20 nt x y z..
a680: 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 ..
a690: 20 20 20 20 69 66 20 7b 20 24 63 61 6c 63 75 6c if { $calcul
a6a0: 61 74 65 5f 74 79 70 65 20 69 6e 20 22 76 65 72 ate_type in "ver
a6b0: 74 65 78 20 61 72 69 73 74 65 20 66 61 63 65 22 tex ariste face"
a6c0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
a6d0: 20 20 20 20 20 20 69 66 20 7b 20 21 5b 64 69 63 if { ![dic
a6e0: 74 20 65 78 69 73 74 73 20 24 64 20 69 64 73 20 t exists $d ids
a6f0: 24 70 61 72 65 6e 74 4c 20 62 62 6f 78 5d 20 7d $parentL bbox] }
a700: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
a710: 20 20 20 20 20 20 20 20 69 66 20 7b 20 21 5b 64 if { ![d
a720: 69 63 74 20 65 78 69 73 74 73 20 24 64 20 69 64 ict exists $d id
a730: 73 20 24 70 61 72 65 6e 74 4c 5d 20 7d 20 7b 0d s $parentL] } {.
a740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a750: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 error "
a760: 65 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 70 error: unknown p
a770: 61 72 65 6e 74 20 69 64 20 23 24 70 61 72 65 6e arent id #$paren
a780: 74 4c 20 66 6f 72 20 69 64 20 23 24 69 64 22 0d tL for id #$id".
a790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a7a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
a7b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
a7c0: 72 6e 20 2d 63 6f 64 65 20 63 6f 6e 74 69 6e 75 rn -code continu
a7d0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e..
a7e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
a7f0: 20 20 20 20 20 20 6c 61 73 73 69 67 6e 20 5b 67 lassign [g
a800: 65 74 5f 67 65 6f 6d 65 74 72 79 5f 70 6f 69 6e et_geometry_poin
a810: 74 20 24 70 61 72 65 6e 74 4c 20 24 63 61 6c 63 t $parentL $calc
a820: 75 6c 61 74 65 5f 74 79 70 65 20 24 70 6e 74 73 ulate_type $pnts
a830: 20 7b 2a 7d 24 70 6e 74 5d 20 78 20 79 0d 0a 20 {*}$pnt] x y..
a840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
a850: 65 74 20 63 61 6c 63 75 6c 61 74 65 5f 74 79 70 et calculate_typ
a860: 65 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 e ""..
a870: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {..
a880: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore
a890: 61 63 68 20 70 61 72 65 6e 74 4c 20 24 70 61 72 ach parentL $par
a8a0: 65 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ents {..
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if {
a8c0: 20 21 5b 64 69 63 74 20 65 78 69 73 74 73 20 24 ![dict exists $
a8d0: 64 20 69 64 73 20 24 70 61 72 65 6e 74 4c 20 62 d ids $parentL b
a8e0: 62 6f 78 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 box] } {..
a8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a900: 20 20 69 66 20 7b 20 21 5b 64 69 63 74 20 65 78 if { ![dict ex
a910: 69 73 74 73 20 24 64 20 69 64 73 20 24 70 61 72 ists $d ids $par
a920: 65 6e 74 4c 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 entL] } {..
a930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a940: 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 65 72 error "er
a950: 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 70 61 72 ror: unknown par
a960: 65 6e 74 20 69 64 20 23 24 70 61 72 65 6e 74 4c ent id #$parentL
a970: 20 66 6f 72 20 69 64 20 23 24 69 64 22 0d 0a 20 for id #$id"..
a980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a990: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a9b0: 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 63 return -code c
a9c0: 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 ontinue..
a9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
a9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a9f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
aa00: 20 20 20 73 65 74 20 62 62 6f 78 50 78 20 5b 64 set bboxPx [d
aa10: 69 63 74 20 67 65 74 20 24 64 20 69 64 73 20 5b ict get $d ids [
aa20: 6c 69 6e 64 65 78 20 24 70 61 72 65 6e 74 73 20 lindex $parents
aa30: 30 5d 20 62 62 6f 78 5d 0d 0a 20 20 20 20 20 20 0] bbox]..
aa40: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 62 62 set bb
aa50: 6f 78 50 79 20 5b 64 69 63 74 20 67 65 74 20 24 oxPy [dict get $
aa60: 64 20 69 64 73 20 5b 6c 69 6e 64 65 78 20 24 70 d ids [lindex $p
aa70: 61 72 65 6e 74 73 20 31 5d 20 62 62 6f 78 5d 0d arents 1] bbox].
aa80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
aa90: 20 69 66 20 7b 20 24 7a 20 6e 65 20 22 22 20 7d if { $z ne "" }
aaa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
aab0: 20 20 20 20 20 20 20 20 73 65 74 20 62 62 6f 78 set bbox
aac0: 50 7a 20 5b 64 69 63 74 20 67 65 74 20 24 64 20 Pz [dict get $d
aad0: 69 64 73 20 5b 6c 69 6e 64 65 78 20 24 70 61 72 ids [lindex $par
aae0: 65 6e 74 73 20 32 5d 20 62 62 6f 78 5d 0d 0a 20 ents 2] bbox]..
aaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
ab00: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {..
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
ab20: 20 62 62 6f 78 50 7a 20 22 22 0d 0a 20 20 20 20 bboxPz ""..
ab30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
ab40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c l
ab50: 61 73 73 69 67 6e 20 5b 74 72 61 6e 73 66 6f 72 assign [transfor
ab60: 6d 20 22 24 78 20 24 79 20 24 7a 22 20 24 6e 4c m "$x $y $z" $nL
ab70: 20 24 62 62 6f 78 50 78 20 24 62 62 6f 78 50 79 $bboxPx $bboxPy
ab80: 20 24 62 62 6f 78 50 7a 5d 20 78 20 79 20 7a 0d $bboxPz] x y z.
ab90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
aba0: 20 20 20 69 66 20 7b 20 24 6e 4c 20 69 6e 20 22 if { $nL in "
abb0: 61 20 41 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 a A" } {..
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 la
abd0: 73 73 69 67 6e 20 24 70 61 72 61 6d 65 74 65 72 ssign $parameter
abe0: 73 20 72 78 20 72 79 20 78 2d 61 78 69 73 2d 72 s rx ry x-axis-r
abf0: 6f 74 61 74 69 6f 6e 20 6c 61 72 67 65 2d 61 72 otation large-ar
ac00: 63 2d 66 6c 61 67 20 73 77 65 65 70 2d 66 6c 61 c-flag sweep-fla
ac10: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 g..
ac20: 20 20 20 20 20 20 20 73 65 74 20 72 78 20 5b 65 set rx [e
ac30: 78 70 72 20 7b 24 72 78 2f 31 30 30 2e 30 2a 5b xpr {$rx/100.0*[
ac40: 6c 69 6e 64 65 78 20 24 62 62 6f 78 50 78 20 32 lindex $bboxPx 2
ac50: 5d 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ]}]..
ac60: 20 20 20 20 20 20 20 20 20 73 65 74 20 72 79 20 set ry
ac70: 5b 65 78 70 72 20 7b 24 72 79 2f 31 30 30 2e 30 [expr {$ry/100.0
ac80: 2a 5b 6c 69 6e 64 65 78 20 24 62 62 6f 78 50 78 *[lindex $bboxPx
ac90: 20 33 5d 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 3]}]..
aca0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p
acb0: 61 72 61 6d 65 74 65 72 73 20 5b 6c 69 73 74 20 arameters [list
acc0: 24 72 78 20 24 72 79 20 24 7b 78 2d 61 78 69 73 $rx $ry ${x-axis
acd0: 2d 72 6f 74 61 74 69 6f 6e 7d 20 24 7b 6c 61 72 -rotation} ${lar
ace0: 67 65 2d 61 72 63 2d 66 6c 61 67 7d 20 24 7b 73 ge-arc-flag} ${s
acf0: 77 65 65 70 2d 66 6c 61 67 7d 5d 0d 0a 20 20 20 weep-flag}]..
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 } e
ad10: 6c 73 65 69 66 20 7b 20 24 6e 4c 20 69 6e 20 22 lseif { $nL in "
ad20: 41 41 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 AA" } {..
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 las
ad40: 73 69 67 6e 20 24 70 61 72 61 6d 65 74 65 72 73 sign $parameters
ad50: 20 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 r..
ad60: 20 20 20 20 20 20 20 20 73 65 74 20 72 20 5b 65 set r [e
ad70: 78 70 72 20 7b 24 72 2f 31 30 30 2e 30 2a 5b 6c xpr {$r/100.0*[l
ad80: 69 6e 64 65 78 20 24 62 62 6f 78 50 78 20 32 5d index $bboxPx 2]
ad90: 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }]..
ada0: 20 20 20 20 20 20 20 20 73 65 74 20 70 61 72 61 set para
adb0: 6d 65 74 65 72 73 20 5b 6c 69 73 74 20 24 72 5d meters [list $r]
adc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
add0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
ade0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
adf0: 69 66 20 7b 20 5b 6c 69 6e 64 65 78 20 24 70 6e if { [lindex $pn
ae00: 74 73 20 65 6e 64 20 30 5d 20 65 71 20 22 43 22 ts end 0] eq "C"
ae10: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
ae20: 20 20 20 20 20 73 65 74 20 6e 4c 20 43 32 0d 0a set nL C2..
ae30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el
ae40: 73 65 69 66 20 7b 20 5b 6c 69 6e 64 65 78 20 24 seif { [lindex $
ae50: 70 6e 74 73 20 65 6e 64 20 30 5d 20 65 71 20 22 pnts end 0] eq "
ae60: 63 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 c" } {..
ae70: 20 20 20 20 20 20 20 73 65 74 20 6e 4c 20 63 32 set nL c2
ae80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
ae90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a 20 . ..
aea0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p
aeb0: 6e 74 20 5b 6c 69 73 74 20 24 6e 4c 20 24 78 20 nt [list $nL $x
aec0: 24 79 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 $y]..
aed0: 20 69 66 20 7b 20 24 7a 20 6e 65 20 22 22 20 7d if { $z ne "" }
aee0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
aef0: 20 20 20 20 6c 61 70 70 65 6e 64 20 70 6e 74 20 lappend pnt
af00: 24 7a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 $z..
af10: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 }.. i
af20: 66 20 7b 20 24 6e 4c 20 69 6e 20 22 61 20 41 20 f { $nL in "a A
af30: 41 41 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 AA" } {..
af40: 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 7a if { $z
af50: 20 65 71 20 22 22 20 7d 20 7b 0d 0a 20 20 20 20 eq "" } {..
af60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
af70: 6c 61 70 70 65 6e 64 20 70 6e 74 20 30 0d 0a 20 lappend pnt 0..
af80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
af90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
afa0: 20 20 6c 61 70 70 65 6e 64 20 70 6e 74 20 24 70 lappend pnt $p
afb0: 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20 20 arameters..
afc0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
afd0: 20 20 20 20 20 20 69 66 20 7b 20 24 6e 4c 20 69 if { $nL i
afe0: 6e 20 22 70 6f 69 6e 74 20 6d 20 4d 20 4c 20 43 n "point m M L C
aff0: 20 43 32 20 51 20 41 20 41 41 22 20 26 26 20 5b C2 Q A AA" && [
b000: 64 69 63 74 20 73 69 7a 65 20 24 63 6f 70 79 5f dict size $copy_
b010: 69 6e 66 6f 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 info] } {..
b020: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p
b030: 6e 74 20 5b 63 6f 70 79 5f 6f 70 65 72 61 74 69 nt [copy_operati
b040: 6f 6e 20 24 69 64 20 24 70 6e 74 20 5b 6c 6c 65 on $id $pnt [lle
b050: 6e 67 74 68 20 24 70 6e 74 73 5d 20 24 63 6f 70 ngth $pnts] $cop
b060: 79 5f 69 6e 66 6f 5d 0d 0a 20 20 20 20 20 20 20 y_info]..
b070: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
b080: 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 20 20 ..
b090: 20 20 6c 61 70 70 65 6e 64 20 70 6e 74 73 20 24 lappend pnts $
b0a0: 70 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 pnt..
b0b0: 20 73 65 74 20 70 6e 74 20 22 22 0d 0a 20 20 20 set pnt ""..
b0c0: 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 4c 20 set nL
b0d0: 24 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 $n..
b0e0: 73 65 74 20 70 61 72 65 6e 74 4c 20 24 70 61 72 set parentL $par
b0f0: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ent..
b100: 20 73 65 74 20 70 61 72 65 6e 74 73 20 22 22 0d set parents "".
b110: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }..
b120: 20 20 20 20 69 66 20 7b 20 5b 6c 6c 65 6e 67 74 if { [llengt
b130: 68 20 24 70 6e 74 5d 20 3d 3d 20 31 20 7d 20 7b h $pnt] == 1 } {
b140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se
b150: 74 5f 65 72 72 6f 72 20 24 64 20 24 69 64 20 22 t_error $d $id "
b160: 62 61 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f bad number of co
b170: 6d 70 6f 6e 65 6e 74 73 20 27 24 6e 3a 24 76 27 mponents '$n:$v'
b180: 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ".. }..
b190: 20 20 7d 0d 0a 20 20 20 20 0d 0a 23 23 23 23 23 }.. ..#####
b1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b1e0: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 ############..#
b1f0: 20 20 20 63 6f 6e 76 65 72 74 69 6e 67 20 41 41 converting AA
b200: 20 74 6f 20 41 0d 0a 23 23 23 23 23 23 23 23 23 to A..#########
b210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b250: 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 0d 0a ########.. ..
b260: 20 20 20 20 66 6f 72 20 7b 20 73 65 74 20 69 20 for { set i
b270: 30 20 7d 20 7b 20 24 69 20 3c 20 5b 6c 6c 65 6e 0 } { $i < [llen
b280: 67 74 68 20 24 70 6e 74 73 5d 20 7d 20 7b 20 69 gth $pnts] } { i
b290: 6e 63 72 20 69 20 7d 20 7b 0d 0a 20 20 20 20 20 ncr i } {..
b2a0: 20 20 20 6c 61 73 73 69 67 6e 20 5b 6c 69 6e 64 lassign [lind
b2b0: 65 78 20 24 70 6e 74 73 20 24 69 5d 20 74 79 70 ex $pnts $i] typ
b2c0: 65 20 78 20 79 0d 0a 20 20 20 20 20 20 20 20 69 e x y.. i
b2d0: 66 20 7b 20 24 74 79 70 65 20 6e 65 20 22 41 41 f { $type ne "AA
b2e0: 22 20 7d 20 7b 20 63 6f 6e 74 69 6e 75 65 20 7d " } { continue }
b2f0: 0d 0a 20 20 20 20 20 20 20 20 6c 61 73 73 69 67 .. lassig
b300: 6e 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 73 20 n [lindex $pnts
b310: 24 69 5d 20 74 79 70 65 20 78 32 20 79 32 20 7a $i] type x2 y2 z
b320: 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 parameters..
b330: 20 20 20 20 20 6c 61 73 73 69 67 6e 20 24 70 61 lassign $pa
b340: 72 61 6d 65 74 65 72 73 20 72 0d 0a 20 20 20 20 rameters r..
b350: 20 20 20 20 6c 61 73 73 69 67 6e 20 5b 6c 69 6e lassign [lin
b360: 64 65 78 20 24 70 6e 74 73 20 24 69 2d 31 5d 20 dex $pnts $i-1]
b370: 2d 20 78 31 20 79 31 0d 0a 20 20 20 20 20 20 20 - x1 y1..
b380: 20 6c 61 73 73 69 67 6e 20 5b 6c 69 6e 64 65 78 lassign [lindex
b390: 20 24 70 6e 74 73 20 24 69 2b 31 5d 20 2d 20 78 $pnts $i+1] - x
b3a0: 33 20 79 33 0d 0a 20 20 20 20 20 20 20 20 73 65 3 y3.. se
b3b0: 74 20 70 31 32 20 5b 6d 3a 3a 73 75 62 20 22 24 t p12 [m::sub "$
b3c0: 78 31 20 24 79 31 22 20 22 24 78 32 20 24 79 32 x1 $y1" "$x2 $y2
b3d0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 "].. set
b3e0: 70 33 32 20 5b 6d 3a 3a 73 75 62 20 22 24 78 33 p32 [m::sub "$x3
b3f0: 20 24 79 33 22 20 22 24 78 32 20 24 79 32 22 5d $y3" "$x2 $y2"]
b400: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f .. set no
b410: 72 6d 31 32 20 5b 6d 3a 3a 6e 6f 72 6d 20 24 70 rm12 [m::norm $p
b420: 31 32 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 12].. set
b430: 20 6e 6f 72 6d 33 32 20 5b 6d 3a 3a 6e 6f 72 6d norm32 [m::norm
b440: 20 24 70 33 32 5d 0d 0a 20 20 20 20 20 20 20 20 $p32]..
b450: 73 65 74 20 61 6e 67 6c 65 20 5b 65 78 70 72 20 set angle [expr
b460: 7b 61 63 6f 73 28 5b 6d 3a 3a 64 6f 74 70 72 6f {acos([m::dotpro
b470: 64 75 63 74 20 24 70 31 32 20 24 70 33 32 5d 2f duct $p12 $p32]/
b480: 28 24 6e 6f 72 6d 31 32 2a 24 6e 6f 72 6d 33 32 ($norm12*$norm32
b490: 29 29 7d 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 ))}].. se
b4a0: 74 20 4c 20 5b 65 78 70 72 20 7b 24 72 2f 74 61 t L [expr {$r/ta
b4b0: 6e 28 24 61 6e 67 6c 65 2f 32 2e 30 29 7d 5d 0d n($angle/2.0)}].
b4c0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 6c 70 . set alp
b4d0: 68 61 20 5b 65 78 70 72 20 7b 24 4c 2f 24 6e 6f ha [expr {$L/$no
b4e0: 72 6d 31 32 7d 5d 0d 0a 20 20 20 20 20 20 20 20 rm12}]..
b4f0: 73 65 74 20 70 31 5f 6e 20 5b 6d 3a 3a 61 78 70 set p1_n [m::axp
b500: 79 20 24 61 6c 70 68 61 20 24 70 31 32 20 22 24 y $alpha $p12 "$
b510: 78 32 20 24 79 32 22 5d 0d 0a 20 20 20 20 20 20 x2 $y2"]..
b520: 20 20 73 65 74 20 61 6c 70 68 61 20 5b 65 78 70 set alpha [exp
b530: 72 20 7b 24 4c 2f 24 6e 6f 72 6d 33 32 7d 5d 0d r {$L/$norm32}].
b540: 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 32 5f . set p2_
b550: 6e 20 5b 6d 3a 3a 61 78 70 79 20 24 61 6c 70 68 n [m::axpy $alph
b560: 61 20 24 70 33 32 20 22 24 78 32 20 24 79 32 22 a $p32 "$x2 $y2"
b570: 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 ].. set s
b580: 77 65 65 70 5f 66 6c 61 67 20 30 0d 0a 20 20 20 weep_flag 0..
b590: 20 20 20 20 20 73 65 74 20 70 31 32 5f 33 44 20 set p12_3D
b5a0: 5b 6c 69 73 74 20 7b 2a 7d 24 70 31 32 20 30 5d [list {*}$p12 0]
b5b0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 33 .. set p3
b5c0: 32 5f 33 44 20 5b 6c 69 73 74 20 7b 2a 7d 24 70 2_3D [list {*}$p
b5d0: 33 32 20 30 5d 0d 0a 20 20 20 20 20 20 20 20 73 32 0].. s
b5e0: 65 74 20 63 72 6f 73 73 20 5b 6d 3a 3a 63 72 6f et cross [m::cro
b5f0: 73 73 70 72 6f 64 75 63 74 20 24 70 31 32 5f 33 ssproduct $p12_3
b600: 44 20 24 70 33 32 5f 33 44 5d 0d 0a 20 20 20 20 D $p32_3D]..
b610: 20 20 20 20 69 66 20 7b 20 5b 6c 69 6e 64 65 78 if { [lindex
b620: 20 24 63 72 6f 73 73 20 32 5d 20 3c 20 30 20 7d $cross 2] < 0 }
b630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
b640: 73 65 74 20 73 77 65 65 70 5f 66 6c 61 67 20 31 set sweep_flag 1
b650: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
b660: 20 20 20 20 20 6c 73 65 74 20 70 6e 74 73 20 24 lset pnts $
b670: 69 20 5b 6c 69 73 74 20 70 6f 69 6e 74 20 7b 2a i [list point {*
b680: 7d 24 70 31 5f 6e 5d 0d 0a 20 20 20 20 20 20 20 }$p1_n]..
b690: 20 73 65 74 20 70 6e 74 73 20 5b 6c 69 6e 73 65 set pnts [linse
b6a0: 72 74 20 24 70 6e 74 73 20 24 69 2b 31 20 5b 6c rt $pnts $i+1 [l
b6b0: 69 73 74 20 41 20 7b 2a 7d 24 70 32 5f 6e 20 30 ist A {*}$p2_n 0
b6c0: 20 5b 6c 69 73 74 20 24 72 20 24 72 20 30 20 30 [list $r $r 0 0
b6d0: 20 24 73 77 65 65 70 5f 66 6c 61 67 5d 5d 5d 0d $sweep_flag]]].
b6e0: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 0d 0a 23 23 . }.. ..##
b6f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d ###############.
b740: 0a 23 20 20 20 20 73 74 6f 72 69 6e 67 20 70 6e .# storing pn
b750: 74 73 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 ts..############
b760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b7a0: 23 23 23 23 23 0d 0a 20 20 20 20 0d 0a 20 20 20 #####.. ..
b7b0: 20 69 66 20 7b 20 5b 64 69 63 74 20 73 69 7a 65 if { [dict size
b7c0: 20 24 63 6f 70 79 5f 69 6e 66 6f 5d 20 3d 3d 20 $copy_info] ==
b7d0: 30 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 64 0 } {.. d
b7e0: 69 63 74 20 73 65 74 20 64 20 69 64 73 20 24 69 ict set d ids $i
b7f0: 64 20 70 6e 74 73 20 24 70 6e 74 73 0d 0a 20 20 d pnts $pnts..
b800: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {..
b810: 20 20 20 20 73 65 74 20 69 64 43 20 5b 64 69 63 set idC [dic
b820: 74 20 67 65 74 20 24 63 6f 70 79 5f 69 6e 66 6f t get $copy_info
b830: 20 69 64 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 id].. se
b840: 74 20 70 6e 74 73 4f 20 5b 64 69 63 74 5f 67 65 t pntsO [dict_ge
b850: 74 64 20 24 69 64 43 20 70 6e 74 73 20 22 22 5d td $idC pnts ""]
b860: 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e .. lappen
b870: 64 20 70 6e 74 73 4f 20 7b 2a 7d 24 70 6e 74 73 d pntsO {*}$pnts
b880: 0d 0a 20 20 20 20 20 20 20 20 64 69 63 74 20 73 .. dict s
b890: 65 74 20 64 20 69 64 73 20 24 69 64 43 20 70 6e et d ids $idC pn
b8a0: 74 73 20 24 70 6e 74 73 0d 0a 20 20 20 20 7d 0d ts $pnts.. }.
b8b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 70 6e 74 . return $pnt
b8c0: 73 0d 0a 7d 0d 0a 0d 0a 70 72 6f 63 20 73 76 67 s..}....proc svg
b8d0: 6d 6c 3a 3a 67 69 76 65 5f 64 65 73 63 65 6e 64 ml::give_descend
b8e0: 61 6e 74 73 20 7b 20 69 64 20 69 64 5f 61 76 6f ants { id id_avo
b8f0: 69 64 20 7d 20 7b 0d 0a 20 20 20 20 76 61 72 69 id } {.. vari
b900: 61 62 6c 65 20 64 0d 0a 20 20 20 20 0d 0a 20 20 able d.. ..
b910: 20 20 73 65 74 20 69 64 73 4c 69 73 74 20 22 22 set idsList ""
b920: 0d 0a 20 20 20 20 73 65 74 20 69 64 4c 20 5b 73 .. set idL [s
b930: 70 6c 69 74 20 24 69 64 20 22 2e 22 5d 0d 0a 20 plit $id "."]..
b940: 20 20 20 73 65 74 20 6e 20 5b 65 78 70 72 20 7b set n [expr {
b950: 5b 6c 6c 65 6e 67 74 68 20 24 69 64 4c 5d 2d 31 [llength $idL]-1
b960: 7d 5d 0d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 }].. foreach
b970: 69 64 43 20 5b 64 69 63 74 20 6b 65 79 73 20 5b idC [dict keys [
b980: 64 69 63 74 20 67 65 74 20 24 64 20 69 64 73 5d dict get $d ids]
b990: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ] {.. if
b9a0: 7b 20 24 69 64 43 20 65 71 20 24 69 64 5f 61 76 { $idC eq $id_av
b9b0: 6f 69 64 20 7d 20 7b 20 63 6f 6e 74 69 6e 75 65 oid } { continue
b9c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 }.. set
b9d0: 69 64 43 4c 20 5b 73 70 6c 69 74 20 24 69 64 43 idCL [split $idC
b9e0: 20 22 2e 22 5d 0d 0a 20 20 20 20 20 20 20 20 69 "."].. i
b9f0: 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 24 69 64 f { [llength $id
ba00: 43 4c 5d 20 3c 3d 20 5b 6c 6c 65 6e 67 74 68 20 CL] <= [llength
ba10: 24 69 64 4c 5d 20 7d 20 7b 20 63 6f 6e 74 69 6e $idL] } { contin
ba20: 75 65 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 66 ue }.. if
ba30: 20 7b 20 5b 6c 72 61 6e 67 65 20 5b 73 70 6c 69 { [lrange [spli
ba40: 74 20 24 69 64 43 20 22 2e 22 5d 20 30 20 24 6e t $idC "."] 0 $n
ba50: 5d 20 65 71 20 24 69 64 4c 20 7d 20 7b 0d 0a 20 ] eq $idL } {..
ba60: 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe
ba70: 6e 64 20 69 64 73 4c 69 73 74 20 24 69 64 43 0d nd idsList $idC.
ba80: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }..
ba90: 7d 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 24 69 }.. return $i
baa0: 64 73 4c 69 73 74 0d 0a 7d 0d 0a 0d 0a 70 72 6f dsList..}....pro
bab0: 63 20 70 6e 67 73 69 7a 65 5f 64 61 74 61 20 7b c pngsize_data {
bac0: 20 64 61 74 61 20 7d 20 7b 0d 0a 0d 0a 20 20 20 data } {....
bad0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len
bae0: 67 74 68 20 24 64 61 74 61 5d 20 3c 20 33 33 7d gth $data] < 33}
baf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 72 72 6f {.. erro
bb00: 72 20 22 46 69 6c 65 20 6e 6f 74 20 6c 61 72 67 r "File not larg
bb10: 65 20 65 6e 6f 75 67 68 20 74 6f 20 63 6f 6e 74 e enough to cont
bb20: 61 69 6e 20 50 4e 47 20 68 65 61 64 65 72 22 0d ain PNG header".
bb30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 20 . }.... #
bb40: 52 65 61 64 20 50 4e 47 20 66 69 6c 65 20 73 69 Read PNG file si
bb50: 67 6e 61 74 75 72 65 0d 0a 20 20 20 20 62 69 6e gnature.. bin
bb60: 61 72 79 20 73 63 61 6e 20 5b 73 74 72 69 6e 67 ary scan [string
bb70: 20 72 61 6e 67 65 20 24 64 61 74 61 20 30 20 37 range $data 0 7
bb80: 5d 20 63 38 20 73 69 67 0d 0a 20 20 20 20 66 6f ] c8 sig.. fo
bb90: 72 65 61 63 68 20 62 31 20 24 73 69 67 20 62 32 reach b1 $sig b2
bba0: 20 7b 2d 31 31 39 20 38 30 20 37 38 20 37 31 20 {-119 80 78 71
bbb0: 31 33 20 31 30 20 32 36 20 31 30 7d 20 7b 0d 0a 13 10 26 10} {..
bbc0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 62 31 20 if {$b1
bbd0: 21 3d 20 24 62 32 7d 20 7b 0d 0a 20 20 20 20 20 != $b2} {..
bbe0: 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 64 61 error "da
bbf0: 74 61 20 69 73 20 6e 6f 74 20 61 20 50 4e 47 20 ta is not a PNG
bc00: 66 69 6c 65 22 0d 0a 20 20 20 20 20 20 20 20 7d file".. }
bc10: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 .. }....
bc20: 23 20 52 65 61 64 20 49 48 44 52 20 63 68 75 6e # Read IHDR chun
bc30: 6b 20 73 69 67 6e 61 74 75 72 65 0d 0a 20 20 20 k signature..
bc40: 20 62 69 6e 61 72 79 20 73 63 61 6e 20 5b 73 74 binary scan [st
bc50: 72 69 6e 67 20 72 61 6e 67 65 20 24 64 61 74 61 ring range $data
bc60: 20 38 20 31 35 5d 20 63 38 20 73 69 67 0d 0a 20 8 15] c8 sig..
bc70: 20 20 20 66 6f 72 65 61 63 68 20 62 31 20 24 73 foreach b1 $s
bc80: 69 67 20 62 32 20 7b 30 20 30 20 30 20 31 33 20 ig b2 {0 0 0 13
bc90: 37 33 20 37 32 20 36 38 20 38 32 7d 20 7b 0d 0a 73 72 68 82} {..
bca0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 62 31 20 if {$b1
bcb0: 21 3d 20 24 62 32 7d 20 7b 0d 0a 20 20 20 20 20 != $b2} {..
bcc0: 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 64 61 error "da
bcd0: 74 61 20 69 73 20 6d 69 73 73 69 6e 67 20 61 20 ta is missing a
bce0: 6c 65 61 64 69 6e 67 20 49 48 44 52 20 63 68 75 leading IHDR chu
bcf0: 6e 6b 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a nk".. }..
bd00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 23 }.... #
bd10: 20 52 65 61 64 20 6f 66 66 20 74 68 65 20 73 69 Read off the si
bd20: 7a 65 20 6f 66 20 74 68 65 20 69 6d 61 67 65 0d ze of the image.
bd30: 0a 20 20 20 20 62 69 6e 61 72 79 20 73 63 61 6e . binary scan
bd40: 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 [string range $
bd50: 64 61 74 61 20 31 36 20 32 33 5d 20 49 49 20 77 data 16 23] II w
bd60: 69 64 74 68 20 68 65 69 67 68 74 0d 0a 20 20 20 idth height..
bd70: 20 20 23 20 49 67 6e 6f 72 65 20 74 68 65 20 72 # Ignore the r
bd80: 65 73 74 20 6f 66 20 74 68 65 20 64 61 74 61 2c est of the data,
bd90: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 63 including the c
bda0: 68 75 6e 6b 20 43 52 43 21 0d 0a 20 20 20 20 20 hunk CRC!..
bdb0: 23 62 69 6e 61 72 79 20 73 63 61 6e 20 5b 72 65 #binary scan [re
bdc0: 61 64 20 24 66 20 35 5d 20 63 63 63 63 63 20 64 ad $f 5] ccccc d
bdd0: 65 70 74 68 20 74 79 70 65 20 63 6f 6d 70 72 65 epth type compre
bde0: 73 73 69 6f 6e 20 66 69 6c 74 65 72 20 69 6e 74 ssion filter int
bdf0: 65 72 6c 61 63 65 0d 0a 20 20 20 20 20 23 62 69 erlace.. #bi
be00: 6e 61 72 79 20 73 63 61 6e 20 5b 72 65 61 64 20 nary scan [read
be10: 24 66 20 34 5d 20 49 20 63 68 75 6e 6b 43 52 43 $f 4] I chunkCRC
be20: 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 5b .... return [
be30: 6c 69 73 74 20 24 77 69 64 74 68 20 24 68 65 69 list $width $hei
be40: 67 68 74 5d 0d 0a 20 7d 0d 0a 0d 0a 70 72 6f 63 ght].. }....proc
be50: 20 73 76 67 6d 6c 3a 3a 63 72 65 61 74 65 5f 65 svgml::create_e
be60: 6e 74 69 74 79 20 7b 20 69 64 20 63 6f 70 79 5f ntity { id copy_
be70: 69 6e 66 6f 20 7d 20 7b 0d 0a 20 20 20 20 76 61 info } {.. va
be80: 72 69 61 62 6c 65 20 64 0d 0a 20 20 20 20 76 61 riable d.. va
be90: 72 69 61 62 6c 65 20 78 6d 6c 0d 0a 20 20 20 20 riable xml..
bea0: 0d 0a 20 20 20 20 73 65 74 20 72 65 74 20 5b 63 .. set ret [c
beb0: 61 74 63 68 20 7b 20 63 61 6c 63 75 6c 61 74 65 atch { calculate
bec0: 5f 70 6f 69 6e 74 73 20 24 69 64 20 24 63 6f 70 _points $id $cop
bed0: 79 5f 69 6e 66 6f 20 7d 20 70 6e 74 73 20 6f 70 y_info } pnts op
bee0: 74 73 5d 0d 0a 20 20 20 20 69 66 20 7b 20 24 72 ts].. if { $r
bef0: 65 74 20 21 3d 20 30 20 7d 20 7b 0d 0a 20 20 20 et != 0 } {..
bf00: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 63 6f 64 return -cod
bf10: 65 20 24 72 65 74 20 2d 65 72 72 6f 72 69 6e 66 e $ret -errorinf
bf20: 6f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 o \..
bf30: 20 5b 64 69 63 74 5f 67 65 74 64 20 24 6f 70 74 [dict_getd $opt
bf40: 73 20 2d 65 72 72 6f 72 69 6e 66 6f 20 22 22 5d s -errorinfo ""]
bf50: 20 24 70 6e 74 73 0d 0a 20 20 20 20 7d 0d 0a 0d $pnts.. }...
bf60: 0a 20 20 20 20 6c 61 73 73 69 67 6e 20 5b 67 69 . lassign [gi
bf70: 76 65 5f 61 6e 63 68 6f 72 5f 61 78 65 73 20 24 ve_anchor_axes $
bf80: 64 20 24 69 64 5d 20 61 6e 63 68 6f 72 58 20 61 d $id] anchorX a
bf90: 6e 63 68 6f 72 59 0d 0a 20 20 20 20 0d 0a 20 20 nchorY.. ..
bfa0: 20 20 73 65 74 20 70 6e 74 73 42 42 4f 58 20 22 set pntsBBOX "
bfb0: 22 0d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 70 ".. foreach p
bfc0: 20 24 70 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 $pnts {..
bfd0: 20 20 6c 61 73 73 69 67 6e 20 24 70 20 74 79 70 lassign $p typ
bfe0: 65 20 78 20 79 0d 0a 20 20 20 20 20 20 20 20 69 e x y.. i
bff0: 66 20 7b 20 24 74 79 70 65 20 65 71 20 22 77 69 f { $type eq "wi
c000: 64 74 68 2d 68 65 69 67 68 74 22 20 7d 20 7b 0d dth-height" } {.
c010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 . las
c020: 73 69 67 6e 20 24 70 20 2d 20 62 20 68 0d 0a 20 sign $p - b h..
c030: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 if {
c040: 5b 6c 6c 65 6e 67 74 68 20 24 70 6e 74 73 42 42 [llength $pntsBB
c050: 4f 58 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 OX] } {..
c060: 20 20 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e lassign
c070: 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 73 42 42 [lindex $pntsBB
c080: 4f 58 20 65 6e 64 5d 20 78 20 79 0d 0a 20 20 20 OX end] x y..
c090: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else
c0a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
c0b0: 20 20 20 73 65 74 20 69 70 6f 73 20 5b 6c 73 65 set ipos [lse
c0c0: 61 72 63 68 20 2d 69 6e 64 65 78 20 30 20 24 70 arch -index 0 $p
c0d0: 6e 74 73 20 70 6f 69 6e 74 5d 0d 0a 20 20 20 20 nts point]..
c0e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if {
c0f0: 20 24 69 70 6f 73 20 3d 3d 20 2d 31 20 7d 20 7b $ipos == -1 } {
c100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
c110: 20 20 20 20 20 20 73 65 74 5f 65 72 72 6f 72 20 set_error
c120: 24 64 20 24 69 64 20 22 70 72 6f 70 65 72 74 79 $d $id "property
c130: 20 27 77 69 64 74 68 2d 68 65 69 67 68 74 27 20 'width-height'
c140: 6e 65 65 64 73 20 61 20 27 70 6f 69 6e 74 27 22 needs a 'point'"
c150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
c160: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
c170: 20 20 20 20 20 6c 61 73 73 69 67 6e 20 5b 6c 69 lassign [li
c180: 6e 64 65 78 20 24 70 6e 74 73 20 24 69 70 6f 73 ndex $pnts $ipos
c190: 5d 20 2d 20 78 20 79 0d 0a 20 20 20 20 20 20 20 ] - x y..
c1a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
c1b0: 20 20 20 20 73 65 74 20 61 31 78 20 5b 65 78 70 set a1x [exp
c1c0: 72 20 7b 2d 30 2e 35 2a 28 31 2e 30 2d 24 61 6e r {-0.5*(1.0-$an
c1d0: 63 68 6f 72 58 29 7d 5d 0d 0a 20 20 20 20 20 20 chorX)}]..
c1e0: 20 20 20 20 20 20 73 65 74 20 61 32 78 20 5b 65 set a2x [e
c1f0: 78 70 72 20 7b 30 2e 35 2a 28 31 2e 30 2b 24 61 xpr {0.5*(1.0+$a
c200: 6e 63 68 6f 72 58 29 7d 5d 0d 0a 20 20 20 20 20 nchorX)}]..
c210: 20 20 20 20 20 20 20 73 65 74 20 61 31 79 20 5b set a1y [
c220: 65 78 70 72 20 7b 2d 30 2e 35 2a 28 31 2e 30 2d expr {-0.5*(1.0-
c230: 24 61 6e 63 68 6f 72 59 29 7d 5d 0d 0a 20 20 20 $anchorY)}]..
c240: 20 20 20 20 20 20 20 20 20 73 65 74 20 61 32 79 set a2y
c250: 20 5b 65 78 70 72 20 7b 30 2e 35 2a 28 31 2e 30 [expr {0.5*(1.0
c260: 2b 24 61 6e 63 68 6f 72 59 29 7d 5d 0d 0a 20 20 +$anchorY)}]..
c270: 20 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 ..
c280: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend
c290: 70 6e 74 73 42 42 4f 58 20 5b 6c 69 73 74 20 5b pntsBBOX [list [
c2a0: 65 78 70 72 20 7b 24 78 2b 24 61 31 78 2a 24 62 expr {$x+$a1x*$b
c2b0: 7d 5d 20 5b 65 78 70 72 20 7b 24 79 2b 24 61 31 }] [expr {$y+$a1
c2c0: 79 2a 24 68 7d 5d 5d 0d 0a 20 20 20 20 20 20 20 y*$h}]]..
c2d0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 6e 74 lappend pnt
c2e0: 73 42 42 4f 58 20 5b 6c 69 73 74 20 5b 65 78 70 sBBOX [list [exp
c2f0: 72 20 7b 24 78 2b 24 61 32 78 2a 24 62 7d 5d 20 r {$x+$a2x*$b}]
c300: 5b 65 78 70 72 20 7b 24 79 2b 24 61 32 79 2a 24 [expr {$y+$a2y*$
c310: 68 7d 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 h}]].. }
c320: 65 6c 73 65 69 66 20 7b 20 24 74 79 70 65 20 69 elseif { $type i
c330: 6e 20 22 70 6f 69 6e 74 20 4c 20 43 20 51 20 41 n "point L C Q A
c340: 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 " } {..
c350: 20 20 20 6c 61 70 70 65 6e 64 20 70 6e 74 73 42 lappend pntsB
c360: 42 4f 58 20 5b 6c 69 73 74 20 24 78 20 24 79 5d BOX [list $x $y]
c370: 0d 0a 20 20 20 20 20 20 20 20 7d 20 20 65 6c 73 .. } els
c380: 65 69 66 20 7b 20 24 74 79 70 65 20 69 6e 20 22 eif { $type in "
c390: 64 65 6c 74 61 2d 70 6f 69 6e 74 20 71 20 6c 20 delta-point q l
c3a0: 63 20 61 22 20 26 26 20 5b 6c 6c 65 6e 67 74 68 c a" && [llength
c3b0: 20 24 70 6e 74 73 42 42 4f 58 5d 20 7d 20 7b 0d $pntsBBOX] } {.
c3c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 . las
c3d0: 73 69 67 6e 20 5b 6c 69 6e 64 65 78 20 24 70 6e sign [lindex $pn
c3e0: 74 73 42 42 4f 58 20 65 6e 64 5d 20 78 70 20 79 tsBBOX end] xp y
c3f0: 70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 p.. s
c400: 65 74 20 78 20 5b 65 78 70 72 20 7b 24 78 2b 24 et x [expr {$x+$
c410: 78 70 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 xp}]..
c420: 20 20 73 65 74 20 79 20 5b 65 78 70 72 20 7b 24 set y [expr {$
c430: 79 2b 24 79 70 7d 5d 0d 0a 20 20 20 20 20 20 20 y+$yp}]..
c440: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 6e 74 lappend pnt
c450: 73 42 42 4f 58 20 5b 6c 69 73 74 20 24 78 20 24 sBBOX [list $x $
c460: 79 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 y].. }..
c470: 20 20 20 7d 0d 0a 20 20 20 20 0d 0a 20 20 20 20 }.. ..
c480: 6c 61 73 73 69 67 6e 20 22 22 20 78 30 20 79 30 lassign "" x0 y0
c490: 20 78 31 20 79 31 0d 0a 20 20 20 20 69 66 20 7b x1 y1.. if {
c4a0: 20 5b 6c 6c 65 6e 67 74 68 20 24 70 6e 74 73 42 [llength $pntsB
c4b0: 42 4f 58 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 BOX] } {..
c4c0: 20 20 66 6f 72 65 61 63 68 20 70 20 24 70 6e 74 foreach p $pnt
c4d0: 73 42 42 4f 58 20 7b 0d 0a 20 20 20 20 20 20 20 sBBOX {..
c4e0: 20 20 20 20 20 6c 61 73 73 69 67 6e 20 24 70 20 lassign $p
c4f0: 78 20 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x y..
c500: 20 69 66 20 7b 20 24 78 30 20 65 71 20 22 22 20 if { $x0 eq ""
c510: 7c 7c 20 24 78 20 3c 20 24 78 30 20 7d 20 7b 20 || $x < $x0 } {
c520: 73 65 74 20 78 30 20 24 78 20 7d 0d 0a 20 20 20 set x0 $x }..
c530: 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 78 if { $x
c540: 31 20 65 71 20 22 22 20 7c 7c 20 24 78 20 3e 20 1 eq "" || $x >
c550: 24 78 31 20 7d 20 7b 20 73 65 74 20 78 31 20 24 $x1 } { set x1 $
c560: 78 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x }..
c570: 20 69 66 20 7b 20 24 79 30 20 65 71 20 22 22 20 if { $y0 eq ""
c580: 7c 7c 20 24 79 20 3c 20 24 79 30 20 7d 20 7b 20 || $y < $y0 } {
c590: 73 65 74 20 79 30 20 24 79 20 7d 0d 0a 20 20 20 set y0 $y }..
c5a0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 79 if { $y
c5b0: 31 20 65 71 20 22 22 20 7c 7c 20 24 79 20 3e 20 1 eq "" || $y >
c5c0: 24 79 31 20 7d 20 7b 20 73 65 74 20 79 31 20 24 $y1 } { set y1 $
c5d0: 79 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a y }.. }..
c5e0: 20 20 20 20 20 20 20 20 73 65 74 20 77 20 5b 65 set w [e
c5f0: 78 70 72 20 7b 24 78 31 2d 24 78 30 7d 5d 0d 0a xpr {$x1-$x0}]..
c600: 20 20 20 20 20 20 20 20 73 65 74 20 68 20 5b 65 set h [e
c610: 78 70 72 20 7b 24 79 31 2d 24 79 30 7d 5d 0d 0a xpr {$y1-$y0}]..
c620: 20 20 20 20 20 20 20 20 73 65 74 20 62 62 6f 78 set bbox
c630: 20 5b 6c 69 73 74 20 24 78 30 20 24 79 30 20 24 [list $x0 $y0 $
c640: 77 20 24 68 5d 0d 0a 20 20 20 20 7d 20 65 6c 73 w $h].. } els
c650: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 e {.. set
c660: 20 62 62 6f 78 20 22 22 0d 0a 20 20 20 20 7d 0d bbox "".. }.
c670: 0a 20 20 20 20 69 66 20 7b 20 5b 64 69 63 74 20 . if { [dict
c680: 73 69 7a 65 20 24 63 6f 70 79 5f 69 6e 66 6f 5d size $copy_info]
c690: 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 20 20 20 20 == 0 } {..
c6a0: 20 20 20 64 69 63 74 20 73 65 74 20 64 20 69 64 dict set d id
c6b0: 73 20 24 69 64 20 62 62 6f 78 20 24 62 62 6f 78 s $id bbox $bbox
c6c0: 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a .. } else {..
c6d0: 20 20 20 20 20 20 20 20 61 64 64 5f 74 6f 5f 62 add_to_b
c6e0: 62 6f 78 20 5b 64 69 63 74 20 67 65 74 20 24 63 box [dict get $c
c6f0: 6f 70 79 5f 69 6e 66 6f 20 69 64 5d 20 24 62 62 opy_info id] $bb
c700: 6f 78 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 0d ox.. }.. .
c710: 0a 20 20 20 20 73 65 74 20 73 74 79 6c 65 20 22 . set style "
c720: 22 0d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 22 ".. foreach "
c730: 6e 20 76 22 20 5b 64 69 63 74 20 67 65 74 20 24 n v" [dict get $
c740: 64 20 69 64 73 20 24 69 64 20 70 72 6f 70 73 5d d ids $id props]
c750: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if {
c760: 20 24 6e 20 65 71 20 22 63 6c 61 73 73 22 20 7d $n eq "class" }
c770: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
c780: 61 70 70 65 6e 64 20 73 74 79 6c 65 20 22 5b 64 append style "[d
c790: 69 63 74 20 67 65 74 20 24 64 20 63 6c 61 73 73 ict get $d class
c7a0: 65 73 20 24 76 5d 22 0d 0a 20 20 20 20 20 20 20 es $v]"..
c7b0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 61 }.. }.. a
c7c0: 70 70 65 6e 64 20 73 74 79 6c 65 20 5b 64 69 63 ppend style [dic
c7d0: 74 5f 67 65 74 64 20 24 63 6f 70 79 5f 69 6e 66 t_getd $copy_inf
c7e0: 6f 20 73 74 79 6c 65 20 22 22 5d 0d 0a 20 20 20 o style ""]..
c7f0: 20 0d 0a 20 20 20 20 73 65 74 20 63 6d 64 20 5b .. set cmd [
c800: 64 69 63 74 20 67 65 74 20 24 64 20 69 64 73 20 dict get $d ids
c810: 24 69 64 20 63 6d 64 5d 0d 0a 20 20 20 20 0d 0a $id cmd].. ..
c820: 20 20 20 20 73 77 69 74 63 68 20 24 63 6d 64 20 switch $cmd
c830: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 67 69 6f {.. regio
c840: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {..
c850: 20 69 66 20 7b 20 24 62 62 6f 78 20 65 71 20 22 if { $bbox eq "
c860: 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 " } {..
c870: 20 20 20 20 20 20 20 73 65 74 5f 65 72 72 6f 72 set_error
c880: 20 24 64 20 24 69 64 20 22 72 65 67 69 6f 6e 20 $d $id "region
c890: 6e 65 65 64 73 20 61 20 62 6f 78 20 64 65 66 69 needs a box defi
c8a0: 6e 69 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 20 nition"..
c8b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
c8c0: 7d 0d 0a 20 20 20 20 20 20 20 20 69 6d 61 67 65 }.. image
c8d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
c8e0: 6c 61 73 73 69 67 6e 20 24 62 62 6f 78 20 78 30 lassign $bbox x0
c8f0: 20 79 30 20 77 20 68 0d 0a 20 20 20 20 20 20 20 y0 w h..
c900: 20 20 20 20 20 73 65 74 20 74 78 74 20 5b 67 69 set txt [gi
c910: 76 65 5f 70 72 6f 70 44 20 24 64 20 24 69 64 20 ve_propD $d $id
c920: 74 65 78 74 20 22 22 5d 0d 0a 20 20 20 20 20 20 text ""]..
c930: 20 20 20 20 20 20 73 65 74 20 65 72 72 20 5b 63 set err [c
c940: 61 74 63 68 20 7b 20 6f 70 65 6e 20 24 74 78 74 atch { open $txt
c950: 20 72 62 20 7d 20 66 69 6e 5d 0d 0a 20 20 20 20 rb } fin]..
c960: 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 65 72 if { $er
c970: 72 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 r } {..
c980: 20 20 20 20 20 20 20 73 65 74 5f 65 72 72 6f 72 set_error
c990: 20 24 64 20 24 69 64 20 22 69 6d 61 67 65 20 27 $d $id "image '
c9a0: 24 74 78 74 27 20 6e 6f 74 20 66 6f 75 6e 64 22 $txt' not found"
c9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
c9c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set
c9d0: 20 64 61 74 61 20 5b 72 65 61 64 20 24 66 69 6e data [read $fin
c9e0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 ].. c
c9f0: 6c 6f 73 65 20 24 66 69 6e 0d 0a 20 20 20 20 20 lose $fin..
ca00: 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 package r
ca10: 65 71 75 69 72 65 20 62 61 73 65 36 34 0d 0a 20 equire base64..
ca20: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 68 set h
ca30: 72 65 66 20 22 64 61 74 61 3a 69 6d 61 67 65 2f ref "data:image/
ca40: 70 6e 67 3b 62 61 73 65 36 34 2c 5b 62 61 73 65 png;base64,[base
ca50: 36 34 3a 3a 65 6e 63 6f 64 65 20 24 64 61 74 61 64::encode $data
ca60: 5d 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ]"..
ca70: 73 65 74 20 70 72 65 73 65 72 76 65 41 73 70 65 set preserveAspe
ca80: 63 74 52 61 74 69 6f 20 22 78 4d 69 6e 59 4d 69 ctRatio "xMinYMi
ca90: 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n"..
caa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
cab0: 20 7b 20 5b 67 69 76 65 5f 70 72 6f 70 44 20 24 { [give_propD $
cac0: 64 20 24 69 64 20 61 6e 63 68 6f 72 20 22 22 5d d $id anchor ""]
cad0: 20 6e 65 20 22 22 20 26 26 20 24 61 6e 63 68 6f ne "" && $ancho
cae0: 72 58 20 3d 3d 20 30 20 26 26 20 24 61 6e 63 68 rX == 0 && $anch
caf0: 6f 72 59 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 20 orY == 0 } {..
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
cb10: 74 20 70 72 65 73 65 72 76 65 41 73 70 65 63 74 t preserveAspect
cb20: 52 61 74 69 6f 20 22 6e 6f 6e 65 22 0d 0a 20 20 Ratio "none"..
cb30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
cb40: 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 ..
cb50: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 78 6d append xm
cb60: 6c 20 22 3c 69 6d 61 67 65 20 78 3d 27 24 78 30 l "<image x='$x0
cb70: 27 20 79 3d 27 24 79 30 27 20 77 69 64 74 68 3d ' y='$y0' width=
cb80: 27 24 77 27 20 68 65 69 67 68 74 3d 27 24 68 27 '$w' height='$h'
cb90: 20 69 64 3d 27 24 69 64 27 20 73 74 79 6c 65 3d id='$id' style=
cba0: 27 24 73 74 79 6c 65 27 20 22 0d 0a 20 20 20 20 '$style' "..
cbb0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 78 append x
cbc0: 6d 6c 20 22 78 6c 69 6e 6b 3a 68 72 65 66 3d 27 ml "xlink:href='
cbd0: 24 68 72 65 66 27 20 70 72 65 73 65 72 76 65 41 $href' preserveA
cbe0: 73 70 65 63 74 52 61 74 69 6f 3d 27 24 70 72 65 spectRatio='$pre
cbf0: 73 65 72 76 65 41 73 70 65 63 74 52 61 74 69 6f serveAspectRatio
cc00: 27 2f 3e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 '/>"..
cc10: 20 20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ..
cc20: 69 66 20 7b 20 5b 72 65 67 65 78 70 20 7b 62 6f if { [regexp {bo
cc30: 72 64 65 72 2d 73 74 72 6f 6b 65 2d 77 69 64 74 rder-stroke-widt
cc40: 68 3a 5c 73 2a 28 28 5c 64 2b 29 5b 5e 3b 5d 2b h:\s*((\d+)[^;]+
cc50: 29 7d 20 24 73 74 79 6c 65 20 7b 7d 20 76 61 6c )} $style {} val
cc60: 75 65 20 6e 75 6d 5d 20 26 26 20 24 6e 75 6d 20 ue num] && $num
cc70: 3e 20 30 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 > 0 } {..
cc80: 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 72 if { [r
cc90: 65 67 65 78 70 20 7b 62 6f 72 64 65 72 2d 73 74 egexp {border-st
cca0: 72 6f 6b 65 3a 5c 73 2a 28 5b 5e 3b 5d 2b 29 7d roke:\s*([^;]+)}
ccb0: 20 24 73 74 79 6c 65 20 7b 7d 20 73 5d 20 7d 20 $style {} s] }
ccc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
ccd0: 20 20 20 20 20 20 20 73 65 74 20 73 74 72 6f 6b set strok
cce0: 65 20 24 73 0d 0a 20 20 20 20 20 20 20 20 20 20 e $s..
ccf0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {..
cd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cd10: 20 20 20 20 73 65 74 20 73 74 72 6f 6b 65 20 62 set stroke b
cd20: 6c 61 63 6b 20 20 20 0d 0a 20 20 20 20 20 20 20 lack ..
cd30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
cd50: 73 74 79 6c 65 42 20 22 24 73 74 79 6c 65 3b 73 styleB "$style;s
cd60: 74 72 6f 6b 65 2d 77 69 64 74 68 3a 24 76 61 6c troke-width:$val
cd70: 75 65 3b 73 74 72 6f 6b 65 3a 24 73 74 72 6f 6b ue;stroke:$strok
cd80: 65 3b 66 69 6c 6c 3a 6e 6f 6e 65 3b 22 0d 0a 20 e;fill:none;"..
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0d .
cda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
cdb0: 20 69 66 20 7b 20 24 70 72 65 73 65 72 76 65 41 if { $preserveA
cdc0: 73 70 65 63 74 52 61 74 69 6f 20 6e 65 20 22 6e spectRatio ne "n
cdd0: 6f 6e 65 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 one" } {..
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 la
cdf0: 73 73 69 67 6e 20 5b 70 6e 67 73 69 7a 65 5f 64 ssign [pngsize_d
ce00: 61 74 61 20 24 64 61 74 61 5d 20 77 69 64 74 68 ata $data] width
ce10: 20 68 65 69 67 68 74 0d 0a 20 20 20 20 20 20 20 height..
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
ce30: 20 72 31 20 5b 65 78 70 72 20 7b 64 6f 75 62 6c r1 [expr {doubl
ce40: 65 28 24 77 29 2f 24 68 7d 5d 0d 0a 20 20 20 20 e($w)/$h}]..
ce50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ce60: 73 65 74 20 72 32 20 5b 65 78 70 72 20 7b 64 6f set r2 [expr {do
ce70: 75 62 6c 65 28 24 77 69 64 74 68 29 2f 24 68 65 uble($width)/$he
ce80: 69 67 68 74 7d 5d 0d 0a 20 20 20 20 20 20 20 20 ight}]..
ce90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if {
cea0: 20 24 72 32 20 3e 20 24 72 31 20 7d 20 7b 0d 0a $r2 > $r1 } {..
ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cec0: 20 20 20 20 20 20 20 20 73 65 74 20 68 20 5b 65 set h [e
ced0: 78 70 72 20 7b 24 68 2a 24 72 31 2f 24 72 32 7d xpr {$h*$r1/$r2}
cee0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
cef0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {.
cf00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
cf10: 20 20 20 20 20 20 20 20 20 73 65 74 20 77 20 5b set w [
cf20: 65 78 70 72 20 7b 24 77 2a 24 72 32 2f 24 72 31 expr {$w*$r2/$r1
cf30: 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }]..
cf40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0d .
cf60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
cf70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
cf80: 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 22 append xml "
cf90: 3c 72 65 63 74 20 78 3d 27 24 78 30 27 20 79 3d <rect x='$x0' y=
cfa0: 27 24 79 30 27 20 77 69 64 74 68 3d 27 24 77 27 '$y0' width='$w'
cfb0: 20 68 65 69 67 68 74 3d 27 24 68 27 20 22 0d 0a height='$h' "..
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cfd0: 61 70 70 65 6e 64 20 78 6d 6c 20 22 69 64 3d 27 append xml "id='
cfe0: 24 69 64 2d 62 6f 72 64 65 72 27 20 73 74 79 6c $id-border' styl
cff0: 65 3d 27 24 73 74 79 6c 65 42 27 2f 3e 22 0d 0a e='$styleB'/>"..
d000: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
d010: 20 20 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20 ..
d020: 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 64 if { [d
d030: 69 63 74 20 73 69 7a 65 20 24 63 6f 70 79 5f 69 ict size $copy_i
d040: 6e 66 6f 5d 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 nfo] == 0 } {..
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
d060: 69 63 74 20 73 65 74 20 64 20 69 64 73 20 24 69 ict set d ids $i
d070: 64 20 62 62 6f 78 4c 20 24 62 62 6f 78 0d 0a 20 d bboxL $bbox..
d080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
d090: 69 63 74 20 73 65 74 20 64 20 69 64 73 20 24 69 ict set d ids $i
d0a0: 64 20 61 6e 67 6c 65 20 30 0d 0a 20 20 20 20 20 d angle 0..
d0b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
d0c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 63 }.. rec
d0d0: 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t {..
d0e0: 20 6c 61 73 73 69 67 6e 20 24 62 62 6f 78 20 78 lassign $bbox x
d0f0: 30 20 79 30 20 77 20 68 0d 0a 20 20 20 20 20 20 0 y0 w h..
d100: 20 20 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c append xml
d110: 20 22 3c 72 65 63 74 20 78 3d 27 24 78 30 27 20 "<rect x='$x0'
d120: 79 3d 27 24 79 30 27 20 77 69 64 74 68 3d 27 24 y='$y0' width='$
d130: 77 27 20 68 65 69 67 68 74 3d 27 24 68 27 20 69 w' height='$h' i
d140: 64 3d 27 24 69 64 27 20 73 74 79 6c 65 3d 27 24 d='$id' style='$
d150: 73 74 79 6c 65 27 22 0d 0a 20 20 20 20 20 20 20 style'"..
d160: 20 20 20 20 20 69 66 20 7b 20 5b 72 65 67 65 78 if { [regex
d170: 70 20 7b 62 6f 72 64 65 72 2d 72 61 64 69 75 73 p {border-radius
d180: 5c 73 2a 3a 5c 73 2a 28 5c 64 2b 29 7d 20 24 73 \s*:\s*(\d+)} $s
d190: 74 79 6c 65 20 7b 7d 20 72 5d 20 7d 20 7b 0d 0a tyle {} r] } {..
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d1b0: 61 70 70 65 6e 64 20 78 6d 6c 20 22 20 72 78 3d append xml " rx=
d1c0: 27 24 72 27 20 72 79 3d 27 24 72 27 22 0d 0a 20 '$r' ry='$r'"..
d1d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
d1e0: 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 append
d1f0: 20 78 6d 6c 20 22 2f 3e 5c 6e 22 0d 0a 20 20 20 xml "/>\n"..
d200: 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 64 if { [d
d210: 69 63 74 20 73 69 7a 65 20 24 63 6f 70 79 5f 69 ict size $copy_i
d220: 6e 66 6f 5d 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 nfo] == 0 } {..
d230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
d240: 69 63 74 20 73 65 74 20 64 20 69 64 73 20 24 69 ict set d ids $i
d250: 64 20 62 62 6f 78 4c 20 24 62 62 6f 78 0d 0a 20 d bboxL $bbox..
d260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
d270: 69 63 74 20 73 65 74 20 64 20 69 64 73 20 24 69 ict set d ids $i
d280: 64 20 61 6e 67 6c 65 20 30 0d 0a 20 20 20 20 20 d angle 0..
d290: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
d2a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63 69 72 }.. cir
d2b0: 63 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 cle {..
d2c0: 20 20 20 6c 61 73 73 69 67 6e 20 24 62 62 6f 78 lassign $bbox
d2d0: 20 78 30 20 79 30 20 77 20 68 0d 0a 20 20 20 20 x0 y0 w h..
d2e0: 20 20 20 20 20 20 20 20 73 65 74 20 63 78 20 5b set cx [
d2f0: 65 78 70 72 20 7b 24 78 30 2b 30 2e 35 2a 24 77 expr {$x0+0.5*$w
d300: 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }]..
d310: 73 65 74 20 63 79 20 5b 65 78 70 72 20 7b 24 79 set cy [expr {$y
d320: 30 2b 30 2e 35 2a 24 68 7d 5d 0d 0a 20 20 20 20 0+0.5*$h}]..
d330: 20 20 20 20 20 20 20 20 73 65 74 20 72 20 5b 65 set r [e
d340: 78 70 72 20 7b 30 2e 35 2a 24 77 7d 5d 0d 0a 20 xpr {0.5*$w}]..
d350: 20 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e appen
d360: 64 20 78 6d 6c 20 22 3c 63 69 72 63 6c 65 20 63 d xml "<circle c
d370: 78 3d 27 24 63 78 27 20 63 79 3d 27 24 63 79 27 x='$cx' cy='$cy'
d380: 20 72 3d 27 24 72 27 20 69 64 3d 27 24 69 64 27 r='$r' id='$id'
d390: 20 73 74 79 6c 65 3d 27 24 73 74 79 6c 65 27 2f style='$style'/
d3a0: 3e 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 >\n"..
d3b0: 20 20 69 66 20 7b 20 5b 64 69 63 74 20 73 69 7a if { [dict siz
d3c0: 65 20 24 63 6f 70 79 5f 69 6e 66 6f 5d 20 3d 3d e $copy_info] ==
d3d0: 20 30 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 0 } {..
d3e0: 20 20 20 20 20 20 20 20 64 69 63 74 20 73 65 74 dict set
d3f0: 20 64 20 69 64 73 20 24 69 64 20 62 62 6f 78 4c d ids $id bboxL
d400: 20 24 62 62 6f 78 0d 0a 20 20 20 20 20 20 20 20 $bbox..
d410: 20 20 20 20 20 20 20 20 64 69 63 74 20 73 65 74 dict set
d420: 20 64 20 69 64 73 20 24 69 64 20 61 6e 67 6c 65 d ids $id angle
d430: 20 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0..
d440: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }..
d450: 20 20 20 20 20 20 63 75 62 65 20 7b 0d 0a 20 20 cube {..
d460: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6c 61 set la
d470: 62 65 6c 73 20 5b 67 69 76 65 5f 70 72 6f 70 44 bels [give_propD
d480: 20 24 64 20 24 69 64 20 6c 61 62 65 6c 73 20 22 $d $id labels "
d490: 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "]..
d4a0: 69 66 20 7b 20 24 6c 61 62 65 6c 73 20 69 6e 20 if { $labels in
d4b0: 5b 6c 69 73 74 20 22 22 20 30 5d 20 26 26 20 5b [list "" 0] && [
d4c0: 64 69 63 74 20 65 78 69 73 74 73 20 24 63 6f 70 dict exists $cop
d4d0: 79 5f 69 6e 66 6f 20 6c 61 62 65 6c 73 5d 20 7d y_info labels] }
d4e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
d4f0: 20 20 20 20 73 65 74 20 6c 61 62 65 6c 73 20 5b set labels [
d500: 64 69 63 74 20 67 65 74 20 24 63 6f 70 79 5f 69 dict get $copy_i
d510: 6e 66 6f 20 6c 61 62 65 6c 73 5d 0d 0a 20 20 20 nfo labels]..
d520: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
d530: 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 6c 61 if { $la
d540: 62 65 6c 73 20 6e 65 20 22 22 20 26 26 20 24 6c bels ne "" && $l
d550: 61 62 65 6c 73 20 6e 65 20 22 30 22 20 7d 20 7b abels ne "0" } {
d560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d570: 20 20 69 66 20 7b 20 24 6c 61 62 65 6c 73 20 6e if { $labels n
d580: 69 20 22 76 65 72 74 65 78 20 61 72 69 73 74 65 i "vertex ariste
d590: 20 66 61 63 65 22 20 7d 20 7b 0d 0a 20 20 20 20 face" } {..
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d5b0: 73 65 74 20 6c 61 62 65 6c 73 20 61 6c 6c 0d 0a set labels all..
d5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d5d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
d5e0: 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 5b 70 append xml [p
d5f0: 72 6f 63 65 73 73 5f 63 75 62 65 20 24 69 64 20 rocess_cube $id
d600: 64 72 61 77 5f 6c 61 62 65 6c 73 20 24 6c 61 62 draw_labels $lab
d610: 65 6c 73 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 els]..
d620: 20 20 20 20 20 20 61 70 70 65 6e 64 20 73 74 79 append sty
d630: 6c 65 20 22 66 69 6c 6c 3a 6e 6f 6e 65 3b 22 0d le "fill:none;".
d640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
d650: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
d660: 66 61 63 65 73 20 5b 70 72 6f 63 65 73 73 5f 63 faces [process_c
d670: 75 62 65 20 24 69 64 20 66 61 63 65 73 5d 0d 0a ube $id faces]..
d680: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore
d690: 61 63 68 20 66 61 63 65 20 24 66 61 63 65 73 20 ach face $faces
d6a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
d6b0: 20 20 20 73 65 74 20 64 73 20 22 22 0d 0a 20 20 set ds ""..
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo
d6d0: 72 20 7b 20 73 65 74 20 69 20 30 20 7d 20 7b 20 r { set i 0 } {
d6e0: 24 69 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 66 $i < [llength $f
d6f0: 61 63 65 5d 20 7d 20 7b 20 69 6e 63 72 20 69 20 ace] } { incr i
d700: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
d710: 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 69 if { $i
d720: 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 20 20 20 20 == 0 } {..
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d740: 20 20 20 73 65 74 20 69 64 78 5f 66 61 63 65 20 set idx_face
d750: 5b 6c 69 6e 64 65 78 20 24 66 61 63 65 20 24 69 [lindex $face $i
d760: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
d770: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 conti
d780: 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 nue..
d790: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
d7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d7b0: 73 65 74 20 70 6e 74 20 5b 6c 69 6e 64 65 78 20 set pnt [lindex
d7c0: 24 66 61 63 65 20 24 69 5d 0d 0a 20 20 20 20 20 $face $i]..
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
d7e0: 66 20 7b 20 24 64 73 20 65 71 20 22 22 20 7d 20 f { $ds eq "" }
d7f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
d800: 20 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e appen
d810: 64 20 64 73 20 22 4d 24 70 6e 74 22 0d 0a 20 20 d ds "M$pnt"..
d820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d830: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {..
d840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d850: 20 20 20 20 61 70 70 65 6e 64 20 64 73 20 22 20 append ds "
d860: 4c 24 70 6e 74 22 0d 0a 20 20 20 20 20 20 20 20 L$pnt"..
d870: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
d890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d8a0: 20 20 61 70 70 65 6e 64 20 64 73 20 22 7a 22 0d append ds "z".
d8b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
d8c0: 20 61 70 70 65 6e 64 20 78 6d 6c 20 22 3c 70 61 append xml "<pa
d8d0: 74 68 20 64 3d 27 24 64 73 27 20 69 64 3d 27 24 th d='$ds' id='$
d8e0: 69 64 2d 24 69 64 78 5f 66 61 63 65 27 20 73 74 id-$idx_face' st
d8f0: 79 6c 65 3d 27 24 73 74 79 6c 65 27 2f 3e 5c 6e yle='$style'/>\n
d900: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ".. }
d910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a .. ..
d920: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if {
d930: 20 5b 64 69 63 74 20 73 69 7a 65 20 24 63 6f 70 [dict size $cop
d940: 79 5f 69 6e 66 6f 5d 20 3d 3d 20 30 20 7d 20 7b y_info] == 0 } {
d950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d960: 20 20 64 69 63 74 20 73 65 74 20 64 20 69 64 73 dict set d ids
d970: 20 24 69 64 20 62 62 6f 78 4c 20 24 62 62 6f 78 $id bboxL $bbox
d980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d990: 20 20 64 69 63 74 20 73 65 74 20 64 20 69 64 73 dict set d ids
d9a0: 20 24 69 64 20 61 6e 67 6c 65 20 30 0d 0a 20 20 $id angle 0..
d9b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
d9c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
d9d0: 6c 69 6e 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 line {..
d9e0: 20 20 20 20 73 65 74 20 6c 61 62 65 6c 73 20 5b set labels [
d9f0: 67 69 76 65 5f 70 72 6f 70 44 20 24 64 20 24 69 give_propD $d $i
da00: 64 20 6c 61 62 65 6c 73 20 22 22 5d 0d 0a 20 20 d labels ""]..
da10: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 if { $
da20: 6c 61 62 65 6c 73 20 69 6e 20 5b 6c 69 73 74 20 labels in [list
da30: 22 22 20 30 5d 20 26 26 20 5b 64 69 63 74 20 65 "" 0] && [dict e
da40: 78 69 73 74 73 20 24 63 6f 70 79 5f 69 6e 66 6f xists $copy_info
da50: 20 6c 61 62 65 6c 73 5d 20 7d 20 7b 0d 0a 20 20 labels] } {..
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
da70: 74 20 6c 61 62 65 6c 73 20 5b 64 69 63 74 20 67 t labels [dict g
da80: 65 74 20 24 63 6f 70 79 5f 69 6e 66 6f 20 6c 61 et $copy_info la
da90: 62 65 6c 73 5d 0d 0a 20 20 20 20 20 20 20 20 20 bels]..
daa0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
dab0: 20 20 69 66 20 7b 20 24 6c 61 62 65 6c 73 20 6e if { $labels n
dac0: 65 20 22 22 20 26 26 20 24 6c 61 62 65 6c 73 20 e "" && $labels
dad0: 6e 65 20 22 30 22 20 7d 20 7b 0d 0a 20 20 20 20 ne "0" } {..
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
daf0: 6c 61 62 65 6c 73 46 6c 61 67 20 31 0d 0a 20 20 labelsFlag 1..
db00: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
db10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
db20: 20 20 20 20 73 65 74 20 6c 61 62 65 6c 73 46 6c set labelsFl
db30: 61 67 20 30 20 20 20 0d 0a 20 20 20 20 20 20 20 ag 0 ..
db40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
db50: 20 20 20 20 73 65 74 20 6c 61 62 65 6c 73 4c 69 set labelsLi
db60: 73 74 20 5b 73 70 6c 69 74 20 24 6c 61 62 65 6c st [split $label
db70: 73 20 2c 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 s ,]..
db80: 20 20 69 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 if { [llength
db90: 24 6c 61 62 65 6c 73 4c 69 73 74 5d 20 3c 20 32 $labelsList] < 2
dba0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
dbb0: 20 20 20 20 20 20 73 65 74 20 6c 61 62 65 6c 73 set labels
dbc0: 4c 69 73 74 20 22 22 0d 0a 20 20 20 20 20 20 20 List ""..
dbd0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
dbe0: 20 20 20 20 6c 61 73 73 69 67 6e 20 22 22 20 64 lassign "" d
dbf0: 73 20 74 79 70 65 5f 70 72 65 76 20 70 6e 74 73 s type_prev pnts
dc00: 5f 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20 _text..
dc10: 20 20 20 66 6f 72 20 7b 20 73 65 74 20 69 20 30 for { set i 0
dc20: 20 7d 20 7b 20 24 69 20 3c 20 5b 6c 6c 65 6e 67 } { $i < [lleng
dc30: 74 68 20 24 70 6e 74 73 5d 20 7d 20 7b 20 69 6e th $pnts] } { in
dc40: 63 72 20 69 20 7d 20 7b 0d 0a 20 20 20 20 20 20 cr i } {..
dc50: 20 20 20 20 20 20 20 20 20 20 6c 61 73 73 69 67 lassig
dc60: 6e 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 73 20 n [lindex $pnts
dc70: 24 69 5d 20 74 79 70 65 20 78 20 79 0d 0a 20 20 $i] type x y..
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
dc90: 20 7b 20 24 64 73 20 65 71 20 22 22 20 7d 20 7b { $ds eq "" } {
dca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
dcb0: 20 20 20 20 20 20 61 70 70 65 6e 64 20 64 73 20 append ds
dcc0: 5b 66 6f 72 6d 61 74 20 22 4d 25 2e 33 67 2c 25 [format "M%.3g,%
dcd0: 2e 33 67 22 20 24 78 20 24 79 5d 0d 0a 20 20 20 .3g" $x $y]..
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dcf0: 20 6c 61 70 70 65 6e 64 20 70 6e 74 73 5f 74 65 lappend pnts_te
dd00: 78 74 20 22 24 78 20 24 79 22 0d 0a 20 20 20 20 xt "$x $y"..
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el
dd20: 73 65 69 66 20 7b 20 24 74 79 70 65 20 69 6e 20 seif { $type in
dd30: 22 70 6f 69 6e 74 20 4c 22 20 26 26 20 24 74 79 "point L" && $ty
dd40: 70 65 5f 70 72 65 76 20 69 6e 20 22 71 20 51 20 pe_prev in "q Q
dd50: 43 20 63 20 43 32 20 63 32 22 20 7d 20 7b 0d 0a C c C2 c2" } {..
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dd70: 20 20 20 20 61 70 70 65 6e 64 20 64 73 20 5b 66 append ds [f
dd80: 6f 72 6d 61 74 20 22 20 25 2e 33 67 2c 25 2e 33 ormat " %.3g,%.3
dd90: 67 22 20 24 78 20 24 79 5d 0d 0a 20 20 20 20 20 g" $x $y]..
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c l
ddb0: 61 70 70 65 6e 64 20 70 6e 74 73 5f 74 65 78 74 append pnts_text
ddc0: 20 22 24 78 20 24 79 22 0d 0a 20 20 20 20 20 20 "$x $y"..
ddd0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
dde0: 69 66 20 7b 20 24 74 79 70 65 20 69 6e 20 22 70 if { $type in "p
ddf0: 6f 69 6e 74 20 4c 20 4d 22 20 7d 20 7b 0d 0a 20 oint L M" } {..
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
de10: 20 20 20 61 70 70 65 6e 64 20 64 73 20 5b 66 6f append ds [fo
de20: 72 6d 61 74 20 22 20 4c 25 2e 33 67 2c 25 2e 33 rmat " L%.3g,%.3
de30: 67 22 20 24 78 20 24 79 5d 0d 0a 20 20 20 20 20 g" $x $y]..
de40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c l
de50: 61 70 70 65 6e 64 20 70 6e 74 73 5f 74 65 78 74 append pnts_text
de60: 20 22 24 78 20 24 79 22 0d 0a 20 20 20 20 20 20 "$x $y"..
de70: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
de80: 69 66 20 7b 20 24 74 79 70 65 20 69 6e 20 22 64 if { $type in "d
de90: 65 6c 74 61 2d 70 6f 69 6e 74 20 6c 20 63 32 22 elta-point l c2"
dea0: 20 26 26 20 24 74 79 70 65 5f 70 72 65 76 20 69 && $type_prev i
deb0: 6e 20 22 71 20 51 20 43 20 63 20 43 32 20 63 32 n "q Q C c C2 c2
dec0: 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 " } {..
ded0: 20 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e appen
dee0: 64 20 64 73 20 5b 66 6f 72 6d 61 74 20 22 20 25 d ds [format " %
def0: 2e 33 67 2c 25 2e 33 67 22 20 24 78 20 24 79 5d .3g,%.3g" $x $y]
df00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
df10: 20 20 20 20 20 20 73 65 74 20 70 6e 74 20 5b 6d set pnt [m
df20: 3a 3a 61 64 64 20 5b 6c 69 6e 64 65 78 20 24 70 ::add [lindex $p
df30: 6e 74 73 5f 74 65 78 74 20 65 6e 64 5d 20 22 24 nts_text end] "$
df40: 78 20 24 79 22 5d 0d 0a 20 20 20 20 20 20 20 20 x $y"]..
df50: 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 lapp
df60: 65 6e 64 20 70 6e 74 73 5f 74 65 78 74 20 24 70 end pnts_text $p
df70: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 nt..
df80: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 24 } elseif { $
df90: 74 79 70 65 20 69 6e 20 22 64 65 6c 74 61 2d 70 type in "delta-p
dfa0: 6f 69 6e 74 20 6c 20 6d 22 20 7d 20 7b 0d 0a 20 oint l m" } {..
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dfc0: 20 20 20 61 70 70 65 6e 64 20 64 73 20 5b 66 6f append ds [fo
dfd0: 72 6d 61 74 20 22 20 6c 25 2e 33 67 2c 25 2e 33 rmat " l%.3g,%.3
dfe0: 67 22 20 24 78 20 24 79 5d 0d 0a 20 20 20 20 20 g" $x $y]..
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
e000: 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 24 70 6e f { [llength $pn
e010: 74 73 5f 74 65 78 74 5d 20 7d 20 7b 0d 0a 20 20 ts_text] } {..
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e030: 20 20 20 20 20 20 73 65 74 20 70 6e 74 20 5b 6d set pnt [m
e040: 3a 3a 61 64 64 20 5b 6c 69 6e 64 65 78 20 24 70 ::add [lindex $p
e050: 6e 74 73 5f 74 65 78 74 20 65 6e 64 5d 20 22 24 nts_text end] "$
e060: 78 20 24 79 22 5d 0d 0a 20 20 20 20 20 20 20 20 x $y"]..
e070: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el
e080: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {..
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
e0a0: 74 20 70 6e 74 20 22 24 78 20 24 79 22 0d 0a 20 t pnt "$x $y"..
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e0c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
e0d0: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen
e0e0: 64 20 70 6e 74 73 5f 74 65 78 74 20 24 70 6e 74 d pnts_text $pnt
e0f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
e100: 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 24 74 79 } elseif { $ty
e110: 70 65 20 69 6e 20 22 71 20 51 22 20 7d 20 7b 0d pe in "q Q" } {.
e120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
e130: 20 20 20 20 20 61 70 70 65 6e 64 20 64 73 20 5b append ds [
e140: 66 6f 72 6d 61 74 20 22 20 25 73 25 2e 33 67 2c format " %s%.3g,
e150: 25 2e 33 67 22 20 24 74 79 70 65 20 24 78 20 24 %.3g" $type $x $
e160: 79 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y]..
e170: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 24 } elseif { $
e180: 74 79 70 65 20 69 6e 20 22 63 20 43 22 20 7d 20 type in "c C" }
e190: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
e1a0: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 64 73 append ds
e1b0: 20 5b 66 6f 72 6d 61 74 20 22 20 25 73 25 2e 33 [format " %s%.3
e1c0: 67 2c 25 2e 33 67 22 20 24 74 79 70 65 20 24 78 g,%.3g" $type $x
e1d0: 20 24 79 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 $y]..
e1e0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif {
e1f0: 20 24 74 79 70 65 20 69 6e 20 22 43 32 22 20 7d $type in "C2" }
e200: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
e210: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 64 append d
e220: 73 20 5b 66 6f 72 6d 61 74 20 22 20 25 2e 33 67 s [format " %.3g
e230: 2c 25 2e 33 67 22 20 24 78 20 24 79 5d 0d 0a 20 ,%.3g" $x $y]..
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
e250: 20 65 6c 73 65 69 66 20 7b 20 24 74 79 70 65 20 elseif { $type
e260: 69 6e 20 22 61 20 41 22 20 7d 20 7b 0d 0a 20 20 in "a A" } {..
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e280: 20 20 6c 61 73 73 69 67 6e 20 5b 6c 69 6e 64 65 lassign [linde
e290: 78 20 24 70 6e 74 73 20 24 69 5d 20 74 79 70 65 x $pnts $i] type
e2a0: 20 78 20 79 20 7a 20 70 61 72 61 6d 65 74 65 72 x y z parameter
e2b0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s..
e2c0: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 64 73 append ds
e2d0: 20 22 20 24 74 79 70 65 20 5b 6a 6f 69 6e 20 24 " $type [join $
e2e0: 70 61 72 61 6d 65 74 65 72 73 20 2c 5d 22 20 5b parameters ,]" [
e2f0: 66 6f 72 6d 61 74 20 22 20 25 2e 33 67 2c 25 2e format " %.3g,%.
e300: 33 67 22 20 24 78 20 24 79 5d 0d 0a 20 20 20 20 3g" $x $y]..
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e320: 69 66 20 7b 20 24 74 79 70 65 20 65 71 20 22 41 if { $type eq "A
e330: 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 " } {..
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c l
e350: 61 70 70 65 6e 64 20 70 6e 74 73 5f 74 65 78 74 append pnts_text
e360: 20 22 24 78 20 24 79 22 0d 0a 20 20 20 20 20 20 "$x $y"..
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 }
e380: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {..
e390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e3a0: 73 65 74 20 70 6e 74 20 5b 6d 3a 3a 61 64 64 20 set pnt [m::add
e3b0: 5b 6c 69 6e 64 65 78 20 24 70 6e 74 73 5f 74 65 [lindex $pnts_te
e3c0: 78 74 20 65 6e 64 5d 20 22 24 78 20 24 79 22 5d xt end] "$x $y"]
e3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
e3e0: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen
e3f0: 64 20 70 6e 74 73 5f 74 65 78 74 20 24 70 6e 74 d pnts_text $pnt
e400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
e410: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
e420: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 } elsei
e430: 66 20 7b 20 24 74 79 70 65 20 69 6e 20 22 7a 20 f { $type in "z
e440: 5a 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 Z" } {..
e450: 20 20 20 20 20 20 20 20 20 20 20 20 61 70 70 65 appe
e460: 6e 64 20 64 73 20 22 20 24 74 79 70 65 22 0d 0a nd ds " $type"..
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e480: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
e490: 20 20 20 73 65 74 20 74 79 70 65 5f 70 72 65 76 set type_prev
e4a0: 20 24 74 79 70 65 0d 0a 20 20 20 20 20 20 20 20 $type..
e4b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
e4c0: 20 20 20 69 66 20 7b 20 24 6c 61 62 65 6c 73 46 if { $labelsF
e4d0: 6c 61 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 lag } {..
e4e0: 20 20 20 20 20 20 20 20 20 73 65 74 20 69 64 78 set idx
e4f0: 20 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 1..
e500: 20 20 20 20 66 6f 72 65 61 63 68 20 69 20 24 70 foreach i $p
e510: 6e 74 73 5f 74 65 78 74 20 7b 0d 0a 20 20 20 20 nts_text {..
e520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e530: 6c 61 73 73 69 67 6e 20 24 69 20 78 20 79 0d 0a lassign $i x y..
e540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e550: 20 20 20 20 73 65 74 20 78 20 5b 65 78 70 72 20 set x [expr
e560: 7b 24 78 2b 35 7d 5d 0d 0a 20 20 20 20 20 20 20 {$x+5}]..
e570: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
e580: 20 79 20 5b 65 78 70 72 20 7b 24 79 2d 35 7d 5d y [expr {$y-5}]
e590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
e5a0: 20 20 20 20 20 20 69 66 20 7b 20 5b 6c 6c 65 6e if { [llen
e5b0: 67 74 68 20 24 6c 61 62 65 6c 73 4c 69 73 74 5d gth $labelsList]
e5c0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
e5e0: 74 20 74 78 74 20 5b 6c 69 6e 64 65 78 20 24 6c t txt [lindex $l
e5f0: 61 62 65 6c 73 4c 69 73 74 20 24 69 64 78 2d 31 abelsList $idx-1
e600: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
e610: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 } elseif
e620: 7b 20 24 69 64 78 20 3d 3d 20 31 20 7d 20 7b 0d { $idx == 1 } {.
e630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
e640: 20 20 20 20 20 20 20 20 20 73 65 74 20 74 78 74 set txt
e650: 20 22 24 69 64 3a 20 24 69 64 78 22 20 20 20 0d "$id: $idx" .
e660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
e670: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {..
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e690: 20 20 20 20 20 20 20 73 65 74 20 74 78 74 20 22 set txt "
e6a0: 24 69 64 78 22 0d 0a 20 20 20 20 20 20 20 20 20 $idx"..
e6b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e6d0: 20 20 73 65 74 20 73 74 79 6c 65 54 20 22 66 6f set styleT "fo
e6e0: 6e 74 2d 73 69 7a 65 3a 20 31 38 70 78 3b 20 66 nt-size: 18px; f
e6f0: 69 6c 6c 3a 20 62 6c 61 63 6b 3b 20 66 6f 6e 74 ill: black; font
e700: 2d 66 61 6d 69 6c 79 3a 20 73 61 6e 73 2d 73 65 -family: sans-se
e710: 72 69 66 3b 22 0d 0a 20 20 20 20 20 20 20 20 20 rif;"..
e720: 20 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e appen
e730: 64 20 78 6d 6c 20 5b 66 6f 72 6d 61 74 20 22 3c d xml [format "<
e740: 74 65 78 74 20 78 3d 27 25 2e 33 67 27 20 79 3d text x='%.3g' y=
e750: 27 25 2e 33 67 27 20 74 65 78 74 2d 61 6e 63 68 '%.3g' text-anch
e760: 6f 72 3d 27 73 74 61 72 74 27 20 73 74 79 6c 65 or='start' style
e770: 3d 27 25 73 27 3e 5c 6e 22 20 5c 0d 0a 20 20 20 ='%s'>\n" \..
e780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e790: 20 20 20 20 20 20 20 20 20 24 78 20 24 79 20 24 $x $y $
e7a0: 73 74 79 6c 65 54 5d 0d 0a 20 20 20 20 20 20 20 styleT]..
e7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70 70 app
e7c0: 65 6e 64 20 78 6d 6c 20 5b 61 70 70 65 6e 64 5f end xml [append_
e7d0: 74 73 70 61 6e 73 20 24 78 20 24 74 78 74 5d 0d tspans $x $txt].
e7e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
e7f0: 20 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 append xml
e800: 22 3c 2f 74 65 78 74 3e 5c 6e 22 0d 0a 20 20 20 "</text>\n"..
e810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e820: 20 69 6e 63 72 20 69 64 78 0d 0a 20 20 20 20 20 incr idx..
e830: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70 ap
e850: 70 65 6e 64 20 73 74 79 6c 65 20 22 6d 61 72 6b pend style "mark
e860: 65 72 2d 73 74 61 72 74 3a 75 72 6c 28 23 63 69 er-start:url(#ci
e870: 72 63 6c 65 29 3b 6d 61 72 6b 65 72 2d 6d 69 64 rcle);marker-mid
e880: 3a 75 72 6c 28 23 63 69 72 63 6c 65 29 3b 22 0d :url(#circle);".
e890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
e8a0: 20 61 70 70 65 6e 64 20 73 74 79 6c 65 20 22 6d append style "m
e8b0: 61 72 6b 65 72 2d 65 6e 64 3a 75 72 6c 28 23 63 arker-end:url(#c
e8c0: 69 72 63 6c 65 29 3b 22 0d 0a 20 20 20 20 20 20 ircle);"..
e8d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
e8e0: 20 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 append xml
e8f0: 22 3c 70 61 74 68 20 64 3d 27 24 64 73 27 20 69 "<path d='$ds' i
e900: 64 3d 27 24 69 64 27 20 73 74 79 6c 65 3d 27 24 d='$id' style='$
e910: 73 74 79 6c 65 27 2f 3e 5c 6e 22 0d 0a 20 20 20 style'/>\n"..
e920: 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 ..
e930: 20 20 20 20 20 20 20 73 65 74 20 70 6e 74 31 20 set pnt1
e940: 5b 6c 69 6e 64 65 78 20 24 70 6e 74 73 42 42 4f [lindex $pntsBBO
e950: 58 20 31 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 X 1]..
e960: 20 20 73 65 74 20 70 6e 74 30 20 5b 6c 69 6e 64 set pnt0 [lind
e970: 65 78 20 24 70 6e 74 73 42 42 4f 58 20 30 5d 0d ex $pntsBBOX 0].
e980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set
e990: 20 4c 20 5b 6d 3a 3a 6e 6f 72 6d 20 5b 6d 3a 3a L [m::norm [m::
e9a0: 73 75 62 20 24 70 6e 74 31 20 24 70 6e 74 30 5d sub $pnt1 $pnt0]
e9b0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ].. s
e9c0: 65 74 20 61 6e 67 6c 65 20 5b 65 78 70 72 20 7b et angle [expr {
e9d0: 61 74 61 6e 32 28 5b 6c 69 6e 64 65 78 20 24 70 atan2([lindex $p
e9e0: 6e 74 31 20 31 5d 2d 5b 6c 69 6e 64 65 78 20 24 nt1 1]-[lindex $
e9f0: 70 6e 74 30 20 31 5d 2c 0d 0a 20 20 20 20 20 20 pnt0 1],..
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c [l
ea10: 69 6e 64 65 78 20 24 70 6e 74 31 20 30 5d 2d 5b index $pnt1 0]-[
ea20: 6c 69 6e 64 65 78 20 24 70 6e 74 30 20 30 5d 29 lindex $pnt0 0])
ea30: 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }]..
ea40: 69 66 20 7b 20 5b 64 69 63 74 20 73 69 7a 65 20 if { [dict size
ea50: 24 63 6f 70 79 5f 69 6e 66 6f 5d 20 3d 3d 20 30 $copy_info] == 0
ea60: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
ea70: 20 20 20 20 20 20 64 69 63 74 20 73 65 74 20 64 dict set d
ea80: 20 69 64 73 20 24 69 64 20 62 62 6f 78 4c 20 5b ids $id bboxL [
ea90: 6c 69 73 74 20 24 78 30 20 24 79 30 20 24 4c 20 list $x0 $y0 $L
eaa0: 24 4c 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 $L]..
eab0: 20 20 20 20 20 64 69 63 74 20 73 65 74 20 64 20 dict set d
eac0: 69 64 73 20 24 69 64 20 61 6e 67 6c 65 20 24 61 ids $id angle $a
ead0: 6e 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 ngle..
eae0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }..
eaf0: 20 20 20 20 20 20 20 20 6c 61 62 65 6c 20 2d 20 label -
eb00: 64 69 6d 65 6e 73 69 6f 6e 20 2d 20 74 65 78 74 dimension - text
eb10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
eb20: 73 65 74 20 74 65 78 74 20 5b 67 69 76 65 5f 70 set text [give_p
eb30: 72 6f 70 44 20 24 64 20 24 69 64 20 74 65 78 74 ropD $d $id text
eb40: 20 22 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ""]..
eb50: 20 20 69 66 20 7b 20 5b 72 65 67 65 78 70 20 7b if { [regexp {
eb60: 66 6f 6e 74 2d 66 61 6d 69 6c 79 5c 73 2a 3a 5c font-family\s*:\
eb70: 73 2a 28 2e 2b 29 7d 20 24 73 74 79 6c 65 20 7b s*(.+)} $style {
eb80: 7d 20 66 6f 6e 74 5f 66 61 6d 69 6c 79 5d 20 7d } font_family] }
eb90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
eba0: 20 20 20 20 73 65 74 20 66 6f 6e 74 5f 66 61 6d set font_fam
ebb0: 69 6c 79 20 5b 6c 69 6e 64 65 78 20 5b 73 70 6c ily [lindex [spl
ebc0: 69 74 20 24 66 6f 6e 74 5f 66 61 6d 69 6c 79 20 it $font_family
ebd0: 2c 5d 20 30 5d 0d 0a 20 20 20 20 20 20 20 20 20 ,] 0]..
ebe0: 20 20 20 20 20 20 20 73 65 74 20 66 6f 6e 74 5f set font_
ebf0: 66 61 6d 69 6c 79 20 5b 73 74 72 69 6e 67 20 74 family [string t
ec00: 72 69 6d 20 24 66 6f 6e 74 5f 66 61 6d 69 6c 79 rim $font_family
ec10: 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \"]..
ec20: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {..
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
ec40: 66 6f 6e 74 5f 66 61 6d 69 6c 79 20 56 65 72 64 font_family Verd
ec50: 61 6e 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ana..
ec60: 20 20 20 20 20 61 70 70 65 6e 64 20 73 74 79 6c append styl
ec70: 65 20 22 66 6f 6e 74 2d 66 61 6d 69 6c 79 3a 20 e "font-family:
ec80: 56 65 72 64 61 6e 61 3b 73 61 6e 73 2d 73 65 72 Verdana;sans-ser
ec90: 69 66 3b 22 0d 0a 20 20 20 20 20 20 20 20 20 20 if;"..
eca0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
ecb0: 20 69 66 20 7b 20 21 5b 72 65 67 65 78 70 20 7b if { ![regexp {
ecc0: 66 6f 6e 74 2d 73 69 7a 65 5c 73 2a 3a 5c 73 2a font-size\s*:\s*
ecd0: 28 5c 64 2b 29 7d 20 24 73 74 79 6c 65 20 7b 7d (\d+)} $style {}
ece0: 20 66 6f 6e 74 5f 73 69 7a 65 5d 20 7d 20 7b 0d font_size] } {.
ecf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
ed00: 20 73 65 74 20 66 6f 6e 74 5f 73 69 7a 65 20 31 set font_size 1
ed10: 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 4..
ed20: 20 20 20 61 70 70 65 6e 64 20 73 74 79 6c 65 20 append style
ed30: 22 66 6f 6e 74 2d 73 69 7a 65 3a 20 31 34 70 78 "font-size: 14px
ed40: 3b 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ;"..
ed50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0d }.. .
ed60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set
ed70: 20 65 72 72 20 5b 63 61 74 63 68 20 7b 0d 0a 20 err [catch {..
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ed90: 20 20 20 6c 6f 61 64 20 7b 43 3a 5c 55 73 65 72 load {C:\User
eda0: 73 5c 72 61 6d 73 61 6e 5c 44 6f 63 75 6d 65 6e s\ramsan\Documen
edb0: 74 73 5c 6d 79 54 63 6c 54 6b 5c 52 61 6d 44 65 ts\myTclTk\RamDe
edc0: 62 75 67 67 65 72 5c 75 74 69 6c 73 5c 74 65 73 bugger\utils\tes
edd0: 74 5f 6d 61 72 6b 64 6f 77 6e 5c 6d 61 72 6b 64 t_markdown\markd
ede0: 6f 77 6e 4c 69 62 2e 64 6c 6c 7d 20 6d 61 72 6b ownLib.dll} mark
edf0: 64 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 down..
ee00: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 set te
ee10: 78 74 5f 62 6f 78 20 5b 6d 65 61 73 75 72 65 5f xt_box [measure_
ee20: 74 65 78 74 20 24 74 65 78 74 20 24 66 6f 6e 74 text $text $font
ee30: 5f 66 61 6d 69 6c 79 20 24 66 6f 6e 74 5f 73 69 _family $font_si
ee40: 7a 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ze]..
ee50: 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 20 }]..
ee60: 20 20 20 20 20 69 66 20 7b 20 24 65 72 72 20 7d if { $err }
ee70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
ee80: 20 20 20 20 73 65 74 20 74 65 78 74 5f 62 6f 78 set text_box
ee90: 20 5b 6c 69 73 74 20 30 20 5b 65 78 70 72 20 7b [list 0 [expr {
eea0: 2d 30 2e 32 2a 24 66 6f 6e 74 5f 73 69 7a 65 7d -0.2*$font_size}
eeb0: 5d 20 5b 65 78 70 72 20 7b 30 2e 35 2a 5b 73 74 ] [expr {0.5*[st
eec0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 74 65 78 ring length $tex
eed0: 74 5d 2a 24 66 6f 6e 74 5f 73 69 7a 65 7d 5d 20 t]*$font_size}]
eee0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \..
eef0: 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 [expr
ef00: 20 7b 30 2e 38 35 2a 24 66 6f 6e 74 5f 73 69 7a {0.85*$font_siz
ef10: 65 7d 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 e}]]..
ef20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
ef30: 20 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a 20 ..
ef40: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 set i
ef50: 70 6f 73 20 5b 6c 73 65 61 72 63 68 20 2d 69 6e pos [lsearch -in
ef60: 64 65 78 20 30 20 24 70 6e 74 73 20 64 65 6c 74 dex 0 $pnts delt
ef70: 61 2d 70 6f 69 6e 74 5d 0d 0a 20 20 20 20 20 20 a-point]..
ef80: 20 20 20 20 20 20 69 66 20 7b 20 24 69 70 6f 73 if { $ipos
ef90: 20 21 3d 20 2d 31 20 7d 20 7b 0d 0a 20 20 20 20 != -1 } {..
efa0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
efb0: 64 65 6c 74 61 20 5b 6c 72 61 6e 67 65 20 5b 6c delta [lrange [l
efc0: 69 6e 64 65 78 20 24 70 6e 74 73 20 24 69 70 6f index $pnts $ipo
efd0: 73 5d 20 31 20 32 5d 0d 0a 20 20 20 20 20 20 20 s] 1 2]..
efe0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {..
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
f000: 65 74 20 64 65 6c 74 61 20 22 22 0d 0a 20 20 20 et delta ""..
f010: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
f020: 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 63 6d if { $cm
f030: 64 20 65 71 20 22 64 69 6d 65 6e 73 69 6f 6e 22 d eq "dimension"
f040: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
f050: 20 20 20 20 20 20 73 65 74 20 70 61 72 65 6e 74 set parent
f060: 20 5b 63 61 6c 63 75 6c 61 74 65 5f 70 61 72 65 [calculate_pare
f070: 6e 74 20 24 69 64 5d 0d 0a 20 20 20 20 20 20 20 nt $id]..
f080: 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6d 64 set cmd
f090: 50 20 5b 64 69 63 74 5f 67 65 74 64 20 24 64 20 P [dict_getd $d
f0a0: 69 64 73 20 24 70 61 72 65 6e 74 20 63 6d 64 20 ids $parent cmd
f0b0: 22 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ""]..
f0c0: 20 20 20 20 20 73 65 74 20 68 76 20 5b 67 69 76 set hv [giv
f0d0: 65 5f 70 72 6f 70 44 20 24 64 20 24 69 64 20 68 e_propD $d $id h
f0e0: 6f 72 69 7a 6f 6e 74 61 6c 2d 76 65 72 74 69 63 orizontal-vertic
f0f0: 61 6c 20 22 22 5d 0d 0a 20 20 20 20 20 20 20 20 al ""]..
f100: 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 6c 6c if { [ll
f110: 65 6e 67 74 68 20 24 70 6e 74 73 42 42 4f 58 5d ength $pntsBBOX]
f120: 20 3e 3d 20 32 20 7d 20 7b 0d 0a 20 20 20 20 20 >= 2 } {..
f130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
f140: 65 74 20 70 30 20 5b 6c 69 6e 64 65 78 20 24 70 et p0 [lindex $p
f150: 6e 74 73 42 42 4f 58 20 30 5d 0d 0a 20 20 20 20 ntsBBOX 0]..
f160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f170: 73 65 74 20 76 54 20 5b 6d 3a 3a 73 75 62 20 5b set vT [m::sub [
f180: 6c 69 6e 64 65 78 20 24 70 6e 74 73 42 42 4f 58 lindex $pntsBBOX
f190: 20 31 5d 20 24 70 30 5d 0d 0a 20 20 20 20 20 20 1] $p0]..
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
f1b0: 74 20 76 4e 20 5b 6d 3a 3a 75 6e 69 74 4c 65 6e t vN [m::unitLen
f1c0: 67 74 68 56 65 63 74 6f 72 20 22 5b 65 78 70 72 gthVector "[expr
f1d0: 20 7b 2d 31 2a 5b 6c 69 6e 64 65 78 20 24 76 54 {-1*[lindex $vT
f1e0: 20 31 5d 7d 5d 20 5b 6c 69 6e 64 65 78 20 24 76 1]}] [lindex $v
f1f0: 54 20 30 5d 22 5d 0d 0a 20 20 20 20 20 20 20 20 T 0]"]..
f200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if {
f210: 20 24 68 76 20 65 71 20 22 76 22 20 7d 20 7b 0d $hv eq "v" } {.
f220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f230: 20 20 20 20 20 20 20 20 20 73 65 74 20 76 4e 20 set vN
f240: 5b 6d 3a 3a 73 63 61 6c 65 20 24 61 6e 63 68 6f [m::scale $ancho
f250: 72 58 20 22 31 20 30 22 5d 0d 0a 20 20 20 20 20 rX "1 0"]..
f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
f270: 20 65 6c 73 65 69 66 20 7b 20 24 68 76 20 65 71 elseif { $hv eq
f280: 20 22 68 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 "h" } {..
f290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f2a0: 20 20 73 65 74 20 76 4e 20 5b 6d 3a 3a 73 63 61 set vN [m::sca
f2b0: 6c 65 20 24 61 6e 63 68 6f 72 59 20 22 30 20 31 le $anchorY "0 1
f2c0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "]..
f2d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
f2e0: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els
f2f0: 65 69 66 20 7b 20 24 63 6d 64 50 20 65 71 20 22 eif { $cmdP eq "
f300: 72 65 63 74 22 20 7d 20 7b 0d 0a 20 20 20 20 20 rect" } {..
f310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
f320: 65 74 20 62 20 5b 64 69 63 74 20 67 65 74 20 24 et b [dict get $
f330: 64 20 69 64 73 20 24 70 61 72 65 6e 74 20 62 62 d ids $parent bb
f340: 6f 78 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ox]..
f350: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 30 20 set p0
f360: 5b 6c 72 61 6e 67 65 20 24 62 20 30 20 31 5d 0d [lrange $b 0 1].
f370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f380: 20 20 20 20 20 73 65 74 20 76 54 20 22 5b 6c 69 set vT "[li
f390: 6e 64 65 78 20 24 62 20 32 5d 20 30 22 0d 0a 20 ndex $b 2] 0"..
f3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f3b0: 20 20 20 73 65 74 20 76 4e 20 22 30 20 24 61 6e set vN "0 $an
f3c0: 63 68 6f 72 59 22 0d 0a 20 20 20 20 20 20 20 20 chorY"..
f3d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
f3e0: 61 72 69 73 74 65 20 5b 67 69 76 65 5f 70 72 6f ariste [give_pro
f3f0: 70 44 20 24 64 20 24 69 64 20 61 72 69 73 74 65 pD $d $id ariste
f400: 20 22 73 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 "s"]..
f410: 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 switc
f420: 68 20 24 61 72 69 73 74 65 20 7b 0d 0a 20 20 20 h $ariste {..
f430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f440: 20 20 20 20 20 73 20 7b 0d 0a 20 20 20 20 20 20 s {..
f450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f460: 20 20 20 20 20 20 73 65 74 20 70 30 20 5b 6d 3a set p0 [m:
f470: 3a 61 64 64 20 24 70 30 20 22 30 20 5b 6c 69 6e :add $p0 "0 [lin
f480: 64 65 78 20 24 62 20 33 5d 22 5d 20 0d 0a 20 20 dex $b 3]"] ..
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f4a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f4c0: 20 77 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 w {..
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f4e0: 20 20 73 65 74 20 76 54 20 22 30 20 5b 6c 69 6e set vT "0 [lin
f4f0: 64 65 78 20 24 62 20 33 5d 22 20 3b 20 73 65 74 dex $b 3]" ; set
f500: 20 76 4e 20 22 24 61 6e 63 68 6f 72 58 20 30 22 vN "$anchorX 0"
f510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
f520: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
f530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f540: 20 20 20 20 20 65 20 7b 0d 0a 20 20 20 20 20 20 e {..
f550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f560: 20 20 20 20 20 20 73 65 74 20 70 30 20 5b 6d 3a set p0 [m:
f570: 3a 61 64 64 20 24 70 30 20 22 5b 6c 69 6e 64 65 :add $p0 "[linde
f580: 78 20 24 62 20 32 5d 20 30 22 5d 0d 0a 20 20 20 x $b 2] 0"]..
f590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f5a0: 20 20 20 20 20 20 20 20 20 73 65 74 20 76 54 20 set vT
f5b0: 22 30 20 5b 6c 69 6e 64 65 78 20 24 62 20 33 5d "0 [lindex $b 3]
f5c0: 22 20 3b 20 73 65 74 20 76 4e 20 22 24 61 6e 63 " ; set vN "$anc
f5d0: 68 6f 72 58 20 30 22 0d 0a 20 20 20 20 20 20 20 horX 0"..
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f5f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
f600: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
f610: 20 20 20 20 20 20 20 20 20 20 20 7d 20 20 20 20 }
f620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f630: 20 20 20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ..
f640: 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 20 ..
f650: 20 20 20 20 20 20 20 73 65 74 20 70 31 20 5b 6d set p1 [m
f660: 3a 3a 61 64 64 20 24 70 30 20 24 76 54 5d 0d 0a ::add $p0 $vT]..
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
f690: 20 20 69 66 20 7b 20 24 68 76 20 65 71 20 22 68 if { $hv eq "h
f6a0: 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 " } {..
f6b0: 20 20 20 20 20 20 20 20 20 20 20 6c 73 65 74 20 lset
f6c0: 76 54 20 31 20 30 0d 0a 20 20 20 20 20 20 20 20 vT 1 0..
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
f6e0: 76 63 20 5b 6c 69 6e 64 65 78 20 24 76 4e 20 31 vc [lindex $vN 1
f6f0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
f700: 20 20 20 20 20 20 20 69 66 20 7b 20 24 76 63 20 if { $vc
f710: 21 3d 20 30 20 7d 20 7b 0d 0a 20 20 20 20 20 20 != 0 } {..
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f730: 20 20 73 65 74 20 76 4e 20 22 30 20 5b 65 78 70 set vN "0 [exp
f740: 72 20 7b 24 76 63 2f 61 62 73 28 24 76 63 29 7d r {$vc/abs($vc)}
f750: 5d 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ]"
f760: 20 20 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20 ..
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f780: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
f790: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 24 } elseif { $
f7a0: 68 76 20 65 71 20 22 76 22 20 7d 20 7b 0d 0a 20 hv eq "v" } {..
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f7c0: 20 20 20 6c 73 65 74 20 76 54 20 30 20 30 0d 0a lset vT 0 0..
f7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f7e0: 20 20 20 20 73 65 74 20 76 63 20 5b 6c 69 6e 64 set vc [lind
f7f0: 65 78 20 24 76 4e 20 30 5d 0d 0a 20 20 20 20 20 ex $vN 0]..
f800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
f810: 66 20 7b 20 24 76 63 20 21 3d 20 30 20 7d 20 7b f { $vc != 0 } {
f820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
f830: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 4e set vN
f840: 20 22 5b 65 78 70 72 20 7b 24 76 63 2f 61 62 73 "[expr {$vc/abs
f850: 28 24 76 63 29 7d 5d 20 30 22 0d 0a 20 20 20 20 ($vc)}] 0"..
f860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f870: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
f880: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
f890: 20 20 20 20 20 20 73 65 74 20 66 61 63 20 5b 65 set fac [e
f8a0: 78 70 72 20 7b 30 2e 38 2a 24 66 6f 6e 74 5f 73 xpr {0.8*$font_s
f8b0: 69 7a 65 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 ize}]..
f8c0: 20 20 20 20 20 20 20 73 65 74 20 76 4e 20 5b 6d set vN [m
f8d0: 3a 3a 73 63 61 6c 65 20 24 66 61 63 20 24 76 4e ::scale $fac $vN
f8e0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
f8f0: 20 20 20 69 66 20 7b 20 24 64 65 6c 74 61 20 65 if { $delta e
f900: 71 20 22 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 q "" } {..
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
f920: 74 20 76 4e 64 20 24 76 4e 0d 0a 20 20 20 20 20 t vNd $vN..
f930: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els
f940: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {..
f950: 20 20 20 20 20 20 20 20 20 73 65 74 20 76 4e 64 set vNd
f960: 20 24 64 65 6c 74 61 0d 0a 20 20 20 20 20 20 20 $delta..
f970: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
f980: 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a 20 20 ..
f990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
f9a0: 74 20 70 30 44 31 20 5b 6d 3a 3a 61 78 70 79 20 t p0D1 [m::axpy
f9b0: 31 20 24 76 4e 64 20 24 70 30 5d 0d 0a 20 20 20 1 $vNd $p0]..
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
f9d0: 20 70 31 44 31 20 5b 6d 3a 3a 61 78 70 79 20 31 p1D1 [m::axpy 1
f9e0: 20 24 76 4e 64 20 24 70 31 5d 0d 0a 20 20 20 20 $vNd $p1]..
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a 20 20 ..
fa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
fa10: 74 20 70 30 44 32 20 5b 6d 3a 3a 61 78 70 79 20 t p0D2 [m::axpy
fa20: 31 20 24 76 4e 20 24 70 30 44 31 5d 0d 0a 20 20 1 $vN $p0D1]..
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
fa40: 74 20 70 31 44 32 20 5b 6d 3a 3a 61 78 70 79 20 t p1D2 [m::axpy
fa50: 31 20 24 76 4e 20 24 70 31 44 31 5d 0d 0a 20 20 1 $vN $p1D1]..
fa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a ..
fa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fa80: 69 66 20 7b 20 24 68 76 20 65 71 20 22 68 22 20 if { $hv eq "h"
fa90: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
faa0: 20 20 20 20 20 20 20 20 20 6c 73 65 74 20 70 31 lset p1
fab0: 44 31 20 31 20 5b 6c 69 6e 64 65 78 20 24 70 30 D1 1 [lindex $p0
fac0: 44 31 20 31 5d 0d 0a 20 20 20 20 20 20 20 20 20 D1 1]..
fad0: 20 20 20 20 20 20 20 20 20 20 20 6c 73 65 74 20 lset
fae0: 70 31 44 32 20 31 20 5b 6c 69 6e 64 65 78 20 24 p1D2 1 [lindex $
faf0: 70 30 44 32 20 31 5d 0d 0a 20 20 20 20 20 20 20 p0D2 1]..
fb00: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 } elsei
fb10: 66 20 7b 20 24 68 76 20 65 71 20 22 76 22 20 7d f { $hv eq "v" }
fb20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
fb30: 20 20 20 20 20 20 20 20 6c 73 65 74 20 70 31 44 lset p1D
fb40: 31 20 30 20 5b 6c 69 6e 64 65 78 20 24 70 30 44 1 0 [lindex $p0D
fb50: 31 20 30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 1 0]..
fb60: 20 20 20 20 20 20 20 20 20 20 6c 73 65 74 20 70 lset p
fb70: 31 44 32 20 30 20 5b 6c 69 6e 64 65 78 20 24 70 1D2 0 [lindex $p
fb80: 30 44 32 20 30 5d 0d 0a 20 20 20 20 20 20 20 20 0D2 0]..
fb90: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
fba0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p
fbb0: 4c 61 62 65 6c 20 5b 6d 3a 3a 73 63 61 6c 65 20 Label [m::scale
fbc0: 30 2e 35 20 5b 6d 3a 3a 61 64 64 20 24 70 30 44 0.5 [m::add $p0D
fbd0: 31 20 24 70 31 44 31 5d 5d 0d 0a 20 20 20 20 20 1 $p1D1]]..
fbe0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p
fbf0: 4c 61 62 65 6c 20 5b 6d 3a 3a 61 78 70 79 20 30 Label [m::axpy 0
fc00: 2e 37 20 24 76 4e 20 24 70 4c 61 62 65 6c 5d 0d .7 $vN $pLabel].
fc10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e
fc20: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {..
fc30: 20 20 20 20 20 20 20 73 65 74 20 70 4c 61 62 65 set pLabe
fc40: 6c 20 5b 6c 72 61 6e 67 65 20 24 62 62 6f 78 20 l [lrange $bbox
fc50: 30 20 31 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 0 1]..
fc60: 20 20 20 20 20 20 73 65 74 20 76 4e 20 22 24 61 set vN "$a
fc70: 6e 63 68 6f 72 58 20 24 61 6e 63 68 6f 72 59 22 nchorX $anchorY"
fc80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
fc90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
fca0: 7b 20 24 63 6d 64 20 65 71 20 22 64 69 6d 65 6e { $cmd eq "dimen
fcb0: 73 69 6f 6e 22 20 7d 20 7b 20 20 20 20 20 20 20 sion" } {
fcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fcd0: 20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
fce0: 20 20 20 73 65 74 20 73 74 20 22 73 74 72 6f 6b set st "strok
fcf0: 65 3a 62 6c 61 63 6b 3b 73 74 72 6f 6b 65 2d 77 e:black;stroke-w
fd00: 69 64 74 68 3a 31 70 78 3b 24 73 74 79 6c 65 22 idth:1px;$style"
fd10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
fd20: 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 22 3c 70 append xml "<p
fd30: 61 74 68 20 64 3d 27 4d 24 70 30 20 4c 24 70 30 ath d='M$p0 L$p0
fd40: 44 32 27 20 69 64 3d 27 24 69 64 2d 44 4c 31 27 D2' id='$id-DL1'
fd50: 20 73 74 79 6c 65 3d 27 24 73 74 27 2f 3e 5c 6e style='$st'/>\n
fd60: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 "..
fd70: 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 22 3c append xml "<
fd80: 70 61 74 68 20 64 3d 27 4d 24 70 31 20 4c 24 70 path d='M$p1 L$p
fd90: 31 44 32 27 20 69 64 3d 27 24 69 64 2d 44 4c 32 1D2' id='$id-DL2
fda0: 27 20 73 74 79 6c 65 3d 27 24 73 74 27 2f 3e 5c ' style='$st'/>\
fdb0: 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n"..
fdc0: 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 20 20 ..
fdd0: 20 20 20 20 20 20 61 70 70 65 6e 64 20 73 74 20 append st
fde0: 22 6d 61 72 6b 65 72 2d 65 6e 64 3a 75 72 6c 28 "marker-end:url(
fdf0: 23 54 72 69 61 6e 67 6c 65 4f 75 74 4c 29 3b 22 #TriangleOutL);"
fe00: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \..
fe10: 20 20 20 20 20 20 20 20 22 6d 61 72 6b 65 72 2d "marker-
fe20: 73 74 61 72 74 3a 75 72 6c 28 23 54 72 69 61 6e start:url(#Trian
fe30: 67 6c 65 49 6e 4c 29 3b 22 0d 0a 20 20 20 20 20 gleInL);"..
fe40: 20 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e appen
fe50: 64 20 78 6d 6c 20 22 3c 70 61 74 68 20 64 3d 27 d xml "<path d='
fe60: 4d 24 70 30 44 31 20 4c 24 70 31 44 31 27 20 69 M$p0D1 L$p1D1' i
fe70: 64 3d 27 24 69 64 2d 44 4c 27 20 73 74 79 6c 65 d='$id-DL' style
fe80: 3d 27 24 73 74 27 2f 3e 5c 6e 22 0d 0a 20 20 20 ='$st'/>\n"..
fe90: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 } elsei
fea0: 66 20 7b 20 24 64 65 6c 74 61 20 6e 65 20 22 22 f { $delta ne ""
feb0: 20 26 26 20 5b 6d 3a 3a 6e 6f 72 6d 5f 74 77 6f && [m::norm_two
fec0: 20 24 64 65 6c 74 61 5d 20 3e 20 32 30 20 7d 20 $delta] > 20 }
fed0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
fee0: 20 20 20 73 65 74 20 70 30 44 20 5b 6d 3a 3a 61 set p0D [m::a
fef0: 64 64 20 24 70 4c 61 62 65 6c 20 24 64 65 6c 74 dd $pLabel $delt
ff00: 61 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 a]..
ff10: 20 20 20 20 73 65 74 20 70 31 44 20 5b 6d 3a 3a set p1D [m::
ff20: 61 78 70 79 20 30 2e 31 20 24 64 65 6c 74 61 20 axpy 0.1 $delta
ff30: 24 70 4c 61 62 65 6c 5d 0d 0a 20 20 20 20 20 20 $pLabel]..
ff40: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 65 set de
ff50: 6c 74 61 20 22 22 0d 0a 20 20 20 20 20 20 20 20 lta ""..
ff60: 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 ..
ff70: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 74 set st
ff80: 20 22 73 74 72 6f 6b 65 3a 62 6c 61 63 6b 3b 73 "stroke:black;s
ff90: 74 72 6f 6b 65 2d 77 69 64 74 68 3a 31 70 78 3b troke-width:1px;
ffa0: 24 73 74 79 6c 65 22 0d 0a 20 20 20 20 20 20 20 $style"..
ffb0: 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 append
ffc0: 73 74 20 22 6d 61 72 6b 65 72 2d 65 6e 64 3a 75 st "marker-end:u
ffd0: 72 6c 28 23 54 72 69 61 6e 67 6c 65 4f 75 74 4c rl(#TriangleOutL
ffe0: 29 3b 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 );"..
fff0: 20 20 20 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 append xml
10000 22 3c 70 61 74 68 20 64 3d 27 4d 24 70 30 44 20 "<path d='M$p0D
10010 4c 24 70 31 44 27 20 69 64 3d 27 24 69 64 2d 44 L$p1D' id='$id-D
10020 4c 27 20 73 74 79 6c 65 3d 27 24 73 74 27 2f 3e L' style='$st'/>
10030 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n"..
10040 20 20 20 20 20 73 65 74 20 70 4c 61 62 65 6c 20 set pLabel
10050 24 70 30 44 0d 0a 20 20 20 20 20 20 20 20 20 20 $p0D..
10060 20 20 20 20 20 20 73 65 74 20 63 6d 64 20 6c 61 set cmd la
10070 62 65 6c 61 72 72 6f 77 0d 0a 20 20 20 20 20 20 belarrow..
10080 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
10090 20 20 20 20 20 0d 0a 23 20 20 20 20 20 20 20 20 ..#
100a0 20 20 20 20 20 69 66 20 7b 20 24 63 6d 64 20 65 if { $cmd e
100b0 71 20 22 74 65 78 74 22 20 7d 20 7b 0d 0a 23 20 q "text" } {..#
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
100d0 73 65 74 20 66 73 58 20 22 30 20 30 20 30 22 0d set fsX "0 0 0".
100e0 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .#
100f0 20 20 20 73 65 74 20 66 73 59 20 22 30 20 30 20 set fsY "0 0
10100 30 2e 38 22 0d 0a 23 20 20 20 20 20 20 20 20 20 0.8"..#
10110 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 24 } elseif { $
10120 63 6d 64 20 65 71 20 22 6c 61 62 65 6c 61 72 72 cmd eq "labelarr
10130 6f 77 22 20 7d 20 7b 0d 0a 23 20 20 20 20 20 20 ow" } {..#
10140 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66 set f
10150 73 58 20 22 30 20 30 20 30 22 0d 0a 23 20 20 20 sX "0 0 0"..#
10160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
10170 74 20 66 73 59 20 22 2d 30 2e 32 20 30 2e 30 20 t fsY "-0.2 0.0
10180 31 22 0d 0a 23 20 20 20 20 20 20 20 20 20 20 20 1"..#
10190 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 23 20 20 20 } else {..#
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
101b0 74 20 66 73 58 20 22 2d 30 2e 33 20 30 20 30 2e t fsX "-0.3 0 0.
101c0 33 22 0d 0a 23 20 20 20 20 20 20 20 20 20 20 20 3"..#
101d0 20 20 20 20 20 20 73 65 74 20 66 73 59 20 22 2d set fsY "-
101e0 30 2e 35 20 30 2e 32 20 31 22 0d 0a 23 20 20 20 0.5 0.2 1"..#
101f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 20 20 }..#
10200 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 catch
10210 20 7b 0d 0a 23 20 20 20 20 20 20 20 20 20 20 20 {..#
10220 20 20 20 20 20 20 73 65 74 20 76 4e 20 5b 6d 3a set vN [m:
10230 3a 75 6e 69 74 4c 65 6e 67 74 68 56 65 63 74 6f :unitLengthVecto
10240 72 20 24 76 4e 5d 0d 0a 23 20 20 20 20 20 20 20 r $vN]..#
10250 20 20 20 20 20 20 7d 0d 0a 23 20 20 20 20 20 20 }..#
10260 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e 20 22 lassign "
10270 30 20 30 22 20 66 61 63 31 20 66 61 63 32 0d 0a 0 0" fac1 fac2..
10280 23 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 # if
10290 20 7b 20 61 62 73 28 5b 6c 69 6e 64 65 78 20 24 { abs([lindex $
102a0 76 4e 20 30 5d 29 3e 30 2e 32 20 7d 20 7b 0d 0a vN 0])>0.2 } {..
102b0 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 #
102c0 20 20 73 65 74 20 66 61 63 31 20 5b 65 78 70 72 set fac1 [expr
102d0 20 7b 61 62 73 28 5b 6c 69 6e 64 65 78 20 24 66 {abs([lindex $f
102e0 73 58 20 24 61 6e 63 68 6f 72 58 2b 31 5d 2a 24 sX $anchorX+1]*$
102f0 66 6f 6e 74 5f 73 69 7a 65 29 7d 5d 0d 0a 23 20 font_size)}]..#
10300 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 }..#
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
10320 7b 20 61 62 73 28 5b 6c 69 6e 64 65 78 20 24 76 { abs([lindex $v
10330 4e 20 31 5d 29 3e 30 2e 32 20 7d 20 7b 0d 0a 23 N 1])>0.2 } {..#
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10350 20 73 65 74 20 66 61 63 32 20 5b 65 78 70 72 20 set fac2 [expr
10360 7b 61 62 73 28 5b 6c 69 6e 64 65 78 20 24 66 73 {abs([lindex $fs
10370 59 20 24 61 6e 63 68 6f 72 59 2b 31 5d 2a 24 66 Y $anchorY+1]*$f
10380 6f 6e 74 5f 73 69 7a 65 29 7d 5d 0d 0a 23 20 20 ont_size)}]..#
10390 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 20 }..#
103a0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
103b0 66 61 63 20 5b 65 78 70 72 20 7b 28 24 66 61 63 fac [expr {($fac
103c0 31 3e 24 66 61 63 32 29 3f 24 66 61 63 31 3a 24 1>$fac2)?$fac1:$
103d0 66 61 63 32 7d 5d 0d 0a 23 20 20 20 20 20 20 20 fac2}]..#
103e0 20 20 20 20 20 20 73 65 74 20 70 4c 61 62 65 6c set pLabel
103f0 20 5b 6d 3a 3a 61 78 70 79 20 24 66 61 63 20 24 [m::axpy $fac $
10400 76 4e 20 24 70 4c 61 62 65 6c 5d 0d 0a 20 20 20 vN $pLabel]..
10410 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 ..
10420 20 20 20 20 20 20 20 69 66 20 7b 20 24 61 6e 63 if { $anc
10430 68 6f 72 59 20 3d 3d 20 31 20 7d 20 7b 0d 0a 20 horY == 1 } {..
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c l
10450 73 65 74 20 70 4c 61 62 65 6c 20 31 20 5b 65 78 set pLabel 1 [ex
10460 70 72 20 7b 5b 6c 69 6e 64 65 78 20 24 70 4c 61 pr {[lindex $pLa
10470 62 65 6c 20 31 5d 2b 28 5b 6c 69 6e 64 65 78 20 bel 1]+([lindex
10480 24 74 65 78 74 5f 62 6f 78 20 31 5d 2b 5b 6c 69 $text_box 1]+[li
10490 6e 64 65 78 20 24 74 65 78 74 5f 62 6f 78 20 33 ndex $text_box 3
104a0 5d 29 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ])}]..
104b0 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 24 61 6e } elseif { $an
104c0 63 68 6f 72 59 20 3d 3d 20 2d 31 20 7d 20 7b 0d chorY == -1 } {.
104d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
104e0 20 6c 73 65 74 20 70 4c 61 62 65 6c 20 31 20 5b lset pLabel 1 [
104f0 65 78 70 72 20 7b 5b 6c 69 6e 64 65 78 20 24 70 expr {[lindex $p
10500 4c 61 62 65 6c 20 31 5d 2b 5b 6c 69 6e 64 65 78 Label 1]+[lindex
10510 20 24 74 65 78 74 5f 62 6f 78 20 31 5d 7d 5d 0d $text_box 1]}].
10520 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
10530 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a 20 20 ..
10540 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 if { $
10550 64 65 6c 74 61 20 6e 65 20 22 22 20 26 26 20 24 delta ne "" && $
10560 63 6d 64 20 6e 65 20 22 64 69 6d 65 6e 73 69 6f cmd ne "dimensio
10570 6e 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 n" } {..
10580 20 20 20 20 20 20 20 20 73 65 74 20 70 4c 61 62 set pLab
10590 65 6c 20 5b 6d 3a 3a 61 64 64 20 24 70 4c 61 62 el [m::add $pLab
105a0 65 6c 20 24 64 65 6c 74 61 5d 0d 0a 20 20 20 20 el $delta]..
105b0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 } elseif
105c0 20 7b 20 24 63 6d 64 20 65 71 20 22 6c 61 62 65 { $cmd eq "labe
105d0 6c 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 l" } {..
105e0 20 20 20 20 20 20 20 20 6c 73 65 74 20 70 4c 61 lset pLa
105f0 62 65 6c 20 30 20 5b 65 78 70 72 20 7b 5b 6c 69 bel 0 [expr {[li
10600 6e 64 65 78 20 24 70 4c 61 62 65 6c 20 30 5d 2b ndex $pLabel 0]+
10610 30 2e 35 2a 24 61 6e 63 68 6f 72 58 2a 24 66 6f 0.5*$anchorX*$fo
10620 6e 74 5f 73 69 7a 65 7d 5d 0d 0a 20 20 20 20 20 nt_size}]..
10630 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
10640 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 ..
10650 20 20 20 20 69 66 20 7b 20 24 61 6e 63 68 6f 72 if { $anchor
10660 58 20 3d 3d 20 2d 31 20 7d 20 7b 0d 0a 20 20 20 X == -1 } {..
10670 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
10680 20 74 61 20 22 65 6e 64 22 0d 0a 20 20 20 20 20 ta "end"..
10690 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 } elseif
106a0 7b 20 24 61 6e 63 68 6f 72 58 20 3d 3d 20 31 20 { $anchorX == 1
106b0 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
106c0 20 20 20 20 20 73 65 74 20 74 61 20 22 73 74 61 set ta "sta
106d0 72 74 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rt"..
106e0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {..
106f0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 set t
10700 61 20 22 6d 69 64 64 6c 65 22 0d 0a 20 20 20 20 a "middle"..
10710 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
10720 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 ..
10730 20 20 20 20 20 6c 61 73 73 69 67 6e 20 24 70 4c lassign $pL
10740 61 62 65 6c 20 78 20 79 0d 0a 20 20 20 20 20 20 abel x y..
10750 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 ..
10760 20 20 20 20 69 66 20 7b 20 5b 72 65 67 65 78 70 if { [regexp
10770 20 7b 62 6f 72 64 65 72 2d 73 74 72 6f 6b 65 2d {border-stroke-
10780 77 69 64 74 68 3a 5c 73 2a 28 28 5c 64 2b 29 5b width:\s*((\d+)[
10790 5e 3b 5d 2b 29 7d 20 24 73 74 79 6c 65 20 7b 7d ^;]+)} $style {}
107a0 20 76 61 6c 75 65 20 6e 75 6d 5d 20 26 26 20 24 value num] && $
107b0 6e 75 6d 20 3e 20 30 20 7d 20 7b 0d 0a 20 20 20 num > 0 } {..
107c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
107d0 7b 20 5b 72 65 67 65 78 70 20 7b 62 6f 72 64 65 { [regexp {borde
107e0 72 2d 73 74 72 6f 6b 65 3a 5c 73 2a 28 5b 5e 3b r-stroke:\s*([^;
107f0 5d 2b 29 7d 20 24 73 74 79 6c 65 20 7b 7d 20 73 ]+)} $style {} s
10800 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ] } {..
10810 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 set s
10820 74 72 6f 6b 65 20 24 73 0d 0a 20 20 20 20 20 20 troke $s..
10830 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
10840 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
10850 20 20 20 20 20 20 20 20 73 65 74 20 73 74 72 6f set stro
10860 6b 65 20 62 6c 61 63 6b 20 20 20 0d 0a 20 20 20 ke black ..
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10890 69 66 20 7b 20 5b 72 65 67 65 78 70 20 7b 70 61 if { [regexp {pa
108a0 64 64 69 6e 67 3a 5c 73 2a 28 28 5c 64 2b 29 5b dding:\s*((\d+)[
108b0 5e 3b 5d 2b 29 7d 20 24 73 74 79 6c 65 20 7b 7d ^;]+)} $style {}
108c0 20 70 61 64 64 69 6e 67 5d 20 3d 3d 20 30 20 7d padding] == 0 }
108d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
108e0 20 20 20 20 20 20 20 20 73 65 74 20 70 61 64 64 set padd
108f0 69 6e 67 20 5b 65 78 70 72 20 7b 30 2e 35 2a 24 ing [expr {0.5*$
10900 66 6f 6e 74 5f 73 69 7a 65 7d 5d 0d 0a 20 20 20 font_size}]..
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
10920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10930 6c 61 73 73 69 67 6e 20 24 70 4c 61 62 65 6c 20 lassign $pLabel
10940 78 52 20 79 52 0d 0a 20 20 20 20 20 20 20 20 20 xR yR..
10950 20 20 20 20 20 20 20 69 66 20 7b 20 24 61 6e 63 if { $anc
10960 68 6f 72 58 20 3d 3d 20 2d 31 20 7d 20 7b 0d 0a horX == -1 } {..
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10980 20 20 20 20 73 65 74 20 78 52 20 5b 65 78 70 72 set xR [expr
10990 20 7b 24 78 52 2d 5b 6c 69 6e 64 65 78 20 24 74 {$xR-[lindex $t
109a0 65 78 74 5f 62 6f 78 20 32 5d 7d 5d 0d 0a 20 20 ext_box 2]}]..
109b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 }
109c0 65 6c 73 65 69 66 20 7b 20 24 61 6e 63 68 6f 72 elseif { $anchor
109d0 58 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 20 20 20 X == 0 } {..
109e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
109f0 73 65 74 20 78 52 20 5b 65 78 70 72 20 7b 24 78 set xR [expr {$x
10a00 52 2d 30 2e 35 2a 5b 6c 69 6e 64 65 78 20 24 74 R-0.5*[lindex $t
10a10 65 78 74 5f 62 6f 78 20 32 5d 7d 5d 0d 0a 20 20 ext_box 2]}]..
10a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
10a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
10a40 20 73 65 74 20 78 52 20 5b 65 78 70 72 20 7b 24 set xR [expr {$
10a50 78 52 2d 24 70 61 64 64 69 6e 67 7d 5d 0d 0a 20 xR-$padding}]..
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
10a70 65 74 20 79 52 20 5b 65 78 70 72 20 7b 24 79 52 et yR [expr {$yR
10a80 2d 28 5b 6c 69 6e 64 65 78 20 24 74 65 78 74 5f -([lindex $text_
10a90 62 6f 78 20 31 5d 2b 5b 6c 69 6e 64 65 78 20 24 box 1]+[lindex $
10aa0 74 65 78 74 5f 62 6f 78 20 33 5d 29 2d 24 70 61 text_box 3])-$pa
10ab0 64 64 69 6e 67 7d 5d 0d 0a 20 20 20 20 20 20 20 dding}]..
10ac0 20 20 20 20 20 20 20 20 20 73 65 74 20 77 20 5b set w [
10ad0 65 78 70 72 20 7b 5b 6c 69 6e 64 65 78 20 24 74 expr {[lindex $t
10ae0 65 78 74 5f 62 6f 78 20 32 5d 2b 32 2a 24 70 61 ext_box 2]+2*$pa
10af0 64 64 69 6e 67 7d 5d 0d 0a 20 20 20 20 20 20 20 dding}]..
10b00 20 20 20 20 20 20 20 20 20 73 65 74 20 68 20 5b set h [
10b10 65 78 70 72 20 7b 5b 6c 69 6e 64 65 78 20 24 74 expr {[lindex $t
10b20 65 78 74 5f 62 6f 78 20 33 5d 2b 32 2a 24 70 61 ext_box 3]+2*$pa
10b30 64 64 69 6e 67 7d 5d 0d 0a 20 20 20 20 20 20 20 dding}]..
10b40 20 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 ..
10b50 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 set s
10b60 74 79 6c 65 42 20 22 24 73 74 79 6c 65 3b 73 74 tyleB "$style;st
10b70 72 6f 6b 65 2d 77 69 64 74 68 3a 24 76 61 6c 75 roke-width:$valu
10b80 65 3b 73 74 72 6f 6b 65 3a 24 73 74 72 6f 6b 65 e;stroke:$stroke
10b90 3b 66 69 6c 6c 3a 6e 6f 6e 65 3b 22 0d 0a 20 20 ;fill:none;"..
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 70 ap
10bb0 70 65 6e 64 20 78 6d 6c 20 22 3c 72 65 63 74 20 pend xml "<rect
10bc0 78 3d 27 24 78 52 27 20 79 3d 27 24 79 52 27 20 x='$xR' y='$yR'
10bd0 77 69 64 74 68 3d 27 24 77 27 20 68 65 69 67 68 width='$w' heigh
10be0 74 3d 27 24 68 27 20 22 0d 0a 20 20 20 20 20 20 t='$h' "..
10bf0 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 append
10c00 20 78 6d 6c 20 22 69 64 3d 27 24 69 64 2d 62 6f xml "id='$id-bo
10c10 72 64 65 72 27 20 73 74 79 6c 65 3d 27 24 73 74 rder' style='$st
10c20 79 6c 65 42 27 22 0d 0a 20 20 20 20 20 20 20 20 yleB'"..
10c30 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 72 65 if { [re
10c40 67 65 78 70 20 7b 62 6f 72 64 65 72 2d 72 61 64 gexp {border-rad
10c50 69 75 73 5c 73 2a 3a 5c 73 2a 28 5c 64 2b 29 7d ius\s*:\s*(\d+)}
10c60 20 24 73 74 79 6c 65 20 7b 7d 20 72 5d 20 7d 20 $style {} r] }
10c70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
10c80 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 78 6d append xm
10c90 6c 20 22 20 72 78 3d 27 24 72 27 20 72 79 3d 27 l " rx='$r' ry='
10ca0 24 72 27 22 0d 0a 20 20 20 20 20 20 20 20 20 20 $r'"..
10cb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
10cc0 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 append
10cd0 78 6d 6c 20 22 2f 3e 5c 6e 22 0d 0a 20 20 20 20 xml "/>\n"..
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a 20 20 ..
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
10d00 74 20 62 62 6f 78 20 5b 6c 69 73 74 20 24 78 52 t bbox [list $xR
10d10 20 24 79 52 20 24 77 20 24 68 5d 0d 0a 20 20 20 $yR $w $h]..
10d20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else
10d30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
10d40 20 20 20 73 65 74 20 77 20 5b 6c 69 6e 64 65 78 set w [lindex
10d50 20 24 74 65 78 74 5f 62 6f 78 20 32 5d 0d 0a 20 $text_box 2]..
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
10d70 65 74 20 68 20 5b 6c 69 6e 64 65 78 20 24 74 65 et h [lindex $te
10d80 78 74 5f 62 6f 78 20 33 5d 0d 0a 20 20 20 20 20 xt_box 3]..
10d90 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 78 set x
10da0 42 20 24 78 0d 0a 20 20 20 20 20 20 20 20 20 20 B $x..
10db0 20 20 20 20 20 20 69 66 20 7b 20 24 61 6e 63 68 if { $anch
10dc0 6f 72 58 20 3d 3d 20 2d 31 20 7d 20 7b 0d 0a 20 orX == -1 } {..
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10de0 20 20 20 73 65 74 20 78 42 20 5b 65 78 70 72 20 set xB [expr
10df0 7b 24 78 42 2d 5b 6c 69 6e 64 65 78 20 24 74 65 {$xB-[lindex $te
10e00 78 74 5f 62 6f 78 20 32 5d 7d 5d 0d 0a 20 20 20 xt_box 2]}]..
10e10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 } e
10e20 6c 73 65 69 66 20 7b 20 24 61 6e 63 68 6f 72 58 lseif { $anchorX
10e30 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 20 20 20 20 == 0 } {..
10e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
10e50 65 74 20 78 42 20 5b 65 78 70 72 20 7b 24 78 42 et xB [expr {$xB
10e60 2d 30 2e 35 2a 5b 6c 69 6e 64 65 78 20 24 74 65 -0.5*[lindex $te
10e70 78 74 5f 62 6f 78 20 32 5d 7d 5d 0d 0a 20 20 20 xt_box 2]}]..
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
10e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10ea0 73 65 74 20 79 42 20 5b 65 78 70 72 20 7b 24 79 set yB [expr {$y
10eb0 2d 28 5b 6c 69 6e 64 65 78 20 24 74 65 78 74 5f -([lindex $text_
10ec0 62 6f 78 20 31 5d 2b 5b 6c 69 6e 64 65 78 20 24 box 1]+[lindex $
10ed0 74 65 78 74 5f 62 6f 78 20 33 5d 29 7d 5d 0d 0a text_box 3])}]..
10ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10ef0 73 65 74 20 62 62 6f 78 20 5b 6c 69 73 74 20 24 set bbox [list $
10f00 78 42 20 24 79 42 20 24 77 20 24 68 5d 20 0d 0a xB $yB $w $h] ..
10f10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
10f20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 if {
10f30 5b 64 69 63 74 20 73 69 7a 65 20 24 63 6f 70 79 [dict size $copy
10f40 5f 69 6e 66 6f 5d 20 3d 3d 20 30 20 7d 20 7b 0d _info] == 0 } {.
10f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
10f60 20 64 69 63 74 20 73 65 74 20 64 20 69 64 73 20 dict set d ids
10f70 24 69 64 20 62 62 6f 78 20 24 62 62 6f 78 0d 0a $id bbox $bbox..
10f80 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el
10f90 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {..
10fa0 20 20 20 20 20 20 61 64 64 5f 74 6f 5f 62 62 6f add_to_bbo
10fb0 78 20 5b 64 69 63 74 20 67 65 74 20 24 63 6f 70 x [dict get $cop
10fc0 79 5f 69 6e 66 6f 20 69 64 5d 20 24 62 62 6f 78 y_info id] $bbox
10fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
10fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 0d 0a 20 . ..
10ff0 20 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e appen
11000 64 20 78 6d 6c 20 5b 66 6f 72 6d 61 74 20 22 3c d xml [format "<
11010 74 65 78 74 20 78 3d 27 25 2e 33 67 27 20 79 3d text x='%.3g' y=
11020 27 25 2e 33 67 27 20 74 65 78 74 2d 61 6e 63 68 '%.3g' text-anch
11030 6f 72 3d 27 25 73 27 20 69 64 3d 27 25 73 27 20 or='%s' id='%s'
11040 73 74 79 6c 65 3d 27 25 73 27 3e 22 20 5c 0d 0a style='%s'>" \..
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 78 $x
11060 20 24 79 20 24 74 61 20 24 69 64 20 24 73 74 79 $y $ta $id $sty
11070 6c 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 le]..
11080 20 61 70 70 65 6e 64 20 78 6d 6c 20 5b 61 70 70 append xml [app
11090 65 6e 64 5f 74 73 70 61 6e 73 20 24 78 20 24 74 end_tspans $x $t
110a0 65 78 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ext]..
110b0 20 20 61 70 70 65 6e 64 20 78 6d 6c 20 22 3c 2f append xml "</
110c0 74 65 78 74 3e 5c 6e 22 0d 0a 20 20 20 20 20 20 text>\n"..
110d0 20 20 20 20 20 20 69 66 20 7b 20 5b 64 69 63 74 if { [dict
110e0 20 73 69 7a 65 20 24 63 6f 70 79 5f 69 6e 66 6f size $copy_info
110f0 5d 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 20 20 20 ] == 0 } {..
11100 20 20 20 20 20 20 20 20 20 20 20 20 64 69 63 74 dict
11110 20 73 65 74 20 64 20 69 64 73 20 24 69 64 20 62 set d ids $id b
11120 62 6f 78 4c 20 5b 64 69 63 74 5f 67 65 74 64 20 boxL [dict_getd
11130 24 64 20 69 64 73 20 24 69 64 20 62 62 6f 78 20 $d ids $id bbox
11140 22 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ""]..
11150 20 20 20 20 20 64 69 63 74 20 73 65 74 20 64 20 dict set d
11160 69 64 73 20 24 69 64 20 61 6e 67 6c 65 20 30 0d ids $id angle 0.
11170 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
11180 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
11190 20 20 20 63 6f 70 79 20 7b 0d 0a 20 20 20 20 20 copy {..
111a0 20 20 20 20 20 20 20 73 65 74 20 69 64 43 20 5b set idC [
111b0 6a 6f 69 6e 20 5b 6c 72 61 6e 67 65 20 5b 73 70 join [lrange [sp
111c0 6c 69 74 20 24 69 64 20 2e 5d 20 30 20 65 6e 64 lit $id .] 0 end
111d0 2d 31 5d 20 2e 5d 0d 0a 20 20 20 20 20 20 20 20 -1] .]..
111e0 20 20 20 20 73 65 74 20 69 64 43 20 5b 72 65 73 set idC [res
111f0 6f 6c 76 65 5f 69 64 20 24 69 64 43 20 24 69 64 olve_id $idC $id
11200 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ].. s
11210 65 74 20 69 64 73 4c 69 73 74 20 5b 6c 69 73 74 et idsList [list
11220 20 24 69 64 43 5d 0d 0a 20 20 20 20 20 20 20 20 $idC]..
11230 20 20 20 20 73 65 74 20 69 63 20 5b 67 69 76 65 set ic [give
11240 5f 70 72 6f 70 44 20 24 64 20 24 69 64 20 69 6e _propD $d $id in
11250 63 6c 75 64 65 5f 63 68 69 6c 64 72 65 6e 20 30 clude_children 0
11260 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ].. i
11270 66 20 7b 20 24 69 63 20 7d 20 7b 0d 0a 20 20 20 f { $ic } {..
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 lap
11290 70 65 6e 64 20 69 64 73 4c 69 73 74 20 7b 2a 7d pend idsList {*}
112a0 5b 67 69 76 65 5f 64 65 73 63 65 6e 64 61 6e 74 [give_descendant
112b0 73 20 24 69 64 43 20 24 69 64 5d 0d 0a 20 20 20 s $idC $id]..
112c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
112d0 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 ..
112e0 20 20 20 20 20 20 73 65 74 20 6e 20 5b 67 69 76 set n [giv
112f0 65 5f 70 72 6f 70 44 20 24 64 20 24 69 64 20 6e e_propD $d $id n
11300 75 6d 62 65 72 20 31 5d 0d 0a 20 20 20 20 20 20 umber 1]..
11310 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 ..
11320 20 20 20 20 73 65 74 20 73 74 79 6c 65 5f 6e 61 set style_na
11330 6d 65 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 me ""..
11340 20 20 20 66 6f 72 65 61 63 68 20 22 6e 4c 20 76 foreach "nL v
11350 4c 22 20 5b 64 69 63 74 20 67 65 74 20 24 64 20 L" [dict get $d
11360 69 64 73 20 24 69 64 20 70 72 6f 70 73 5d 20 7b ids $id props] {
11370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
11380 20 20 69 66 20 7b 20 24 6e 4c 20 65 71 20 22 63 if { $nL eq "c
11390 6c 61 73 73 22 20 7d 20 7b 0d 0a 20 20 20 20 20 lass" } {..
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
113b0 66 20 7b 20 24 73 74 79 6c 65 5f 6e 61 6d 65 20 f { $style_name
113c0 65 71 20 22 22 20 7d 20 7b 0d 0a 20 20 20 20 20 eq "" } {..
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
113e0 20 20 20 73 65 74 20 73 74 79 6c 65 5f 6e 61 6d set style_nam
113f0 65 20 24 76 4c 0d 0a 20 20 20 20 20 20 20 20 20 e $vL..
11400 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 }
11420 65 6c 73 65 69 66 20 7b 20 24 6e 4c 20 65 71 20 elseif { $nL eq
11430 22 63 6f 6e 6e 65 63 74 2d 63 6c 61 73 73 22 20 "connect-class"
11440 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
11450 20 20 20 20 20 20 20 20 20 73 65 74 20 73 74 79 set sty
11460 6c 65 5f 6e 61 6d 65 20 24 76 4c 0d 0a 20 20 20 le_name $vL..
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
11480 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
11490 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 if {
114a0 24 73 74 79 6c 65 5f 6e 61 6d 65 20 65 71 20 22 $style_name eq "
114b0 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 " } {..
114c0 20 20 20 20 20 20 20 73 65 74 20 73 74 79 6c 65 set style
114d0 5f 6e 61 6d 65 20 5b 67 69 76 65 5f 70 72 6f 70 _name [give_prop
114e0 44 20 24 64 20 24 69 64 43 20 63 6c 61 73 73 20 D $d $idC class
114f0 22 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ""]..
11500 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
11510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 .. la
11520 73 73 69 67 6e 20 5b 73 70 6c 69 74 20 5b 67 69 ssign [split [gi
11530 76 65 5f 70 72 6f 70 44 20 24 64 20 24 69 64 20 ve_propD $d $id
11540 6f 70 65 72 61 74 69 6f 6e 20 74 72 61 6e 73 6c operation transl
11550 61 74 69 6f 6e 5d 20 2c 5d 20 5c 0d 0a 20 20 20 ation] ,] \..
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 ope
11570 72 61 74 69 6f 6e 20 6f 70 0d 0a 20 20 20 20 20 ration op..
11580 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 ..
11590 20 20 20 20 20 64 69 63 74 20 73 65 74 20 63 6f dict set co
115a0 70 79 5f 69 6e 66 6f 20 73 74 79 6c 65 20 24 73 py_info style $s
115b0 74 79 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 tyle..
115c0 20 20 64 69 63 74 20 73 65 74 20 63 6f 70 79 5f dict set copy_
115d0 69 6e 66 6f 20 6c 61 62 65 6c 73 20 5b 67 69 76 info labels [giv
115e0 65 5f 70 72 6f 70 44 20 24 64 20 24 69 64 20 6c e_propD $d $id l
115f0 61 62 65 6c 73 20 22 22 5d 0d 0a 20 20 20 20 20 abels ""]..
11600 20 20 20 20 20 20 20 69 66 20 7b 20 21 5b 64 69 if { ![di
11610 63 74 20 65 78 69 73 74 73 20 24 63 6f 70 79 5f ct exists $copy_
11620 69 6e 66 6f 20 73 74 79 6c 65 5f 6e 61 6d 65 5d info style_name]
11630 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
11640 20 20 20 20 20 20 64 69 63 74 20 73 65 74 20 63 dict set c
11650 6f 70 79 5f 69 6e 66 6f 20 73 74 79 6c 65 5f 6e opy_info style_n
11660 61 6d 65 20 24 73 74 79 6c 65 5f 6e 61 6d 65 0d ame $style_name.
11670 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
11680 20 20 20 20 20 20 20 20 20 20 20 20 64 69 63 74 dict
11690 20 73 65 74 20 63 6f 70 79 5f 69 6e 66 6f 20 69 set copy_info i
116a0 64 20 24 69 64 0d 0a 20 20 20 20 20 20 20 20 20 d $id..
116b0 20 20 20 69 66 20 7b 20 21 5b 64 69 63 74 20 65 if { ![dict e
116c0 78 69 73 74 73 20 24 63 6f 70 79 5f 69 6e 66 6f xists $copy_info
116d0 20 63 6f 6e 6e 65 63 74 5d 20 7d 20 7b 0d 0a 20 connect] } {..
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
116f0 69 63 74 20 73 65 74 20 63 6f 70 79 5f 69 6e 66 ict set copy_inf
11700 6f 20 63 6f 6e 6e 65 63 74 20 5b 67 69 76 65 5f o connect [give_
11710 70 72 6f 70 44 20 24 64 20 24 69 64 20 63 6f 6e propD $d $id con
11720 6e 65 63 74 20 22 22 5d 0d 0a 20 20 20 20 20 20 nect ""]..
11730 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
11740 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 20 ..
11750 20 20 20 6c 61 73 73 69 67 6e 20 22 22 20 64 65 lassign "" de
11760 6c 74 61 20 64 65 6c 74 61 5f 70 6f 69 6e 74 73 lta delta_points
11770 20 70 6f 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 points..
11780 20 20 20 20 20 66 6f 72 20 7b 20 73 65 74 20 69 for { set i
11790 20 30 20 7d 20 7b 20 24 69 20 3c 20 5b 6c 6c 65 0 } { $i < [lle
117a0 6e 67 74 68 20 24 70 6e 74 73 5d 20 7d 20 7b 20 ngth $pnts] } {
117b0 69 6e 63 72 20 69 20 7d 20 7b 0d 0a 20 20 20 20 incr i } {..
117c0 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 73 lass
117d0 69 67 6e 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 ign [lindex $pnt
117e0 73 20 24 69 5d 20 74 79 70 65 20 78 20 79 0d 0a s $i] type x y..
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11800 69 66 20 7b 20 24 74 79 70 65 20 65 71 20 22 64 if { $type eq "d
11810 65 6c 74 61 2d 70 6f 69 6e 74 22 20 7d 20 7b 0d elta-point" } {.
11820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11830 20 20 20 20 20 69 66 20 7b 20 24 69 20 3d 3d 20 if { $i ==
11840 30 20 7c 7c 20 5b 6c 69 6e 64 65 78 20 24 70 6e 0 || [lindex $pn
11850 74 73 20 24 69 2d 31 20 30 5d 20 6e 65 20 22 70 ts $i-1 0] ne "p
11860 6f 69 6e 74 22 20 7d 20 7b 0d 0a 20 20 20 20 20 oint" } {..
11870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11880 20 20 20 73 65 74 20 64 65 6c 74 61 20 22 24 78 set delta "$x
11890 20 24 79 22 0d 0a 20 20 20 20 20 20 20 20 20 20 $y"..
118a0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else
118b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
118c0 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 73 lass
118d0 69 67 6e 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 ign [lindex $pnt
118e0 73 20 24 69 2d 31 5d 20 2d 20 78 50 20 79 50 0d s $i-1] - xP yP.
118f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11900 20 20 20 20 20 20 20 20 20 64 69 63 74 20 73 65 dict se
11910 74 20 64 65 6c 74 61 5f 70 6f 69 6e 74 73 20 22 t delta_points "
11920 24 78 50 20 24 79 50 22 20 22 24 78 20 24 79 22 $xP $yP" "$x $y"
11930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
11940 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
11950 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else
11960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
11970 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 lappend p
11980 6f 69 6e 74 73 20 22 24 78 20 24 79 22 0d 0a 20 oints "$x $y"..
11990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
119a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
119b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
119c0 7b 20 24 6f 70 20 6e 65 20 22 22 20 7d 20 7b 0d { $op ne "" } {.
119d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
119e0 20 73 65 74 20 64 65 6c 74 61 20 22 30 20 30 22 set delta "0 0"
119f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
11a00 20 20 73 65 74 20 63 20 30 0d 0a 20 20 20 20 20 set c 0..
11a10 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 72 set r
11a20 65 78 20 7b 5c 41 5c 73 2a 28 5b 2d 2b 5c 64 65 ex {\A\s*([-+\de
11a30 2e 5d 2b 29 5b 2a 5d 50 28 5c 64 2b 29 7d 0d 0a .]+)[*]P(\d+)}..
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11a50 77 68 69 6c 65 20 7b 20 5b 72 65 67 65 78 70 20 while { [regexp
11a60 2d 73 74 61 72 74 20 24 63 20 2d 69 6e 64 69 63 -start $c -indic
11a70 65 73 20 24 72 65 78 20 24 6f 70 20 61 6c 6c 20 es $rex $op all
11a80 61 6c 70 68 61 49 20 70 49 5d 20 7d 20 7b 0d 0a alphaI pI] } {..
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11aa0 20 20 20 20 73 65 74 20 61 6c 70 68 61 20 5b 73 set alpha [s
11ab0 74 72 69 6e 67 20 72 61 6e 67 65 20 24 6f 70 20 tring range $op
11ac0 7b 2a 7d 24 61 6c 70 68 61 49 5d 0d 0a 20 20 20 {*}$alphaI]..
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11ae0 20 73 65 74 20 70 20 5b 73 74 72 69 6e 67 20 72 set p [string r
11af0 61 6e 67 65 20 24 6f 70 20 7b 2a 7d 24 70 49 5d ange $op {*}$pI]
11b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
11b10 20 20 20 20 20 20 73 65 74 20 76 20 5b 6c 72 61 set v [lra
11b20 6e 67 65 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 nge [lindex $pnt
11b30 73 20 24 70 2d 31 5d 20 31 20 32 5d 0d 0a 20 20 s $p-1] 1 2]..
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11b50 20 20 73 65 74 20 64 65 6c 74 61 20 5b 6d 3a 3a set delta [m::
11b60 61 78 70 79 20 24 61 6c 70 68 61 20 24 76 20 24 axpy $alpha $v $
11b70 64 65 6c 74 61 5d 0d 0a 20 20 20 20 20 20 20 20 delta]..
11b80 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
11b90 63 20 5b 65 78 70 72 20 7b 5b 6c 69 6e 64 65 78 c [expr {[lindex
11ba0 20 24 61 6c 6c 20 31 5d 2b 31 7d 5d 0d 0a 20 20 $all 1]+1}]..
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
11bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11bd0 20 69 66 20 7b 20 21 5b 72 65 67 65 78 70 20 2d if { ![regexp -
11be0 73 74 61 72 74 20 24 63 20 7b 5c 41 5c 73 2a 24 start $c {\A\s*$
11bf0 7d 20 24 6f 70 5d 20 7d 20 7b 0d 0a 20 20 20 20 } $op] } {..
11c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11c10 73 65 74 5f 65 72 72 6f 72 20 24 64 20 24 69 64 set_error $d $id
11c20 20 22 27 63 6f 70 79 27 20 65 78 70 72 65 73 73 "'copy' express
11c30 69 6f 6e 20 6e 6f 74 20 63 6f 72 72 65 63 74 22 ion not correct"
11c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
11c50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
11c60 20 7d 20 65 6c 73 65 69 66 20 7b 20 24 64 65 6c } elseif { $del
11c70 74 61 20 65 71 20 22 22 20 26 26 20 5b 64 69 63 ta eq "" && [dic
11c80 74 20 73 69 7a 65 20 24 64 65 6c 74 61 5f 70 6f t size $delta_po
11c90 69 6e 74 73 5d 20 3d 3d 20 30 20 7d 20 7b 0d 0a ints] == 0 } {..
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11cb0 69 66 20 7b 20 5b 6c 6c 65 6e 67 74 68 20 24 70 if { [llength $p
11cc0 6f 69 6e 74 73 5d 20 3d 3d 20 32 20 7d 20 7b 0d oints] == 2 } {.
11cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11ce0 20 20 20 20 20 73 65 74 20 64 65 6c 74 61 20 5b set delta [
11cf0 6d 3a 3a 73 75 62 20 5b 6c 69 6e 64 65 78 20 24 m::sub [lindex $
11d00 70 6f 69 6e 74 73 20 31 5d 20 5b 6c 69 6e 64 65 points 1] [linde
11d10 78 20 24 70 6f 69 6e 74 73 20 30 5d 5d 0d 0a 20 x $points 0]]..
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
11d30 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {..
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
11d50 5f 65 72 72 6f 72 20 24 64 20 24 69 64 20 22 27 _error $d $id "'
11d60 63 6f 70 79 27 20 6d 75 73 74 20 68 61 76 65 20 copy' must have
11d70 61 20 64 65 6c 74 61 2d 70 6f 69 6e 74 20 70 72 a delta-point pr
11d80 6f 70 65 72 74 79 20 6f 72 20 74 77 6f 20 70 6f operty or two po
11d90 69 6e 74 73 22 0d 0a 20 20 20 20 20 20 20 20 20 ints"..
11da0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
11db0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
11dc0 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 20 ..
11dd0 20 20 20 66 6f 72 20 7b 20 73 65 74 20 69 20 31 for { set i 1
11de0 20 7d 20 7b 20 24 69 20 3c 3d 20 24 6e 20 7d 20 } { $i <= $n }
11df0 7b 20 69 6e 63 72 20 69 20 7d 20 7b 0d 0a 20 20 { incr i } {..
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
11e10 74 20 63 20 5b 64 69 63 74 5f 67 65 74 64 20 24 t c [dict_getd $
11e20 63 6f 70 79 5f 69 6e 66 6f 20 6f 70 65 72 61 74 copy_info operat
11e30 69 6f 6e 73 20 22 22 5d 0d 0a 20 20 20 20 20 20 ions ""]..
11e40 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen
11e50 64 20 63 20 5b 64 69 63 74 20 63 72 65 61 74 65 d c [dict create
11e60 20 6f 70 65 72 61 74 69 6f 6e 20 24 6f 70 65 72 operation $oper
11e70 61 74 69 6f 6e 20 64 65 6c 74 61 20 5c 0d 0a 20 ation delta \..
11e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11e90 20 20 20 20 20 20 20 24 64 65 6c 74 61 20 64 65 $delta de
11ea0 6c 74 61 5f 70 6f 69 6e 74 73 20 24 64 65 6c 74 lta_points $delt
11eb0 61 5f 70 6f 69 6e 74 73 5d 0d 0a 20 20 20 20 20 a_points]..
11ec0 20 20 20 20 20 20 20 20 20 20 20 64 69 63 74 20 dict
11ed0 73 65 74 20 63 6f 70 79 5f 69 6e 66 6f 20 6f 70 set copy_info op
11ee0 65 72 61 74 69 6f 6e 73 20 24 63 0d 0a 20 20 20 erations $c..
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for
11f00 65 61 63 68 20 69 64 43 20 24 69 64 73 4c 69 73 each idC $idsLis
11f10 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t {..
11f20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 64 43 set idC
11f30 20 5b 72 65 73 6f 6c 76 65 5f 69 64 20 24 69 64 [resolve_id $id
11f40 43 20 24 69 64 5d 0d 0a 20 20 20 20 20 20 20 20 C $id]..
11f50 20 20 20 20 20 20 20 20 20 20 20 20 63 72 65 61 crea
11f60 74 65 5f 65 6e 74 69 74 79 20 24 69 64 43 20 24 te_entity $idC $
11f70 63 6f 70 79 5f 69 6e 66 6f 0d 0a 20 20 20 20 20 copy_info..
11f80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
11f90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
11fa0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
11fb0 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20 default {..
11fc0 20 20 20 20 20 20 20 73 65 74 5f 65 72 72 6f 72 set_error
11fd0 20 24 64 20 24 69 64 20 22 75 6e 6b 6e 6f 77 6e $d $id "unknown
11fe0 20 63 6f 6d 6d 61 6e 64 20 27 24 63 6d 64 27 22 command '$cmd'"
11ff0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
12000 20 7d 0d 0a 7d 0d 0a 0d 0a 70 72 6f 63 20 73 76 }..}....proc sv
12010 67 6d 6c 3a 3a 70 61 73 74 65 5f 65 6e 74 69 74 gml::paste_entit
12020 79 20 7b 20 6e 6f 64 65 20 65 6e 74 5f 74 79 70 y { node ent_typ
12030 65 20 70 72 6f 70 73 20 74 65 78 74 20 6d 54 20 e props text mT
12040 73 74 79 6c 65 73 4e 20 73 74 79 6c 65 5f 6e 75 stylesN style_nu
12050 6d 4e 20 7d 20 7b 0d 0a 20 20 20 20 75 70 76 61 mN } {.. upva
12060 72 20 31 20 24 73 74 79 6c 65 73 4e 20 73 74 79 r 1 $stylesN sty
12070 6c 65 73 0d 0a 20 20 20 20 75 70 76 61 72 20 31 les.. upvar 1
12080 20 24 73 74 79 6c 65 5f 6e 75 6d 4e 20 73 74 79 $style_numN sty
12090 6c 65 5f 6e 75 6d 0d 0a 20 20 20 20 0d 0a 20 20 le_num.. ..
120a0 20 20 73 65 74 20 70 72 6f 70 73 56 20 5b 6c 69 set propsV [li
120b0 73 74 20 66 69 6c 6c 20 73 74 72 6f 6b 65 20 6f st fill stroke o
120c0 70 61 63 69 74 79 20 73 74 72 6f 6b 65 2d 77 69 pacity stroke-wi
120d0 64 74 68 20 73 74 72 6f 6b 65 2d 64 61 73 68 61 dth stroke-dasha
120e0 72 72 61 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 rray \..
120f0 20 20 20 20 66 6f 6e 74 2d 73 74 79 6c 65 20 66 font-style f
12100 6f 6e 74 2d 77 65 69 67 68 74 20 66 6f 6e 74 2d ont-weight font-
12110 73 69 7a 65 20 66 6f 6e 74 2d 66 61 6d 69 6c 79 size font-family
12120 5d 0d 0a 20 20 20 20 0d 0a 20 20 20 20 73 65 74 ].. .. set
12130 20 6e 6f 64 65 73 20 5b 6c 69 73 74 20 24 6e 6f nodes [list $no
12140 64 65 5d 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 de].. lappend
12150 20 6e 6f 64 65 73 20 7b 2a 7d 5b 24 6e 6f 64 65 nodes {*}[$node
12160 20 73 6e 20 2a 5d 0d 0a 20 20 20 20 0d 0a 20 20 sn *].. ..
12170 20 20 73 65 74 20 73 74 79 6c 65 73 44 20 22 22 set stylesD ""
12180 0d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6e 6f .. foreach no
12190 64 65 49 20 24 6e 6f 64 65 73 20 7b 0d 0a 20 20 deI $nodes {..
121a0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 76 foreach nv
121b0 20 5b 73 70 6c 69 74 20 5b 24 6e 6f 64 65 49 20 [split [$nodeI
121c0 40 73 74 79 6c 65 20 22 22 5d 20 22 3b 22 5d 20 @style ""] ";"]
121d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c {.. l
121e0 61 73 73 69 67 6e 20 5b 73 70 6c 69 74 20 24 6e assign [split $n
121f0 76 20 3a 5d 20 6e 20 76 0d 0a 20 20 20 20 20 20 v :] n v..
12200 20 20 20 20 20 20 69 66 20 7b 20 24 6e 20 69 6e if { $n in
12210 20 24 70 72 6f 70 73 56 20 7d 20 7b 0d 0a 20 20 $propsV } {..
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
12230 20 7b 20 24 6e 20 65 71 20 22 66 6f 6e 74 2d 73 { $n eq "font-s
12240 69 7a 65 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ize" } {..
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
12260 67 65 78 70 20 7b 28 5b 2d 2b 5c 64 65 2e 5d 2b gexp {([-+\de.]+
12270 29 5c 73 2a 28 5c 77 2a 29 7d 20 24 76 20 7b 7d )\s*(\w*)} $v {}
12280 20 76 76 20 75 6e 69 74 0d 0a 20 20 20 20 20 20 vv unit..
12290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 la
122a0 73 73 69 67 6e 20 5b 6d 3a 3a 6d 61 74 6d 75 6c ssign [m::matmul
122b0 20 24 6d 54 20 22 24 76 76 20 30 22 5d 20 76 76 $mT "$vv 0"] vv
122c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
122d0 20 20 20 20 20 20 73 65 74 20 76 20 22 5b 66 6f set v "[fo
122e0 72 6d 61 74 20 25 2e 30 66 20 24 76 76 5d 24 75 rmat %.0f $vv]$u
122f0 6e 69 74 22 0d 0a 20 20 20 20 20 20 20 20 20 20 nit"..
12300 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
12310 20 20 20 20 20 20 20 20 20 64 69 63 74 20 73 65 dict se
12320 74 20 73 74 79 6c 65 73 44 20 24 6e 20 24 76 0d t stylesD $n $v.
12330 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
12340 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d }.. }
12350 0d 0a 20 20 20 20 73 65 74 20 73 74 79 6c 65 20 .. set style
12360 22 22 0d 0a 20 20 20 20 64 69 63 74 20 66 6f 72 "".. dict for
12370 20 22 6e 20 76 22 20 24 73 74 79 6c 65 73 44 20 "n v" $stylesD
12380 7b 20 61 70 70 65 6e 64 20 73 74 79 6c 65 20 22 { append style "
12390 24 6e 3a 24 76 3b 22 20 7d 0d 0a 20 20 20 20 0d $n:$v;" }.. .
123a0 0a 20 20 20 20 69 66 20 7b 20 5b 64 69 63 74 20 . if { [dict
123b0 65 78 69 73 74 73 20 24 73 74 79 6c 65 73 20 76 exists $styles v
123c0 20 24 73 74 79 6c 65 5d 20 7d 20 7b 0d 0a 20 20 $style] } {..
123d0 20 20 20 20 20 20 73 65 74 20 73 74 79 6c 65 5f set style_
123e0 6e 61 6d 65 20 5b 64 69 63 74 20 67 65 74 20 24 name [dict get $
123f0 73 74 79 6c 65 73 20 76 20 24 73 74 79 6c 65 5d styles v $style]
12400 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a .. } else {..
12410 20 20 20 20 20 20 20 20 73 65 74 20 73 74 79 6c set styl
12420 65 5f 6e 61 6d 65 20 22 73 74 79 6c 65 24 73 74 e_name "style$st
12430 79 6c 65 5f 6e 75 6d 22 0d 0a 20 20 20 20 20 20 yle_num"..
12440 20 20 69 6e 63 72 20 73 74 79 6c 65 5f 6e 75 6d incr style_num
12450 0d 0a 20 20 20 20 20 20 20 20 64 69 63 74 20 73 .. dict s
12460 65 74 20 73 74 79 6c 65 73 20 6e 20 24 73 74 79 et styles n $sty
12470 6c 65 5f 6e 61 6d 65 20 24 73 74 79 6c 65 0d 0a le_name $style..
12480 20 20 20 20 20 20 20 20 64 69 63 74 20 73 65 74 dict set
12490 20 73 74 79 6c 65 73 20 76 20 24 73 74 79 6c 65 styles v $style
124a0 20 24 73 74 79 6c 65 5f 6e 61 6d 65 0d 0a 20 20 $style_name..
124b0 20 20 7d 0d 0a 20 20 20 20 73 65 74 20 69 64 20 }.. set id
124c0 5b 24 6e 6f 64 65 20 40 69 64 20 22 22 5d 0d 0a [$node @id ""]..
124d0 20 20 20 20 73 65 74 20 74 78 74 20 22 24 69 64 set txt "$id
124e0 22 0d 0a 20 20 20 20 69 66 20 7b 20 5b 73 74 72 ".. if { [str
124f0 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 64 5d 20 ing length $id]
12500 3c 20 31 35 20 7d 20 7b 0d 0a 20 20 20 20 20 20 < 15 } {..
12510 20 20 61 70 70 65 6e 64 20 74 78 74 20 5b 73 74 append txt [st
12520 72 69 6e 67 20 72 65 70 65 61 74 20 22 20 22 20 ring repeat " "
12530 5b 65 78 70 72 20 7b 31 35 2d 5b 73 74 72 69 6e [expr {15-[strin
12540 67 20 6c 65 6e 67 74 68 20 24 69 64 5d 7d 5d 5d g length $id]}]]
12550 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a .. } else {..
12560 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 74 append t
12570 78 74 20 22 20 22 0d 0a 20 20 20 20 7d 0d 0a 20 xt " ".. }..
12580 20 20 20 61 70 70 65 6e 64 20 74 78 74 20 22 24 append txt "$
12590 65 6e 74 5f 74 79 70 65 20 24 70 72 6f 70 73 20 ent_type $props
125a0 63 6c 3a 24 73 74 79 6c 65 5f 6e 61 6d 65 3b 5c cl:$style_name;\
125b0 6e 22 0d 0a 20 20 20 20 24 74 65 78 74 20 69 6e n".. $text in
125c0 73 65 72 74 20 69 6e 73 65 72 74 20 24 74 78 74 sert insert $txt
125d0 0d 0a 7d 0d 0a 0d 0a 70 72 6f 63 20 73 76 67 6d ..}....proc svgm
125e0 6c 3a 3a 70 61 73 74 65 20 7b 20 78 6d 6c 20 7d l::paste { xml }
125f0 20 7b 0d 0a 20 20 20 20 0d 0a 20 20 20 20 70 61 {.. .. pa
12600 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 63 6f ckage require co
12610 6d 70 61 73 73 5f 75 74 69 6c 73 3a 3a 63 0d 0a mpass_utils::c..
12620 20 20 20 20 73 65 74 20 64 6f 63 20 5b 70 3a 3a set doc [p::
12630 78 6d 6c 20 70 61 72 73 65 20 24 78 6d 6c 5d 0d xml parse $xml].
12640 0a 20 20 20 20 0d 0a 20 20 20 20 73 65 74 20 77 . .. set w
12650 69 64 74 68 47 20 38 30 30 0d 0a 20 20 20 20 0d idthG 800.. .
12660 0a 20 20 20 20 73 65 74 20 73 76 67 4e 6f 64 65 . set svgNode
12670 20 5b 24 64 6f 63 20 64 6f 63 75 6d 65 6e 74 45 [$doc documentE
12680 6c 65 6d 65 6e 74 5d 0d 0a 20 20 20 20 73 65 74 lement].. set
12690 20 77 69 64 74 68 20 5b 24 73 76 67 4e 6f 64 65 width [$svgNode
126a0 20 40 77 69 64 74 68 20 31 30 30 5d 0d 0a 20 20 @width 100]..
126b0 20 20 73 65 74 20 68 65 69 67 68 74 20 5b 24 73 set height [$s
126c0 76 67 4e 6f 64 65 20 40 68 65 69 67 68 74 20 31 vgNode @height 1
126d0 30 30 5d 0d 0a 20 20 20 20 73 65 74 20 76 69 65 00].. set vie
126e0 77 42 6f 78 20 5b 24 73 76 67 4e 6f 64 65 20 40 wBox [$svgNode @
126f0 76 69 65 77 42 6f 78 20 22 30 20 30 20 24 77 69 viewBox "0 0 $wi
12700 64 74 68 20 24 68 65 69 67 68 74 22 5d 0d 0a 20 dth $height"]..
12710 20 20 20 0d 0a 20 20 20 20 73 65 74 20 74 65 78 .. set tex
12720 74 20 24 52 61 6d 44 65 62 75 67 67 65 72 3a 3a t $RamDebugger::
12730 74 65 78 74 0d 0a 20 20 20 20 73 65 74 20 69 64 text.. set id
12740 78 20 5b 24 74 65 78 74 20 69 6e 64 65 78 20 69 x [$text index i
12750 6e 73 65 72 74 5d 0d 0a 20 20 20 20 72 65 67 65 nsert].. rege
12760 78 70 20 7b 5e 5c 64 2b 7d 20 24 69 64 78 20 6c xp {^\d+} $idx l
12770 69 6e 65 0d 0a 20 20 20 20 73 65 74 20 66 6f 75 ine.. set fou
12780 6e 64 5f 73 74 61 72 74 20 30 0d 0a 20 20 20 20 nd_start 0..
12790 66 6f 72 20 7b 20 73 65 74 20 69 20 24 6c 69 6e for { set i $lin
127a0 65 20 7d 20 7b 20 24 69 20 3e 3d 20 31 20 7d 20 e } { $i >= 1 }
127b0 7b 20 69 6e 63 72 20 69 20 2d 31 20 7d 20 7b 0d { incr i -1 } {.
127c0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 20 5b 72 . if { [r
127d0 65 67 65 78 70 20 7b 5e 5c 73 2a 7e 7e 7e 7e 5c egexp {^\s*~~~~\
127e0 73 2a 24 7d 20 5b 24 74 65 78 74 20 67 65 74 20 s*$} [$text get
127f0 24 69 2e 30 20 22 24 69 2e 30 20 6c 69 6e 65 65 $i.0 "$i.0 linee
12800 6e 64 22 5d 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 nd"]] } {..
12810 20 20 20 20 20 20 20 62 72 65 61 6b 0d 0a 20 20 break..
12820 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
12830 20 69 66 20 7b 20 5b 72 65 67 65 78 70 20 7b 5e if { [regexp {^
12840 5c 73 2a 7e 7e 7e 7e 2e 2a 73 76 67 6d 6c 7d 20 \s*~~~~.*svgml}
12850 5b 24 74 65 78 74 20 67 65 74 20 24 69 2e 30 20 [$text get $i.0
12860 22 24 69 2e 30 20 6c 69 6e 65 65 6e 64 22 5d 5d "$i.0 lineend"]]
12870 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
12880 20 20 73 65 74 20 66 6f 75 6e 64 5f 73 74 61 72 set found_star
12890 74 20 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t 1..
128a0 20 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 break..
128b0 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 69 66 }.. }.. if
128c0 20 7b 20 5b 24 74 65 78 74 20 63 6f 6d 70 61 72 { [$text compar
128d0 65 20 24 69 64 78 20 3d 3d 20 22 24 69 64 78 20 e $idx == "$idx
128e0 6c 69 6e 65 73 74 61 72 74 22 5d 20 3d 3d 20 30 linestart"] == 0
128f0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 24 74 } {.. $t
12900 65 78 74 20 69 6e 73 65 72 74 20 69 6e 73 65 72 ext insert inser
12910 74 20 22 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 t "\n"..
12920 73 65 74 20 69 64 78 20 5b 24 74 65 78 74 20 69 set idx [$text i
12930 6e 64 65 78 20 22 24 69 64 78 20 2b 20 31 6c 20 ndex "$idx + 1l
12940 6c 69 6e 65 73 74 61 72 74 22 5d 0d 0a 20 20 20 linestart"]..
12950 20 7d 0d 0a 20 20 20 20 69 66 20 7b 20 5b 24 74 }.. if { [$t
12960 65 78 74 20 63 6f 6d 70 61 72 65 20 24 69 64 78 ext compare $idx
12970 20 3d 3d 20 22 24 69 64 78 20 6c 69 6e 65 65 6e == "$idx lineen
12980 64 22 5d 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 20 d"] == 0 } {..
12990 20 20 20 20 20 20 24 74 65 78 74 20 69 6e 73 65 $text inse
129a0 72 74 20 69 6e 73 65 72 74 20 22 5c 6e 22 0d 0a rt insert "\n"..
129b0 20 20 20 20 20 20 20 20 24 74 65 78 74 20 6d 61 $text ma
129c0 72 6b 20 73 65 74 20 69 6e 73 65 72 74 20 22 69 rk set insert "i
129d0 6e 73 65 72 74 2d 31 63 22 0d 0a 20 20 20 20 7d nsert-1c".. }
129e0 0d 0a 20 20 20 20 0d 0a 20 20 20 20 69 66 20 7b .. .. if {
129f0 20 21 24 66 6f 75 6e 64 5f 73 74 61 72 74 20 7d !$found_start }
12a00 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set
12a10 72 20 5b 65 78 70 72 20 7b 31 2e 30 2a 5b 24 73 r [expr {1.0*[$s
12a20 76 67 4e 6f 64 65 20 40 77 69 64 74 68 20 38 30 vgNode @width 80
12a30 30 5d 2f 5b 24 73 76 67 4e 6f 64 65 20 40 68 65 0]/[$svgNode @he
12a40 69 67 68 74 20 24 77 69 64 74 68 47 5d 7d 5d 0d ight $widthG]}].
12a50 0a 20 20 20 20 20 20 20 20 73 65 74 20 68 65 69 . set hei
12a60 67 68 74 47 20 5b 66 6f 72 6d 61 74 20 25 30 2e ghtG [format %0.
12a70 66 20 5b 65 78 70 72 20 7b 24 77 69 64 74 68 47 f [expr {$widthG
12a80 2f 24 72 7d 5d 5d 0d 0a 20 20 20 20 20 20 20 20 /$r}]]..
12a90 24 74 65 78 74 20 69 6e 73 65 72 74 20 69 6e 73 $text insert ins
12aa0 65 72 74 20 22 7e 7e 7e 7e 20 7b 20 73 76 67 6d ert "~~~~ { svgm
12ab0 6c 3d 5c 22 31 5c 22 20 66 69 6c 65 3d 5c 22 69 l=\"1\" file=\"i
12ac0 6d 61 67 65 2e 73 76 67 5c 22 20 7d 5c 6e 22 0d mage.svg\" }\n".
12ad0 0a 20 20 20 20 20 20 20 20 24 74 65 78 74 20 69 . $text i
12ae0 6e 73 65 72 74 20 69 6e 73 65 72 74 20 22 2b 73 nsert insert "+s
12af0 76 67 6d 6c 31 20 20 20 20 20 20 20 20 20 20 20 vgml1
12b00 20 20 77 69 64 74 68 3a 24 77 69 64 74 68 47 3b width:$widthG;
12b10 20 68 65 69 67 68 74 3a 24 68 65 69 67 68 74 47 height:$heightG
12b20 3b 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 24 74 ;\n".. $t
12b30 65 78 74 20 69 6e 73 65 72 74 20 69 6e 73 65 72 ext insert inser
12b40 74 20 22 2b 61 6c 69 61 73 20 20 20 20 20 20 20 t "+alias
12b50 20 20 20 20 20 20 20 70 6f 69 6e 74 3a 70 3b 20 point:p;
12b60 64 65 6c 74 61 2d 70 6f 69 6e 74 3a 64 70 3b 20 delta-point:dp;
12b70 77 69 64 74 68 2d 68 65 69 67 68 74 3a 77 68 3b width-height:wh;
12b80 20 74 65 78 74 3a 74 3b 5c 6e 22 0d 0a 20 20 20 text:t;\n"..
12b90 20 20 20 20 20 24 74 65 78 74 20 69 6e 73 65 72 $text inser
12ba0 74 20 69 6e 73 65 72 74 20 22 2b 61 6c 69 61 73 t insert "+alias
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e an
12bc0 63 68 6f 72 3a 61 3b 20 68 6f 72 69 7a 6f 6e 74 chor:a; horizont
12bd0 61 6c 2d 76 65 72 74 69 63 61 6c 3a 68 76 3b 20 al-vertical:hv;
12be0 63 6c 61 73 73 3a 63 6c 3b 20 6e 75 6d 62 65 72 class:cl; number
12bf0 3a 6e 3b 5c 6e 5c 6e 22 0d 0a 20 20 20 20 7d 0d :n;\n\n".. }.
12c00 0a 20 20 20 20 0d 0a 20 20 20 20 73 65 74 20 6d . .. set m
12c10 20 5b 6d 3a 3a 6d 6b 4d 61 74 72 69 78 20 33 20 [m::mkMatrix 3
12c20 33 20 30 5d 0d 0a 20 20 20 20 6d 3a 3a 73 65 74 3 0].. m::set
12c30 65 6c 65 6d 20 6d 20 30 20 30 20 5b 65 78 70 72 elem m 0 0 [expr
12c40 20 7b 31 30 30 2e 30 2f 5b 6c 69 6e 64 65 78 20 {100.0/[lindex
12c50 24 76 69 65 77 42 6f 78 20 32 5d 7d 5d 0d 0a 20 $viewBox 2]}]..
12c60 20 20 20 6d 3a 3a 73 65 74 65 6c 65 6d 20 6d 20 m::setelem m
12c70 30 20 32 20 5b 65 78 70 72 20 7b 2d 31 30 30 2e 0 2 [expr {-100.
12c80 30 2a 5b 6c 69 6e 64 65 78 20 24 76 69 65 77 42 0*[lindex $viewB
12c90 6f 78 20 30 5d 2f 5b 6c 69 6e 64 65 78 20 24 76 ox 0]/[lindex $v
12ca0 69 65 77 42 6f 78 20 32 5d 7d 5d 0d 0a 20 20 20 iewBox 2]}]..
12cb0 20 6d 3a 3a 73 65 74 65 6c 65 6d 20 6d 20 31 20 m::setelem m 1
12cc0 31 20 5b 65 78 70 72 20 7b 31 30 30 2e 30 2f 5b 1 [expr {100.0/[
12cd0 6c 69 6e 64 65 78 20 24 76 69 65 77 42 6f 78 20 lindex $viewBox
12ce0 33 5d 7d 5d 0d 0a 20 20 20 20 6d 3a 3a 73 65 74 3]}].. m::set
12cf0 65 6c 65 6d 20 6d 20 31 20 32 20 5b 65 78 70 72 elem m 1 2 [expr
12d00 20 7b 2d 31 30 30 2e 30 2a 5b 6c 69 6e 64 65 78 {-100.0*[lindex
12d10 20 24 76 69 65 77 42 6f 78 20 31 5d 2f 5b 6c 69 $viewBox 1]/[li
12d20 6e 64 65 78 20 24 76 69 65 77 42 6f 78 20 33 5d ndex $viewBox 3]
12d30 7d 5d 0d 0a 20 20 20 20 0d 0a 20 20 20 20 73 65 }].. .. se
12d40 74 20 6d 53 20 5b 6d 3a 3a 6d 6b 4d 61 74 72 69 t mS [m::mkMatri
12d50 78 20 32 20 32 20 30 5d 0d 0a 20 20 20 20 6d 3a x 2 2 0].. m:
12d60 3a 73 65 74 65 6c 65 6d 20 6d 53 20 30 20 30 20 :setelem mS 0 0
12d70 5b 6d 3a 3a 67 65 74 65 6c 65 6d 20 24 6d 20 30 [m::getelem $m 0
12d80 20 30 5d 0d 0a 20 20 20 20 6d 3a 3a 73 65 74 65 0].. m::sete
12d90 6c 65 6d 20 6d 53 20 31 20 31 20 5b 6d 3a 3a 67 lem mS 1 1 [m::g
12da0 65 74 65 6c 65 6d 20 24 6d 20 31 20 31 5d 0d 0a etelem $m 1 1]..
12db0 20 20 20 20 0d 0a 20 20 20 20 73 65 74 20 6d 54 .. set mT
12dc0 20 5b 6d 3a 3a 6d 6b 4d 61 74 72 69 78 20 32 20 [m::mkMatrix 2
12dd0 32 20 30 5d 0d 0a 20 20 20 20 6d 3a 3a 73 65 74 2 0].. m::set
12de0 65 6c 65 6d 20 6d 54 20 30 20 30 20 5b 65 78 70 elem mT 0 0 [exp
12df0 72 20 7b 31 2e 30 2a 24 77 69 64 74 68 47 2f 5b r {1.0*$widthG/[
12e00 6c 69 6e 64 65 78 20 24 76 69 65 77 42 6f 78 20 lindex $viewBox
12e10 32 5d 7d 5d 0d 0a 20 20 20 20 6d 3a 3a 73 65 74 2]}].. m::set
12e20 65 6c 65 6d 20 6d 54 20 31 20 31 20 5b 65 78 70 elem mT 1 1 [exp
12e30 72 20 7b 31 2e 30 2a 24 77 69 64 74 68 47 2f 5b r {1.0*$widthG/[
12e40 6c 69 6e 64 65 78 20 24 76 69 65 77 42 6f 78 20 lindex $viewBox
12e50 33 5d 7d 5d 0d 0a 20 20 20 20 0d 0a 20 20 20 20 3]}].. ..
12e60 73 65 74 20 73 74 79 6c 65 73 20 22 22 3b 20 73 set styles ""; s
12e70 65 74 20 73 74 79 6c 65 5f 6e 75 6d 20 31 0d 0a et style_num 1..
12e80 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 74 68 foreach path
12e90 4e 6f 64 65 20 5b 24 73 76 67 4e 6f 64 65 20 73 Node [$svgNode s
12ea0 6e 20 22 70 61 74 68 22 5d 20 7b 0d 0a 20 20 20 n "path"] {..
12eb0 20 20 20 20 20 73 65 74 20 76 73 20 5b 72 65 67 set vs [reg
12ec0 65 78 70 20 2d 69 6e 6c 69 6e 65 20 2d 61 6c 6c exp -inline -all
12ed0 20 7b 5b 61 2d 7a 41 2d 5a 5d 7c 5b 2d 2b 65 30 {[a-zA-Z]|[-+e0
12ee0 2d 39 2e 5d 2b 7d 20 5b 24 70 61 74 68 4e 6f 64 -9.]+} [$pathNod
12ef0 65 20 40 64 20 22 22 5d 5d 0d 0a 20 20 20 20 20 e @d ""]]..
12f00 20 20 20 73 65 74 20 64 4e 20 22 22 0d 0a 20 20 set dN ""..
12f10 20 20 20 20 20 20 73 65 74 20 63 6d 64 5f 70 72 set cmd_pr
12f20 65 76 20 22 22 0d 0a 20 20 20 20 20 20 20 20 73 ev "".. s
12f30 65 74 20 70 6e 74 5f 70 72 65 76 20 22 22 0d 0a et pnt_prev ""..
12f40 20 20 20 20 20 20 20 20 66 6f 72 20 7b 20 73 65 for { se
12f50 74 20 69 20 30 20 7d 20 7b 20 24 69 20 3c 20 5b t i 0 } { $i < [
12f60 6c 6c 65 6e 67 74 68 20 24 76 73 5d 20 7d 20 7b llength $vs] } {
12f70 20 69 6e 63 72 20 69 20 7d 20 7b 0d 0a 20 20 20 incr i } {..
12f80 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 switch
12f90 5b 6c 69 6e 64 65 78 20 24 76 73 20 24 69 5d 20 [lindex $vs $i]
12fa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
12fb0 20 20 20 61 20 2d 20 41 20 7b 0d 0a 20 20 20 20 a - A {..
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12fd0 6c 61 73 73 69 67 6e 20 5b 6c 72 61 6e 67 65 20 lassign [lrange
12fe0 24 76 73 20 24 69 20 24 69 2b 37 5d 20 74 79 70 $vs $i $i+7] typ
12ff0 65 20 72 78 20 72 79 20 78 2d 61 78 69 73 2d 72 e rx ry x-axis-r
13000 6f 74 61 74 69 6f 6e 20 6c 61 72 67 65 2d 61 72 otation large-ar
13010 63 2d 66 6c 61 67 20 5c 0d 0a 20 20 20 20 20 20 c-flag \..
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13030 20 20 73 77 65 65 70 2d 66 6c 61 67 20 78 20 79 sweep-flag x y
13040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
13050 20 20 20 20 20 20 6c 61 73 73 69 67 6e 20 5b 6d lassign [m
13060 3a 3a 6d 61 74 6d 75 6c 20 24 6d 53 20 22 24 72 ::matmul $mS "$r
13070 78 20 24 72 79 22 5d 20 72 78 20 72 79 0d 0a 20 x $ry"] rx ry..
13080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13090 20 20 20 69 66 20 7b 20 24 74 79 70 65 20 65 71 if { $type eq
130a0 20 22 41 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 "A" } {..
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
130c0 20 20 6c 61 73 73 69 67 6e 20 5b 6d 3a 3a 6d 61 lassign [m::ma
130d0 74 6d 75 6c 20 24 6d 20 22 24 78 20 24 79 20 31 tmul $m "$x $y 1
130e0 22 5d 20 78 20 79 0d 0a 20 20 20 20 20 20 20 20 "] x y..
130f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el
13100 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {..
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 la
13120 73 73 69 67 6e 20 5b 6d 3a 3a 6d 61 74 6d 75 6c ssign [m::matmul
13130 20 24 6d 53 20 22 24 78 20 24 79 22 5d 20 78 20 $mS "$x $y"] x
13140 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y..
13150 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 73 69 lassi
13160 67 6e 20 5b 6d 3a 3a 61 64 64 20 24 70 6e 74 5f gn [m::add $pnt_
13170 70 72 65 76 20 22 24 78 20 24 79 22 5d 20 78 20 prev "$x $y"] x
13180 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y..
13190 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 set t
131a0 79 70 65 20 41 0d 0a 20 20 20 20 20 20 20 20 20 ype A..
131b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
131d0 20 20 73 65 74 20 70 6e 74 5f 70 72 65 76 20 22 set pnt_prev "
131e0 24 78 20 24 79 22 0d 0a 20 20 20 20 20 20 20 20 $x $y"..
131f0 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 lapp
13200 65 6e 64 20 64 4e 20 24 74 79 70 65 20 7b 2a 7d end dN $type {*}
13210 5b 66 6f 72 6d 61 74 20 22 25 2e 30 66 20 25 2e [format "%.0f %.
13220 30 66 22 20 24 72 78 20 24 72 79 5d 20 24 7b 78 0f" $rx $ry] ${x
13230 2d 61 78 69 73 2d 72 6f 74 61 74 69 6f 6e 7d 20 -axis-rotation}
13240 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \..
13250 20 20 20 20 20 20 20 20 20 20 20 24 7b 6c 61 72 ${lar
13260 67 65 2d 61 72 63 2d 66 6c 61 67 7d 20 24 7b 73 ge-arc-flag} ${s
13270 77 65 65 70 2d 66 6c 61 67 7d 20 7b 2a 7d 5b 66 weep-flag} {*}[f
13280 6f 72 6d 61 74 20 22 25 2e 30 66 20 25 2e 30 66 ormat "%.0f %.0f
13290 22 20 24 78 20 24 79 5d 0d 0a 20 20 20 20 20 20 " $x $y]..
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
132b0 74 20 63 6d 64 5f 70 72 65 76 20 5b 6c 69 6e 64 t cmd_prev [lind
132c0 65 78 20 24 76 73 20 24 69 5d 0d 0a 20 20 20 20 ex $vs $i]..
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
132e0 69 6e 63 72 20 69 20 37 0d 0a 20 20 20 20 20 20 incr i 7..
132f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 20 2d m -
13310 20 4d 20 2d 20 6c 20 2d 20 4c 20 2d 20 71 20 2d M - l - L - q -
13320 20 51 20 2d 20 63 20 2d 20 43 20 2d 20 73 20 2d Q - c - C - s -
13330 20 53 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 S {..
13340 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 switch
13350 20 5b 6c 69 6e 64 65 78 20 24 76 73 20 24 69 5d [lindex $vs $i]
13360 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
13370 20 20 20 20 20 20 20 20 20 20 20 20 6d 20 2d 20 m -
13380 4d 20 2d 20 6c 20 2d 20 4c 20 7b 20 73 65 74 20 M - l - L { set
13390 6e 70 6f 69 6e 74 73 20 31 20 7d 0d 0a 20 20 20 npoints 1 }..
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133b0 20 20 20 20 20 71 20 2d 20 51 20 2d 20 73 20 2d q - Q - s -
133c0 20 53 20 7b 20 73 65 74 20 6e 70 6f 69 6e 74 73 S { set npoints
133d0 20 32 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 2 }..
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 20 c
133f0 2d 20 43 20 7b 20 73 65 74 20 6e 70 6f 69 6e 74 - C { set npoint
13400 73 20 33 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 s 3 }..
13410 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13430 20 20 73 65 74 20 74 79 70 65 20 5b 6c 69 6e 64 set type [lind
13440 65 78 20 24 76 73 20 24 69 5d 0d 0a 23 20 20 20 ex $vs $i]..#
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13460 20 20 69 66 20 7b 20 24 69 20 3d 3d 20 30 20 26 if { $i == 0 &
13470 26 20 24 74 79 70 65 20 65 71 20 22 6d 22 20 7d & $type eq "m" }
13480 20 7b 0d 0a 23 20 20 20 20 20 20 20 20 20 20 20 {..#
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
134a0 74 20 74 79 70 65 20 22 4d 22 0d 0a 23 20 20 20 t type "M"..#
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
134c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
134d0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 lappend
134e0 20 64 4e 20 5b 73 74 72 69 6e 67 20 74 6f 75 70 dN [string toup
134f0 70 65 72 20 24 74 79 70 65 5d 0d 0a 20 20 20 20 per $type]..
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13510 66 6f 72 20 7b 20 73 65 74 20 6a 20 30 20 7d 20 for { set j 0 }
13520 7b 20 24 6a 20 3c 20 24 6e 70 6f 69 6e 74 73 20 { $j < $npoints
13530 7d 20 7b 20 69 6e 63 72 20 6a 20 7d 20 7b 0d 0a } { incr j } {..
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13550 20 20 20 20 20 20 20 20 73 65 74 20 69 64 78 20 set idx
13560 5b 65 78 70 72 20 7b 24 69 2b 32 2a 24 6a 2b 31 [expr {$i+2*$j+1
13570 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }]..
13580 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 73 lass
13590 69 67 6e 20 5b 6c 72 61 6e 67 65 20 24 76 73 20 ign [lrange $vs
135a0 24 69 64 78 20 24 69 64 78 2b 31 5d 20 78 20 79 $idx $idx+1] x y
135b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
135c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 24 if { $
135d0 74 79 70 65 20 69 6e 20 22 4d 20 4c 20 51 20 43 type in "M L Q C
135e0 20 53 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 S" } {..
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13600 20 20 20 20 20 6c 61 73 73 69 67 6e 20 5b 6d 3a lassign [m:
13610 3a 6d 61 74 6d 75 6c 20 24 6d 20 22 24 78 20 24 :matmul $m "$x $
13620 79 20 31 22 5d 20 78 20 79 0d 0a 20 20 20 20 20 y 1"] x y..
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13640 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 24 74 } elseif { $t
13650 79 70 65 20 65 71 20 22 6d 22 20 26 26 20 24 69 ype eq "m" && $i
13660 20 3d 3d 20 30 20 7d 20 7b 0d 0a 20 20 20 20 20 == 0 } {..
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13680 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e 20 5b lassign [
13690 6d 3a 3a 6d 61 74 6d 75 6c 20 24 6d 20 22 24 78 m::matmul $m "$x
136a0 20 24 79 20 31 22 5d 20 78 20 79 0d 0a 20 20 20 $y 1"] x y..
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
136c0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {..
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
136e0 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 73 69 lassi
136f0 67 6e 20 5b 6d 3a 3a 6d 61 74 6d 75 6c 20 24 6d gn [m::matmul $m
13700 53 20 22 24 78 20 24 79 22 5d 20 78 20 79 0d 0a S "$x $y"] x y..
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13720 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 73 73 lass
13730 69 67 6e 20 5b 6d 3a 3a 61 64 64 20 24 70 6e 74 ign [m::add $pnt
13740 5f 70 72 65 76 20 22 24 78 20 24 79 22 5d 20 78 _prev "$x $y"] x
13750 20 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y..
13760 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13780 20 20 20 20 20 20 20 69 66 20 7b 20 24 6a 20 3d if { $j =
13790 3d 20 24 6e 70 6f 69 6e 74 73 2d 31 20 7d 20 7b = $npoints-1 } {
137a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
137c0 74 20 70 6e 74 5f 70 72 65 76 20 22 24 78 20 24 t pnt_prev "$x $
137d0 79 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y"..
137e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13800 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 64 lappend d
13810 4e 20 7b 2a 7d 5b 66 6f 72 6d 61 74 20 22 25 2e N {*}[format "%.
13820 30 66 20 25 2e 30 66 22 20 24 78 20 24 79 5d 0d 0f %.0f" $x $y].
13830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
13840 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
13850 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
13860 63 6d 64 5f 70 72 65 76 20 24 74 79 70 65 0d 0a cmd_prev $type..
13870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13880 20 20 20 20 69 6e 63 72 20 69 20 5b 65 78 70 72 incr i [expr
13890 20 7b 32 2a 24 6e 70 6f 69 6e 74 73 7d 5d 0d 0a {2*$npoints}]..
138a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
138b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
138c0 20 20 20 68 20 2d 20 48 20 2d 20 76 20 2d 20 56 h - H - v - V
138d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
138e0 20 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e 20 lassign
138f0 5b 6c 72 61 6e 67 65 20 24 76 73 20 24 69 20 24 [lrange $vs $i $
13900 69 2b 31 5d 20 74 79 70 65 20 78 79 0d 0a 20 20 i+1] type xy..
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13920 20 20 73 77 69 74 63 68 20 5b 6c 69 6e 64 65 78 switch [lindex
13930 20 24 76 73 20 24 69 5d 20 7b 0d 0a 20 20 20 20 $vs $i] {..
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13950 20 20 20 20 68 20 2d 20 48 20 7b 20 73 65 74 20 h - H { set
13960 78 20 24 78 79 20 3b 20 73 65 74 20 79 20 30 20 x $xy ; set y 0
13970 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
13980 20 20 20 20 20 20 20 20 20 20 20 76 20 2d 20 56 v - V
13990 20 7b 20 73 65 74 20 78 20 30 20 20 20 3b 20 73 { set x 0 ; s
139a0 65 74 20 79 20 24 78 79 20 7d 0d 0a 20 20 20 20 et y $xy }..
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
139c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
139d0 20 20 20 20 20 20 20 69 66 20 7b 20 5b 6c 69 6e if { [lin
139e0 64 65 78 20 24 76 73 20 24 69 5d 20 69 6e 20 22 dex $vs $i] in "
139f0 48 20 56 22 20 7d 20 7b 0d 0a 20 20 20 20 20 20 H V" } {..
13a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13a10 20 20 6c 61 73 73 69 67 6e 20 5b 6d 3a 3a 6d 61 lassign [m::ma
13a20 74 6d 75 6c 20 24 6d 20 22 24 78 20 24 79 20 31 tmul $m "$x $y 1
13a30 22 5d 20 78 20 79 0d 0a 20 20 20 20 20 20 20 20 "] x y..
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13a50 69 66 20 7b 20 5b 6c 69 6e 64 65 78 20 24 76 73 if { [lindex $vs
13a60 20 24 69 5d 20 65 71 20 22 48 22 20 7d 20 7b 0d $i] eq "H" } {.
13a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
13a80 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
13a90 20 79 20 5b 6c 69 6e 64 65 78 20 24 70 6e 74 5f y [lindex $pnt_
13aa0 70 72 65 76 20 31 5d 0d 0a 20 20 20 20 20 20 20 prev 1]..
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ac0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {..
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ae0 20 20 20 20 20 20 20 73 65 74 20 78 20 5b 6c 69 set x [li
13af0 6e 64 65 78 20 24 70 6e 74 5f 70 72 65 76 20 30 ndex $pnt_prev 0
13b00 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]..
13b10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13b30 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {..
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13b50 20 20 20 20 6c 61 73 73 69 67 6e 20 5b 6d 3a 3a lassign [m::
13b60 6d 61 74 6d 75 6c 20 24 6d 53 20 22 24 78 20 24 matmul $mS "$x $
13b70 79 22 5d 20 78 20 79 0d 0a 20 20 20 20 20 20 20 y"] x y..
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13b90 20 6c 61 73 73 69 67 6e 20 5b 6d 3a 3a 61 64 64 lassign [m::add
13ba0 20 24 70 6e 74 5f 70 72 65 76 20 22 24 78 20 24 $pnt_prev "$x $
13bb0 79 22 5d 20 78 20 79 0d 0a 20 20 20 20 20 20 20 y"] x y..
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13be0 20 20 20 20 73 65 74 20 70 6e 74 5f 70 72 65 76 set pnt_prev
13bf0 20 22 24 78 20 24 79 22 0d 0a 20 20 20 20 20 20 "$x $y"..
13c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 la
13c10 70 70 65 6e 64 20 64 4e 20 4c 20 7b 2a 7d 5b 66 ppend dN L {*}[f
13c20 6f 72 6d 61 74 20 22 25 2e 30 66 20 25 2e 30 66 ormat "%.0f %.0f
13c30 22 20 24 78 20 24 79 5d 0d 0a 20 20 20 20 20 20 " $x $y]..
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
13c50 74 20 63 6d 64 5f 70 72 65 76 20 5b 73 74 72 69 t cmd_prev [stri
13c60 6e 67 20 74 6f 75 70 70 65 72 20 5b 6c 69 6e 64 ng toupper [lind
13c70 65 78 20 24 76 73 20 24 69 5d 5d 0d 0a 20 20 20 ex $vs $i]]..
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13c90 20 69 6e 63 72 20 69 20 31 0d 0a 20 20 20 20 20 incr i 1..
13ca0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 20 z
13cc0 2d 20 5a 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 - Z {..
13cd0 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe
13ce0 6e 64 20 64 4e 20 5b 6c 69 6e 64 65 78 20 24 76 nd dN [lindex $v
13cf0 73 20 24 69 5d 0d 0a 20 20 20 20 20 20 20 20 20 s $i]..
13d00 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 set c
13d10 6d 64 5f 70 72 65 76 20 5b 6c 69 6e 64 65 78 20 md_prev [lindex
13d20 24 76 73 20 24 69 5d 0d 0a 20 20 20 20 20 20 20 $vs $i]..
13d30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
13d40 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 defa
13d50 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ult {..
13d60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 20 if {
13d70 24 63 6d 64 5f 70 72 65 76 20 65 71 20 22 22 20 $cmd_prev eq ""
13d80 7c 7c 20 24 63 6d 64 5f 70 72 65 76 20 69 6e 20 || $cmd_prev in
13d90 22 4d 20 6d 22 20 7d 20 7b 0d 0a 20 20 20 20 20 "M m" } {..
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13db0 20 20 20 69 66 20 7b 20 24 63 6d 64 5f 70 72 65 if { $cmd_pre
13dc0 76 20 65 71 20 22 6d 22 20 7d 20 7b 0d 0a 20 20 v eq "m" } {..
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13de0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6d set cm
13df0 64 5f 70 72 65 76 20 22 6c 22 0d 0a 20 20 20 20 d_prev "l"..
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e10 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {..
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e30 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6d set cm
13e40 64 5f 70 72 65 76 20 22 4c 22 0d 0a 20 20 20 20 d_prev "L"..
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
13e70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e90 20 20 73 65 74 20 76 73 20 5b 6c 69 6e 73 65 72 set vs [linser
13ea0 74 20 24 76 73 20 24 69 20 24 63 6d 64 5f 70 72 t $vs $i $cmd_pr
13eb0 65 76 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ev]..
13ec0 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 69 20 incr i
13ed0 2d 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 -1..
13ee0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
13ef0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }.
13f00 0a 20 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 . ..
13f10 20 20 20 73 65 74 20 65 6e 74 5f 74 79 70 65 20 set ent_type
13f20 22 6c 69 6e 65 22 0d 0a 20 20 20 20 20 20 20 20 "line"..
13f30 73 65 74 20 70 72 6f 70 73 20 22 70 3a 5b 6a 6f set props "p:[jo
13f40 69 6e 20 24 64 4e 20 2c 5d 3b 22 0d 0a 20 20 20 in $dN ,];"..
13f50 20 20 20 20 20 70 61 73 74 65 5f 65 6e 74 69 74 paste_entit
13f60 79 20 24 70 61 74 68 4e 6f 64 65 20 24 65 6e 74 y $pathNode $ent
13f70 5f 74 79 70 65 20 24 70 72 6f 70 73 20 24 74 65 _type $props $te
13f80 78 74 20 24 6d 54 20 73 74 79 6c 65 73 20 73 74 xt $mT styles st
13f90 79 6c 65 5f 6e 75 6d 0d 0a 20 20 20 20 7d 0d 0a yle_num.. }..
13fa0 20 20 20 20 66 6f 72 65 61 63 68 20 63 69 72 63 foreach circ
13fb0 6c 65 4e 6f 64 65 20 5b 24 73 76 67 4e 6f 64 65 leNode [$svgNode
13fc0 20 73 6e 20 22 63 69 72 63 6c 65 22 5d 20 7b 0d sn "circle"] {.
13fd0 0a 20 20 20 20 20 20 20 20 73 65 74 20 78 20 5b . set x [
13fe0 24 63 69 72 63 6c 65 4e 6f 64 65 20 40 63 78 20 $circleNode @cx
13ff0 30 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 0].. set
14000 79 20 5b 24 63 69 72 63 6c 65 4e 6f 64 65 20 40 y [$circleNode @
14010 63 79 20 30 5d 0d 0a 20 20 20 20 20 20 20 20 73 cy 0].. s
14020 65 74 20 72 20 5b 24 63 69 72 63 6c 65 4e 6f 64 et r [$circleNod
14030 65 20 40 72 20 30 5d 0d 0a 20 20 20 20 20 20 20 e @r 0]..
14040 20 6c 61 73 73 69 67 6e 20 5b 6d 3a 3a 6d 61 74 lassign [m::mat
14050 6d 75 6c 20 24 6d 20 22 24 78 20 24 79 20 31 22 mul $m "$x $y 1"
14060 5d 20 78 20 79 0d 0a 20 20 20 20 20 20 20 20 6c ] x y.. l
14070 61 73 73 69 67 6e 20 5b 6d 3a 3a 6d 61 74 6d 75 assign [m::matmu
14080 6c 20 24 6d 53 20 22 24 72 20 30 22 5d 20 72 0d l $mS "$r 0"] r.
14090 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 20 5b . set d [
140a0 65 78 70 72 20 7b 32 2a 24 72 7d 5d 0d 0a 20 20 expr {2*$r}]..
140b0 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 ..
140c0 73 65 74 20 65 6e 74 5f 74 79 70 65 20 22 63 69 set ent_type "ci
140d0 72 63 6c 65 22 0d 0a 20 20 20 20 20 20 20 20 73 rcle".. s
140e0 65 74 20 70 72 6f 70 73 20 22 70 3a 5b 66 6f 72 et props "p:[for
140f0 6d 61 74 20 22 25 2e 30 66 2c 25 2e 30 66 22 20 mat "%.0f,%.0f"
14100 24 78 20 24 79 5d 3b 20 77 68 3a 5b 66 6f 72 6d $x $y]; wh:[form
14110 61 74 20 22 25 2e 30 66 2c 25 2e 30 66 22 20 24 at "%.0f,%.0f" $
14120 64 20 24 64 5d 3b 22 0d 0a 20 20 20 20 20 20 20 d $d];"..
14130 20 70 61 73 74 65 5f 65 6e 74 69 74 79 20 24 63 paste_entity $c
14140 69 72 63 6c 65 4e 6f 64 65 20 24 65 6e 74 5f 74 ircleNode $ent_t
14150 79 70 65 20 24 70 72 6f 70 73 20 24 74 65 78 74 ype $props $text
14160 20 24 6d 54 20 73 74 79 6c 65 73 20 73 74 79 6c $mT styles styl
14170 65 5f 6e 75 6d 0d 0a 20 20 20 20 7d 20 20 20 20 e_num.. }
14180 0d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 72 65 .. foreach re
14190 63 74 4e 6f 64 65 20 5b 24 73 76 67 4e 6f 64 65 ctNode [$svgNode
141a0 20 73 6e 20 22 72 65 63 74 22 5d 20 7b 0d 0a 20 sn "rect"] {..
141b0 20 20 20 20 20 20 20 73 65 74 20 78 20 5b 24 72 set x [$r
141c0 65 63 74 4e 6f 64 65 20 40 78 20 30 5d 0d 0a 20 ectNode @x 0]..
141d0 20 20 20 20 20 20 20 73 65 74 20 79 20 5b 24 72 set y [$r
141e0 65 63 74 4e 6f 64 65 20 40 79 20 30 5d 0d 0a 20 ectNode @y 0]..
141f0 20 20 20 20 20 20 20 73 65 74 20 77 69 64 74 68 set width
14200 20 5b 24 72 65 63 74 4e 6f 64 65 20 40 77 69 64 [$rectNode @wid
14210 74 68 20 30 5d 0d 0a 20 20 20 20 20 20 20 20 73 th 0].. s
14220 65 74 20 68 65 69 67 68 74 20 5b 24 72 65 63 74 et height [$rect
14230 4e 6f 64 65 20 40 68 65 69 67 68 74 20 30 5d 0d Node @height 0].
14240 0a 20 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e . lassign
14250 20 5b 6d 3a 3a 6d 61 74 6d 75 6c 20 24 6d 20 22 [m::matmul $m "
14260 24 78 20 24 79 20 31 22 5d 20 78 20 79 0d 0a 20 $x $y 1"] x y..
14270 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e 20 5b lassign [
14280 6d 3a 3a 6d 61 74 6d 75 6c 20 24 6d 53 20 22 24 m::matmul $mS "$
14290 77 69 64 74 68 20 24 68 65 69 67 68 74 22 5d 20 width $height"]
142a0 77 69 64 74 68 20 68 65 69 67 68 74 0d 0a 20 20 width height..
142b0 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20 20 20 ..
142c0 73 65 74 20 65 6e 74 5f 74 79 70 65 20 22 72 65 set ent_type "re
142d0 63 74 22 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ct".. set
142e0 20 70 72 6f 70 73 20 22 70 3a 5b 66 6f 72 6d 61 props "p:[forma
142f0 74 20 22 25 2e 30 66 2c 25 2e 30 66 22 20 24 78 t "%.0f,%.0f" $x
14300 20 24 79 5d 3b 20 61 3a 6e 77 3b 20 22 0d 0a 20 $y]; a:nw; "..
14310 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 70 72 append pr
14320 6f 70 73 20 22 77 68 3a 5b 66 6f 72 6d 61 74 20 ops "wh:[format
14330 22 25 2e 30 66 2c 25 2e 30 66 22 20 24 77 69 64 "%.0f,%.0f" $wid
14340 74 68 20 24 68 65 69 67 68 74 5d 3b 22 0d 0a 20 th $height];"..
14350 20 20 20 20 20 20 20 70 61 73 74 65 5f 65 6e 74 paste_ent
14360 69 74 79 20 24 72 65 63 74 4e 6f 64 65 20 24 65 ity $rectNode $e
14370 6e 74 5f 74 79 70 65 20 24 70 72 6f 70 73 20 24 nt_type $props $
14380 74 65 78 74 20 24 6d 54 20 73 74 79 6c 65 73 20 text $mT styles
14390 73 74 79 6c 65 5f 6e 75 6d 0d 0a 20 20 20 20 7d style_num.. }
143a0 0d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 74 65 .. foreach te
143b0 78 74 4e 6f 64 65 20 5b 24 73 76 67 4e 6f 64 65 xtNode [$svgNode
143c0 20 73 6e 20 22 74 65 78 74 22 5d 20 7b 0d 0a 20 sn "text"] {..
143d0 20 20 20 20 20 20 20 73 65 74 20 78 20 5b 24 74 set x [$t
143e0 65 78 74 4e 6f 64 65 20 40 78 20 30 5d 0d 0a 20 extNode @x 0]..
143f0 20 20 20 20 20 20 20 73 65 74 20 79 20 5b 24 74 set y [$t
14400 65 78 74 4e 6f 64 65 20 40 79 20 30 5d 0d 0a 20 extNode @y 0]..
14410 20 20 20 20 20 20 20 6c 61 73 73 69 67 6e 20 5b lassign [
14420 6d 3a 3a 6d 61 74 6d 75 6c 20 24 6d 20 22 24 78 m::matmul $m "$x
14430 20 24 79 20 31 22 5d 20 78 20 79 0d 0a 20 20 20 $y 1"] x y..
14440 20 20 20 20 20 73 65 74 20 74 78 74 4c 69 73 74 set txtList
14450 20 22 22 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 "".. for
14460 65 61 63 68 20 6e 6f 64 65 20 5b 24 74 65 78 74 each node [$text
14470 4e 6f 64 65 20 73 6e 20 7b 74 73 70 61 6e 7d 5d Node sn {tspan}]
14480 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
14490 6c 61 70 70 65 6e 64 20 74 78 74 4c 69 73 74 20 lappend txtList
144a0 5b 24 6e 6f 64 65 20 73 6e 20 73 74 72 69 6e 67 [$node sn string
144b0 28 2e 29 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d (.)].. }.
144c0 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 78 74 . set txt
144d0 20 5b 6a 6f 69 6e 20 24 74 78 74 4c 69 73 74 20 [join $txtList
144e0 5c 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 0d 0a \\n].. ..
144f0 20 20 20 20 20 20 20 20 73 65 74 20 65 6e 74 5f set ent_
14500 74 79 70 65 20 22 74 65 78 74 22 0d 0a 20 20 20 type "text"..
14510 20 20 20 20 20 73 65 74 20 70 72 6f 70 73 20 22 set props "
14520 70 3a 5b 66 6f 72 6d 61 74 20 22 25 2e 30 66 2c p:[format "%.0f,
14530 25 2e 30 66 22 20 24 78 20 24 79 5d 3b 20 61 3a %.0f" $x $y]; a:
14540 77 3b 20 22 0d 0a 20 20 20 20 20 20 20 20 61 70 w; ".. ap
14550 70 65 6e 64 20 70 72 6f 70 73 20 22 74 3a 24 74 pend props "t:$t
14560 78 74 3b 22 0d 0a 20 20 20 20 20 20 20 20 70 61 xt;".. pa
14570 73 74 65 5f 65 6e 74 69 74 79 20 24 74 65 78 74 ste_entity $text
14580 4e 6f 64 65 20 24 65 6e 74 5f 74 79 70 65 20 24 Node $ent_type $
14590 70 72 6f 70 73 20 24 74 65 78 74 20 24 6d 54 20 props $text $mT
145a0 73 74 79 6c 65 73 20 73 74 79 6c 65 5f 6e 75 6d styles style_num
145b0 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 0d 0a 20 .. }.. ..
145c0 20 20 20 64 69 63 74 20 66 6f 72 20 22 6e 20 76 dict for "n v
145d0 22 20 5b 64 69 63 74 5f 67 65 74 64 20 24 73 74 " [dict_getd $st
145e0 79 6c 65 73 20 6e 20 22 22 5d 20 7b 0d 0a 20 20 yles n ""] {..
145f0 20 20 20 20 20 20 24 74 65 78 74 20 69 6e 73 65 $text inse
14600 72 74 20 69 6e 73 65 72 74 20 22 2e 24 6e 20 24 rt insert ".$n $
14610 76 5c 6e 22 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 v\n".. }..
14620 20 69 66 20 7b 20 21 24 66 6f 75 6e 64 5f 73 74 if { !$found_st
14630 61 72 74 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 art } {..
14640 20 24 74 65 78 74 20 69 6e 73 65 72 74 20 69 6e $text insert in
14650 73 65 72 74 20 22 7e 7e 7e 7e 5c 6e 22 0d 0a 20 sert "~~~~\n"..
14660 20 20 20 7d 0d 0a 7d 0d 0a 0d 0a 70 72 6f 63 20 }..}....proc
14670 73 76 67 6d 6c 3a 3a 63 72 65 61 74 65 5f 66 69 svgml::create_fi
14680 6c 65 20 7b 20 61 72 67 73 20 7d 20 7b 0d 0a 20 le { args } {..
14690 20 20 20 76 61 72 69 61 62 6c 65 20 73 76 67 66 variable svgf
146a0 69 6c 65 0d 0a 20 20 20 20 0d 0a 20 20 20 20 73 ile.. .. s
146b0 65 74 20 6f 70 74 69 6f 6e 61 6c 20 7b 0d 0a 20 et optional {..
146c0 20 20 20 20 20 20 20 7b 20 2d 66 69 6c 65 20 73 { -file s
146d0 76 67 66 69 6c 65 20 22 22 20 7d 0d 0a 20 20 20 vgfile "" }..
146e0 20 20 20 20 20 7b 20 2d 69 6e 6b 73 63 61 70 65 { -inkscape
146f0 20 22 22 20 30 20 7d 0d 0a 20 20 20 20 20 20 20 "" 0 }..
14700 20 7b 20 2d 73 61 6d 65 66 69 6c 65 20 22 22 20 { -samefile ""
14710 30 20 7d 0d 0a 20 20 20 20 20 20 20 20 7b 20 2d 0 }.. { -
14720 6f 70 65 6e 20 22 22 20 30 20 7d 0d 0a 20 20 20 open "" 0 }..
14730 20 7d 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 70 }.. set comp
14740 75 6c 73 6f 72 79 20 22 74 78 74 22 0d 0a 20 20 ulsory "txt"..
14750 20 20 70 61 72 73 65 5f 61 72 67 73 20 24 6f 70 parse_args $op
14760 74 69 6f 6e 61 6c 20 24 63 6f 6d 70 75 6c 73 6f tional $compulso
14770 72 79 20 24 61 72 67 73 0d 0a 20 20 20 20 20 20 ry $args..
14780 20 20 0d 0a 20 20 20 20 73 65 74 20 78 6d 6c 20 .. set xml
14790 5b 63 72 65 61 74 65 20 24 74 78 74 5d 0d 0a 20 [create $txt]..
147a0 20 20 20 0d 0a 20 20 20 20 69 66 20 7b 20 24 66 .. if { $f
147b0 69 6c 65 20 6e 65 20 22 22 20 7d 20 7b 0d 0a 20 ile ne "" } {..
147c0 20 20 20 20 20 20 20 73 65 74 20 73 76 67 66 69 set svgfi
147d0 6c 65 20 24 66 69 6c 65 0d 0a 20 20 20 20 7d 20 le $file.. }
147e0 65 6c 73 65 69 66 20 7b 20 24 73 61 6d 65 66 69 elseif { $samefi
147f0 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 le } {..
14800 63 6c 6f 73 65 20 5b 66 69 6c 65 20 74 65 6d 70 close [file temp
14810 66 69 6c 65 20 74 6d 70 5d 0d 0a 20 20 20 20 20 file tmp]..
14820 20 20 20 73 65 74 20 73 76 67 66 69 6c 65 20 5b set svgfile [
14830 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 6d file dirname $tm
14840 70 5d 2f 74 65 73 74 66 69 6c 65 2e 73 76 67 0d p]/testfile.svg.
14850 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 . } else {..
14860 20 20 20 20 20 20 20 63 6c 6f 73 65 20 5b 66 69 close [fi
14870 6c 65 20 74 65 6d 70 66 69 6c 65 20 74 6d 70 5d le tempfile tmp]
14880 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 76 .. set sv
14890 67 66 69 6c 65 20 5b 66 69 6c 65 20 72 6f 6f 74 gfile [file root
148a0 20 24 74 6d 70 5d 2e 73 76 67 0d 0a 20 20 20 20 $tmp].svg..
148b0 7d 0d 0a 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 }.. file mkdi
148c0 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 r [file dirname
148d0 24 73 76 67 66 69 6c 65 5d 0d 0a 20 20 20 20 0d $svgfile].. .
148e0 0a 20 20 20 20 73 65 74 20 77 72 69 74 65 20 31 . set write 1
148f0 0d 0a 20 20 20 20 69 66 20 7b 20 5b 66 69 6c 65 .. if { [file
14900 20 65 78 69 73 74 73 20 24 73 76 67 66 69 6c 65 exists $svgfile
14910 5d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 ] } {.. s
14920 65 74 20 66 69 6e 20 5b 6f 70 65 6e 20 20 24 73 et fin [open $s
14930 76 67 66 69 6c 65 20 72 5d 0d 0a 20 20 20 20 20 vgfile r]..
14940 20 20 20 73 65 74 20 64 61 74 61 20 5b 72 65 61 set data [rea
14950 64 20 24 66 69 6e 5d 0d 0a 20 20 20 20 20 20 20 d $fin]..
14960 20 66 63 6f 6e 66 69 67 75 72 65 20 24 66 69 6e fconfigure $fin
14970 20 2d 65 6e 63 6f 64 69 6e 67 20 75 74 66 2d 38 -encoding utf-8
14980 0d 0a 20 20 20 20 20 20 20 20 63 6c 6f 73 65 20 .. close
14990 24 66 69 6e 0d 0a 20 20 20 20 20 20 20 20 69 66 $fin.. if
149a0 20 7b 20 24 64 61 74 61 20 65 71 20 24 78 6d 6c { $data eq $xml
149b0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 } {..
149c0 20 20 73 65 74 20 77 72 69 74 65 20 30 0d 0a 20 set write 0..
149d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d }.. }.
149e0 0a 20 20 20 20 69 66 20 7b 20 24 77 72 69 74 65 . if { $write
149f0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 } {.. se
14a00 74 20 66 6f 75 74 20 5b 6f 70 65 6e 20 24 73 76 t fout [open $sv
14a10 67 66 69 6c 65 20 77 5d 0d 0a 20 20 20 20 20 20 gfile w]..
14a20 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24 66 6f fconfigure $fo
14a30 75 74 20 2d 65 6e 63 6f 64 69 6e 67 20 75 74 66 ut -encoding utf
14a40 2d 38 0d 0a 20 20 20 20 20 20 20 20 70 75 74 73 -8.. puts
14a50 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 66 6f 75 -nonewline $fou
14a60 74 20 24 78 6d 6c 0d 0a 20 20 20 20 20 20 20 20 t $xml..
14a70 63 6c 6f 73 65 20 24 66 6f 75 74 0d 0a 20 20 20 close $fout..
14a80 20 7d 0d 0a 20 20 20 20 69 66 20 7b 20 24 6f 70 }.. if { $op
14a90 65 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 en } {..
14aa0 69 66 20 7b 20 21 24 69 6e 6b 73 63 61 70 65 20 if { !$inkscape
14ab0 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
14ac0 20 63 75 3a 3a 66 69 6c 65 3a 3a 65 78 65 63 75 cu::file::execu
14ad0 74 65 20 73 74 61 72 74 20 24 73 76 67 66 69 6c te start $svgfil
14ae0 65 20 26 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 e &.. } e
14af0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {..
14b00 20 20 20 63 75 3a 3a 66 69 6c 65 3a 3a 65 78 65 cu::file::exe
14b10 63 75 74 65 20 65 78 65 63 20 69 6e 6b 73 63 61 cute exec inksca
14b20 70 65 20 24 73 76 67 66 69 6c 65 20 26 0d 0a 20 pe $svgfile &..
14b30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d }.. }.
14b40 0a 20 20 20 20 23 20 70 75 74 73 20 73 76 67 66 . # puts svgf
14b50 69 6c 65 3d 24 73 76 67 66 69 6c 65 0d 0a 7d 0d ile=$svgfile..}.
14b60 0a 0d 0a 23 20 55 2b 30 33 39 34 20 47 72 65 65 ...# U+0394 Gree
14b70 6b 20 43 61 70 69 74 61 6c 20 4c 65 74 74 65 72 k Capital Letter
14b80 20 44 65 6c 74 61 20 55 6e 69 63 6f 64 65 20 43 Delta Unicode C
14b90 68 61 72 61 63 74 65 72 0d 0a 0d 0a 73 65 74 20 haracter....set
14ba0 74 78 74 20 7b 0d 0a 20 20 20 20 2b 73 76 67 6d txt {.. +svgm
14bb0 6c 31 20 20 20 20 20 20 20 20 20 20 20 20 20 77 l1 w
14bc0 69 64 74 68 3a 39 30 30 3b 20 68 65 69 67 68 74 idth:900; height
14bd0 3a 34 30 25 3b 0d 0a 20 20 20 20 2b 61 6c 69 61 :40%;.. +alia
14be0 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 s p
14bf0 6f 69 6e 74 3a 70 3b 20 64 65 6c 74 61 2d 70 6f oint:p; delta-po
14c00 69 6e 74 3a 64 70 3b 20 77 69 64 74 68 2d 68 65 int:dp; width-he
14c10 69 67 68 74 3a 77 68 3b 20 74 65 78 74 3a 74 3b ight:wh; text:t;
14c20 0d 0a 20 20 20 20 2b 61 6c 69 61 73 20 20 20 20 .. +alias
14c30 20 20 20 20 20 20 20 20 20 20 61 6e 63 68 6f 72 anchor
14c40 3a 61 3b 20 68 6f 72 69 7a 6f 6e 74 61 6c 2d 76 :a; horizontal-v
14c50 65 72 74 69 63 61 6c 3a 68 76 3b 20 63 6c 61 73 ertical:hv; clas
14c60 73 3a 63 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 s:cl;..
14c70 0d 0a 20 20 20 20 64 65 62 20 20 20 20 20 20 20 .. deb
14c80 20 20 20 20 20 20 20 20 20 20 72 65 63 74 20 20 rect
14c90 20 20 20 20 70 3a 30 2c 30 3b 20 70 3a 31 30 30 p:0,0; p:100
14ca0 2c 31 30 30 3b 20 63 6c 3a 6c 69 6e 65 2d 64 65 ,100; cl:line-de
14cb0 62 75 67 3b 0d 0a 20 20 20 20 23 52 31 2e 64 65 bug;.. #R1.de
14cc0 62 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 b r
14cd0 65 63 74 20 20 20 20 20 20 70 3a 30 2c 30 3b 20 ect p:0,0;
14ce0 70 3a 31 30 30 2c 31 30 30 3b 20 63 6c 3a 6c 69 p:100,100; cl:li
14cf0 6e 65 2d 64 65 62 75 67 3b 0d 0a 20 20 20 20 23 ne-debug;.. #
14d00 64 65 62 54 20 20 20 20 20 20 20 20 20 20 20 20 debT
14d10 20 20 20 20 72 65 63 74 20 20 20 20 20 20 70 3a rect p:
14d20 35 30 2c 31 30 3b 20 20 77 68 3a 36 30 2c 38 3b 50,10; wh:60,8;
14d30 20 61 3a 73 3b 20 63 6c 3a 6c 69 6e 65 2d 64 65 a:s; cl:line-de
14d40 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 0d bug;.. .
14d50 0a 20 20 20 20 74 69 74 6c 65 20 20 20 20 20 20 . title
14d60 20 20 20 20 20 20 20 20 20 74 65 78 74 20 20 20 text
14d70 20 20 20 70 3a 35 30 2c 31 30 3b 20 20 74 3a 3a p:50,10; t::
14d80 54 49 54 4c 45 3b 20 61 3a 73 3b 20 63 6c 3a 74 TITLE; a:s; cl:t
14d90 65 78 74 54 49 54 4c 45 3b 0d 0a 20 20 20 20 52 extTITLE;.. R
14da0 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1
14db0 20 20 20 72 65 67 69 6f 6e 20 20 20 20 70 3a 32 region p:2
14dc0 35 2c 35 30 3b 20 20 77 68 3a 33 35 2c 39 30 3b 5,50; wh:35,90;
14dd0 20 61 3a 6e 73 65 77 3b 0d 0a 20 20 20 20 52 31 a:nsew;.. R1
14de0 2e 62 6f 78 20 20 20 20 20 20 20 20 20 20 20 20 .box
14df0 20 20 72 65 63 74 20 20 20 20 20 20 70 3a 35 30 rect p:50
14e00 2c 34 30 3b 20 20 77 68 3a 36 35 2c 33 30 3b 20 ,40; wh:65,30;
14e10 61 3a 6e 73 65 77 3b 20 63 6c 3a 72 6f 75 6e 64 a:nsew; cl:round
14e20 65 64 5f 62 6f 78 3b 0d 0a 20 20 20 20 52 31 2e ed_box;.. R1.
14e30 62 6f 78 2e 6c 79 67 20 20 20 20 20 20 20 20 20 box.lyg
14e40 20 6c 69 6e 65 20 20 20 20 20 20 70 3a 2d 31 30 line p:-10
14e50 2c 39 30 3b 20 70 3a 31 31 30 2c 39 30 3b 20 63 ,90; p:110,90; c
14e60 6c 3a 6c 69 6e 65 31 3b 0d 0a 20 20 20 20 52 31 l:line1;.. R1
14e70 2e 62 6f 78 2e 6c 79 67 2e 6c 31 20 20 20 20 20 .box.lyg.l1
14e80 20 20 6c 61 62 65 6c 20 20 20 20 20 70 3a 30 2c label p:0,
14e90 31 30 30 3b 20 20 74 3a 79 7e 67 7e 3b 20 61 3a 100; t:y~g~; a:
14ea0 73 65 3b 20 63 6c 3a 74 65 78 74 31 3b 0d 0a 20 se; cl:text1;..
14eb0 20 20 20 52 31 2e 62 6f 78 2e 78 30 79 30 20 20 R1.box.x0y0
14ec0 20 20 20 20 20 20 20 6c 61 62 65 6c 20 20 20 20 label
14ed0 20 70 3a 30 2c 31 30 30 3b 20 20 20 74 3a 78 7e p:0,100; t:x~
14ee0 30 7e 2c 79 7e 30 7e 3b 20 61 3a 6e 65 3b 20 63 0~,y~0~; a:ne; c
14ef0 6c 3a 74 65 78 74 31 3b 0d 0a 20 20 20 20 52 31 l:text1;.. R1
14f00 2e 62 6f 78 2e 64 69 6d 78 20 20 20 20 20 20 20 .box.dimx
14f10 20 20 64 69 6d 65 6e 73 69 6f 6e 20 61 72 69 73 dimension aris
14f20 74 65 3a 73 3b 20 61 3a 6e 3b 20 74 3a 5c 75 30 te:s; a:n; t:\u0
14f30 33 39 34 78 3b 20 63 6c 3a 74 65 78 74 31 3b 0d 394x; cl:text1;.
14f40 0a 20 20 20 20 52 31 2e 62 6f 78 2e 64 69 6d 79 . R1.box.dimy
14f50 20 20 20 20 20 20 20 20 20 64 69 6d 65 6e 73 69 dimensi
14f60 6f 6e 20 61 72 69 73 74 65 3a 65 3b 20 61 3a 77 on ariste:e; a:w
14f70 3b 20 74 3a 5c 75 30 33 39 34 79 3b 20 63 6c 3a ; t:\u0394y; cl:
14f80 74 65 78 74 31 3b 0d 0a 20 20 20 20 23 52 31 2e text1;.. #R1.
14f90 62 6f 78 2e 74 78 74 20 20 20 20 20 20 20 20 20 box.txt
14fa0 20 74 65 78 74 20 20 20 20 20 20 70 3a 32 2c 38 text p:2,8
14fb0 30 3b 20 20 20 74 3a 61 63 42 6a 3b 20 63 6c 3a 0; t:acBj; cl:
14fc0 74 65 78 74 69 6e 74 3b 0d 0a 20 20 20 20 52 31 textint;.. R1
14fd0 2e 74 64 65 73 63 20 20 20 20 20 20 20 20 20 20 .tdesc
14fe0 20 20 74 65 78 74 20 20 20 20 20 20 70 3a 31 30 text p:10
14ff0 2c 38 30 3b 20 61 3a 73 77 3b 20 74 3a 3a 42 44 ,80; a:sw; t::BD
15000 45 53 43 3b 20 63 6c 3a 74 65 78 74 44 45 53 43 ESC; cl:textDESC
15010 3b 0d 0a 20 20 20 20 20 20 20 20 20 0d 0a 20 20 ;.. ..
15020 20 20 52 32 20 20 20 20 20 20 20 20 20 20 20 20 R2
15030 20 20 20 20 20 20 72 65 67 69 6f 6e 20 20 20 20 region
15040 70 3a 37 35 2c 35 30 3b 20 20 77 68 3a 33 35 2c p:75,50; wh:35,
15050 39 30 3b 20 61 3a 6e 73 65 77 3b 0d 0a 20 20 20 90; a:nsew;..
15060 20 52 32 2e 62 6f 78 20 20 20 20 20 20 20 20 20 R2.box
15070 20 20 20 20 20 72 65 63 74 20 20 20 20 20 20 70 rect p
15080 3a 35 30 2c 34 30 3b 20 20 77 68 3a 36 35 2c 33 :50,40; wh:65,3
15090 30 3b 20 61 3a 6e 73 65 77 3b 20 63 6c 3a 72 6f 0; a:nsew; cl:ro
150a0 75 6e 64 65 64 5f 62 6f 78 3b 0d 0a 20 20 20 20 unded_box;..
150b0 52 32 2e 62 6f 78 2e 6c 79 67 20 20 20 20 20 20 R2.box.lyg
150c0 20 20 20 20 6c 69 6e 65 20 20 20 20 20 20 70 3a line p:
150d0 2d 31 30 2c 39 30 3b 20 70 3a 31 31 30 2c 39 30 -10,90; p:110,90
150e0 3b 20 63 6c 3a 6c 69 6e 65 31 3b 0d 0a 20 20 20 ; cl:line1;..
150f0 20 52 32 2e 62 6f 78 2e 6c 79 67 2e 6c 31 20 20 R2.box.lyg.l1
15100 20 20 20 20 20 6c 61 62 65 6c 20 20 20 20 20 70 label p
15110 3a 30 2c 31 30 30 3b 20 20 74 3a 79 7e 67 2c 70 :0,100; t:y~g,p
15120 7e 3b 20 61 3a 73 65 3b 20 63 6c 3a 74 65 78 74 ~; a:se; cl:text
15130 31 3b 0d 0a 20 20 20 20 52 32 2e 62 6f 78 2e 78 1;.. R2.box.x
15140 30 79 30 20 20 20 20 20 20 20 20 20 6c 61 62 65 0y0 labe
15150 6c 20 20 20 20 20 70 3a 30 2c 31 30 30 3b 20 20 l p:0,100;
15160 74 3a 78 7e 30 2c 70 7e 2c 79 7e 30 2c 70 7e 3b t:x~0,p~,y~0,p~;
15170 20 61 3a 6e 65 3b 20 63 6c 3a 74 65 78 74 31 3b a:ne; cl:text1;
15180 0d 0a 20 20 20 20 52 32 2e 62 6f 78 2e 62 6f 78 .. R2.box.box
15190 69 6e 20 20 20 20 20 20 20 20 72 65 63 74 20 20 in rect
151a0 20 20 20 20 70 3a 39 32 2c 31 30 3b 20 20 77 68 p:92,10; wh
151b0 3a 36 30 2c 34 30 3b 20 61 3a 6e 65 3b 20 63 6c :60,40; a:ne; cl
151c0 3a 72 6f 75 6e 64 65 64 5f 62 6f 78 3b 0d 0a 20 :rounded_box;..
151d0 20 20 20 52 32 2e 62 6f 78 2e 62 6f 78 69 6e 2e R2.box.boxin.
151e0 6c 79 67 20 20 20 20 6c 69 6e 65 20 20 20 20 20 lyg line
151f0 20 70 3a 2d 31 30 2c 38 30 3b 20 70 3a 31 31 30 p:-10,80; p:110
15200 2c 38 30 3b 20 63 6c 3a 6c 69 6e 65 31 3b 0d 0a ,80; cl:line1;..
15210 20 20 20 20 52 32 2e 62 6f 78 2e 62 6f 78 69 6e R2.box.boxin
15220 2e 6c 79 67 2e 6c 31 20 6c 61 62 65 6c 20 20 20 .lyg.l1 label
15230 20 20 70 3a 30 2c 31 30 30 3b 20 20 74 3a 79 7e p:0,100; t:y~
15240 67 7e 3b 20 61 3a 73 65 3b 20 63 6c 3a 74 65 78 g~; a:se; cl:tex
15250 74 31 3b 0d 0a 20 20 20 20 52 32 2e 62 6f 78 2e t1;.. R2.box.
15260 64 69 6d 78 20 20 20 20 20 20 20 20 20 64 69 6d dimx dim
15270 65 6e 73 69 6f 6e 20 70 3a 30 2c 31 30 30 3b 20 ension p:0,100;
15280 20 70 3a 23 52 32 2e 62 6f 78 2e 62 6f 78 69 6e p:#R2.box.boxin
15290 2c 30 2c 31 30 30 3b 20 68 76 3a 68 3b 20 61 3a ,0,100; hv:h; a:
152a0 6e 3b 20 74 3a 78 7e 30 7e 3b 20 63 6c 3a 74 65 n; t:x~0~; cl:te
152b0 78 74 31 3b 0d 0a 20 20 20 20 52 32 2e 62 6f 78 xt1;.. R2.box
152c0 2e 64 69 6d 31 20 20 20 20 20 20 20 20 20 64 69 .dim1 di
152d0 6d 65 6e 73 69 6f 6e 20 70 3a 23 52 32 2e 62 6f mension p:#R2.bo
152e0 78 2e 6c 79 67 2c 31 30 30 2c 30 3b 20 20 70 3a x.lyg,100,0; p:
152f0 23 52 32 2e 62 6f 78 2e 62 6f 78 69 6e 2c 31 30 #R2.box.boxin,10
15300 30 2c 31 30 30 3b 20 68 76 3a 76 3b 20 61 3a 77 0,100; hv:v; a:w
15310 3b 20 74 3a 79 7e 30 7e 3b 20 63 6c 3a 74 65 78 ; t:y~0~; cl:tex
15320 74 31 3b 0d 0a 20 20 20 20 52 32 2e 62 6f 78 2e t1;.. R2.box.
15330 64 69 6d 32 20 20 20 20 20 20 20 20 20 64 69 6d dim2 dim
15340 65 6e 73 69 6f 6e 20 70 3a 23 52 32 2e 62 6f 78 ension p:#R2.box
15350 2e 6c 79 67 2c 31 30 30 2c 30 3b 20 20 70 3a 23 .lyg,100,0; p:#
15360 52 32 2e 62 6f 78 2e 62 6f 78 69 6e 2e 6c 79 67 R2.box.boxin.lyg
15370 2c 31 30 30 2c 30 3b 20 68 76 3a 76 3b 20 61 3a ,100,0; hv:v; a:
15380 77 3b 20 74 3a 79 7e 67 7e 3b 20 64 70 3a 33 30 w; t:y~g~; dp:30
15390 2c 30 3b 20 63 6c 3a 74 65 78 74 31 3b 0d 0a 20 ,0; cl:text1;..
153a0 20 20 20 52 32 2e 74 64 65 73 63 20 20 20 20 20 R2.tdesc
153b0 20 20 20 20 20 20 20 74 65 78 74 20 20 20 20 20 text
153c0 20 70 3a 31 30 2c 38 30 3b 20 61 3a 73 77 3b 20 p:10,80; a:sw;
153d0 74 3a 3a 42 44 45 53 43 50 3b 20 63 6c 3a 74 65 t::BDESCP; cl:te
153e0 78 74 44 45 53 43 3b 0d 0a 20 20 20 20 0d 0a 20 xtDESC;.. ..
153f0 20 20 20 2e 72 6f 75 6e 64 65 64 5f 62 6f 78 20 .rounded_box
15400 20 20 62 6f 72 64 65 72 2d 72 61 64 69 75 73 3a border-radius:
15410 20 35 70 78 3b 20 73 74 72 6f 6b 65 2d 77 69 64 5px; stroke-wid
15420 74 68 3a 20 33 70 78 3b 20 73 74 72 6f 6b 65 3a th: 3px; stroke:
15430 20 6f 72 61 6e 67 65 3b 20 66 69 6c 6c 3a 20 79 orange; fill: y
15440 65 6c 6c 6f 77 3b 0d 0a 20 20 20 20 2e 6c 69 6e ellow;.. .lin
15450 65 31 20 20 20 20 20 20 20 20 20 73 74 72 6f 6b e1 strok
15460 65 2d 77 69 64 74 68 3a 20 32 70 78 3b 20 73 74 e-width: 2px; st
15470 72 6f 6b 65 3a 20 6f 72 61 6e 67 65 3b 20 66 69 roke: orange; fi
15480 6c 6c 3a 6e 6f 6e 65 3b 0d 0a 20 20 20 20 2e 6c ll:none;.. .l
15490 69 6e 65 2d 64 65 62 75 67 20 20 20 20 73 74 72 ine-debug str
154a0 6f 6b 65 2d 77 69 64 74 68 3a 20 31 70 78 3b 20 oke-width: 1px;
154b0 73 74 72 6f 6b 65 3a 20 72 65 64 3b 20 66 69 6c stroke: red; fil
154c0 6c 3a 6e 6f 6e 65 3b 20 73 74 72 6f 6b 65 2d 64 l:none; stroke-d
154d0 61 73 68 61 72 72 61 79 3a 20 35 20 35 3b 0d 0a asharray: 5 5;..
154e0 20 20 20 20 2e 74 65 78 74 54 49 54 4c 45 20 20 .textTITLE
154f0 20 20 20 66 6f 6e 74 2d 73 69 7a 65 3a 20 32 34 font-size: 24
15500 70 78 3b 20 66 69 6c 6c 3a 20 23 30 38 30 30 64 px; fill: #0800d
15510 38 3b 20 73 74 72 6f 6b 65 3a 23 35 38 35 38 35 8; stroke:#58585
15520 38 3b 20 73 74 72 6f 6b 65 2d 77 69 64 74 68 3a 8; stroke-width:
15530 30 20 66 6f 6e 74 2d 66 61 6d 69 6c 79 3a 20 73 0 font-family: s
15540 61 6e 73 2d 73 65 72 69 66 3b 20 74 65 78 74 2d ans-serif; text-
15550 64 65 63 6f 72 61 74 69 6f 6e 3a 20 75 6e 64 65 decoration: unde
15560 72 6c 69 6e 65 3b 0d 0a 20 20 20 20 2e 74 65 78 rline;.. .tex
15570 74 44 45 53 43 20 20 20 20 20 20 66 6f 6e 74 2d tDESC font-
15580 73 69 7a 65 3a 20 31 36 70 78 3b 20 66 69 6c 6c size: 16px; fill
15590 3a 20 62 6c 61 63 6b 3b 20 66 6f 6e 74 2d 66 61 : black; font-fa
155a0 6d 69 6c 79 3a 20 73 61 6e 73 2d 73 65 72 69 66 mily: sans-serif
155b0 3b 0d 0a 20 20 20 20 2e 74 65 78 74 69 6e 74 20 ;.. .textint
155c0 20 20 20 20 20 20 66 6f 6e 74 2d 73 69 7a 65 3a font-size:
155d0 20 33 36 70 78 3b 20 66 69 6c 6c 3a 20 62 6c 61 36px; fill: bla
155e0 63 6b 3b 20 66 6f 6e 74 2d 66 61 6d 69 6c 79 3a ck; font-family:
155f0 20 73 61 6e 73 2d 73 65 72 69 66 3b 0d 0a 20 20 sans-serif;..
15600 20 20 2e 74 65 78 74 31 20 20 20 20 20 20 20 20 .text1
15610 20 66 6f 6e 74 2d 73 69 7a 65 3a 20 31 38 70 78 font-size: 18px
15620 3b 20 66 69 6c 6c 3a 20 62 6c 61 63 6b 3b 20 66 ; fill: black; f
15630 6f 6e 74 2d 66 61 6d 69 6c 79 3a 20 73 61 6e 73 ont-family: sans
15640 2d 73 65 72 69 66 3b 0d 0a 20 20 20 20 0d 0a 20 -serif;.. ..
15650 20 20 20 2b 76 61 72 69 61 62 6c 65 73 20 20 20 +variables
15660 20 20 54 49 54 4c 45 3a 42 6f 78 65 73 20 64 65 TITLE:Boxes de
15670 66 69 6e 69 74 69 6f 6e 20 66 6f 72 20 63 61 6c finition for cal
15680 63 75 6c 61 74 69 6e 67 20 48 54 4d 4c 20 64 69 culating HTML di
15690 73 70 6c 61 79 3b 0d 0a 20 20 20 20 2b 76 61 72 splay;.. +var
156a0 69 61 62 6c 65 73 20 20 20 20 20 42 44 45 53 43 iables BDESC
156b0 3a 2a 2a 62 6f 78 2a 2a 3d 5b 78 7e 30 7e 2c 79 :**box**=[x~0~,y
156c0 7e 30 7e 2c 5c 75 30 33 39 34 78 2c 5c 75 30 33 ~0~,\u0394x,\u03
156d0 39 34 79 5d 5c 6e 2a 2a 62 6f 78 7e 30 7e 2a 2a 94y]\n**box~0~**
156e0 3d 5b 30 2c 30 2c 50 61 67 65 7e 77 69 64 74 68 =[0,0,Page~width
156f0 7e 2c 50 61 67 65 7e 68 65 69 67 68 74 7e 5d 3b ~,Page~height~];
15700 0d 0a 20 20 20 20 2b 76 61 72 69 61 62 6c 65 73 .. +variables
15710 20 20 20 20 20 42 44 45 53 43 50 3a 20 2a 2a 78 BDESCP: **x
15720 7e 30 7e 2c 20 79 7e 30 7e 2a 2a 20 61 6e 64 20 ~0~, y~0~** and
15730 2a 2a 79 7e 67 7e 2a 2a 20 76 61 6c 75 65 73 20 **y~g~** values
15740 61 72 65 20 72 65 6c 61 74 69 76 65 20 5c 6e 20 are relative \n
15750 74 6f 20 70 61 72 65 6e 74 20 2a 2a 78 7e 30 2c to parent **x~0,
15760 70 7e 2c 20 79 7e 67 2c 70 7e 2a 2a 5c 6e 3b 0d p~, y~g,p~**\n;.
15770 0a 20 20 20 20 2b 76 61 72 69 61 62 6c 65 73 20 . +variables
15780 20 20 20 20 2b 42 44 45 53 43 50 3a 20 2a 2a 5c +BDESCP: **\
15790 75 30 33 39 34 78 2c 5c 75 30 33 39 34 79 2a 2a u0394x,\u0394y**
157a0 20 61 72 65 20 69 6e 20 74 68 65 20 73 61 6d 65 are in the same
157b0 20 73 63 61 6c 65 20 74 68 61 6e 20 2a 2a 5c 75 scale than **\u
157c0 30 33 39 34 78 7e 70 7e 2c 5c 75 30 33 39 34 79 0394x~p~,\u0394y
157d0 7e 70 7e 2a 2a 3b 0d 0a 7d 0d 0a 0d 0a 69 66 20 ~p~**;..}....if
157e0 30 20 7b 0d 0a 20 20 20 20 73 76 67 6d 6c 3a 3a 0 {.. svgml::
157f0 63 72 65 61 74 65 5f 66 69 6c 65 20 2d 6f 70 65 create_file -ope
15800 6e 20 24 74 78 74 0d 0a 23 73 76 67 6d 6c 3a 3a n $txt..#svgml::
15810 63 72 65 61 74 65 5f 66 69 6c 65 20 2d 69 6e 6b create_file -ink
15820 73 63 61 70 65 20 24 74 78 74 0d 0a 23 73 76 67 scape $txt..#svg
15830 6d 6c 3a 3a 63 72 65 61 74 65 5f 66 69 6c 65 20 ml::create_file
15840 2d 73 61 6d 65 66 69 6c 65 20 2d 6f 70 65 6e 3d -samefile -open=
15850 30 20 24 74 78 74 0d 0a 0d 0a 65 78 69 74 0d 0a 0 $txt....exit..
15860 7d 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d }...............
15870 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d ................
15880 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d ................
15890 0a 0d 0a ...