diff options
Diffstat (limited to 'Master/texmf-dist/metapost/makecirc/makecirc.mp')
-rw-r--r-- | Master/texmf-dist/metapost/makecirc/makecirc.mp | 981 |
1 files changed, 981 insertions, 0 deletions
diff --git a/Master/texmf-dist/metapost/makecirc/makecirc.mp b/Master/texmf-dist/metapost/makecirc/makecirc.mp new file mode 100644 index 00000000000..0c6d8c8751d --- /dev/null +++ b/Master/texmf-dist/metapost/makecirc/makecirc.mp @@ -0,0 +1,981 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%||||||||||||||||||||«makecirc.mp»|||||||||||||||||||||||||%% +%%==========================================================%% +%<------------------- version 1.1 ------------------------->%% +% A MetaPost library for drawing electrical circuit diagrams. +% Copyright (c) 2003 GS Bustamante Argañaraz. +% It uses latex.mp by JL Diaz. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% This program may be distributed and/or modified under the conditions +% of the LaTeX Project Public License, either version 1.2 of this +% license or (at your option) any later version. The latest version +% of this license is in http://www.latex-project.org/lppl.txt and +% version 1.2 or later is part of all distributions of LaTeX version +% 1999/12/01 or later. +% +% This program consists of the files makecirc.mp and latex.mp +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +input latex; +% +% Commands definitions to do the labeled easier % +% +LaTeXsetup:=LaTeXsetup & +"\def\ohm{\ensuremath{\,\Omega}}" & +"\def\kohm{\,k\ensuremath{\Omega}}" & +"\def\modarg#1#2{\setbox0=\hbox{$\mkern-1mu/#2^\circ$}" & +"\dp0=.21ex $#1\underline{\box0}$}"; +% +newinternal labeling, rotatelabel, norotatelabel; +labeling:=0; norotatelabel:=labeling; rotatelabel:=1; + +% Macros for the pens, I define them as such so when they expand, +% look for the last value assigned to linewd and use it +% (thanks to JLD). The linewd value assigns it as newinternal to +% be able to change it «from out». + +newinternal linewd; +linewd:=0.25mm; + +def line = pencircle scaled linewd enddef; +def misc = pencircle scaled .8linewd enddef; + +% Arrowhead definitions % + +vardef miscahead expr p = +save A,u,a,b; pair A,u; path a,b; +A := point length(p) of p; +u := unitvector(direction length(p)/2 of p); +a := A--(A - ahlength*u rotated 15); +b := A--(A - ahlength*u rotated -15); +(a & reverse(a) & b & reverse(b))--cycle +enddef; + +vardef bjtahead expr p = +save A,u,a,b; pair A,u; path a,b; +A := point 0.7length(p) of p; +u := unitvector(direction length(p)/2 of p); +a := A--(A - ahlength*u rotated 20); +b := A--(A - ahlength*u rotated -20); +(a & reverse(a) & b & reverse(b))--cycle +enddef; + +vardef txtahead expr p = +save A,B,u,a; pair A,B,u; path a; +A := point length p of p; +B := point .97length p of p; +u := unitvector(direction length p of p); +a := A{-u}..(A - 7*u rotated 15)--B + --(A - 7*u rotated -15)..A{u}--cycle; +a +enddef; + +% Macros for wire the symbols % + +newinternal nsq, udsq, rlsq, usq; +nsq:=0; udsq:=2; rlsq:=3; usq:=4; + +def wire(expr pin_beg,pin_end,type)= + if type=nsq: + draw pin_beg--pin_end withpen line + elseif type=udsq: + draw pin_beg--(xpart pin_beg,ypart pin_end)--pin_end withpen line + elseif type=rlsq: + draw pin_beg--(xpart pin_end,ypart pin_beg)--pin_end withpen line + fi; +enddef; + +% Macro to connect two branches in parallel % + +def wireU(expr pin_beg,pin_end,dist,type)= + if type=udsq: + draw pin_beg--(pin_beg+(0,dist))--(xpart pin_end,ypart pin_beg + dist) + --pin_end withpen line + elseif type=rlsq: + draw pin_beg--(pin_beg+(dist,0))--(xpart pin_beg + dist,ypart pin_end) + --pin_end withpen line + fi; +enddef; + +% Variable to find the center of two pins, for to include a symbols. It returns the point +% and the input angle for the symbol that we want to place. + +vardef centreof@#(expr pin_beg,pin_end,lchar)= + pair c@#; numeric phi@#; + c@#= -lchar*dir angle(xpart(pin_end)-xpart(pin_beg), + ypart(pin_end)-ypart(pin_beg)) shifted .5[pin_beg,pin_end]; + phi@#=angle(xpart(pin_end)-xpart(pin_beg), + ypart(pin_end)-ypart(pin_beg)); +enddef; + +% Variable to center an element regarding the pins of another, at +% a distance «dist» of the same one. It returns the point in which we should +% place the symbol that we want to center. + +vardef centerto.@#(expr pinref_beg,pinref_end)(expr dist,elem)= + pair @#; + if (xpart(pinref_beg)=xpart(pinref_end)): + @#:=(.5[pinref_beg,pinref_end]+(dist,-elem)) + elseif (ypart(pinref_beg)=ypart(pinref_end)): + @#:=(.5[pinref_beg,pinref_end]+(-elem,dist)) + fi +enddef; + +% Macro for scale the circuit when it is concluded. % + +def scalecirc expr factor = + currentpicture:=currentpicture scaled factor +enddef; + +% Macro to include text into the circuits % + +vardef puttext@#(expr txt, point)= + label@#(latex(txt),point); +enddef; + +% Macro to center text among two pins % + +newinternal witharrow, noarrow; +witharrow:=0; noarrow:=1; + +vardef ctext@#(expr pin_beg,pin_end,txt,type)= + save ctxt; picture ctxt; + ctxt:=nullpicture; + %ahlength:=10; + if type=noarrow: + addto ctxt also thelabel(latex(txt),.5[pin_beg,pin_end]); + elseif type=witharrow: + addto ctxt doublepath pin_beg--pin_end; + addto ctxt contour txtahead pin_beg--pin_end; + addto ctxt contour txtahead reverse(pin_beg--pin_end); + addto ctxt also thelabel@#(latex(txt),.5[pin_beg,pin_end]); + fi; + draw ctxt withpen line; +enddef; + +% Definition of lbsep (label separation), distance among symbol and label. % + +newinternal lbsep; +lbsep:=3mm; + +% Macros to facilitate the one labeled of the symbols % + +def putlabel(expr pin_beg,pin_end,lchar,lcharv,ang,name,val)= +if labeling=rotatelabel: + if ((ang > (-90)) and (ang <= 90)) or ((ang > 270) and (ang <= 450)): + label(latex("$" & name & "$") rotatedaround (.5[pin_beg,pin_end],ang), + (lchar+lbsep)*dir (90+ang) shifted .5[pin_beg,pin_end]); + + label(latex(val) rotatedaround (.5[pin_beg,pin_end],ang), + (lcharv+lbsep)*dir (270+ang) shifted .5[pin_beg,pin_end]); + elseif ((ang > 90) and (ang <= 270)) or ((ang > (-270)) and (ang <= (-90))): + label(latex("$" & name & "$") rotatedaround (.5[pin_beg,pin_end],180+ang), + (lchar+lbsep)*dir (90+ang) shifted .5[pin_beg,pin_end]); + + label(latex(val) rotatedaround (.5[pin_beg,pin_end],180+ang), + (lcharv+lbsep)*dir (270+ang) shifted .5[pin_beg,pin_end]); + fi; + elseif labeling=norotatelabel: + if (ang = 0): + label.top(latex("$" & name & "$"), (lchar+.25lbsep)*dir (90+ang) + shifted .5[pin_beg,pin_end]); + + label.bot(latex(val),(lcharv+.25lbsep)*dir (270+ang) shifted .5[pin_beg,pin_end]); + elseif (ang > 0) and (ang < 90): + label.ulft(latex("$" & name & "$"), (lchar)*dir (90+ang) + shifted .5[pin_beg,pin_end]); + + label.lrt(latex(val),(lcharv)*dir (270+ang) shifted .5[pin_beg,pin_end]); + elseif (ang = 90): + label.lft(latex("$" & name & "$"),(lchar+.25lbsep)*dir (90+ang) + shifted .5[pin_beg,pin_end]); + + label.rt(latex(val),(lcharv+.25lbsep)*dir (270+ang) shifted .5[pin_beg,pin_end]); + elseif (90 < ang) and (ang < 180): + label.llft(latex("$" & name & "$"),(lchar)*dir (90+ang) + shifted .5[pin_beg,pin_end]); + + label.urt(latex(val),(lcharv)*dir (270+ang) shifted .5[pin_beg,pin_end]); + elseif (ang = 180) or (ang = (-180)): + label.bot(latex("$" & name & "$"), (lchar+.25lbsep)*dir (90+ang) + shifted .5[pin_beg,pin_end]); + + label.top(latex(val),(lcharv+.25lbsep)*dir (270+ang) shifted .5[pin_beg,pin_end]); + elseif ((ang > 180) and (ang < 270)) or ((ang > (-180)) and (ang < (-90))): + label.lrt(latex("$" & name & "$"),(lchar)*dir (90+ang) + shifted .5[pin_beg,pin_end]); + + label.ulft(latex(val),(lcharv)*dir (270+ang) shifted .5[pin_beg,pin_end]); + elseif (ang = 270) or (ang = (-90)): + label.rt(latex("$" & name & "$"), (lchar+.25lbsep)*dir (90+ang) + shifted .5[pin_beg,pin_end]); + + label.lft(latex(val),(lcharv+.25lbsep)*dir (270+ang) shifted .5[pin_beg,pin_end]); + elseif ((270 < ang) and (ang < 360)) or ((ang < 0) and (ang > (-90))): + label.urt(latex("$" & name & "$"),(lchar)*dir (90+ang) + shifted .5[pin_beg,pin_end]); + + label.llft(latex(val),(lcharv)*dir (270+ang) shifted .5[pin_beg,pin_end]); + fi; + fi; +enddef; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%% Here the symbols begin %%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%<---Inductor (bobina) --->%%% + +newinternal coil, Up, Down; +coil:=2mm; Up:=0; Down:=1; + +vardef inductor@#(expr z,type,ang,name,val)= + save bobina; + pair L@#.l, L@#.r; % pines % + L@#.l=z; L@#.r=(z+(6coil,0)) rotatedaround (z,ang); + picture bobina; + bobina:=nullpicture; + + if type=Up: + addto bobina doublepath z--(z+(coil,0)){up}.. for i=2 upto 4: + {down}(z+(i*coil,0)){up}.. endfor {down}(z+(5coil,0))--(z+(6coil,0)); + putlabel(L@#.l,L@#.r,coil,.5coil,ang,name,val); + elseif type=Down: + addto bobina doublepath z--(z+(coil,0)){down}.. for i=2 upto 4: + {up}(z+(i*coil,0)){down}.. endfor {up}(z+(5coil,0))--(z+(6coil,0)); + putlabel(L@#.l,L@#.r,coil,.5coil,(ang-180),name,val); + fi; + + draw bobina rotatedaround(z,ang) withpen line; +enddef; + +%%%<---Capacitor (condensador)--->%%% + +newinternal normal, electrolytic, variable, variant, platsep; +normal:=0; electrolytic:=1; variable:=2; platsep:=1mm; variant:=3; + +vardef capacitor@#(expr z,type,ang,name,val)= + save cap; + pair C@#.l, C@#.r; % pines % + C@#.l:=z; + C@#.r:=(xpart(z)+7platsep,ypart(z)) rotatedaround(z,ang); + picture cap; cap:=nullpicture; + + addto cap doublepath z--(xpart(z)+3platsep,ypart(z)) withpen line; + addto cap doublepath (xpart(z)+4platsep,ypart(z)) + --(xpart(z)+7platsep,ypart(z)) withpen line; + + if type=normal: + addto cap doublepath (xpart(z)+3platsep,ypart(z)-2.5platsep) + --(xpart(z)+3platsep,ypart(z)+2.5platsep) withpen line; + addto cap doublepath (xpart(z)+4platsep,ypart(z)-2.5platsep) + --(xpart(z)+4platsep,ypart(z)+2.5platsep) withpen line; + elseif type=electrolytic: + addto cap doublepath (xpart(z)+3platsep,ypart(z)-1.8platsep) + --(xpart(z)+3platsep,ypart(z)+1.8platsep) withpen line; + addto cap doublepath (xpart(z)+2platsep,ypart(z)-2.5platsep) + --(xpart(z)+4platsep,ypart(z)-2.5platsep)--(xpart(z)+4platsep,ypart(z)+2.5platsep) + --(xpart(z)+2platsep,ypart(z)+2.5platsep) withpen line; + elseif type=variable: + addto cap doublepath (xpart(z)+3platsep,ypart(z)-2.5platsep) + --(xpart(z)+3platsep,ypart(z)+2.5platsep) withpen line; + addto cap doublepath (xpart(z)+4platsep,ypart(z)-2.5platsep) + --(xpart(z)+4platsep,ypart(z)+2.5platsep) withpen line; + addto cap doublepath (xpart(z)+platsep,ypart(z)-2.5platsep) + --(xpart(z)+6platsep,ypart(z)+2.5platsep) withpen misc; + ahlength:=1.7platsep; + addto cap contour miscahead (xpart(z)+platsep,ypart(z)-2.5platsep) + --(xpart(z)+6platsep,ypart(z)+2.5platsep) withpen misc; + elseif type=variant: + addto cap doublepath (xpart(z)+3platsep,ypart(z)-2.5platsep) + --(xpart(z)+3platsep,ypart(z)+2.5platsep) withpen line; + addto cap doublepath (z+(4.5platsep,-2.5platsep))..(z+(4platsep,0)) + ..(z+(4.5platsep,2.5platsep)) withpen line; + fi; + + draw cap rotatedaround(z,ang); + + putlabel(C@#.l,C@#.r,2.5platsep,2.5platsep,ang,name,val); +enddef; + +%%%<--- Electrical machines (maquinas electricas) --->%%% + +vardef motor@#(expr z,ang,name,val)= + save mot, p, q, r, s, ca, cb, c, hc; + pair M@#.D, M@#.B; % pines % + M@#.D:=z; M@#.B:=(z+(2ssize,0)) rotatedaround(z,ang); + picture mot; mot:=nullpicture; + + addto mot doublepath z--(z+(.4ssize,0)); + addto mot doublepath (z+(1.6ssize,0))--(z+(2ssize,0)); + addto mot doublepath fullcircle scaled ssize shifted (z+(ssize,0)); + addto mot also thelabel(latex("\textsf{M}") scaled (ssize/6mm) + rotated (-ang), (z+(ssize,0))); + + path p,q,r,s,ca,cb,c,hc; + p=(z+(.6ssize,.075ssize))--(z+(.4ssize,.075ssize)); + q=(z+(.4ssize,.075ssize))--(z+(.4ssize,-.075ssize)); + ca=(z+(.4ssize,-.075ssize))--(z+(.6ssize,-.075ssize)); + + + r=(z+(1.4ssize,.075ssize))--(z+(1.6ssize,.075ssize)); + s=(z+(1.6ssize,.075ssize))--(z+(1.6ssize,-.075ssize)); + cb=(z+(1.6ssize,-.075ssize))--(z+(1.4ssize,-.075ssize)); + + c=fullcircle scaled ssize shifted (z+(ssize,0)); + hc=halfcircle scaled ssize rotated 270 shifted (z+(ssize,0)); + + addto mot contour buildcycle(p,q,ca,c); + addto mot doublepath buildcycle(p,q,ca,c); + + addto mot contour buildcycle(cb,s,r,hc); + addto mot doublepath buildcycle(cb,s,r,hc); + + draw mot rotatedaround(z,ang) withpen line; + + putlabel(M@#.D,M@#.B,.5ssize,.5ssize,ang,name,val); +enddef; + +vardef generator@#(expr z,ang,name,val)= + save gen; + pair G@#.D, G@#.B; % pines % + G@#.D:=z; G@#.B:=(z+(2ssize,0)) rotatedaround(z,ang); + picture gen; gen:=nullpicture; + + addto gen doublepath z--(z+(.5ssize,0)); + addto gen doublepath (z+(1.5ssize,0))--(z+(2ssize,0)); + addto gen doublepath fullcircle scaled ssize shifted (z+(ssize,0)); + addto gen also thelabel(latex("\textsf{G}") scaled (ssize/6mm) + rotated (-ang), (z+(ssize,0))); + + draw gen rotatedaround(z,ang) withpen line; + + putlabel(G@#.D,G@#.B,.5ssize,.5ssize,ang,name,val); +enddef; + +newinternal mid, Fe, auto; +mid:=1; Fe:=2; auto:=3; + +vardef transformer@#(expr z,type,ang)= + save trafo; + pair tf@#.pi, tf@#.ps, tf@#.si, tf@#.ss, tf@#.m; + tf@#.pi:=z; tf@#.ps:=(z+(0,8coil)) rotatedaround(z,ang); + tf@#.si:=(z+(2.4coil,0)) rotatedaround(z,ang); + tf@#.ss:=(z+(2.4coil,8coil)) rotatedaround(z,ang); + tf@#.m:=(z+(3.4coil,4coil)) rotatedaround(z,ang); + + picture trafo; trafo:=nullpicture; + + if type=normal: + tf@#.pi:=z; tf@#.ps:=(z+(0,8coil)) rotatedaround(z,ang); + tf@#.si:=(z+(2.4coil,0)) rotatedaround(z,ang); + tf@#.ss:=(z+(2.4coil,8coil)) rotatedaround(z,ang); + addto trafo doublepath z--(z+(0,coil)){right}.. + for i=2 upto 6: {left}(z+(0,i*coil)){right}.. endfor + {left}(z+(0,7coil))--(z+(0,8coil)); + addto trafo doublepath (z+(coil,coil))--(z+(coil,7coil)); + addto trafo doublepath (z+(1.4coil,coil))--(z+(1.4coil,7coil)); + addto trafo doublepath (z+(2.4coil,0))--(z+(2.4coil,coil)){left}.. + for i=2 upto 6: {right}(z+(2.4coil,i*coil)){left}.. endfor + {right}(z+(2.4coil,7coil))--(z+(2.4coil,8coil)); + elseif type=mid: + tf@#.pi:=z; tf@#.ps:=(z+(0,8coil)) rotatedaround(z,ang); + tf@#.si:=(z+(2.4coil,0)) rotatedaround(z,ang); + tf@#.ss:=(z+(2.4coil,8coil)) rotatedaround(z,ang); + tf@#.m:=(z+(3.4coil,4coil)) rotatedaround(z,ang); + addto trafo doublepath z--(z+(0,coil)){right}.. + for i=2 upto 6: {left}(z+(0,i*coil)){right}.. endfor + {left}(z+(0,7coil))--(z+(0,8coil)); + addto trafo doublepath (z+(coil,coil))--(z+(coil,7coil)); + addto trafo doublepath (z+(1.4coil,coil))--(z+(1.4coil,7coil)); + addto trafo doublepath (z+(2.4coil,0))--(z+(2.4coil,coil)){left}.. + for i=2 upto 6: {right}(z+(2.4coil,i*coil)){left}.. endfor + {right}(z+(2.4coil,7coil))--(z+(2.4coil,8coil)); + addto trafo doublepath (z+(2.4coil,4coil))--(z+(3.4coil,4coil)); + elseif type=Fe: + tf@#.pi:=z rotatedaround(z,ang); tf@#.ps:=(z+(0,5.3coil)) rotatedaround(z,ang); + tf@#.si:=(z+(14coil,0)) rotatedaround(z,ang); + tf@#.ss:=(z+(14coil,5.228coil)) rotatedaround(z,ang); + addto trafo doublepath z+(2coil,-2.5coil)--z+(12coil,-2.5coil) + --z+(12coil,7.5coil)--z+(2coil,7.5coil)--cycle; + addto trafo doublepath z+(4coil,-.5coil)--z+(10coil,-.5coil) + --z+(10coil,5.5coil)--z+(4coil,5.5coil)--cycle; + addto trafo doublepath z--z+(2coil,0)--z+(4coil,0.728coil) + {right}..{left}z+(4coil,1.3*coil); + for i=1 upto 4: + addto trafo doublepath z+(2coil,(i+.5)*coil){left}.. + {right}z+(2coil,i*coil)--z+(4coil,(i+0.728)*coil) + {right}..{left}z+(4coil,(i+1.3)*coil); + endfor; + addto trafo doublepath z+(2coil,5.3coil)--z+(0,5.3coil); + for i=0 upto 3: + addto trafo doublepath z+(10coil,i*coil){left}.. + {right}z+(10coil,(i+.5)*coil)--z+(12coil,(i+.5+0.728)*coil) + {right}..{left}z+(12coil,(i+.656)*coil); + endfor; + addto trafo doublepath z+(10coil,4coil){left}..{right} + z+(10coil,4.5coil)--z+(12coil,5.228coil)--z+(14coil,5.228coil); + addto trafo doublepath z+(12coil,0)--z+(14coil,0); + elseif type=auto: + tf@#.pi:=z rotatedaround(z,ang); tf@#.ps:=(z+(0,4coil)) rotatedaround(z,ang); + tf@#.si:=(z+(4coil,-6coil)) rotatedaround(z,ang); + tf@#.ss:=(z+(4coil,4coil)) rotatedaround(z,ang); + addto trafo doublepath z--z+(2coil,0); + addto trafo doublepath z+(2coil,-6coil)--z+(2coil,-5coil){right}.. + for i=2 upto 10: {left}(z+(2coil,(i-6)*coil)){right}.. endfor + {left}(z+(2coil,5coil))--z+(2coil,6coil)--z+(0,6coil); + addto trafo doublepath z+(2coil,6coil)--z+(4coil,6coil); + addto trafo doublepath z+(2coil,-6coil)--z+(4coil,-6coil); + fi; + + draw trafo rotatedaround(z,ang) withpen line; +enddef; + +%%%<---Sources (fuentes de alimentaci'on)--->%%% + +newinternal AC,DC,I,V,ssize; +AC:=1; DC:=0; I:=2; V:=3; ssize:=6mm; + +vardef source@#(expr z,type,ang,name,val)= + save fuente, positive, negative, seno; + pair S@#.p,S@#.n; % pines % + if (type=AC) or (type=I) or (type=V): + S@#.n:=z; + S@#.p:=(z+(2ssize,0)) rotatedaround(z,ang); + elseif type=DC: + S@#.p:=(z+(ssize,0)) rotatedaround(z,ang); + S@#.n:=z; + fi; + + picture fuente, positive, negative, seno; + positive:=nullpicture; negative:=nullpicture; + + addto positive doublepath (z+(1.05ssize,0))--(z+(1.45ssize,0)) withpen misc; + addto positive doublepath (z+(1.25ssize,-.2ssize))--(z+(1.25ssize,.2ssize)) withpen misc; + addto negative doublepath (z+(.95ssize,0))--(z+(.55ssize,0)) withpen misc; + + seno:=nullpicture; + addto seno doublepath (z+(2ssize/3,0)){dir 45} + ..{right}.5[z+(2ssize/3,.2ssize),z+(ssize,.2ssize)]..{dir -45}(z+(ssize,0)) + ..{right}.5[z+(ssize,-.2ssize),z+(4ssize/3,-.2ssize)]..{dir 45}(z+(4ssize/3,0)) + withpen line; + + fuente:=nullpicture; + if (type=AC) or (type=I) or (type=V): + addto fuente doublepath z--(z+(.5ssize,0)) withpen line; + addto fuente doublepath (z+(1.5ssize,0))--(z+(2ssize,0)) withpen line; + addto fuente doublepath fullcircle scaled ssize shifted (z+(ssize,0)) + withpen line; + if type=AC: + addto fuente also seno rotatedaround((z+(ssize,0)),-ang); + elseif type=I: + ahlength:=4ssize/15; ahangle:=30; + addto fuente doublepath (z+(ssize-ssize/3,0))--(z+(ssize+ssize/3,0)) + withpen line; + addto fuente contour arrowhead (z+(ssize-ssize/3,0))--(z+(ssize+ssize/3,0)) + withpen line; + ahlength:=4; ahangle:=45; + elseif type=V: + addto fuente also positive rotatedaround(z+(1.25ssize,0),-ang); + addto fuente also negative rotatedaround(z+(.75ssize,0),-ang); + fi; + elseif type=DC: + addto fuente doublepath z--(z+(0.4ssize,0)) withpen line; + addto fuente doublepath (z+(.6ssize,0))--(z+(ssize,0)) withpen line; + addto fuente doublepath (z+(.4ssize,-.2ssize))--(z+(.4ssize,.2ssize)) withpen line; + addto fuente doublepath (z+(.6ssize,-.6ssize))--(z+(.6ssize,.6ssize)) withpen line; + fi; + + if (type=AC) or (type=V) or (type=I): + putlabel(S@#.n,S@#.p,.5ssize,.5ssize,ang,name,val); + elseif (type=DC): + putlabel(S@#.n,S@#.p,.6ssize,.6ssize,ang,name,val); + fi; + + draw fuente rotatedaround (z,ang); +enddef; + +%%%<---Resistor (Resistencia)--->%%% + +newinternal rstlth; +rstlth:=2mm; + +vardef resistor@#(expr z,type,ang,name,val)= + save rst; + pair R@#.l,R@#.r; % pines % + R@#.l:=z; + R@#.r:=(z+(7rstlth,0)) rotatedaround(z,ang); + picture rst; + rst:=nullpicture; + addto rst doublepath z--(z+(2rstlth,0))--(z+(2.25rstlth,.75rstlth))-- + for i=.5 step .5 until 2.5: (z+((2.25+i)*rstlth,((-1)**(2i))*.75rstlth))-- + endfor (z+(5rstlth,0))--(z+(7rstlth,0)) withpen line; + if type=normal: + % no change % + elseif type=variable: + ahlength:=.8rstlth; + addto rst doublepath (z+(2rstlth,-rstlth))--(z+(5.5rstlth,rstlth)) withpen misc; + addto rst contour miscahead (z+(2rstlth,-rstlth))--(z+(5.5rstlth,rstlth)) + withpen misc; + fi; + + putlabel(R@#.l,R@#.r,.8rstlth,.8rstlth,ang,name,val); + + draw rst rotatedaround(z,ang); +enddef; + +%%%<--- Diode (diodo) --->%%% +newinternal zener, LED, diodeht, pinK, pinA; +zener:=1; LED:=2; diodeht:=3.5mm; pinK:=3; pinA:=4; + +vardef diode@#(expr z,type,ang,pin,name,val)= + save diodo; + pair D@#.K,D@#.A; % pines % + picture diodo; + diodo:=nullpicture; + + addto diodo doublepath z--(z+(diodeht,0))--(z+(diodeht,.5diodeht)) + --(z+(2diodeht,0))--(z+(diodeht,-.5diodeht))--(z+(diodeht,0)) withpen line; + addto diodo doublepath (z+(2diodeht,0))--(z+(3diodeht,0)) withpen line; + + if type=normal: + addto diodo doublepath (z+(2diodeht,-.5diodeht))--(z+(2diodeht,.5diodeht)) + withpen line; + elseif type=zener: + addto diodo doublepath (z+(2.5diodeht,-.5diodeht))--(z+(2diodeht,-.5diodeht)) + --(z+(2diodeht,.5diodeht))--(z+(1.5diodeht,.5diodeht)) withpen line; + elseif type=LED: + addto diodo doublepath (z+(2diodeht,-.5diodeht))--(z+(2diodeht,.5diodeht)) + withpen line; + + addto diodo doublepath (0.25diodeht*dir + (angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))) shifted (z+(2diodeht,.5diodeht))) + --(diodeht*dir(angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))+270) shifted + (0.25diodeht*dir(angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))) shifted + (z+(2diodeht,.5diodeht)))) withpen misc; + + addto diodo doublepath (0.6diodeht*dir + (angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))) shifted (z+(2diodeht,.5diodeht))) + --(diodeht*dir(angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))+270) shifted + (0.6diodeht*dir(angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))) shifted + (z+(2diodeht,.5diodeht)))) withpen misc; + + ahlength:=.4diodeht; ahangle:=30; + addto diodo contour arrowhead (0.25diodeht*dir + (angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))) shifted (z+(2diodeht,.5diodeht))) + --(diodeht*dir(angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))+270) shifted + (0.25diodeht*dir(angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))) shifted + (z+(2diodeht,.5diodeht)))) withpen misc; + + addto diodo contour arrowhead (0.6diodeht*dir + (angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))) shifted (z+(2diodeht,.5diodeht))) + --(diodeht*dir(angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))+270) shifted + (0.6diodeht*dir(angle(xpart(z+(diodeht,.5diodeht))-xpart(z+(2diodeht,0)), + ypart(z+(diodeht,.5diodeht))-ypart(z+(2diodeht,0)))) shifted + (z+(2diodeht,.5diodeht)))) withpen misc; + ahlength:=4; ahangle:=45; + fi; + + if pin=pinA: + D@#.A:=z; + D@#.K:=(z+(3diodeht,0)) rotatedaround(z,ang); + draw diodo rotatedaround(z,ang); + elseif pin=pinK: + D@#.K:=z; + D@#.A:=(z+(3diodeht,0)) rotatedaround(z,ang); + diodo:=diodo rotatedaround(.5[z,(z+(3diodeht,0))],180); + draw diodo rotatedaround(z,ang); + fi; + + if (type=normal) or (type=zener): + putlabel(D@#.A,D@#.K,.6diodeht,.6diodeht,ang,name,val); + elseif (type=LED): + putlabel(D@#.A,D@#.K,1.5diodeht,.6diodeht,ang,name,val); + fi; +enddef; + +%%%<--- Transistor --->%%% +newinternal npn, pnp, cnpn, cpnp, bjtlth; +npn:=1; pnp:=-1; cnpn:=0; cpnp:=2; bjtlth:=7mm; + +vardef transistor@#(expr z,type,ang)= + save BJT; + pair T@#.B,T@#.E,T@#.C; % pines: Base, Emisor, Colector % + T@#.B:=z; + T@#.E:=(z+(bjtlth,-.75bjtlth)) rotatedaround(z,ang); + T@#.C:=(z+(bjtlth,.75bjtlth)) rotatedaround(z,ang); + picture BJT; + BJT:=nullpicture; + + addto BJT doublepath z--(z+(.5bjtlth,0)) withpen line; + addto BJT doublepath (z+(.5bjtlth,-.5bjtlth))--(z+(.5bjtlth,.5bjtlth)) withpen line; + addto BJT doublepath (z+(.5bjtlth,.2bjtlth))--(z+(bjtlth,.5bjtlth)) + --(z+(bjtlth,.75bjtlth)) withpen line; + + if type=npn: + addto BJT doublepath (z+(.5bjtlth,-.2bjtlth))--(z+(bjtlth,-.5bjtlth)) + --(z+(bjtlth,-.75bjtlth)) withpen line; + addto BJT contour bjtahead (z+(.5bjtlth,-.2bjtlth)) + --(z+(bjtlth,-.5bjtlth)) withpen line; + elseif type=cnpn: + addto BJT doublepath (z+(.5bjtlth,-.2bjtlth))--(z+(bjtlth,-.5bjtlth)) + --(z+(bjtlth,-.75bjtlth)) withpen line; + addto BJT contour bjtahead (z+(.5bjtlth,-.2bjtlth)) + --(z+(bjtlth,-.5bjtlth)) withpen line; + addto BJT doublepath fullcircle scaled 1.3bjtlth shifted (z+(.65bjtlth,0)) + withpen line; + elseif type=pnp: + addto BJT doublepath (z+(bjtlth,-.75bjtlth))--(z+(bjtlth,-.5bjtlth)) + --(z+(.5bjtlth,-.2bjtlth)) withpen line; + addto BJT contour bjtahead (z+(bjtlth,-.5bjtlth)) + --(z+(.5bjtlth,-.2bjtlth)) withpen line; + elseif type=cpnp: + addto BJT doublepath (z+(bjtlth,-.75bjtlth))--(z+(bjtlth,-.5bjtlth)) + --(z+(.5bjtlth,-.2bjtlth)) withpen line; + addto BJT contour bjtahead (z+(bjtlth,-.5bjtlth)) + --(z+(.5bjtlth,-.2bjtlth)) withpen line; + addto BJT doublepath fullcircle scaled 1.3bjtlth shifted (z+(.65bjtlth,0)) withpen line; + fi; + + draw BJT rotatedaround(z,ang); +enddef; + +%%%<--- Measurement instruments (Intrumentos de medicion)--->%%% +newinternal volt, ampere, watt; +volt:=0; ampere:=1; watt:=2; + +vardef meains@#(expr z,type,ang,name)= + save meter; + pair mi@#.l, mi@#.r, mi@#.p; % pines % + mi@#.l:=z; mi@#.r:=(z+(2ssize,0)) rotatedaround(z,ang); + + picture meter; meter:=nullpicture; + addto meter doublepath z--(z+(.5ssize,0)); + addto meter doublepath (z+(1.5ssize,0))--(z+(2ssize,0)); + if (type=volt) or (type=ampere): + addto meter doublepath fullcircle scaled ssize shifted (z+(ssize,0)); + if type=volt: + addto meter also thelabel(latex("\textsf{V}") scaled (ssize/6mm) + rotated (-ang), (z+(ssize,0))); + elseif type=ampere: + addto meter also thelabel(latex("\textsf{A}") scaled (ssize/6mm) + rotated (-ang), (z+(ssize,0))); + fi; + elseif (type=watt): + mi@#.p:=(z+(ssize,-ssize)) rotatedaround(z,ang); + addto meter doublepath (z+(.5ssize,-.5ssize))--(z+(.5ssize,.5ssize)) + --(z+(1.5ssize,.5ssize))--(z+(1.5ssize,-.5ssize))--cycle; + addto meter doublepath (z+(ssize,-.5ssize))--(z+(ssize,-ssize)); + addto meter also thelabel(latex("\textsf{W}") scaled (ssize/6mm) + rotated (-ang), (z+(ssize,0))); + fi; + + draw meter rotatedaround(z,ang) withpen line; + + if labeling=rotatelabel: + if ((ang > (-90)) and (ang <= 90)) or ((ang > 270) and (ang <= 450)): + label(latex(name) rotatedaround (.5[mi@#.l,mi@#.r],ang), + (.5ssize+lbsep)*dir (90+ang) shifted .5[mi@#.l,mi@#.r]); + elseif ((ang > 90) and (ang <= 270)) or ((ang > (-270)) and (ang <= (-90))): + label(latex(name) rotatedaround (.5[mi@#.l,mi@#.r],180+ang), + (.5ssize+lbsep)*dir (90+ang) shifted .5[mi@#.l,mi@#.r]); + fi; + elseif labeling=norotatelabel: + if (ang = 0): + label.top(latex(name), (.5ssize+.25lbsep)*dir (90+ang) + shifted .5[mi@#.l,mi@#.r]); + elseif (ang > 0) and (ang < 90): + label.ulft(latex(name), (.5ssize)*dir (90+ang) + shifted .5[mi@#.l,mi@#.r]); + elseif (ang = 90): + label.lft(latex(name),(.5ssize+.25lbsep)*dir (90+ang) + shifted .5[mi@#.l,mi@#.r]); + elseif (90 < ang) and (ang < 180): + label.llft(latex(name),(.5ssize)*dir (90+ang) + shifted .5[mi@#.l,mi@#.r]); + elseif (ang = 180) or (ang = (-180)): + label.bot(latex(name), (.5ssize+.25lbsep)*dir (90+ang) + shifted .5[mi@#.l,mi@#.r]); + elseif ((ang > 180) and (ang < 270)) or ((ang > (-180)) and (ang < (-90))): + label.lrt(latex(name),(.5ssize)*dir (90+ang) + shifted .5[mi@#.l,mi@#.r]); + elseif (ang = 270) or (ang = (-90)): + label.rt(latex(name), (.5ssize+.25lbsep)*dir (90+ang) + shifted .5[mi@#.l,mi@#.r]); + elseif ((270 < ang) and (ang < 360)) or ((ang < 0) and (ang > (-90))): + label.urt(latex(name),(.5ssize)*dir (90+ang) + shifted .5[mi@#.l,mi@#.r]); + fi; + fi; +enddef; + +%%%<--- Miscellaneous symbols --->%%% + +newinternal gndlth, implth, simple, shield; +gndlth:=5mm; implth:=7mm; simple:=1; shield:=2; + +vardef ground@#(expr z,type,ang)= + save GND; + pair gnd@#; % unico pin % + gnd@#:=z; + picture GND; GND:=nullpicture; + addto GND doublepath z--(z+(0,-.5gndlth)) withpen line; + if type=shield: + addto GND doublepath (z+(-.5gndlth,-.5gndlth))--(z+(.5gndlth,-.5gndlth)) withpen line; + addto GND doublepath (z+(-.35gndlth,-.6gndlth))--(z+(.35gndlth,-.6gndlth)) withpen line; + addto GND doublepath (z+(-.2gndlth,-.7gndlth))--(z+(.2gndlth,-.7gndlth)) withpen line; + elseif type=simple: + addto GND doublepath (z+(-.5gndlth,-.5gndlth))--(z+(.5gndlth,-.5gndlth)) + withpen pencircle scaled 2linewd; + fi; + draw GND rotatedaround(z,ang); +enddef; + +newinternal junctiondiam; +junctiondiam:=1.25mm; + +vardef junction@#(expr z,name)(suffix $)= + pair J@#; J@#:=z; + draw z withpen pencircle scaled junctiondiam; + label.$(latex(name),z); +enddef; + +vardef impedance@#(expr z,ang,name,val)= + save imp; + pair Z@#.l, Z@#.r; % pines % + Z@#.l:=z; + Z@#.r:=(z+(1.5implth,0)) rotatedaround(z,ang); + picture imp; imp:=nullpicture; + + addto imp doublepath z--(z+(.25implth,0)); + addto imp doublepath (z+(.25implth,-.18implth))--(z+(.25implth,.18implth)) + --(z+(1.25implth,.18implth))--(z+(1.25implth,-.18implth))--cycle; + addto imp doublepath (z+(1.25implth,0))--(z+(1.5implth,0)); + + draw imp rotatedaround(z,ang) withpen line; + + putlabel(Z@#.l,Z@#.r,.2implth,.2implth,ang,name,val); +enddef; + +vardef lamp@#(expr z,ang,name,val)= + save ampl, p, q, r, s; + pair La@#.l,La@#.r; % pines % + La@#.l:=z; La@#.r:=(z+(2ssize,0)) rotatedaround(z,ang); + + picture ampl; ampl:=nullpicture; + + addto ampl doublepath z--(z+(.5ssize,0)); + addto ampl doublepath fullcircle scaled ssize shifted (z+(ssize,0)); + addto ampl doublepath (z+(1.5ssize,0))--(z+(2ssize,0)); + + pair p, q, r, s; + p=(-ssize*dir 45 shifted (z+(ssize,0))--(z+(ssize,0))) intersectionpoint + (fullcircle scaled ssize shifted (z+(ssize,0))); + q=(ssize*dir 45 shifted (z+(ssize,0))--(z+(ssize,0))) intersectionpoint + (fullcircle scaled ssize shifted (z+(ssize,0))); + r=(-ssize*dir (-45) shifted (z+(ssize,0))--(z+(ssize,0))) intersectionpoint + (fullcircle scaled ssize shifted (z+(ssize,0))); + s=(ssize*dir (-45) shifted (z+(ssize,0))--(z+(ssize,0))) intersectionpoint + (fullcircle scaled ssize shifted (z+(ssize,0))); + + addto ampl doublepath p--q; + addto ampl doublepath r--s; + + draw ampl rotatedaround(z,ang) withpen line; + + putlabel(La@#.l,La@#.r,.5ssize,.5ssize,ang,name,val); +enddef; + +%%%<--- Switches (Llaves) --->%%% + +newinternal NO, NC, ssep, swt; +NO:=0; NC:=1; ssep:=3mm; swt:=1.2ssep; + +vardef switch@#(expr z,type,ang,name,val)= + save swt; + pair st@#.l, st@#.r; + st@#.l:=z; st@#.r:= (z+(2.4ssep,0)) rotatedaround(z,ang); + picture swt; swt:=nullpicture; + + addto swt doublepath z--(z+(.7ssep,0)); + addto swt doublepath (z+(1.7ssep,ssep/3))--(z+(1.7ssep,0))--(z+(2.4ssep,0)); + + if type=NO: + addto swt doublepath (z+(.7ssep,0))--(z+(1.8ssep,.7ssep)); + elseif type=NC: + addto swt doublepath (z+(.7ssep,0))--(z+(2ssep,ssep/3)); + fi; + + draw swt rotatedaround(z,ang) withpen line; + + putlabel(st@#.l,st@#.r,.6ssep,.6ssep,ang,name,val); +enddef; + +%%%<--- Battery (bater'ia) --->%%% + +vardef battery@#(expr z,ang,name,val)= + save bat; + pair B@#.n, B@#.p; + B@#.n:=z; B@#.p:=(z+(1.8ssize,0)) rotatedaround(z,ang); + + picture bat; bat:=nullpicture; + addto bat doublepath z--(z+(0.4ssize,0)) withpen line; + addto bat doublepath (z+(1.4ssize,0))--(z+(1.8ssize,0)); + for i=0 upto 2: + addto bat doublepath (z+((.4+.4i)*ssize,-.2ssize))--(z+((.4+.4i)*ssize,.2ssize)); + addto bat doublepath (z+((.6+.4i)*ssize,-.6ssize))--(z+((.6+.4i)*ssize,.6ssize)); + endfor; + + draw bat rotatedaround(z,ang) withpen line; + + putlabel(B@#.n,B@#.p,.6ssize,.6ssize,ang,name,val); +enddef; + +%%%<--- Current (Corriente) --->%%% + +vardef current@#(expr z,ang,name,val)= + save cur; + pair i@#.s,i@#.d; + i@#.s:=z; i@#.d:=(z+(3platsep,0)) rotatedaround(z,ang); + ahangle:=20; ahlength:=3platsep; + picture cur; cur:=nullpicture; + addto cur contour arrowhead z--(z+(3platsep,0)); + + draw cur rotatedaround(z,ang) withpen line; + + putlabel(i@#.s,i@#.d,.5platsep,.5platsep,ang,name,val); + + ahangle:=45; ahlength:=4; +enddef; + +%%%<--- Mesh current (corriente de malla) --->%%% + +newinternal cw, ccw; +cw:=0; ccw:=1; + +def imesh(expr c,wd,ht,dire,ang,name)= + save im,r; picture im; numeric r; + ahlength:=3platsep; ahangle:=20; + if ht > wd: r=.2wd elseif ht < wd: r=.2ht fi; + im:=nullpicture; + if dire=cw: + addto im doublepath (xpart c - .5wd, ypart c - .5ht) + --(xpart c - .5wd, ypart c + .5ht-r){up} + ..{right}(xpart c - .5wd + r, ypart c + .5ht) + --(xpart c + .5wd - r, ypart c + .5ht){right} + ..{down}(xpart c + .5wd,ypart c + .5ht - r) + --(xpart c + .5wd,ypart c - .5ht + r){down} + ..{left}(xpart c + .5wd - r,ypart c - .5ht) + --(xpart c - .25wd, ypart c - .5ht); + addto im contour arrowhead (xpart c - .5wd, ypart c - .5ht) + --(xpart c - .5wd, ypart c + .5ht-r){up} + ..{right}(xpart c - .5wd + r, ypart c + .5ht) + --(xpart c + .5wd - r, ypart c + .5ht){right} + ..{down}(xpart c + .5wd,ypart c + .5ht - r) + --(xpart c + .5wd,ypart c - .5ht + r){down} + ..{left}(xpart c + .5wd - r,ypart c - .5ht) + --(xpart c - .25wd, ypart c - .5ht); + elseif dire=ccw: + addto im doublepath (xpart c + .5wd, ypart c - .5ht) + --(xpart c + .5wd, ypart c + .5ht-r){up} + ..{left}(xpart c + .5wd - r, ypart c + .5ht) + --(xpart c - .5wd + r, ypart c + .5ht){left} + ..{down}(xpart c - .5wd,ypart c + .5ht - r) + --(xpart c - .5wd,ypart c - .5ht + r){down} + ..{right}(xpart c - .5wd + r,ypart c - .5ht) + --(xpart c + .25wd, ypart c - .5ht); + addto im contour arrowhead (xpart c + .5wd, ypart c - .5ht) + --(xpart c + .5wd, ypart c + .5ht-r){up} + ..{left}(xpart c + .5wd - r, ypart c + .5ht) + --(xpart c - .5wd + r, ypart c + .5ht){left} + ..{down}(xpart c + .5wd,ypart c + .5ht - r) + --(xpart c - .5wd,ypart c - .5ht + r){down} + ..{right}(xpart c - .5wd + r,ypart c - .5ht) + --(xpart c + .25wd, ypart c - .5ht); + fi; + + if labeling=rotatelabel: + addto im also thelabel(latex("$" & name & "$"),c); + elseif labeling=norotatelabel: + addto im also thelabel(latex("$" & name & "$") rotatedaround(c,-ang),c); + fi; + + draw im rotatedaround (c,ang) withpen line; +enddef; + +%%%<--- Reostatos --->%%% + +newinternal rheolth, Rrheo, Lrheo; +rheolth:=2mm; Rrheo:=1; Lrheo:=2; + +vardef rheostat@#(expr z,type,ang)= + save reo; picture reo; reo:=nullpicture; + pair rh@#.i, rh@#.s, rh@#.r; + rh@#.i:=z; rh@#.s:=(z+(0,6rheolth)) rotatedaround(z,ang); + rh@#.r:=(z+(3rheolth,6rheolth)) rotatedaround(z,ang); + + ahangle:=20; ahlength:=rheolth; + + if type=Lrheo: + addto reo doublepath (z+(6rheolth,-3rheolth))--(z+(4rheolth,-3rheolth)) + --(z+(4rheolth,-.7rheolth)); + addto reo contour arrowhead (z+(6rheolth,-3rheolth))--(z+(4rheolth,-3rheolth)) + --(z+(4rheolth,-.9rheolth)); + + addto reo doublepath z--(z+(rheolth,0)){down}.. for i=2 upto 4: + {up}(z+(i*rheolth,0)){down}.. endfor {up}(z+(5rheolth,0))--(z+(6rheolth,0)); + + reo:=reo rotatedaround(z,90); + elseif type=Rrheo: + addto reo doublepath (z+(6rheolth,-3rheolth))--(z+(4rheolth,-3rheolth)) + --(z+(4rheolth,-.7rheolth)); + addto reo contour arrowhead (z+(6rheolth,-3rheolth))--(z+(4rheolth,-3rheolth)) + --(z+(4rheolth,-.9rheolth)); + + addto reo doublepath z--(z+(1.5rheolth,0))--(z+(1.75rheolth,.75rheolth))-- + for i=.5 step .5 until 2.5: (z+((1.75+i)*rheolth,((-1)**(2i))*.75rheolth))-- + endfor (z+(4.5rheolth,0))--(z+(6rheolth,0)) withpen line; + + reo:=reo rotatedaround(z,90); + fi; + draw reo rotatedaround(z,ang) withpen line; +enddef; + +% Definiciones de las longitudes de centrado, +% las hago como macros para que cambien de +% valor cuando lo hagan las dimensiones +% caracter'isticas de cada s'imbolo. + +def res = 3.5rstlth enddef; % 1 +def ind = 3coil enddef; % 2 +def cap = 3.5platsep enddef; % 3 +def sac = ssize enddef; % 4 +def sv = ssize enddef; % 5 +def si = ssize enddef; % 6 +def sdc = .5ssize enddef; % 7 +def mot = ssize enddef; % 8 +def gen = ssize enddef; % 9 +def tra = 4coil enddef; %10 +def ins = ssize enddef; %11 +def dio = 1.5diodeht enddef; %12 +def bjt = .5bjtlth enddef; %13 +def imp = .75implth enddef; %14 +def lam = ssize enddef; %15 +def swt = 1.2ssep enddef; %16 +def bat = .9ssize enddef; %17 +def cur = 1.5platsep enddef; %18 + +%% END %%
\ No newline at end of file |