summaryrefslogtreecommitdiff
path: root/graphics/circuit_macros/examples/dpv/cbresistorDPV.m4
blob: c03122377c4f5b499488cc829a7d6d9c3f429ee4 (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
.PS
# cbresistor.m4
# https://tex.stackexchange.com/questions/709339/create-command-with-decoration-in-tikz
# https://www.google.com/search?client=firefox-b-d&q=resistor+color+code
cct_init
divert(-1)

                                `cbresistor(linespec, keys)
                                 keys:
                                   lgth=expr; wdth=expr;
                                   body=body attributes, e.g. shaded "green"
                                   type=A|B; pinched body shape
                                   colors=color:color:...;
                                     Up to 6 colors, a color may be nul '
define(`cbresistor',`eleminit_(`$1')
 pushkeys_(`$2',`lgth:dimen_/2; wdth:dimen_/5; body::N; colors::N; type::N')dnl
{line to rvec_(max(0,rp_len/2-m4lgth/2),0) thick linethick*3/2; M4cbW: Here
 ifelse(m4type,B,
  `[L:rotbox(m4lgth*3/23, m4wdth, shaded "darkgray" m4body,r=m4wdth/20)
    C:rotbox(m4lgth*17/23, m4wdth*9/10, shaded "darkgray" m4body) \
       with .W at L.E
    R:rotbox(m4lgth*3/23, m4wdth, shaded "darkgray" m4body,r=m4wdth/20) \
       with .W at C.E] with .L.W at Here; move to last [].R.E',
  `rotbox(m4lgth, m4wdth, shaded "darkgray" m4body) with .W at Here')
 ifelse(m4colors,,,`define(`m4bw',(m4lgth/23))dnl
   definergbcolor(silver,0.75,0.75,0.75)
   definergbcolor(gold,1,215/255,0)
   stacksplit_(`cbrstack',m4colors,:)stackreverse_(`cbrstack')dnl
   stackargs_(`m4pos',22,17,12,7,5,2)dnl
   stackdo_(`cbrstack',`ifelse(cbrstack,nul,,
    `{ move to M4cbW+vec_(m4pos*m4bw-m4bw/2,0)
       define(`m4ctr',ifelse(m4type,B,eval((m4pos>3)*(m4pos<20)),0))dnl
       line m4colorfix(outlined,cbrstack) thick m4bw*1.8/(1bp__) \
         from rvec_(0,-ifelse(m4ctr,1,0.9*)m4wdth/2) \
           to rvec_(0, ifelse(m4ctr,1,0.9*)m4wdth/2)
       ifelse(ifelse(cbrstack,silver,1,cbrstack,gold,1),1,
        `line outlined rgbstring(0.8,0.8,0.8) thick last line.thick \
         from 0.2 along_(last line) to 0.4 along_(last line)
         line outlined "white" thick last line.thick \
         from 0.25 along_(2nd last line) to 0.3 along_(2nd last line)')
       }')
     popdef(`m4pos')') stackdo_(`m4pos')')
 line to rvec_(max(0,rp_len/2-m4lgth/2),0) thick linethick*3/2}
 popdef(`m4lgth',`m4wdth',`m4body',`m4colors',`m4type')dnl
 line to rvec_(rp_len,0) invis ')

divert(0)dnl

linewid = 3/2*linewid
ifsvg(definergbcolor(Dandelion,0.95,0.65,0.2))
ifsvg(definergbcolor(Peach,0.76,0.5,0.1))

define(`dpr',
 `{ cbresistor(,type=B;
     body=m4colorfix(shaded,Dandelion) m4colorfix(outlined,Peach);
     colors=`$2') }
   {iflatex(`sprintf("\SI{%g}{\ohm}",`$1')')ifsvg("``$1'svg_Omega'") \
     at last line.end+(10bp__,-5bp__) rjust}
   move right_ moveht*5/6; down_ ')

 define(`elen_',(3/2*linewid))
 define(`dimen_',(5/4*linewid))
[]
[ down_
 foreach_(`pair',`dpr(patsubst(pair,-,`,'):nul:black:silver)',
  10-brown:black,
  12-brown:red,
  15-brown:green,
  18-brown:gray,
  22-red:red,
  27-red:Violet,
  33-orange:orange,
  39-orange:white,
  47-yellow:Violet,
  56-green:blue,
  68-blue:gray,
  82-gray:red)
 dpr(100,brown:black:nul:brown:gold)
 {"iflatex(\SI{5}{\percent},5 %)" at last line.end+(10bp__,-15bp__) rjust}
 ] with .nw at last [].ne+(30bp__,0)

.PE