diff options
Diffstat (limited to 'graphics/circuit_macros/examples/tubedefs.m4')
-rw-r--r-- | graphics/circuit_macros/examples/tubedefs.m4 | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/graphics/circuit_macros/examples/tubedefs.m4 b/graphics/circuit_macros/examples/tubedefs.m4 new file mode 100644 index 0000000000..af47e307b7 --- /dev/null +++ b/graphics/circuit_macros/examples/tubedefs.m4 @@ -0,0 +1,260 @@ +divert(-1) +# tubedefs.m4 +# macros for the Tubediags.m4 file + +# Size parameters +define(`tubediam',`dimen_') +define(`tubethick',`2') +define(`tubepindiam',`tubediam*3/8') +define(`tubeplatelen',`tubediam/2') +define(`tubegridlen',`tubediam*7/12') +define(`tubcathlen',`tubeplatelen-tubethick bp__') +define(`tubedotthick',`1.2') +define(`tubedotdiam',`tubediam/6') +define(`tgap',`tubediam*3/20') + +# Generic tubes + `triode(diam,R[N|S|E|W]) + R=tubeplate at bottom + N,S,E,W=half circle' +define(`triode',`[ ifelse(`$1',,,`pushdef(`tubediam',`$1')') + drawEnv(`$2') + G1: tubegrid(right tubegridlen at Env) + ifinstr(`$2',R, + `K1: tubecathode(,`$2') with .s at G1+(0,tgap) + P1: tubeplate(at G1+(0,-tgap))', + `K1: tubecathode(,`$2') with .n at G1+(0,-tgap) + P1: tubeplate(at G1+(0,tgap))') + `$3' ifelse(`$1',,,`popdef(`tubediam')')] ') + + `tetrode(diam,R[N|S|E|W]) + R=tubeplate at bottom + N,S,E,W=half circle' +define(`tetrode',`[ ifelse(`$1',,,`pushdef(`tubediam',`$1')') + drawEnv(`$2') + ifinstr(`$2',R, + `G1: tubegrid(right tubegridlen at Env+(0,tgap/2)) + G2: tubegrid(right tubegridlen at G1-(0,tgap)) + P1: tubeplate(at G2-(0,tgap)) + K1: tubecathode(,`$2') with .s at G1+(0,tgap)', + `G1: tubegrid(right tubegridlen at Env-(0,tgap/2)) + G2: tubegrid(right tubegridlen at G1+(0,tgap)) + P1: tubeplate(at G2+(0,tgap)) + K1: tubecathode(,`$2') with .n at G1+(0,-tgap)') + `$3' ifelse(`$1',,,`popdef(`tubediam')')] ') + + `pentode(diam,R[N|S|E|W]) + R=tubeplate at bottom + N,S,E,W=half circle' +define(`pentode',`[ ifelse(`$1',,,`pushdef(`tubediam',`$1')') + drawEnv(`$2') pushdef(`tgap',`tubediam/8') + ifinstr(`$2',R, + `G2: tubegrid(right tubegridlen at Env-(0,tgap/4)) + G3: tubegrid(right tubegridlen at G2-(0,tgap)) + P1: tubeplate(at G3-(0,tgap)) + G1: tubegrid(right tubegridlen at G2+(0,tgap)) + K1: tubecathode(,`$2') with .s at G1+(0,tgap)', + `G2: tubegrid(right tubegridlen at Env+(0,tgap/4)) + G3: tubegrid(right tubegridlen at G2+(0,tgap)) + P1: tubeplate(at G3+(0,tgap)) + G1: tubegrid(right tubegridlen at G2-(0,tgap)) + K1: tubecathode(,`$2') with .n at G1-(0,tgap)') popdef(`tgap') + `$3' ifelse(`$1',,,`popdef(`tubediam')')] ') + +# utilities +define(`drawEnv', + `thktmp = linethick; linethick_(tubethick) + Env: circle invis diam tubediam + ifinstr(`$1',N, + `line from Env.w down tubediam*3/2/8 + line from Env.e down tubediam*3/2/8 + arc from Env.e to Env.w', + `$1',S, + `line from Env.w up tubediam*3/2/8 + line from Env.e up tubediam*3/2/8 + arc from Env.w to Env.e', + `$1',E, + `line from Env.n left tubediam*3/2/8 + line from Env.s left tubediam*3/2/8 + arc from Env.s to Env.n', + `$1',W, + `line from Env.n right tubediam*3/2/8 + line from Env.s right tubediam*3/2/8 + arc from Env.n to Env.s', + `circle diam tubediam') with .c at Env + linethick_(thktmp) ') + +define(`tubedot',`dot(ifelse(`$1',,`at Here',`$1'),tubedotdiam/2,1,thick tubedotthick)') + +define(`pin',`circle diam tubepindiam `$1'') + +define(`Base_pins',`define(`pincount',`ifelse(`$2',,8,`$2')')dnl + define(`pinpattern',`ifelse(`$1',,8,`$1')')dnl + define(`pininit',`ifelse(`$3',,-90,`$3')')dnl + for_(1,pincount,1, + `pinang = pininit+360/(2*pinpattern)-m4x*360/pinpattern + Pin`'m4x: pin(at \ + Base+(Rect_(Base.rad+tubepindiam/2+tubethick/2bp__,pinang)) \ + ifsvg("svg_small(m4x)","\small m4x")) + {PinT`'m4x: Base+(Rect_(Base.rad+tubethick/2bp__,pinang))} ') + ') + +# structural elements + `tubeplate(attributes,length)' +define(`tubeplate',`line thick tubethick right ifelse(`$2',,tubeplatelen,`$2') `$1'') + +define(`thinthick',0.4)dnl +define(`thinline',`line thick thinthick')dnl + +define(`tubeTab',`[ + ang = ifelse(`$1',,90,`$1') + ca = cosd(ang); sa = sind(ang) + tabht = tubepindiam/2 + tabwd = tabht*5/6 + T0: Here + T1: T0+(vrot_(0,tabwd/2,ca,sa)) + T2: T0+(vrot_(tabht,tabwd/2,ca,sa)) + T3: T0+(vrot_(tabht,-tabwd/2,ca,sa)) + T4: T0+(vrot_(0,-tabwd/2,ca,sa)) + line from T1 to T2 then to T3 then to T4 fill_(ifelse(`$2',,1,`$2')) + ] with .T0 at Base+(Rect_(tubediam*3/2/2+tubethick/2bp__,ifelse(`$1',,90,`$1'))) + ') + +define(`tubegrid',`dashline(ifelse(`$1',,`right tubegridlen',`$1'), + thick tubethick,(tubegridlen*7/8/3),(tubegridlen/8/2))') + + `tubecathode(length,R)' +define(`tubecathode',`[ + box invis wid ifelse(`$1',,tubcathlen,`$1') ht tubeplatelen/6 + ifinstr(`$2',R, + `line thick tubethick from last box.nw to last box.sw \ + then to last box.se then to last box.ne', + `line thick tubethick from last box.sw to last box.nw \ + then to last box.ne then to last box.se ') + `$3'] ') + + `tubefilament(length,R)' +define(`tubefilament',`[ define(`filalen',`ifelse(`$1',,`tubeplatelen/3',`$1')')dnl + round(,tubethick) define(`filn',`ifinstr(`$2',R,-)') + line thick tubethick up filn`'tubeplatelen/3 right tubeplatelen*2/9; round(,tubethick) + line thick tubethick down filn`'tubeplatelen/3 right tubeplatelen*2/9 + round(,tubethick) + `$3'] ') + +# specific base examples, bottom view +define(`B_2AG',`[ ifelse(`$1',,,`pushdef(`tubediam',`$1')') + Base: circle thick tubethick diam tubediam*3/2 + Base_pins(8,7) + Dk1: tubedot(at Base+(0,-tubedotdiam*5/6)) + P1: tubeplate(at Base+(0,tubedotdiam/3)) + thinline from PinT1 to Dk1 chop 0 chop tubedotdiam/2 + thinline from P1 to Base.n + tubeTab(90) + `$2' ifelse(`$1',,,`popdef(`tubediam')') ]') + +define(`B_2D',`[ ifelse(`$1',,,`pushdef(`tubediam',`$1')') + Base: circle thick tubethick diam tubediam*3/2 + Base_pins(4,4) + G1: tubegrid(right tubegridlen at Base) + F1: tubefilament with .n at G1+(0,-tgap) + P1: tubeplate(at G1+(0,tgap)) + thtmp = linethick; linethick = thinthick + T1: tubeTab(105) + T2: tubeTab(75) + line from PinT1 to F1.sw + line from PinT4 to F1.se + line from G1.start left tubediam*3/2/8 then to T1.T0 + line from P1 up tubediam*3/2/8 then to T2.T0 + linethick = thtmp + `$2' ifelse(`$1',,,`popdef(`tubediam')') ] ') + +define(`B_4BB',`[ ifelse(`$1',,,`pushdef(`tubediam',`$1')') + Base: circle thick tubethick diam tubediam*3/2 + Base_pins(8,8) + K1: tubecathode with .n at Base-(0,tgap/2) + F1: tubefilament with .n at K1.s + G1: tubegrid(right tubegridlen at K1.n+(0,tgap)) + P1: tubeplate(at G1+(0,tgap)) + pushdef(`hoprad_',`dimen_/16') thtmp = linethick; linethick_(thinthick) + T1: tubeTab(135) + T2: tubeTab(-45) + T3: tubeTab(-90,0) + line from PinT2 to F1.sw + L7: line from PinT7 to F1.se + line up tgap from P1 then to T1.T0 + move to K1.se + crossover(to (Here,PinT8),,L7) + line right tgap from G1.end; corner + crossover(to (Here,T2.T1),,L7); line to T2.T0 + popdef(`hoprad_') linethick_(thtmp) + `$2' ifelse(`$1',,,`popdef(`tubediam')') ] ') + +define(`B_9K',`[ ifelse(`$1',,,`pushdef(`tubediam',`$1')') + Base: circle thick tubethick diam tubediam*3/2 + Base_pins(10,9,-90-360/20) + G1: tubegrid(right tubegridlen at Base-(0,tgap/2)) + K1: tubecathode with .n at G1+(0,-tgap) + F1: tubefilament with .n at K1.s + G2: tubegrid(right tubegridlen at G1+(0,tgap)) + G3: tubegrid(right tubegridlen at G2+(0,tgap)) + P1: tubeplate(at G3+(0,tgap)) + pushdef(`hoprad_',`dimen_/16') thtmp = linethick; linethick_(thinthick) + L3: line from G3.start to PinT3 + M6: move from G2.end to (PinT6,G2.end) + line from M6.start to M6.end then to PinT6 + L7: line from K1.se right tubediam*3/2/5 + L71: line to PinT7 + line up tgap from P1 then left tubeplatelen/2 + { M1: move left tgap down tgap + M21: move up tgap from PinT1 } + line to Intersect_(M1,M21) + crossover(to PinT1,R,L3) + L8: line right tgap from G1.e + crossover(to PinT8,,L71) + line from F1.se to (K1.e+(tgap*3/4,0),F1) + corner(thinthick) + crossover(to P1.e+(tgap*3/4,tgap/2),R,L7,L8) + line to PinT5 + line up tgap*3/2 from PinT9 then to PinT8 + line from F1.sw to (K1.w-(tgap*3/4,0),F1) + crossover(up P1.y-tgap/2-Here.y,,L3) + crossover(to PinT4,,M1) + popdef(`hoprad_') linethick_(thtmp) + `$2' ifelse(`$1',,,`popdef(`tubediam')') ] ') + +# specific tubes + `V_6L6G(diam,R[N|S|E|W],G1|G2) + R=plate at bottom + N,S,E,W=half circle' +define(`V_6L6G',`[ ifelse(`$1',,,`pushdef(`tubediam',`$1')') + drawEnv(`$2') pushdef(`tgap',`tubediam/8') + ifinstr(`$2',R, + `G2: tubegrid(right tubegridlen at Env-(0,tgap/4)) + G3: dashline(right tubegridlen at G2-(0,tgap),thick tubethick, + (tubegridlen*3/10),(tubegridlen*4/10)) + P1: tubeplate(at G3-(0,tgap)) + G1: tubegrid(right tubegridlen at G2+(0,tgap)) + K1: tubecathode(,`$2') with .s at G1+(0,tgap) + line from K1.nw down tgap/2 left tgap + crossover(to (Here,G3),R,ifelse(`$3',,G1,`$3')); corner; line to G3.w ', + `G2: tubegrid(right tubegridlen at Env+(0,tgap/4)) + G3: dashline(right tubegridlen at G2+(0,tgap),thick tubethick, + (tubegridlen*3/10),(tubegridlen*4/10)) + P1: tubeplate(at G3+(0,tgap)) + G1: tubegrid(right tubegridlen at G2-(0,tgap)) + K1: tubecathode(,`$2') with .n at G1-(0,tgap) + line from K1.sw up tgap/2 left tgap + crossover(to (Here,G3),,ifelse(`$3',,G1,`$3')); corner; line to G3.w ') + popdef(`tgap') `$4' ifelse(`$1',,,`popdef(`tubediam')')] ') + + `5U4G rectifier(diam,R)' +define(`V_5V4G',`[ ifelse(`$1',,,`pushdef(`tubediam',`$1')') + drawEnv(`$2') + P1: line thick tubethick up tubediam/3 with .c at Env-(tubediam/6,0) + P2: line thick tubethick up tubediam/3 with .c at Env+(tubediam/6,0) + ifinstr(`$2',R, + `F1: tubefilament(,R) with .n at Env.n-(0,tubediam/20) ', + `F1: tubefilament with .s at Env.s+(0,tubediam/20) ') + `$3'] ') + +divert(0)dnl |