summaryrefslogtreecommitdiff
path: root/graphics/circuit_macros/examples/svg/ex09SVG.m4
blob: b267c68ea09944dc2aa8e7ec91ac1c04f4f4aa0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
.PS
# ex09.m4
# Illustrating the arguments of the `dimension_' and `arcdimension_' macros.
gen_init(svg_font(sans-serif,10bp__,3bp__))
scale = 25

define(`spacer',`
[
linethick_(1.0)

  WC: circle diameter 4.22 at 0,0
  EC: circle same at 30.15,0
  NC: circle diameter 2.36 at 13.28, 10.92/2
  SC: circle same at 13.28,-10.92/2

  C: 0.5<WC,EC>           # spacer centre
  h = 27.26               # spacer height
  s = 4.22/2              # small arc radius
  r = h/2*0.80            # large arc radius
  Cr: C+(0,h/2-r)         # upper arc centre
  e = s                   # small arc centre offset from small circle
  Cs: EC+(e,0)            # right arc centre

#   Tangent points Tr and Ts to circles at Cr and Cs
  dx = Cr.x-Cs.x; dy = Cr.y-Cs.y; dsq = dx*dx+dy*dy
  Tr: (r*(r-s)/dsq)<Cr,Cs> + (vscal_(r*sqrt(dsq-(r-s)^2)/dsq,dy,-dx))
  Ts: (s/r)<Cr,Tr>-(dx,dy)

  line from Tr to Ts
  arc cw to (Ts.x,-Ts.y) with .c at Cs
E: last arc.e
  line to (Tr.x,-Tr.y)
  arc cw to (C.x-(Here.x-C.x),Here.y) with .c at (Cr.x,-Cr.y)
S: last arc.s
  line to (Cs.x-Ts.x-s,Cs.y-Ts.y)
  arc cw to (Here.x,-Here.y) with .c at (-e,0)
W: last arc.w
  line to (C.x-(Tr.x-C.x),Tr.y)
  arc cw to Tr with .c at Cr
N: last arc.n

thinlines_
  dimension_(from S+(2,0) to N+(2,0),-(E.x-C.x+4),27.76, 5)
  dimension_(from SC.n+(0,2) left SC.x-WC.x,  (SC.n.y-S.y+3), 13.28, 10)
  dimension_(from WC.n+(0,2) right EC.x-WC.x,-(WC.n.y-S.y+7), 30.15, 10)
  dimension_(from W+(0,-1.5) to E+(0,-1.5),  -(C.y-S.y+8), 41.28, 10)
  dimension_(from SC.e+(2,0) up NC.y-SC.y, (SC.e.x-W.x+8),"10.92" wid 10, 5)

  arrow <- from EC left 6 up 16 chop EC.rad chop 0
  line left 4 "4.22 (2) PL" above
  arrow <- from NC up last line.y-NC.y+7/8 left 8 chop NC.rad chop 0
  {"2.36" above}
  arrow to SC chop 0 chop SC.rad

] ')

define(`sk',`scale*0.7')

define(`bdot',
 `dot(`$1',,0.5)
  "svg_it($2)" $1 $3 ')

  thinlines_

  move right 0.8

# Upper left diagram
 spacer

# Lower left diagram
[ define(`lwid',`29bp__')
A: bdot(at (0,0),A,below)
B: bdot(at (2*sk,0),B,below)
Ctr: 0.5 between A and B
  move up 1*sk from A
L: move left 0.85*sk from A

  linethick_(1)
  dimension_(from A to B,0.5*sk,svg_it(label),lwid,0.1*sk)
  "`dimension_(from A to B,0.5,label,29bp__,0.1)'" wid 70 \
    with .w at (L.end.x+2,A.y-10)
  move down_ 4 from last ""

  thinlines_
  arrow from A to B chop 0.05*sk "svg_it(linespec)" below
  dimension_(up_ 0.5*sk from A,0.2*sk,"svg_it(offset)" rjust,,,->)
  dimension_(up_ 0.1*sk from B,-0.2*sk,"    svg_it(tic offset)" ljust)
  dimension_(up_ 0.1*sk from B+(0,0.5*sk),-0.2*sk,
   "    svg_it(tic offset)" ljust)
  dimension_(from Ctr+(-lwid/2,0.5*sk) right lwid,0.2*sk,
    "svg_it(blank width)" above)
] with .nw at last [].sw+(0,-0.4*sk)
#showbox_

# Upper right diagram
[ A: bdot(at (0,0),A, above rjust)
  B: bdot(at (2*sk,0),B, above ljust)
  C: bdot(at (0,-1.5*sk),C, above rjust)
  D: bdot(at (2*sk,-1.5*sk),D, above ljust)

T: C+(-1*sk,-0.5*sk)
T: C+(-0.45*sk,-0.5*sk)
  dimension_(from A to B,0.3*sk,svg_it(AB),20bp__)
  dimension_(from C to B chop dotrad_,,svg_it(X),16bp__)
  dimension_(from C to A,0.3*sk,svg_it(CA),14bp__,,->)
  dimension_(from D to B,-0.3*sk,"svg_it(DB)" ljust)
  dimension_(from C to D chop dotrad_,,svg_it(T`'svg_sub(15)),15bp__)
  arcdimension_(from C to D with .c at 0.5 between A and B,12bp__,
    svg_it(C) to svg_it(D),34bp__)
Q: C+(-9,-15)

`define' leftparagraph { [ baselineskip = textht*1.5; { move right $1 }
   for i = 2 to $+ do {
     move to Here+(0,-baselineskip)
     exec sprintf("{ `\"$%g \"' wid 4.5*scale ljust }; ",i) } ] }

leftparagraph(1.7*scale; baselineskip = 1.5*textht,
  `dimension_(from A to B,0.3,AB,20bp__)',
  `dimension_(from C to B,,X,16bp__)',
  `dimension_(from C to A,0.3,CA,14bp__,,->)',
  `dimension_(from D to B,-0.3,"DB" ljust)',
  `dimension_(from C to D chop dotrad_,,T`'svg_sub(15),15bp__)',
  `arcdimension_'svg_symbol(&`#'40;)`from C to D with .c at 0.5 \
     between A and B'svg_comma`12bp__'svg_comma,
   svg_ensp `C to D'svg_comma`34bp__'svg_symbol(&`#'41;)
  ) with .nw at Q

] with .nw at 1st [].ne+(1.7*sk,0)

 command "</g>" # end font
.PE