% Copyright 2018-2020 by Romano Giannetti % Copyright 2015-2020 by Stefan Lindner % Copyright 2013-2020 by Stefan Erhardt % Copyright 2007-2020 by Massimo Redaelli % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Public License. % % See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Tripoles %%%%%%%%%%%%% %% switches %%%%%%%%%%%%% % Legacy spdt \pgfdeclareshape{spdt}{ \savedmacro{\ctikzclass}{\edef\ctikzclass{switches}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/spdt/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{left}{% \northwest \pgf@y=0pt } \anchor{in}{ \northwest \pgf@y=0pt } \anchor{out 1}{ \northwest \pgf@x=-\pgf@x } \anchor{out 2}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \northwest \pgf@y=0pt } \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{north}{ \northwest \pgf@x=0pt } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgf@circ@res@other = \ctikzvalof{tripoles/spdt/margin}\pgf@circ@res@left \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}} \pgfusepath{draw} \pgfscope \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}} \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}} \endpgfscope \pgfscope \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}} \pgfnode{ocirc}{center}{}{}{\pgfusepath{stroke}} \endpgfscope \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@other}{0pt}} \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}} \endpgfscope \pgfscope \pgfpathmoveto{\pgfpointshapeborder{spdt2}{\pgfpointorigin}} \pgfpathlineto{ \pgfpointadd{\pgfpointshapeborder{spdt1}{\pgfpoint{-\pgf@circ@res@other}{-100pt}}} {\pgfpoint{-.05\pgf@circ@res@up}{-.05\pgf@circ@res@up}} } \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfusepath{draw} \endpgfscope } } % cute switch "node" shapes, matching with cute "to" shapes % #1 -> name % #2 -> barposition % #3 -> arrowcode \long\def\pgfcircdeclarecutespdt#1#2#3{ \pgfdeclareshape{#1} { \savedmacro{\ctikzclass}{\edef\ctikzclass{switches}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{bipoles/cuteswitch/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen \pgf@x=.25\pgf@x } \savedanchor\midlever{ % these values are calculated when we create the definition of the shape. \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{bipoles/cuteswitch/height}\pgf@circ@scaled@Rlen \pgf@circ@res@temp=\ctikzvalof{nodes width}\pgf@circ@scaled@Rlen \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp \pgf@circ@res@down = -.5\pgf@y \pgf@circ@res@up = .5\pgf@y \pgfextracty{\pgf@circ@res@other}{#2} \pgf@x=0pt \pgf@y=.5\pgf@circ@res@other } % radius of the connector % This is the radius of the "ocirc" shape (see pgfcircshapes.tex) \saveddimen{\radius}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\ctikzvalof{nodes width}}} % shapename \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}} % shape type \savedmacro{\cshape}{\def\cshape{\ctikzvalof{bipoles/cuteswitch/shape}}} % mid of the lever, to stack switches \anchor{mid}{\midlever} % center anchors \anchor{cin}{ \northwest \pgf@y=0pt} \anchor{cout 1}{ \northwest \pgf@x=-\pgf@x } \anchor{cout 2}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } % horizontal angles \anchor{in}{ \northwest \pgf@y=0pt\advance\pgf@x by -\radius} \anchor{out 1}{ \northwest \pgf@x=-\pgf@x \advance\pgf@x by \radius} \anchor{out 2}{ \northwest \pgf@x=-\pgf@x \advance\pgf@x by \radius \pgf@y=-\pgf@y } \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \northwest \pgf@y=0pt } \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{north}{ \northwest \pgf@x=0pt } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfscope % This is the radius of the "ocirc" shape (see pgfcircshapes.tex) \pgf@circ@res@temp=\radius\relax \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp \pgfsetlinewidth{2\pgf@circ@res@temp} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} \pgfpathlineto{#2} \pgfsetroundcap\pgfusepath{draw} \endpgfscope \pgfscope % arrow #3 \endpgfscope % terminals \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} \pgfnode{\cshape}{center}{}{\thisshape-out 1}{\pgfusepath{stroke}} \endpgfscope \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} \pgfnode{\cshape}{center}{}{\thisshape-out 2}{\pgfusepath{stroke}} \endpgfscope \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}} \endpgfscope } } } \pgfcircdeclarecutespdt{cute spdt up} {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up-1.5\pgf@circ@res@temp}} {} \pgfcircdeclarecutespdt{cute spdt mid} {\pgfpoint{\pgf@circ@res@right}{0pt}} {} \pgfcircdeclarecutespdt{cute spdt down} {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down+1.5\pgf@circ@res@temp}} {} \pgfcircdeclarecutespdt{cute spdt up arrow} {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up-1.5\pgf@circ@res@temp}} { \pgf@circ@setlinewidth{bipoles}{\pgflinewidth} \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node \pgfpathmoveto{\pgfpointpolar{70}{1.5\pgf@circ@res@right}} \pgfpatharc{70}{-50}{1.5\pgf@circ@res@right} \pgfsetarrowsend{latexslim} \pgfusepath{draw} } \pgfcircdeclarecutespdt{cute spdt mid arrow} {\pgfpoint{\pgf@circ@res@right}{0pt}} { \pgf@circ@setlinewidth{bipoles}{\pgflinewidth} \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node \pgfsetarrowsstart{latexslim} \pgfpathmoveto{\pgfpointpolar{-60}{1.5\pgf@circ@res@right}} \pgfpatharc{-60}{60}{1.5\pgf@circ@res@right} \pgfsetarrowsend{latexslim} \pgfusepath{draw} } \pgfcircdeclarecutespdt{cute spdt down arrow} {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down+1.5\pgf@circ@res@temp}} { \pgf@circ@setlinewidth{bipoles}{\pgflinewidth} \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node \pgfpathmoveto{\pgfpointpolar{-50}{1.5\pgf@circ@res@right}} \pgfpatharc{-50}{70}{1.5\pgf@circ@res@right} \pgfsetarrowsend{latexslim} \pgfusepath{draw} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% Logic ports %% %% Code from John Kormylo at tex.stackexchange.com %% See https://tex.stackexchange.com/questions/372993/is-it-possible-to-implement-multiple-input-logic-ports-with-circuitikz %% Integration and fixes from Romano Giannetti and TheTeXnician <38565529+TheTeXnician@users.noreply.github.com> %% \newcount\pgf@circ@res@count% reserve global register \def\pgf@circ@logicport@input#1% #1 = \pgfmathcounter {% \pgfextracty{\pgf@circ@res@up}{\northeast}% \step \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax \advance\pgf@y by -#1\pgf@circ@res@step\relax }% % #1 = \pgfmathcounter #2=type #3 specificic port % type is 1 for and,nand; 2 for or,nor; 3 for xor,xnor, 4 for european. \def\pgf@circ@logicport@baseinput#1#2#3% {% % and and nand \ifnum #2=1\relax \pgfextracty{\pgf@circ@res@up}{\northeast}% \pgfextractx{\pgf@circ@res@left}{\southwest}% \step \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax \advance\pgf@y by -#1\pgf@circ@res@step\relax \pgf@x=\ctikzvalof{tripoles/american #3 port/port width}\pgf@circ@res@left \fi % or and nor \ifnum #2=2\relax \pgfextracty{\pgf@circ@res@up}{\northeast}% \pgfextractx{\pgf@circ@res@left}{\southwest}% \pgfextractx{\pgf@circ@res@right}{\northeast}% \step \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax \advance\pgf@y by -#1\pgf@circ@res@step\relax \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american #3 port/angle}}% \pgf@circ@res@other=\ctikzvalof{tripoles/american #3 port/inner}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}% \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}% \pgf@circ@res@other=\ctikzvalof{tripoles/american #3 port/port width}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}% \pgf@circ@res@temp=\pgf@y \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}% \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}% \pgf@x=\pgf@circ@res@other \fi % xor and xnor \ifnum #2=3\relax \pgfextracty{\pgf@circ@res@up}{\northeast}% \pgfextractx{\pgf@circ@res@left}{\southwest}% \pgfextractx{\pgf@circ@res@right}{\northeast}% \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american #3 port/angle}{\pgf@circ@math@angle}% \pgf@circ@res@other=\ctikzvalof{tripoles/american #3 port/inner}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}% \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}% \pgf@circ@res@other=\ctikzvalof{tripoles/american #3 port/port width}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}% \pgf@circ@res@temp=\ctikzvalof{tripoles/american #3 port/distance}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp} % this compensates for the effect of the line width on the gap between the arcs \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}% \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}% \step \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax \advance\pgf@y by -#1\pgf@circ@res@step\relax \pgf@circ@res@temp=\pgf@y \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}% \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}% \advance\pgf@circ@res@other by -\pgf@circ@math@distance \pgf@x=\pgf@circ@res@other \fi % european \ifnum #2=4\relax \pgfextracty{\pgf@circ@res@up}{\northeast}% \pgfextractx{\pgf@circ@res@other}{\left}% \step \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax \advance\pgf@y by -#1\pgf@circ@res@step\relax \pgf@x=\pgf@circ@res@other \fi }% %%% american \long\def\pgfcircdeclarelogicport#1#2#3{% \pgfdeclareshape{american #1 port}% {% \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \savedmacro\resize{% automatic \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@circ@res@up = \ctikzvalof{tripoles/american #1 port/height}\pgf@circ@scaled@Rlen \pgf@circ@res@up = .5\pgf@circ@res@up \pgf@circ@res@down = -\pgf@circ@res@up \pgf@circ@res@right = \ctikzvalof{tripoles/american #1 port/width}\pgf@circ@scaled@Rlen \pgf@circ@res@right = .5\pgf@circ@res@right \pgf@circ@res@left = -\pgf@circ@res@right }% \savedmacro\inputs{% get number of inputs \pgf@circ@res@count=\pgfkeysvalueof{/tikz/number inputs}\relax% \ifnum\pgf@circ@res@count=0 \pgf@circ@res@count=\ctikzvalof{tripoles/american #1 port/inputs}\relax% \fi \ifnum\pgf@circ@res@count<2 \pgf@circ@res@count=2\fi \ifnum\pgf@circ@res@count>16 \pgf@circ@res@count=16\fi \def\inputs{\the\pgf@circ@res@count}% }% \savedanchor\step{% 1/2 gap at edges \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@circ@res@step = \ctikzvalof{tripoles/american #1 port/height}\pgf@circ@scaled@Rlen \divide\pgf@circ@res@step by \pgf@circ@res@count \pgfpoint{\pgf@circ@res@left}{\dimexpr\pgf@circ@res@up+0.5\pgf@circ@res@step}% }% \savedanchor\northeast{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} \savedanchor\southwest{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} \savedanchor\left{\pgfpoint{\ctikzvalof{tripoles/american #1 port/port width}\pgf@circ@res@left}{0pt}} \savedanchor\right{\pgfpoint{\ctikzvalof{tripoles/american #1 port/port width}\pgf@circ@res@right}{0pt}} \savedanchor\origin{\pgfpoint{\ctikzvalof{tripoles/american #1 port/origin}\pgf@circ@res@right}{0pt}} \anchor{center}{\origin}% for backwards compatibility \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}} % create input anchors \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@american #1 port\endcsname{% \pgfmathloop% \ifnum\pgfmathcounter>\pgf@circ@res@count% \else% %\pgfutil@ifundefined{pgf@anchor@american #1 port@in \pgfmathcounter}{% \expandafter\xdef\csname pgf@anchor@american #1 port@in \pgfmathcounter\endcsname{% \noexpand\pgf@circ@logicport@input{\pgfmathcounter}% defined above }% \expandafter\xdef\csname pgf@anchor@american #1 port@bin \pgfmathcounter\endcsname{% \noexpand\pgf@circ@logicport@baseinput{\pgfmathcounter}{#2}{#1}% defined above }% %}{}% \repeatpgfmathloop% } \anchor{out}{\northeast\pgf@y=0pt} \anchor{bout}{\right\pgf@y=0pt} \anchor{left}{\left}% edges of component minus leads \anchor{right}{\right} \anchor{north east}{\northeast}% see \Compass macro \anchor{south west}{\southwest} \anchor{north}{\pgfextracty{\pgf@circ@res@up}{\northeast}% \pgfpoint{0cm}{\pgf@circ@res@up}} \anchor{north west}{\pgfextracty{\pgf@circ@res@up}{\northeast}% \pgfextractx{\pgf@circ@res@left}{\southwest}% \pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} \anchor{west}{\pgfextractx{\pgf@circ@res@left}{\southwest}% \pgfpoint{\pgf@circ@res@left}{0cm}} \anchor{south}{\pgfextracty{\pgf@circ@res@down}{\southwest}% \pgfpoint{0cm}{\pgf@circ@res@down}} \anchor{south east}{\pgfextracty{\pgf@circ@res@down}{\southwest}% \pgfextractx{\pgf@circ@res@right}{\northeast}% \pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} \anchor{east}{\pgfextractx{\pgf@circ@res@right}{\northeast}% \pgfpoint{\pgf@circ@res@right}{0cm}} \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} #3 } } } %%% american and %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfcircdeclarelogicport{and}{1}{ \pgfextracty{\pgf@circ@res@temp}{\step}% \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax \pgf@circ@res@count = \inputs\relax \ifpgfcirc@draw@leads %input leads \loop\ifnum\pgf@circ@res@count>0 \advance\pgf@circ@res@temp by -\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}% \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/american and port/port width}\pgf@circ@res@left} {\pgf@circ@res@temp}} \advance\pgf@circ@res@count by -1 \repeat \fi % output lead \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/american and port/port width}\pgf@circ@res@right} {0pt}} \pgfusepath{draw} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgf@circ@res@other=\ctikzvalof{tripoles/american and port/port width}\pgf@circ@res@left \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}} \pgfpatharc{-90}{90}{-2\pgf@circ@res@other and \pgf@circ@res@up} \pgfpathclose \pgf@circ@draworfill } %%% american nand %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfcircdeclarelogicport{nand}{1}{ \pgfextracty{\pgf@circ@res@temp}{\step}% \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax \pgf@circ@res@count = \inputs\relax \ifpgfcirc@draw@leads %input leads \loop\ifnum\pgf@circ@res@count>0 \advance\pgf@circ@res@temp by -\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}% \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/american nand port/port width}\pgf@circ@res@left} {\pgf@circ@res@temp}} \advance\pgf@circ@res@count by -1 \repeat \fi \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/american nand port/port width}\pgf@circ@res@right} {0pt}} \pgfusepath{draw} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgf@circ@res@step = \ctikzvalof{tripoles/american nand port/circle width}\pgf@circ@res@right \pgf@circ@res@other = \ctikzvalof{tripoles/american nand port/port width}\pgf@circ@res@right \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}} \pgfpatharc{-90}{90}{\pgf@circ@res@temp and \pgf@circ@res@up} \pgfpathclose \pgfpathellipse {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}} {\pgfpoint{.5\pgf@circ@res@step}{0pt}} {\pgfpoint{0pt}{.5\pgf@circ@res@step}} \pgf@circ@draworfill } %%% american nor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfcircdeclarelogicport{nor}{2}{ \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american nor port/angle}}% \pgf@circ@res@other=\ctikzvalof{tripoles/american nor port/inner}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}% \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}% \pgf@circ@res@other=\ctikzvalof{tripoles/american nor port/port width}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}% \pgfextracty{\pgf@circ@res@temp}{\step}% \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax \pgf@circ@res@count = \inputs\relax \ifpgfcirc@draw@leads %input leads \loop\ifnum\pgf@circ@res@count>0 \advance\pgf@circ@res@temp by -\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}% \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}% \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}% \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}% \advance\pgf@circ@res@count by -1 \repeat \fi \pgf@circ@res@other=\ctikzvalof{tripoles/american nor port/port width}\pgf@circ@res@right \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}} \pgfusepath{draw} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american nor port/angle}}% \pgf@circ@res@step = \ctikzvalof{tripoles/american nor port/circle width}\pgf@circ@res@right \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax \advance\pgf@circ@res@other by -\pgf@circ@res@step % main shape \ifpgfcirc@roundy@or@shapes \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry \pgfpatharc{0}{90}{\pgf@circ@res@temp and \pgf@circ@res@up}% \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}% \pgfpatharc{-90}{0}{\pgf@circ@res@temp and \pgf@circ@res@up}% \pgfpathclose \else \pgfmathsetlength{\pgf@circ@res@temp}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}% \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@up}} \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}% \pgfpathcurveto{\pgfpoint{0.3\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{0.3\pgf@circ@res@right}{0.5\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@other}{0pt}} \pgfpathcurveto{\pgfpoint{0.3\pgf@circ@res@right}{0.5\pgf@circ@res@up}}{\pgfpoint{0.3\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@up}} \pgfpathclose \fi % not dot \pgfpathellipse {\pgfpoint{\pgf@circ@res@other+.5\pgf@circ@res@step}{0pt}} {\pgfpoint{.5\pgf@circ@res@step}{0pt}} {\pgfpoint{0pt}{.5\pgf@circ@res@step}} \pgf@circ@draworfill } %%% american or %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfcircdeclarelogicport{or}{2}{ \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american or port/angle}}% \pgf@circ@res@other=\ctikzvalof{tripoles/american or port/inner}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}% \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}% \pgf@circ@res@other=\ctikzvalof{tripoles/american or port/port width}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}% \pgfextracty{\pgf@circ@res@temp}{\step}% \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax \pgf@circ@res@count = \inputs\relax \ifpgfcirc@draw@leads %input leads \loop\ifnum\pgf@circ@res@count>0 \advance\pgf@circ@res@temp by -\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}% \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}% \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}% \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}% \advance\pgf@circ@res@count by -1 \repeat \fi \pgf@circ@res@other=\ctikzvalof{tripoles/american or port/port width}\pgf@circ@res@right \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}} \pgfusepath{draw} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american or port/angle}}% % main shape \ifpgfcirc@roundy@or@shapes \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry \pgfpatharc{0}{90}{2\pgf@circ@res@other and \pgf@circ@res@up}% \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}% \pgfpatharc{-90}{0}{2\pgf@circ@res@other and \pgf@circ@res@up}% \pgfpathclose \else \pgfmathsetlength{\pgf@circ@res@temp}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}% \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@up}} \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}% \pgfpathcurveto{\pgfpoint{0.3\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{0.3\pgf@circ@res@right}{0.5\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@other}{0pt}} \pgfpathcurveto{\pgfpoint{0.3\pgf@circ@res@right}{0.5\pgf@circ@res@up}}{\pgfpoint{0.3\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@up}} \pgfpathclose \fi \pgf@circ@draworfill } %%% american xor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfcircdeclarelogicport{xor}{3}{ \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american xor port/angle}{\pgf@circ@math@angle}% \pgf@circ@res@other=\ctikzvalof{tripoles/american xor port/inner}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}% \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}% \pgf@circ@res@other=\ctikzvalof{tripoles/american xor port/port width}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}% \pgf@circ@res@temp=\ctikzvalof{tripoles/american xor port/distance}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp} % this compensates for the effect of the line width on the gap between the arcs \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}% \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}% \pgfextracty{\pgf@circ@res@temp}{\step}% \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax \pgf@circ@res@count = \inputs\relax \ifpgfcirc@draw@leads %input leads \loop\ifnum\pgf@circ@res@count>0 \advance\pgf@circ@res@temp by -\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}% \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}% \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}% \advance\pgf@circ@res@other by -\pgf@circ@math@distance \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}% \advance\pgf@circ@res@count by -1 \repeat \fi \pgf@circ@res@other=\ctikzvalof{tripoles/american xor port/port width}\pgf@circ@res@right \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}} \pgfusepath{draw} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american xor port/angle}}% % main shape \ifpgfcirc@roundy@or@shapes \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry \pgfpatharc{0}{90}{2\pgf@circ@res@other and \pgf@circ@res@up}% \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}% \pgfpatharc{-90}{0}{2\pgf@circ@res@other and \pgf@circ@res@up}% \pgfpathclose \else \pgfmathsetlength{\pgf@circ@res@temp}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}% \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@up}} \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}% \pgfpathcurveto{\pgfpoint{0.3\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{0.3\pgf@circ@res@right}{0.5\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@other}{0pt}} \pgfpathcurveto{\pgfpoint{0.3\pgf@circ@res@right}{0.5\pgf@circ@res@up}}{\pgfpoint{0.3\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@up}} \pgfpathclose \fi \pgf@circ@draworfill \pgfmathsetlength{\pgf@circ@res@temp}{(\pgf@circ@math@yradiusA)*sin(\pgf@circ@math@angle)}% \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other-\pgf@circ@math@distance}{\pgf@circ@res@temp}}% first arc \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradiusA and \pgf@circ@math@yradiusA}% \pgfusepath{draw} } %%% american xnor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfcircdeclarelogicport{xnor}{3}{ \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american xnor port/angle}{\pgf@circ@math@angle}% \pgf@circ@res@other=\ctikzvalof{tripoles/american xnor port/inner}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}% \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}% \pgf@circ@res@other=\ctikzvalof{tripoles/american xnor port/port width}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}% \pgf@circ@res@temp=\ctikzvalof{tripoles/american xor port/distance}\pgf@circ@res@right \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp} % this compensates for the effect of the line width on the gap between the arcs \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}% \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}% \pgfextracty{\pgf@circ@res@temp}{\step}% \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax \pgf@circ@res@count = \inputs\relax \ifpgfcirc@draw@leads %input leads \loop\ifnum\pgf@circ@res@count>0 \advance\pgf@circ@res@temp by -\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}% \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}% \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}% \advance\pgf@circ@res@other by -\pgf@circ@math@distance \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}% \advance\pgf@circ@res@count by -1 \repeat \fi \pgf@circ@res@other=\ctikzvalof{tripoles/american xnor port/port width}\pgf@circ@res@right \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}} \pgfusepath{draw} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american xnor port/angle}}% \pgf@circ@res@step = \ctikzvalof{tripoles/american xnor port/circle width}\pgf@circ@res@right \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax \advance\pgf@circ@res@other by -\pgf@circ@res@step % main shape \ifpgfcirc@roundy@or@shapes \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry \pgfpatharc{0}{90}{\pgf@circ@res@temp and \pgf@circ@res@up}% \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}% \pgfpatharc{-90}{0}{\pgf@circ@res@temp and \pgf@circ@res@up}% \pgfpathclose \else \pgfmathsetlength{\pgf@circ@res@temp}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}% \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@up}} \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}% \pgfpathcurveto{\pgfpoint{0.3\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{0.3\pgf@circ@res@right}{0.5\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@other}{0pt}} \pgfpathcurveto{\pgfpoint{0.3\pgf@circ@res@right}{0.5\pgf@circ@res@up}}{\pgfpoint{0.3\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@up}} \pgfpathclose \fi \pgfpathellipse {\pgfpoint{\pgf@circ@res@other+.5\pgf@circ@res@step}{0pt}} {\pgfpoint{.5\pgf@circ@res@step}{0pt}} {\pgfpoint{0pt}{.5\pgf@circ@res@step}} \pgf@circ@draworfill \pgf@circ@res@other=\ctikzvalof{tripoles/american xnor port/port width}\pgf@circ@res@left \pgfmathsetlength{\pgf@circ@res@temp}{(\pgf@circ@math@yradiusA)*sin(\pgf@circ@math@angle)}% \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other-\pgf@circ@math@distance}{\pgf@circ@res@temp}}% first arc \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradiusA and \pgf@circ@math@yradiusA}% \pgfusepath{draw} } %%% Original one-input ports \pgfdeclareshape{american not port}{ \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{bipoles/not port/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{bipoles/not port/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{in}{ \northwest \pgf@y=0pt } \anchor{in 1}{ \northwest \pgf@y=0pt } \anchor{bin}{ \northwest \pgf@y=0pt } \anchor{bin 1}{ \northwest \pgf@y=0pt \pgf@x=0.7\pgf@x } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{bout}{ \northwest \pgf@y=0pt \pgf@x=-0.7\pgf@x } \anchor{center}{ \pgfpointorigin } \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \northwest \pgf@y=0pt } \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{north}{ \northwest \pgf@x=0pt } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgf@circ@res@other = \ctikzvalof{bipoles/not port/circle width}\pgf@circ@res@right \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{.7\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=.7\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}} \pgf@circ@draworfill \pgfpathellipse {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}} {\pgfpoint{.5\pgf@circ@res@other}{0pt}} {\pgfpoint{0pt}{.5\pgf@circ@res@other}} \pgf@circ@draworfill \endpgfscope \ifpgfcirc@draw@leads %input leads \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}} \fi \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}} \pgfusepath{draw} } } \pgfdeclareshape{american buffer port}{ \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{bipoles/not port/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{bipoles/not port/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{in}{ \northwest \pgf@y=0pt } \anchor{in 1}{ \northwest \pgf@y=0pt } \anchor{bin}{ \northwest \pgf@y=0pt } \anchor{bin 1}{ \northwest \pgf@y=0pt \pgf@x=0.7\pgf@x } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{bout}{ \northwest \pgf@y=0pt \pgf@x=-0.7\pgf@x } \anchor{center}{ \pgfpointorigin } \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \northwest \pgf@y=0pt } \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{north}{ \northwest \pgf@x=0pt } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{.7\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=.7\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}} \pgf@circ@draworfill \endpgfscope \ifpgfcirc@draw@leads %input leads \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}} \fi \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}} \pgfusepath{draw} } } \pgfdeclareshape{invschmitt}{ \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{bipoles/not port/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{bipoles/not port/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{in}{ \northwest \pgf@y=0pt } \anchor{in 1}{ \northwest \pgf@y=0pt } \anchor{bin}{ \northwest \pgf@y=0pt \pgf@x=0.7\pgf@x } \anchor{bin 1}{ \northwest \pgf@y=0pt \pgf@x=0.7\pgf@x } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{bout}{ \northwest \pgf@y=0pt \pgf@x=-0.7\pgf@x } \anchor{center}{ \pgfpointorigin } \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \northwest \pgf@y=0pt } \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{north}{ \northwest \pgf@x=0pt } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgf@circ@res@other = \ctikzvalof{bipoles/not port/circle width}\pgf@circ@res@right \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{.7\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=.7\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathclose \pgf@circ@draworfill \pgfpathellipse {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}} {\pgfpoint{.5\pgf@circ@res@other}{0pt}} {\pgfpoint{0pt}{.5\pgf@circ@res@other}} \pgf@circ@draworfill \endpgfscope \ifpgfcirc@draw@leads %input leads \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}} \fi \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}} \pgfusepath{draw} %draw inner shape \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}} \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}} \pgfusepath{draw} } } \pgfdeclareshape{schmitt}{ \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{bipoles/not port/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{bipoles/not port/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{in}{ \northwest \pgf@y=0pt } \anchor{in 1}{ \northwest \pgf@y=0pt } \anchor{bin}{ \northwest \pgf@y=0pt \pgf@x=0.7\pgf@x } \anchor{bin 1}{ \northwest \pgf@y=0pt \pgf@x=0.7\pgf@x } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{bout}{ \northwest \pgf@y=0pt \pgf@x=-.7\pgf@x } \anchor{center}{ \pgfpointorigin } \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \northwest \pgf@y=0pt } \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{north}{ \northwest \pgf@x=0pt } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{.7\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=.7\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathclose \pgf@circ@draworfill \endpgfscope \ifpgfcirc@draw@leads %input leads \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}} \fi \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right-\pgf@circ@res@other}{0pt}} \pgfusepath{draw} %draw inner shape \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}} \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}} \pgfusepath{draw} } } %%% start european logic ports, from John Kormylo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% % #1 - name % #2 - text inside % #3 - number of inputs % #4 = is it a not? % % option to add a circle for not-output, see % https://github.com/circuitikz/circuitikz/issues/385 % \newif\ifpgf@circ@european@port@circle\pgf@circ@european@port@circlefalse \newif\ifpgf@circ@european@port@circle@ieee\pgf@circ@european@port@circle@ieeefalse \ctikzset{tripoles/european not shape/.initial=ocirc} \ctikzset{tripoles/european not symbol/.is choice} \ctikzset{tripoles/european not symbol/triangle/.code={\pgf@circ@european@port@circlefalse}} \ctikzset{tripoles/european not symbol/circle/.code={% \pgf@circ@european@port@circletrue\pgf@circ@european@port@circle@ieeefalse\ctikzset{tripoles/european not shape=ocirc}}} \ctikzset{tripoles/european not symbol/ieee circle/.code={% \pgf@circ@european@port@circletrue\pgf@circ@european@port@circle@ieeetrue\ctikzset{tripoles/european not shape=notcirc}}} \long\def\pgfcircdeclareeurologicport#1#2#3#4{ \pgfdeclareshape{european #1 port} { \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \saveddimen{\boutshift}{% \ifpgf@circ@european@port@circle \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \edef\pgf@temp{ocirc} \edef\pgf@circ@temp{\ctikzvalof{tripoles/european not shape}} \ifx\pgf@temp\pgf@circ@temp % it's ocirc \pgfmathsetlength{\pgf@x}{2*\ctikzvalof{nodes width}*\pgf@circ@Rlen} \else % it's ieee not circ \pgf@circ@notradius % defined together with ieeestd ports \pgf@x=2\pgf@circ@res@temp \fi \else \pgf@x=0pt \fi } \savedmacro\resize{% automatic \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@circ@res@up = \ctikzvalof{tripoles/european #1 port/height}\pgf@circ@scaled@Rlen \pgf@circ@res@up = .5\pgf@circ@res@up \pgf@circ@res@down = -\pgf@circ@res@up \pgf@circ@res@right = \ctikzvalof{tripoles/european #1 port/width}\pgf@circ@scaled@Rlen \pgf@circ@res@right = .5\pgf@circ@res@right \pgf@circ@res@left = -\pgf@circ@res@right }% \savedmacro\inputs{% get number of inputs \pgf@circ@res@count=\pgfkeysvalueof{/tikz/number inputs}\relax% \ifnum\pgf@circ@res@count=0 \pgf@circ@res@count=\ctikzvalof{tripoles/european #1 port/inputs}\relax% \fi \ifnum\pgf@circ@res@count<2 \pgf@circ@res@count=2\fi \ifnum\pgf@circ@res@count>16 \pgf@circ@res@count=16\fi \def\inputs{\the\pgf@circ@res@count}% }% \savedanchor\step{% 1/2 gap at edges \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@circ@res@step = \ctikzvalof{tripoles/european #1 port/height}\pgf@circ@scaled@Rlen \divide\pgf@circ@res@step by #3 \pgfpoint{\pgf@circ@res@left}{\dimexpr\pgf@circ@res@up+0.5\pgf@circ@res@step}% }% \savedanchor\northeast{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}% \savedanchor\southwest{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}% \savedanchor\left{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}% \savedanchor\right{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}% \savedanchor\origin{\pgfpoint{\ctikzvalof{tripoles/european #1 port/origin}\pgf@circ@res@right}{0pt}}% \anchor{center}{\origin}% for backwards compatibility % the text anchor overlaps the logic symbol \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}% % create input anchors \ifnum#3=1\relax \anchor{in}{\southwest\pgfpoint{\pgf@x}{0pt}}% or \step \anchor{in 1}{\southwest\pgfpoint{\pgf@x}{0pt}}% or \step \anchor{bin}{\left\pgfpoint{\pgf@x}{0pt}}% or \step \anchor{bin 1}{\left\pgfpoint{\pgf@x}{0pt}}% or \step \else \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@european #1 port\endcsname{% \pgfmathloop% \ifnum\pgfmathcounter>#3% \else% %\pgfutil@ifundefined{pgf@anchor@european #1 port@in \pgfmathcounter}{% redundant \expandafter\xdef\csname pgf@anchor@european #1 port@in \pgfmathcounter\endcsname{% \noexpand\pgf@circ@logicport@input{\pgfmathcounter}% defined above }% \expandafter\xdef\csname pgf@anchor@european #1 port@bin \pgfmathcounter\endcsname{% \noexpand\pgf@circ@logicport@baseinput{\pgfmathcounter}{4}{#1}% defined above }% %}{}% \repeatpgfmathloop% } \fi \anchor{out}{\northeast\pgf@y=0pt} \anchor{bout}{\right\advance\pgf@x by \boutshift\pgf@y=0pt} \anchor{left}{\left}% edges of component minus leads \anchor{right}{\right} \anchor{north east}{\northeast}% see \Compass macro \anchor{south west}{\southwest} \anchor{north}{\pgfextracty{\pgf@circ@res@up}{\northeast}% \pgfpoint{0cm}{\pgf@circ@res@up}} \anchor{north west}{\pgfextracty{\pgf@circ@res@up}{\northeast}% \pgfextractx{\pgf@circ@res@left}{\southwest}% \pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} \anchor{west}{\pgfextractx{\pgf@circ@res@left}{\southwest}% \pgfpoint{\pgf@circ@res@left}{0cm}} \anchor{south}{\pgfextracty{\pgf@circ@res@down}{\southwest}% \pgfpoint{0cm}{\pgf@circ@res@down}} \anchor{south east}{\pgfextracty{\pgf@circ@res@down}{\southwest}% \pgfextractx{\pgf@circ@res@right}{\northeast}% \pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} \anchor{east}{\pgfextractx{\pgf@circ@res@right}{\northeast}% \pgfpoint{\pgf@circ@res@right}{0cm}} \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \pgfstartlinewidth=\pgflinewidth \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfpathrectanglecorners {\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@left}{\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgf@circ@res@down}} \pgf@circ@draworfill \endpgfscope \ifpgfcirc@draw@leads %input leads \ifnum#3=1\relax \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}% \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}% \else \pgfextracty{\pgf@circ@res@temp}{\step}% \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax %\pgf@circ@res@count = #3\relax% redundant \loop\ifnum\pgf@circ@res@count>0 \advance\pgf@circ@res@temp by -\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}% \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@left} {\pgf@circ@res@temp}} \advance\pgf@circ@res@count by -1 \repeat \fi \fi % \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{% \pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}} % \pgfusepath{draw} % \edef\pgf@temp{not} \edef\pgf@circ@temp{#4} \ifx\pgf@temp\pgf@circ@temp % is a not \ifpgf@circ@european@port@circle \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@right} % reset linewidth for IEEE ports, otherwise they will multiply... \ifpgf@circ@european@port@circle@ieee\pgfsetlinewidth{\pgfstartlinewidth}\fi \pgfnode{\ctikzvalof{tripoles/european not shape}}{west}{}{NOT}{\pgfusepath{stroke}} \endpgfscope \else \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/european #1 port/not width}\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@right}% {\ctikzvalof{tripoles/european #1 port/not height}\pgf@circ@res@up}} \pgfusepath{draw} \fi \fi % \pgfpathmoveto{\pgfpointorigin} \pgftext{#2} } } } \pgfcircdeclareeurologicport{and}{\&}{\pgf@circ@res@count}{} \pgfcircdeclareeurologicport{or}{$\ge 1$}{\pgf@circ@res@count}{} \pgfcircdeclareeurologicport{xor}{$=1$}{\pgf@circ@res@count}{} \pgfcircdeclareeurologicport{not}{$1$}{1}{not} \pgfcircdeclareeurologicport{buffer}{$1$}{1}{} \pgfcircdeclareeurologicport{nand}{\&}{\pgf@circ@res@count}{not} \pgfcircdeclareeurologicport{nor}{$\ge 1$}{\pgf@circ@res@count}{not} \pgfcircdeclareeurologicport{xnor}{$=1$}{\pgf@circ@res@count}{not} %% end european logic ports %%%%%%%%%%%%%%%%%%%%%%%% %% Transistors %%%%%%%%%%%%%%%%%%%%%%%% \long\def\pgfcircdeclaretransistor#1#2#3{ \pgfdeclareshape{#1} { \savedmacro{\ctikzclass}{\edef\ctikzclass{transistors}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{ \pgfpointorigin } \savedanchor\northeast{% upper right \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/#1/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=0pt } \savedanchor\left{%center left \pgf@y=0pt \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/#1/width}\pgf@circ@scaled@Rlen } \savedanchor\right{%center right -- added by Burak Kelleci % this is really 0,0 \pgf@y=0pt \pgf@x=0pt } \anchor{text}{ \northeast \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \ifpgf@circuit@transisors@fixlabels \ifpgf@circuit@fet@bodydiode % try to put the text to the right of the flyback diode \pgfmathsetlength{\pgf@circ@res@other}{( \ctikzvalof{tripoles/#1/bodydiode distance}* \ctikzvalof{tripoles/#1/width} + \ctikzvalof{tripoles/#1/bodydiode scale}* \ctikzvalof{bipoles/diode/height}/2 )*\pgf@circ@scaled@Rlen} \advance\pgf@x by \pgf@circ@res@other \fi % add a bit of space to avoid central (substrate) terminal if drawn \advance\pgf@x by 0.05\pgf@circ@scaled@Rlen\relax \pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax \else \pgf@y=.7\pgf@y \pgf@x= \pgf@circ@scaled@Rlen \pgf@x=0.1\pgf@x \fi } \anchor{pathstart}{ % south \northeast \pgf@y=-\pgf@y } \anchor{pathend}{ \northeast } \anchor{north}{ \northeast \pgf@circ@res@step=\pgf@y \left \pgf@y=\pgf@circ@res@step \pgf@x=.5\pgf@x } \anchor{west}{ \left } \anchor{east}{ \northeast \pgf@y=0pt } \anchor{south}{ \northeast \pgf@circ@res@step=\pgf@y \left \pgf@y=-\pgf@circ@res@step \pgf@x=.5\pgf@x } \anchor{south west}{ \northeast \pgf@circ@res@step=\pgf@y \left \pgf@y=-\pgf@circ@res@step } \anchor{north east}{ \northeast } \anchor{north west}{ \northeast \pgf@circ@res@step=\pgf@y \left \pgf@y=\pgf@circ@res@step } \anchor{south east}{ \northeast \pgf@y=-\pgf@y } \anchor{B}{ \northeast \pgf@circ@res@step=\ctikzvalof{tripoles/#1/conn height}\pgf@y \left \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@circ@res@step } \anchor{base}{ \northeast \pgf@circ@res@step=\ctikzvalof{tripoles/#1/conn height}\pgf@y \left \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@circ@res@step } \anchor{bulk}{ %added by Burak Kelleci \northeast \pgf@circ@res@step=\ctikzvalof{tripoles/#1/conn height}\pgf@y \right \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@circ@res@step } \anchor{nobulk}{ %added by Burak Kelleci \left \pgf@x=\ctikzvalof{tripoles/#1/base width}\pgf@x } \anchor{G}{ \northeast \pgf@circ@res@step=\ctikzvalof{tripoles/#1/conn height}\pgf@y \left \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@circ@res@step } \anchor{gate}{ \northeast \pgf@circ@res@step=\ctikzvalof{tripoles/#1/conn height}\pgf@y \left \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@circ@res@step } \anchor{nobase}{ \left \pgf@x=\ctikzvalof{tripoles/#1/base width}\pgf@x } \anchor{nogate}{ \left \pgf@x=\ctikzvalof{tripoles/#1/gate width}\pgf@x } \anchor{E}{ \northeast \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@y } \anchor{emitter}{ \northeast \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@y } \anchor{C}{ \northeast \pgf@y=\ctikzvalof{tripoles/#1/curr direction}\pgf@y } \anchor{collector}{ \northeast \pgf@y=\ctikzvalof{tripoles/#1/curr direction}\pgf@y } \anchor{S}{ \northeast \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@y } \anchor{source}{ \northeast \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@y } \anchor{D}{ \northeast \pgf@y=\ctikzvalof{tripoles/#1/curr direction}\pgf@y } \anchor{drain}{ \northeast \pgf@y=\ctikzvalof{tripoles/#1/curr direction}\pgf@y } \anchor{body C in}{ \northeast \pgf@y=\ctikzvalof{tripoles/#1/curr direction}\pgf@y \pgf@y=\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@y } \anchor{body E in}{ \northeast \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@y \pgf@y=\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@y } \anchor{body C out}{ \northeast \pgf@ya=\ctikzvalof{tripoles/#1/curr direction}\pgf@y \pgf@ya=\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@ya \pgf@y=\pgf@ya \left \pgf@x=-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf@x \pgf@y=\pgf@ya } \anchor{body E out}{ \northeast \pgf@ya=-\ctikzvalof{tripoles/#1/curr direction}\pgf@y \pgf@ya=\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@ya \pgf@y=\pgf@ya \left \pgf@x=-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf@x \pgf@y=\pgf@ya } #2 \backgroundpath{ \pgftransformationadjustments \pgfsetcolor{\ctikzvalof{color}} % \ifnum \ctikzvalof{tripoles/#1/curr direction} > 0 \pgf@circuit@trans@ntypetrue \else \pgf@circuit@trans@ntypefalse \fi \northeast \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = \pgf@x \left \pgf@circ@res@left = \pgf@x \pgf@circ@scaled@Rlen=\scaledRlen % #3 % BODY DIODE \ifpgf@circuit@fet@bodydiode \drawbodydiode{#1} \fi % } } } \long\def\drawbodydiode#1{ \pgfscope \pgftransformshift{\pgfpoint{-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}} \pgftransformrotate{90} % diode scale and bodydiode scale interacts. We want the size of the diode % proportional to the transistor, so we will: % 1) undo diode scale 2) apply transistor scale (using the current class) 3) apply bodydiode scale \pgfmathsetmacro{\@@BDscale}{\ctikzvalof{tripoles/#1/bodydiode scale}* \ctikzvalof{\ctikzclass/scale}/\ctikzvalof{diodes/scale}} \pgftransformscale{\@@BDscale} \ifpgf@circuit@fulldiode \pgfnode{fulldiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}} \else \pgfnode{emptydiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}} \fi \endpgfscope % Draw stroke line \ifpgf@circuit@strokediode \pgfpathmoveto{\pgfpointanchor{pgf@bodydiode}{west}} \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}} \pgfusepath{stroke} \fi %Draw upper connection to body diode \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@up}} \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}} \pgfusepath{draw} \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@up}} \pgftransformscale{0.5} \pgfnode{circ}{center}{}{}{\pgfusepath{fill}} \endpgfscope{} %Draw lower connection to body diode \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@down}} \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{west}} \pgfusepath{draw} \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@down}} \pgftransformscale{0.5} \pgfnode{circ}{center}{}{}{\pgfusepath{fill}} \endpgfscope } \long\def\declarebpt#1{ \pgfcircdeclaretransistor{#1}{ \anchor{inner up}{ \northeast \pgf@y=\ctikzvalof{tripoles/#1/base height}\pgf@y } \anchor{inner down}{ \northeast \pgf@y=-\ctikzvalof{tripoles/#1/base height}\pgf@y } }{ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@up}} \pgfusepath{draw} % drawing base \pgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \ifpgf@circuit@bpt@schottky % upper \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up+ \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left+ \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up+ \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left+ \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}} % % lower \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down- \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left- \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down- \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left- \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}} \fi \pgfusepath{draw} \endpgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfusepath{draw} %draw arrow depending on type of transistor \pgfscope \pgfslopedattimetrue \pgfallowupsidedownattimetrue \pgfresetnontranslationattimefalse \edef\@@anchor{center} \ifpgf@circuit@trans@ntype \ifpgf@circuit@trans@arrowatend \edef\@@anchor{btip} \pgftransformlineattime{1.0}{% \pgfpoint% {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@down}% }{% \pgfpoint{\pgf@circ@res@right}% {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}% } \else \pgftransformlineattime{\ctikzvalof{tripoles/#1/arrow pos}}{% \pgfpoint% {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@down}% }{% \pgfpoint{\pgf@circ@res@right}% {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}% } \fi \else % p-type \ifpgf@circuit@trans@arrowatend \edef\@@anchor{tip} \pgftransformlineattime{1.0}{% \pgfpoint{\pgf@circ@res@right}% {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}% }{% \pgfpoint{\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@up}% } \else \pgftransformlineattime{\ctikzvalof{tripoles/#1/arrow pos}}{% \pgfpoint{\pgf@circ@res@right}% {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}% }{% \pgfpoint{\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@up}% } \fi \fi \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}} \endpgfscope \ifpgf@circuit@bpt@drawphoto \pgfscope \pgfsetarrowsstart{latexslim} \pgfpathmoveto{\pgfpointadd{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} {\pgfpoint{0.05\pgf@circ@res@left}{0.1\pgf@circ@res@up}}} \pgfpathlineto{\pgfpointadd{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} {\pgfpoint{0.5\pgf@circ@res@left}{0.3\pgf@circ@res@up}}} \pgfusepath{draw} \pgfpathmoveto{\pgfpointadd{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} {\pgfpoint{0.05\pgf@circ@res@left}{-0.1\pgf@circ@res@up}}} \pgfpathlineto{\pgfpointadd{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} {\pgfpoint{0.5\pgf@circ@res@left}{0.1\pgf@circ@res@up}}} \pgfusepath{draw} \endpgfscope \else \ifpgf@circuit@bpt@drawbase \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}} \pgfusepath{draw} \fi \fi } } \declarebpt{npn} \declarebpt{pnp} % % multi-emitter and multi-collector BJTs by Romano Giannetti % \def\pgf@circ@bjt@C@anchor#1{% #1: collector number \pgfextractx{\pgf@circ@res@temp}{\basedimension} \pgfextracty{\pgf@circ@res@other}{\basedimension} \ifnum\cdir>0 % NPN, above \pgfpoint{\pgf@circ@res@temp}{% \pgf@circ@res@other+\pgfverticaltransformationadjustment*.5*\pgflinewidth+(#1-1)*\multistep} \else % PNP, below \pgfpoint{\pgf@circ@res@temp}{% -\pgf@circ@res@other-\pgfverticaltransformationadjustment*.5*\pgflinewidth-(#1-1)*\multistep} \fi } \def\pgf@circ@bjt@E@anchor#1{% #1: collector number \pgfextractx{\pgf@circ@res@temp}{\basedimension} \pgfextracty{\pgf@circ@res@other}{\basedimension} \ifnum\cdir<0 % PNP, above \pgfpoint{\pgf@circ@res@temp}{% \pgf@circ@res@other+\pgfverticaltransformationadjustment*.5*\pgflinewidth+(#1-1)*\multistep} \else % PNP, below \pgfpoint{\pgf@circ@res@temp}{% -\pgf@circ@res@other-\pgfverticaltransformationadjustment*.5*\pgflinewidth-(#1-1)*\multistep} \fi } \long\def\declarebjt#1{ \pgfdeclareshape{bjt#1}{ \savedmacro{\ctikzclass}{\edef\ctikzclass{transistors}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} % \cdir is 1 for npn, -1 for pnp \savedmacro{\cdir}{\edef\cdir{\ctikzvalof{tripoles/bjt/#1/curr direction}}} \savedmacro{\numE}{\edef\numE{\ctikzvalof{tripoles/bjt/emitters}}} \savedmacro{\numC}{\edef\numC{\ctikzvalof{tripoles/bjt/collectors}}} % step up or down for the additional C/Es \saveddimen{\multistep}{\pgfmathsetlength{\pgf@x}{% \ctikzvalof{tripoles/bjt/height}*\ctikzvalof{tripoles/bjt/multi height}* \ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen}} \saveddimen{\external}{\pgfmathsetlength{\pgf@x}{% \ctikzvalof{tripoles/bjt/pins width}*\ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen}} \savedanchor\basedimension{% these are the dimensions if nC=1 y nE=1 \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/bjt/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=\ctikzvalof{tripoles/bjt/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \savedanchor\northeast{% upper right \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgfmathsetlength{\pgf@circ@res@step}{% \ctikzvalof{tripoles/bjt/height}*\ctikzvalof{tripoles/bjt/multi height}* \ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen} \ifnum\cdir> 0 \edef\numup{\numC}\edef\numdown{\numE} \else \edef\numup{\numE}\edef\numdown{\numC} \fi \pgfmathsetlength{\pgf@y}{0.5*\ctikzvalof{tripoles/bjt/height}\pgf@circ@scaled@Rlen + (\numup-1)*\pgf@circ@res@step+\pgfverticaltransformationadjustment*.5*\pgflinewidth + \ctikzvalof{tripoles/bjt/pins width}*\ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen} \pgf@x=\ctikzvalof{tripoles/bjt/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \savedanchor\southeast{% lower right \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgfmathsetlength{\pgf@circ@res@step}{% \ctikzvalof{tripoles/bjt/height}*\ctikzvalof{tripoles/bjt/multi height}* \ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen} \ifnum\cdir> 0 \edef\numup{\numC}\edef\numdown{\numE} \else \edef\numup{\numE}\edef\numdown{\numC} \fi \pgfmathsetlength{\pgf@y}{-0.5*\ctikzvalof{tripoles/bjt/height}\pgf@circ@scaled@Rlen - (\numdown-1)*\pgf@circ@res@step-\pgfverticaltransformationadjustment*.5*\pgflinewidth - \ctikzvalof{tripoles/bjt/pins width}*\ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen} \pgf@x=\ctikzvalof{tripoles/bjt/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \savedanchor\southwest{% lower left \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgfmathsetlength{\pgf@circ@res@step}{% \ctikzvalof{tripoles/bjt/height}*\ctikzvalof{tripoles/bjt/multi height}* \ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen} \ifnum\cdir> 0 \edef\numup{\numC}\edef\numdown{\numE} \else \edef\numup{\numE}\edef\numdown{\numC} \fi \pgfmathsetlength{\pgf@y}{-0.5*\ctikzvalof{tripoles/bjt/height}\pgf@circ@scaled@Rlen - (\numdown-1)*\pgf@circ@res@step-\pgfverticaltransformationadjustment*.5*\pgflinewidth - \ctikzvalof{tripoles/bjt/pins width}*\ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen} \pgfmathsetlength{\pgf@x}{-0.5*\ctikzvalof{tripoles/bjt/width}*\pgf@circ@scaled@Rlen - \ctikzvalof{tripoles/bjt/pins width}*\ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen} } \anchor{center}{\pgfpointorigin} \anchor{north}{\northeast\pgf@x=0cm\relax} \anchor{east}{\northeast\pgf@y=0cm\relax} \anchor{south}{\southwest\pgf@x=0cm\relax} \anchor{west}{\southwest\pgf@y=0cm} \anchor{north east}{\northeast} \anchor{north west}{\northeast\pgf@ya=\pgf@y\southwest\pgf@y=\pgf@ya} \anchor{south west}{\southwest} \anchor{south east}{\southeast} \anchor{text}{\northeast\pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax} \anchor{B}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x\advance\pgf@x by -\external} \anchor{base}{\basedimension\pgf@y=0cm\pgf@x=-\pgf@x\advance\pgf@x by -\external} \anchor{nobase}{\basedimension\pgf@y=0cm\pgf@x=-\pgf@x} % center of the base "bar" \anchor{cbase}{\basedimension\pgf@x=-\pgf@x \pgfmathsetlength{\pgf@y}{\cdir*(\numC-\numE)*\multistep/2}% } % geometrical centers \anchor{vcenter}{\pgf@x=0cm\relax \pgfmathsetlength{\pgf@y}{\cdir*(\numC-\numE)*\multistep/2}% } \anchor{gcenter}{% \northeast\pgf@xa=0.5\pgf@x \southwest\advance\pgf@xa by 0.5\pgf@x \pgf@x=\pgf@xa \pgfmathsetlength{\pgf@y}{\cdir*(\numC-\numE)*\multistep/2}% } % external connections \anchor{E}{ \ifnum\cdir>0% npn, emitter down \southeast \else \northeast \fi }% first emitter \anchor{emitter}{\ifnum\cdir>0\southeast\else\northeast\fi}% first emitter \anchor{C}{\ifnum\cdir<0\southeast\else\northeast\fi} \anchor{collector}{\ifnum\cdir<0\southeast\else\northeast\fi} \backgroundpath{ \pgftransformationadjustments \pgfsetcolor{\ctikzvalof{color}} % % set the type and up and down number of connections % \ifnum\cdir> 0 \pgf@circuit@trans@ntypetrue \edef\numup{\numC} \edef\numdown{\numE} \else \pgf@circuit@trans@ntypefalse \edef\numup{\numE} \edef\numdown{\numC} \fi \basedimension \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = \pgf@x \pgf@circ@res@left = -\pgf@x \pgf@circ@scaled@Rlen=\scaledRlen \pgf@circ@res@step=\multistep % % set arrow positions options % \edef\@@anchor{center}\edef\@@pos{\ctikzvalof{tripoles/#1/arrow pos}} \ifpgf@circuit@trans@arrowatend \edef\@@pos{1.0} \ifpgf@circuit@trans@ntype % arrow is toward outside, push it a bit \edef\@@anchor{btip} \else \edef\@@anchor{tip} \fi \fi % % Drawing upper connections % \pgfscope \pgf@circ@count@a=\numup\relax \pgfmathloop% \ifnum\pgf@circ@count@a>0 \advance\pgf@circ@count@a-1\relax \pgfmathsetlength{\pgf@circ@res@other}{\the\pgf@circ@count@a*\multistep}% \ifnum\pgf@circ@count@a=\numexpr\numup-1\relax % draw the external pin connection \pgfpathmoveto{\pgfpoint {\pgf@circ@res@right}% {\pgf@circ@res@up+\external+\pgfverticaltransformationadjustment*.5*\pgflinewidth+\pgf@circ@res@other}}% \pgfpathlineto{\pgfpoint {\pgf@circ@res@right}% {\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth+\pgf@circ@res@other}}% \else \pgfpathmoveto{\pgfpoint {\pgf@circ@res@right}% {\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth+\pgf@circ@res@other}}% \fi \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/bjt/base height 2}\pgf@circ@res@up+\pgf@circ@res@other}}% \pgfsetroundcap % better when connecting to sloped lines \pgfusepath{draw} \ifpgf@circuit@trans@ntype\else % it's a PNP; draw arrow \pgfscope \pgfslopedattimetrue \pgfallowupsidedownattimetrue \pgfresetnontranslationattimefalse \pgftransformlineattime{\@@pos}{% \pgfpoint {\pgf@circ@res@right}% {\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth+\pgf@circ@res@other}% }{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/bjt/base height 2}\pgf@circ@res@up+\pgf@circ@res@other}% } \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}} \endpgfscope \fi \repeatpgfmathloop \endpgfscope % % Drawing base % \pgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/bjt/base height}\pgf@circ@res@up+(\numup-1)*\multistep}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/bjt/base height}\pgf@circ@res@down-(\numdown-1)*\multistep}} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \ifpgf@circuit@bpt@schottky % upper \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/bjt/base height}\pgf@circ@res@up+(\numup-1)*\multistep}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/bjt/base height}\pgf@circ@res@up+(\numup-1)*\multistep+ \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left+ \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen} {\ctikzvalof{tripoles/bjt/base height}\pgf@circ@res@up+(\numup-1)*\multistep+ \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left+ \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen} {\ctikzvalof{tripoles/bjt/base height}\pgf@circ@res@up+(\numup-1)*\multistep}} % lower \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/bjt/base height}\pgf@circ@res@down-(\numdown-1)*\multistep}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/bjt/base height}\pgf@circ@res@down-(\numdown-1)*\multistep- \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left- \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen} {\ctikzvalof{tripoles/bjt/base height}\pgf@circ@res@down-(\numdown-1)*\multistep- \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left- \ctikzvalof{tripoles/schottky base size}\pgf@circ@scaled@Rlen} {\ctikzvalof{tripoles/bjt/base height}\pgf@circ@res@down-(\numdown-1)*\multistep}} \fi \pgfsetroundcap % I like it more... \pgfusepath{draw} \endpgfscope % % draw base external connection % \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left}{0pt}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left-\external}{0pt}} \pgfusepath{draw} % % Drawing lower connections % \pgfscope \pgf@circ@count@a=\numdown\relax \pgfmathloop% \ifnum\pgf@circ@count@a>0 \advance\pgf@circ@count@a-1\relax \pgfmathsetlength{\pgf@circ@res@other}{\the\pgf@circ@count@a*\multistep}% \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/bjt/base height 2}\pgf@circ@res@down-\pgf@circ@res@other}} \pgfpathlineto{\pgfpoint {\pgf@circ@res@right} {\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth-\pgf@circ@res@other}} \ifnum\pgf@circ@count@a=\numexpr\numdown-1\relax % draw the external pin connection \pgfpathlineto{\pgfpoint {\pgf@circ@res@right} {\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth-\pgf@circ@res@other-\external}} \fi \pgfsetroundcap % better when connecting to sloped lines \pgfusepath{draw} \ifpgf@circuit@trans@ntype % it's a NPN; draw arrow \pgfscope \pgfslopedattimetrue \pgfallowupsidedownattimetrue \pgfresetnontranslationattimefalse \pgftransformlineattime{\@@pos}{% \pgfpoint {\ctikzvalof{tripoles/bjt/base width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/bjt/base height 2}\pgf@circ@res@down-\pgf@circ@res@other}% }{\pgfpoint {\pgf@circ@res@right}% {\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth-\pgf@circ@res@other}% } \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}} \endpgfscope \fi \repeatpgfmathloop \endpgfscope } % \pgf@sh@s@ contains all the code for the shape % and is executed just before a node is drawn. \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@bjt#1\endcsname{% % Start with the maximum collector number and go backwards. \pgf@circ@count@a=\numC\relax \pgfmathloop% \ifnum\pgf@circ@count@a>0 % we will create two anchors per pin: the "normal one" like `pin 1` for the % electrical contact, and the "border one" like `bpin 1` for labels. % they will coincide if `external pins width` is set to 0. \expandafter\xdef\csname pgf@anchor@bjt#1@C\the\pgf@circ@count@a\endcsname{% \noexpand\pgf@circ@bjt@C@anchor{\the\pgf@circ@count@a}% } \advance\pgf@circ@count@a by -1\relax% \repeatpgfmathloop% % and emitters \pgf@circ@count@a=\numE\relax \pgfmathloop% \ifnum\pgf@circ@count@a>0 % we will create two anchors per pin: the "normal one" like `pin 1` for the % electrical contact, and the "border one" like `bpin 1` for labels. % they will coincide if `external pins width` is set to 0. \expandafter\xdef\csname pgf@anchor@bjt#1@E\the\pgf@circ@count@a\endcsname{% \noexpand\pgf@circ@bjt@E@anchor{\the\pgf@circ@count@a}% } \advance\pgf@circ@count@a by -1\relax% \repeatpgfmathloop% }% } } \declarebjt{npn} \declarebjt{pnp} % end of multi-bjts \long\def\declareigbt#1{ \pgfcircdeclaretransistor{#1}{ \anchor{inner up}{ \northeast \pgf@y=\ctikzvalof{tripoles/#1/gate height}\pgf@y } \anchor{inner down}{ \northeast \pgf@y=-\ctikzvalof{tripoles/#1/gate height}\pgf@y } } { %draw upper connection \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/gate height 2}\pgf@circ@res@up}} \pgfusepath{draw} %draw thicker gate lines \pgfscope \pgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/outer base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/outer base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}} % set the normal thickness \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \edef\@@extrat{\ctikzvalof{tripoles/#1/outer base thickness}} \pgfsetlinewidth{\@@extrat\pgflinewidth} \pgfusepath{draw} \endpgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfusepath{draw} \endpgfscope %draw lower connection \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/gate height 2}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfusepath{draw} %draw arrow depending on type of transistor \pgfscope \pgfslopedattimetrue \pgfallowupsidedownattimetrue \pgfresetnontranslationattimefalse \ifpgf@circuit@trans@arrowatend \ifpgf@circuit@trans@ntype \edef\@@anchor{btip}\edef\@@pos{1.0} \else \edef\@@anchor{tip}\edef\@@pos{1.0} \fi \else \edef\@@anchor{center}\edef\@@pos{0.5} \fi \ifpgf@circuit@trans@ntype \pgftransformlineattime{\@@pos}{% \pgfpoint% {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/#1/gate height 2}\pgf@circ@res@down}% }{% \pgfpoint{\pgf@circ@res@right}% {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@down}% } \else \pgftransformlineattime{\@@pos}{% \pgfpoint{\pgf@circ@res@right}% {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@up}% }{% \pgfpoint{\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/#1/gate height 2}\pgf@circ@res@up}% } \fi \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}} \endpgfscope %draw gate \ifpgf@circuit@trans@ntype \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}% {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}} \else \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}% {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@up}} \fi \pgfusepath{draw} } } \declareigbt{pigbt} \declareigbt{nigbt} \declareigbt{Lnigbt} \declareigbt{Lpigbt} \pgfcircdeclaretransistor{nmos}{ \anchor{inner up}{ \northeast \pgf@y=\ctikzvalof{tripoles/nmos/gate height}\pgf@y } \anchor{inner down}{ \northeast \pgf@y=-\ctikzvalof{tripoles/nmos/gate height}\pgf@y } }{% \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/nmos/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@up}} \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/nmos/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfusepath{draw} \pgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/nmos/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/nmos/base height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/nmos/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/nmos/base height}\pgf@circ@res@down}} \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/nmos/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/nmos/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@down}} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfusepath{draw} \endpgfscope \ifpgf@circuit@mos@arrows \pgfscope \ifpgf@circuit@trans@arrowatend \pgftransformshift{\pgfpoint {\pgf@circ@res@right}% {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@down}% } \pgfnode{trarrow}{btip}{}{}{\pgfusepath{stroke}} \else \pgfslopedattimetrue \pgfallowupsidedownattimetrue \pgfresetnontranslationattimefalse \pgftransformlineattime{\ctikzvalof{tripoles/nmos/arrow pos}}{% \pgfpoint% {\ctikzvalof{tripoles/nmos/gate width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@down}% }{% \pgfpoint {\pgf@circ@res@right}% {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@down}% } \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}} \fi \endpgfscope \fi \ifpgf@circuit@bpt@drawgate \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/nmos/gate width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}} \pgfusepath{draw} \fi \ifpgf@circuit@bpt@drawbulk % added by Burak Kelleci \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/nmos/base width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth} {\pgf@circ@res@up+\pgf@circ@res@down}} \pgfusepath{draw} \fi } \pgfcircdeclaretransistor{pmos}{ \anchor{inner up}{ \northeast \pgf@y=\ctikzvalof{tripoles/pmos/gate height}\pgf@y } \anchor{inner down}{ \northeast \pgf@y=-\ctikzvalof{tripoles/pmos/gate height}\pgf@y } }{% \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/pmos/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}} \pgfusepath{draw} \ifpgf@circuit@mos@arrows \pgfscope \ifpgf@circuit@trans@arrowatend \pgftransformshift{\pgfpoint {\ctikzvalof{tripoles/pmos/base width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}% } \pgftransformrotate{180} \pgfnode{trarrow}{tip}{}{}{\pgfusepath{stroke}} \else \pgfslopedattimetrue \pgfallowupsidedownattimetrue \pgfresetnontranslationattimefalse \pgftransformlineattime{\ctikzvalof{tripoles/pmos/arrow pos}}{% \pgfpoint% {\pgf@circ@res@right}% {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}% }{% \pgfpoint {\ctikzvalof{tripoles/pmos/gate width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}% } \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}} \fi \endpgfscope \fi \pgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/pmos/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/pmos/base height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/pmos/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/pmos/base height}\pgf@circ@res@down}} \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/pmos/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/pmos/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@down}} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfusepath{draw} \endpgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/pmos/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfusepath{draw} \ifpgf@circuit@bpt@drawgate \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/pmos/gate width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}} \pgfusepath{draw} \fi \ifpgf@circuit@bpt@drawbulk % added by Burak Kelleci \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/pmos/base width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth} {\pgf@circ@res@up+\pgf@circ@res@down}} \pgfusepath{draw} \fi \ifpgf@circuit@pmos@nocircle\else % we are not scaling the circle with the MOS --- I think it's better to have it % coherent with the poles/nodes of the rest of the circuit. \pgfpathcircle{\pgfpoint {\ctikzvalof{tripoles/pmos/gate width}\pgf@circ@res@left - \ctikzvalof{nodes width}*\pgf@circ@Rlen} {\pgf@circ@res@up+\pgf@circ@res@down}}{\ctikzvalof{nodes width}*\pgf@circ@Rlen} \ifpgf@circuit@pmos@emptycircle \pgfsetfillcolor{white} \fi \pgfusepath{draw,fill} \fi } %% HEMT FET Transistor \pgfcircdeclaretransistor{hemt}{ \anchor{inner up}{ \northeast \pgf@y=\ctikzvalof{tripoles/hemt/gate height}\pgf@y } \anchor{inner down}{ \northeast \pgf@y=-\ctikzvalof{tripoles/hemt/gate height}\pgf@y } }{% \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/hemt/gate height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/hemt/gate height}\pgf@circ@res@up}} \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/hemt/gate height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/hemt/gate height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfusepath{draw} \pgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/hemt/base height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/hemt/base height}\pgf@circ@res@down}} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfusepath{draw} \endpgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}} \pgfusepath{draw} } \long\def\drawfetcore#1{ \pgftransformationadjustments %top connection \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@up}} \pgfusepath{draw} \pgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}} \ifpgf@circuit@trans@depletiontype \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}} \else \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up*0.45}} \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up*0.25}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down*0.25}} \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/nfet/base height}\pgf@circ@res@down*0.45}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}} \fi \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfusepath{draw} \endpgfscope %Bulk connection line \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth} {\pgf@circ@res@up+\pgf@circ@res@down}} %bottom connection \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfusepath{draw} %draw thick gate line \pgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfusepath{draw} \endpgfscope % arrows \pgfscope \pgfslopedattimetrue \pgfallowupsidedownattimetrue \pgfresetnontranslationattimefalse \ifpgf@circuit@trans@arrowatend \ifpgf@circuit@trans@ntype \edef\@@anchor{tip} \edef\@@pos{1.0} \else \edef\@@anchor{btip} \edef\@@pos{0.0} \fi \else \edef\@@anchor{center}\edef\@@pos{0.6} \fi \pgftransformlineattime{\@@pos}{% \pgfpoint {\pgf@circ@res@right}% {\pgf@circ@res@up+\pgf@circ@res@down}% }{% \pgfpoint% {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}% {\pgf@circ@res@up+\pgf@circ@res@down}% } \ifpgf@circuit@trans@ntype \else \pgftransformrotate{180} \fi \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}} \endpgfscope % GATE CONNECTION \ifpgf@circuit@bpt@drawgate \ifpgf@circuit@trans@ntype \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}} \else \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left} {-\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{-\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}} \fi \pgfusepath{draw} \fi } \long\def\pgfdeclaretransistorwrapperaddbulk#1#2#3 {\pgfcircdeclaretransistor{#1}{ \anchor{bulk}{\left\pgf@x=0pt} \anchor{B}{\left\pgf@x=0pt}%override Base anchor from npn&igbt \anchor{inner up}{ \northeast \pgf@y=\ctikzvalof{tripoles/#1/gate height}\pgf@y } \anchor{inner down}{ \northeast \pgf@y=-\ctikzvalof{tripoles/#1/gate height}\pgf@y } #2 } {#3} } \pgfdeclaretransistorwrapperaddbulk{nfet}{}{% \pgf@circuit@trans@depletiontypefalse \drawfetcore{nfet} } \pgfdeclaretransistorwrapperaddbulk{pfet}{}{% \pgf@circuit@trans@depletiontypefalse \drawfetcore{pfet} } % N-CHANNEL IGFET ENHANCEMENT TYPE \pgfdeclaretransistorwrapperaddbulk{nigfete}{}{% \pgf@circuit@trans@depletiontypefalse \drawfetcore{nigfete} % SOURCE CONNECTION \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} \pgfusepath{draw} % SOLDER DOT at source-bulk connection \ifpgf@circuit@fet@solderdot \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{ \ctikzvalof{tripoles/nigfete/gate height}\pgf@circ@res@down}} \pgfnode{circ}{center}{}{}{} \endpgfscope{} \fi } % N-CHANNEL IGFET ENHANCEMENT TYPE with Bulk connector \pgfdeclaretransistorwrapperaddbulk{nigfetebulk}{}{% \pgf@circuit@trans@depletiontypefalse \drawfetcore{nigfetebulk} % SOLDER DOT at source-bulk connection \ifpgf@circuit@fet@solderdot \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{ \ctikzvalof{tripoles/nigfetebulk/gate height}\pgf@circ@res@down}} \pgfnode{circ}{center}{}{}{} \endpgfscope{} \fi } % N-CHANNEL IGFET DEPLETION TYPE \pgfdeclaretransistorwrapperaddbulk{nigfetd}{}{% \pgf@circuit@trans@depletiontypetrue \drawfetcore{nigfetd} % SOURCE CONNECTION \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} \pgfusepath{draw} % SOLDER DOT at source-bulk connection \ifpgf@circuit@fet@solderdot \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{ \ctikzvalof{tripoles/nigfete/gate height}\pgf@circ@res@down}} \pgfnode{circ}{center}{}{}{} \endpgfscope{} \fi } % P-CHANNEL IGFET ENHANCEMENT TYPE \pgfdeclaretransistorwrapperaddbulk{pigfete}{}{% \pgf@circuit@trans@depletiontypefalse \drawfetcore{pigfete} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % SOURCE CONNECTION \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} \pgfusepath{draw} % SOLDER DOT at source-bulk connection \ifpgf@circuit@fet@solderdot \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{ \ctikzvalof{tripoles/pigfete/gate height}\pgf@circ@res@up}} \pgfnode{circ}{center}{}{}{} \endpgfscope \fi } % P-CHANNEL IGFET ENHANCEMENT TYPE with bulk connector \pgfdeclaretransistorwrapperaddbulk{pigfetebulk}{}{% \pgf@circuit@trans@depletiontypefalse \drawfetcore{pigfetebulk} } % P-CHANNEL IGFET DEPLETION TYPE \pgfdeclaretransistorwrapperaddbulk{pigfetd}{}{% \pgf@circuit@trans@depletiontypetrue \drawfetcore{pigfetd} % SOURCE CONNECTION \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} \pgfusepath{draw} % SOLDER DOT at source-bulk connection \ifpgf@circuit@fet@solderdot \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{ \ctikzvalof{tripoles/nigfete/gate height}\pgf@circ@res@up}} \pgfnode{circ}{center}{}{}{} \endpgfscope{} \fi } \pgfcircdeclaretransistor{njfet}{ \anchor{inner up}{ \northeast \pgf@y=\ctikzvalof{tripoles/njfet/gate height 2}\pgf@y } \anchor{inner down}{ \northeast \pgf@y=-\ctikzvalof{tripoles/njfet/gate height 2}\pgf@y } }{% \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@up}} \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfusepath{draw} \pgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/njfet/gate height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/njfet/gate height}\pgf@circ@res@down}} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfusepath{draw} \endpgfscope % arrow \pgfscope \pgfslopedattimetrue \pgfallowupsidedownattimetrue \pgfresetnontranslationattimefalse \ifpgf@circuit@trans@arrowatend \edef\@@anchor{tip}\edef\@@pos{1.0} \else \edef\@@anchor{center}\edef\@@pos{0.6} \fi \pgftransformlineattime{\@@pos}{% \pgfpoint{\pgf@circ@res@left}% {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}% }{% \pgfpoint {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}% } \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}} \endpgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth} {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}} \pgfusepath{draw} } \pgfcircdeclaretransistor{pjfet}{ \anchor{inner up}{ \northeast \pgf@y=\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@y } \anchor{inner down}{ \northeast \pgf@y=-\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@y } }{% \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}} \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfusepath{draw} \pgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/pjfet/gate height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/pjfet/gate height}\pgf@circ@res@down}} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfusepath{draw} \endpgfscope \pgfscope \pgfslopedattimetrue \pgfallowupsidedownattimetrue \pgfresetnontranslationattimefalse \ifpgf@circuit@trans@arrowatend \edef\@@anchor{btip}\edef\@@pos{1.0} \else \edef\@@anchor{center}\edef\@@pos{0.4} \fi \pgftransformlineattime{\@@pos}{% \pgfpoint% {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left}% {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}% }{% \pgfpoint{\pgf@circ@res@left}% {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}% } \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}} \endpgfscope \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left} {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth} {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}} \pgfusepath{draw} } \pgfdeclaretransistorwrapperaddbulk{isfet}{}{% \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}} % DRAIN CONNECTION \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/isfet/gate height}\pgf@circ@res@up}} % DRAIN \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/isfet/gate height}\pgf@circ@res@up}} \pgfusepath{draw} % GATE, DEPLETION TYPE \pgfscope %% added \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/isfet/base height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/isfet/base height}\pgf@circ@res@down}} \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} %% added \pgfusepath{draw} %% added \endpgfscope %% added % BULK \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left} {\pgf@circ@res@up+\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+.5\pgflinewidth} {\pgf@circ@res@up+\pgf@circ@res@down}} % SOURCE \pgfpathmoveto{\pgfpoint {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left} {\ctikzvalof{tripoles/isfet/gate height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/isfet/gate height}\pgf@circ@res@down}} % SOURCE CONNECTION \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}} \pgfusepath{draw} % SOLDER DOT at source-bulk connection \ifpgf@circuit@fet@solderdot \pgfscope \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{ \ctikzvalof{tripoles/nigfete/gate height}\pgf@circ@res@down}} \pgfnode{circ}{center}{}{}{} \endpgfscope{} \fi % ARROW \pgfscope \pgfslopedattimetrue \pgfallowupsidedownattimetrue \pgfresetnontranslationattimefalse \ifpgf@circuit@trans@arrowatend \edef\@@anchor{tip}\edef\@@pos{1.0} \else \edef\@@anchor{center}\edef\@@pos{0.6} \fi \pgftransformlineattime{\@@pos}{% \pgfpoint {\pgf@circ@res@right}% {\pgf@circ@res@up+\pgf@circ@res@down}% }{% \pgfpoint% {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left}% {\pgf@circ@res@up+\pgf@circ@res@down}% } \pgfnode{trarrow}{\@@anchor}{}{}{\pgfusepath{stroke}} \endpgfscope \pgfusepath{draw} % Wavy lines \pgfscope \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tripoles/isfet/waves x sep}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/waves y sep}\pgf@circ@res@up}} \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfusepath{draw} \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tripoles/isfet/waves x sep}\pgf@circ@res@up}{0cm}} \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfusepath{draw} \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tripoles/isfet/waves x sep}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/waves y sep}\pgf@circ@res@up}} \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}} \pgfusepath{draw} \endpgfscope } % end of transistors %%%%%%%%%%%%% %% Switches %%%%%%%%%%%%% \pgfcircdeclarebipole{ \anchor{out 1}{ \northeast \pgf@y=0cm } \anchor{out 2}{ \northeast \pgf@y=.8\pgf@y } } {\ctikzvalof{tripoles/toggleswitch/height 2}} {toggleswitch} {\ctikzvalof{tripoles/toggleswitch/height}} {\ctikzvalof{tripoles/toggleswitch/width}} { \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@left}{0pt}} \pgfusepath{draw} \pgfscope \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@left}{0pt}} \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{.5\pgf@circ@res@up}} \pgfusepath{draw} \endpgfscope \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{0}} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.8\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.8\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.15\pgf@circ@res@up}} \pgfusepath{draw} \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@left}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}} \pgfusepath{draw} \pgfsetdash{{.08\pgf@circ@res@up}{.04\pgf@circ@res@up}{.7\pgf@circ@res@up}{.04\pgf@circ@res@up}{.8\pgf@circ@res@up}}{0cm} \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0}{.8\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@left}{.6\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0}{.4\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0}{.2\pgf@circ@res@up}} \pgfusepath{draw} \pgfsetdash{}{0cm} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% operational and instrumentation amplifiers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfdeclareshape{op amp} { \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/op amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \savedanchor\left{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@y=0pt } \anchor{south}{ \northwest \pgf@y=-\pgf@y \pgf@x=0pt } \anchor{north}{ \northwest \pgf@x=0pt } \savedanchor\left{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@y=0pt } \savedanchor\inOneFixed{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/op amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/op amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{in up}{ \inOneFixed } \anchor{in down}{ \inOneFixed \pgf@y=-\pgf@y } \savedanchor\inOne{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/op amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/op amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi } \anchor{-}{ \inOne } \anchor{+}{ \inOne \pgf@y=-\pgf@y } \savedanchor\up{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/op amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@circ@res@up = \pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfpointlineattime{ \ctikzvalof{tripoles/op amp/up pos}}{ \pgfpoint{ \ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left} {\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@right}{0pt}} } \anchor{up}{ \up } \anchor{down}{ \up \pgf@y=-\pgf@y } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \left } \anchor{east}{ \left \pgf@x=-\pgf@x } % support for border anchors \savedanchor\leftedge{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@x = \ctikzvalof{tripoles/op amp/port width}\pgf@x \pgf@y=0pt } \anchor{leftedge}{\leftedge} \anchor{rightedge}{\leftedge \pgf@x =-\pgf@x } \anchor{bin up}{ \inOneFixed \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bin down}{ \inOneFixed \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b-}{ \inOne \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b+}{ \inOne \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bout}{ \leftedge \pgf@y=0pt \pgf@x=-\pgf@x } % end border anchors \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \anchor{text}{ \ifpgf@circ@center@text \pgf@x=\dimexpr -.6\wd\pgfnodeparttextbox\relax \else \leftedge \pgfmathsetlength{\pgf@x}{\pgf@x + \ctikzvalof{left text distance}} \fi \pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgf@circ@scaled@Rlen=\scaledRlen % Triangle \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathclose \pgf@circ@draworfill \endpgfscope % Negative input terminal \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@up}} \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/op amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@plus\else\pgf@circ@ampli@minus\fi} % Positive input terminal \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@down}} \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/op amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@minus\else\pgf@circ@ampli@plus\fi} % Output terminal \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@right}{0pt}} \pgfsetrectcap \pgfusepath{draw} } } % Op amp shape as in european standard EN 60617 \pgfdeclareshape{en amp} { \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/en amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \savedanchor\left{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@y=0pt } \anchor{south}{ \northwest \pgf@y=-\pgf@y \pgf@x=0pt } \anchor{north}{ \northwest \pgf@x=0pt } \savedanchor\inOneFixed{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/en amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/en amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{in up}{ \inOneFixed } \anchor{in down}{ \inOneFixed \pgf@y=-\pgf@y } \savedanchor\inOne{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/en amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/en amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi } \anchor{-}{ \inOne } \anchor{+}{ \inOne \pgf@y=-\pgf@y } \anchor{up}{ \northwest \pgf@x=0pt } \anchor{down}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \left } \anchor{east}{ \left \pgf@x=-\pgf@x } % support for border anchors \savedanchor\leftedge{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@x = \ctikzvalof{tripoles/en amp/port width}\pgf@x \pgf@y=0pt } \anchor{leftedge}{\leftedge} \anchor{rightedge}{\leftedge \pgf@x =-\pgf@x } \anchor{bin up}{ \inOneFixed \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bin down}{ \inOneFixed \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b-}{ \inOne \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b+}{ \inOne \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bout}{ \leftedge \pgf@y=0pt \pgf@x=-\pgf@x } % end border anchors \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \anchor{text}{ \ifpgf@circ@center@text \pgf@x=\dimexpr -.6\wd\pgfnodeparttextbox\relax \else \leftedge \pgfmathsetlength{\pgf@x}{\pgf@x + \ctikzvalof{left text distance}} \fi \pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgf@circ@scaled@Rlen=\scaledRlen \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@right}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@right}{\pgf@circ@res@down}} \pgfpathclose \pgf@circ@draworfill \endpgfscope \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}} \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/en amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@plus\else\pgf@circ@ampli@minus\fi} \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}} \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/en amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@minus\else\pgf@circ@ampli@plus\fi} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}} \pgfsetrectcap \pgfusepath{draw} \pgftext[top, y=-.5ex, at=\pgfpoint{0pt}{\pgf@circ@res@up}]{\hbox{\ctikzvalof{tripoles/en amp/font2}\ctikzvalof{tripoles/en amp/text}}} % \pgftext[top, y=-.5ex, at=\pgfpoint{0pt}{\pgf@circ@res@up}]{\ctikzvalof{tripoles/en amp/font2}$\mathstrut{\triangleright}\,\mathrm{A}$} } } % Fully differential output op amp % Contributed by Kristofer M. Monisit \pgfdeclareshape{fd op amp} { \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd op amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \savedanchor\outline{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd op amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \ifpgf@circuit@oa@oplusup\else\pgf@y=-\pgf@y\fi } \anchor{south}{ \northwest \pgf@y=-\pgf@y\pgf@x=0pt\relax } \anchor{north}{ \northwest\pgf@x=0pt\relax } \savedanchor\left{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@y=0pt } \savedanchor\inOneFixed{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd op amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/fd op amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{in up}{ \inOneFixed } \anchor{in down}{ \inOneFixed \pgf@y=-\pgf@y } \savedanchor\inOne{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd op amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/fd op amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi } \anchor{-}{ \inOne } \anchor{+}{ \inOne \pgf@y=-\pgf@y } \savedanchor\up{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd op amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@circ@res@up = \pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfpointlineattime{ \ctikzvalof{tripoles/fd op amp/up pos}}{ \pgfpoint{ \ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left} {\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@right}{0pt}} } \anchor{up}{ \up } \anchor{down}{ \up \pgf@y=-\pgf@y } \anchor{out up}{ \northwest \pgf@y=\ctikzvalof{tripoles/fd op amp/output height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x } \anchor{out down}{ \northwest \pgf@y=-\ctikzvalof{tripoles/fd op amp/output height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x } \anchor{out +}{ \outline \pgf@y=\ctikzvalof{tripoles/fd op amp/output height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x } \anchor{out -}{ \outline \pgf@y=-\ctikzvalof{tripoles/fd op amp/output height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x } % support for border anchors \savedanchor\leftedge{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@x = \ctikzvalof{tripoles/fd op amp/port width}\pgf@x \pgf@y=0pt } \anchor{leftedge}{\leftedge} \anchor{rightedge}{\leftedge \pgf@x =-\pgf@x } \anchor{bin up}{ \inOneFixed \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bin down}{ \inOneFixed \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b-}{ \inOne \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b+}{ \inOne \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bout}{ \leftedge \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{bout +}{ \outline \pgf@xa=\pgf@x\pgf@ya=\pgf@y \pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}} {\pgfpoint{\pgf@xa}{0pt}} {\pgfpoint{0pt}{\pgf@ya}} } \anchor{bout -}{ \outline \pgf@xa=\pgf@x\pgf@ya=\pgf@y \pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}} {\pgfpoint{\pgf@xa}{0pt}} {\pgfpoint{0pt}{\pgf@ya}} \pgf@y=-\pgf@y } \anchor{bout up}{ \northwest \pgf@xa=\pgf@x\pgf@ya=\pgf@y \pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}} {\pgfpoint{\pgf@xa}{0pt}} {\pgfpoint{0pt}{\pgf@ya}} } \anchor{bout down}{ \northwest \pgf@xa=\pgf@x\pgf@ya=\pgf@y \pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}} {\pgfpoint{\pgf@xa}{0pt}} {\pgfpoint{0pt}{\pgf@ya}} \pgf@y=-\pgf@y } % end border anchors \anchor{west}{ \left } \anchor{east}{ \left \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x } \anchor{out}{% should not be used \left \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x \pgf@y=-\pgf@y } \anchor{text}{ \ifpgf@circ@center@text \pgf@x=\dimexpr -.6\wd\pgfnodeparttextbox\relax \else \leftedge \pgfmathsetlength{\pgf@x}{\pgf@x + \ctikzvalof{left text distance}} \fi \pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgf@circ@scaled@Rlen=\scaledRlen % Triangle % Includes output terminals in the traingular shape % to ensure that diagonal joins are properly displayed % we first draw the main triangle and the leads with normal thickness, % and the redraw the main triangle with the component shape \pgfscope % shift origin a bit to ease calculations \pgftransformxshift{\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@step % Initial point (right vertex) \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} % Negative output terminal \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{\pgf@circ@res@up}}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\ctikzvalof{tripoles/fd op amp/output height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{\pgf@circ@res@up}}} % Top vertex \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} % Bottom vertex \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} % Positive output terminal \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{\pgf@circ@res@down}}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\ctikzvalof{tripoles/fd op amp/output height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{\pgf@circ@res@down}}} % Right vertex \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}} \pgfpathclose \pgfusepath{stroke} % ok, now we'll redraw the triangle with the class specific % thickness and optionally fill \pgfscope \pgf@circ@setlinewidth{quadpoles}{\pgflinewidth} % Initial point (right vertex) \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} % Top vertex \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} % Bottom vertex \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathclose \pgf@circ@draworfill \endpgfscope % thick and fill \endpgfscope % shift % Negative input terminal \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@up}} \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@plus\else\pgf@circ@ampli@minus\fi} % Positive input terminal \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@down}} \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@minus\else\pgf@circ@ampli@plus\fi} % Negative output terminal label \pgftext[right, bottom, x=3pt, y=1pt, at=\pgfpoint{0pt}{0.425\pgf@circ@res@down}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf@circuit@oa@oplusup\pgf@circ@ampli@minus\else\pgf@circ@ampli@plus\fi} % Positive output terminal label \pgftext[right, top, x=3pt, y=-1pt, at=\pgfpoint{0pt}{0.425\pgf@circ@res@up}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf@circuit@oa@oplusup\pgf@circ@ampli@plus\else\pgf@circ@ampli@minus\fi} \pgfsetrectcap \pgfusepath{draw} } } % Instrumentation amplifier with differential output \pgfdeclareshape{fd inst amp} { \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} % when tikz calls the anchor it wants the relative position in the lengths % \pgf@x \pgf@y % \pgfpoint* functions set that variables % anchors are visible outside and run on use \anchor{center}{\pgfpointorigin} % savedanchors are internals and run on node creation (not use) % bounding-box top left \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{nw}{ \northwest } \anchor{south}{ \northwest \pgf@y=-\pgf@y\pgf@x=0pt\relax } \anchor{north}{ \northwest\pgf@x=0pt\relax } \savedanchor\left{% \pgf@y=0pt } \anchor{leftedge} {\left \pgf@x = \ctikzvalof{tripoles/fd inst amp/port width}\pgf@x } \savedanchor\inOneFixed{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{in up}{ \inOneFixed } \anchor{in down}{ \inOneFixed \pgf@y=-\pgf@y } \savedanchor\inOne{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi } \anchor{-}{ \inOne } \anchor{+}{ \inOne \pgf@y=-\pgf@y } \savedanchor\up{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@circ@res@up = \pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfpointlineattime{ \ctikzvalof{tripoles/fd inst amp/up pos}}{ \pgfpoint{ \ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left} {\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf@circ@res@up}} } \anchor{up}{ \up } \anchor{down}{ \up \pgf@y=-\pgf@y } % reference voltage input anchors. \savedanchor\refv{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@circ@res@up = \pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfpointlineattime{ \ctikzvalof{tripoles/fd inst amp/refv pos}}{ \pgfpoint{ \ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left} {\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf@circ@res@up}} } % we need both because they are normally drawn under the amp, and if you % mirror it vertically you need them \anchor{refv up}{ \refv } \anchor{refv down}{ \refv \pgf@y=-\pgf@y } \savedanchor\outport{ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=-.5\pgf@x \ifpgf@circuit@oa@oplusup\else\pgf@y=-\pgf@y\fi } \anchor{out}{ \outport \pgf@y=0pt } \anchor{out +}{ \outport } \anchor{out -}{ \outport \pgf@y=-\pgf@y } \savedanchor\outportfixed{ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=-.5\pgf@x } \anchor{out up}{ \outportfixed } \anchor{out down}{ \outportfixed \pgf@y=-\pgf@y } % support for border anchors \savedanchor\leftedge{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@x = \ctikzvalof{tripoles/fd inst amp/port width}\pgf@x \pgf@y=0pt } \anchor{leftedge}{\leftedge} \anchor{rightedge}{\leftedge \pgf@x =-\pgf@x } \anchor{bin up}{ \inOneFixed \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bin down}{ \inOneFixed \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b-}{ \inOne \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b+}{ \inOne \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bout}{ \leftedge \pgf@x=-\pgf@x \pgf@y=0pt } \anchor{bout +}{ \outport \pgf@ya=\pgf@y \leftedge \pgf@x=-\pgf@x \pgf@y=\pgf@ya } \anchor{bout -}{ \outport \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@x=-\pgf@x \pgf@y=\pgf@ya } \anchor{bout up}{ \outportfixed \pgf@ya=\pgf@y \leftedge \pgf@x=-\pgf@x \pgf@y=\pgf@ya } \anchor{bout down}{ \outportfixed \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@x=-\pgf@x \pgf@y=\pgf@ya } % end border anchors % \anchor{west}{ \left } \anchor{east}{ \left \pgf@x=-\pgf@x } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \anchor{text}{ \ifpgf@circ@center@text \pgf@x=\dimexpr -.6\wd\pgfnodeparttextbox\relax \else \leftedge \pgfmathsetlength{\pgf@x}{\pgf@x + \ctikzvalof{left text distance}} \fi \pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax } % let's start drawing the component \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} % \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgf@circ@scaled@Rlen=\scaledRlen % main component, normally in thicker lines \pgfscope \newdimen\pgf@circ@res@right@double \pgf@circ@res@right@double=2\pgf@circ@res@right \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@step %first point (near output) \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right@double}{0}} %from the exit to the top (short side)... (note that the .6 must be copied in \up and \refv anchors \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf@circ@res@up}} % and then to the input "front up", "down", to the output short side "down" \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf@circ@res@down}} % ...and close \pgfpathclose \pgf@circ@draworfill \endpgfscope % input terminal up \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@up}} % \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@up}} % \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/fd inst amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@plus\else\pgf@circ@ampli@minus\fi} % input terminal down \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@down}} % \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@down}} \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/fd inst amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@minus\else\pgf@circ@ampli@plus\fi} % output leads down and up \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@down}} % \pgftext[right, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/fd inst amp/font}\ifpgf@circuit@oa@oplusup$-\;$\else$+\;$\fi} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@up}} % \pgftext[right, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/fd inst amp/font}\ifpgf@circuit@oa@oplusup$+\;$\else$-\;$\fi} % \pgfsetrectcap \pgfusepath{draw} } } % Transconductance amplifier (Transkonduktanzverstärker) \pgfdeclareshape{gm amp} { \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/gm amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/gm amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{south}{ \northwest \pgf@y=-\pgf@y } \anchor{north}{ \northwest } \savedanchor\left{% \pgf@y=0pt } \anchor{leftedge} {\left \pgf@x = \ctikzvalof{tripoles/op amp/port width}\pgf@x } \savedanchor\inOneFixed{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/gm amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/gm amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/gm amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{in up}{ \inOneFixed } \anchor{in down}{ \inOneFixed \pgf@y=-\pgf@y } \savedanchor\inOne{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/gm amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/gm amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/gm amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi } \anchor{-}{ \inOne } \anchor{+}{ \inOne \pgf@y=-\pgf@y } \savedanchor\up{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/gm amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/gm amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@circ@res@up = \pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfpointlineattime{ \ctikzvalof{tripoles/gm amp/up pos}}{ \pgfpoint{ \ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left} {\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/gm amp/height 2}\pgf@circ@res@up}} } \anchor{up}{ \up } \anchor{down}{ \up \pgf@y=-\pgf@y } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } % support for border anchors \savedanchor\leftedge{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/gm amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@x = \ctikzvalof{tripoles/gm amp/port width}\pgf@x \pgf@y=0pt } \anchor{leftedge}{\leftedge} \anchor{rightedge}{\leftedge \pgf@x =-\pgf@x } \anchor{bin up}{ \inOneFixed \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bin down}{ \inOneFixed \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b-}{ \inOne \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b+}{ \inOne \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bout}{ \leftedge \pgf@y=0pt \pgf@x=-\pgf@x } % end border anchors \anchor{west}{ \left } \anchor{east}{ \left \pgf@x=-\pgf@x } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \anchor{text}{ \ifpgf@circ@center@text \pgf@x=\dimexpr -.6\wd\pgfnodeparttextbox\relax \else \leftedge \pgfmathsetlength{\pgf@x}{\pgf@x + \ctikzvalof{left text distance}} \fi \pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgf@circ@scaled@Rlen=\scaledRlen \pgfscope \newdimen\pgf@circ@res@right@double \pgf@circ@res@right@double=2\pgf@circ@res@right \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@step %Umrandung: \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@right@double}{0}} %geändert startpunkt neu am ausgangsstrich \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/gm amp/height 2}\pgf@circ@res@up}}%vom Ausgang nach oben \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} %neu ecke links oben nach rechts oben \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} %bei deneigängen runter \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/gm amp/height 2}\pgf@circ@res@down}}%ecke links unten nach rechts unten \pgfpathclose \pgf@circ@draworfill \endpgfscope \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@up}} \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/gm amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@plus\else\pgf@circ@ampli@minus\fi} \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@down}} \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/gm amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@minus\else\pgf@circ@ampli@plus\fi} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@right}{0pt}} % \pgfsetrectcap \pgfusepath{draw} } } % Instrumentation amplifier \pgfdeclareshape{inst amp} { \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} % when tikz calls the anchor it wants the relative position in the lengths % \pgf@x \pgf@y % \pgfpoint* functions set that variables % anchors are visible outside and run on use \anchor{center}{\pgfpointorigin} % savedanchors are internals and run on node creation (not use) % bounding-box top left \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{nw}{ \northwest } \anchor{south}{ \northwest \pgf@y=-\pgf@y } \anchor{north}{ \northwest } \savedanchor\left{% \pgf@y=0pt } \anchor{leftedge} {\left \pgf@x = \ctikzvalof{tripoles/op amp/port width}\pgf@x } \savedanchor\inOneFixed{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/inst amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{in up}{ \inOneFixed } \anchor{in down}{ \inOneFixed \pgf@y=-\pgf@y } \savedanchor\inOne{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/inst amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi } \anchor{-}{ \inOne } \anchor{+}{ \inOne \pgf@y=-\pgf@y } \savedanchor\up{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@circ@res@up = \pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfpointlineattime{ \ctikzvalof{tripoles/inst amp/up pos}}{ \pgfpoint{ \ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left} {\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/inst amp/height 2}\pgf@circ@res@up}} } \anchor{up}{ \up } \anchor{down}{ \up \pgf@y=-\pgf@y } % reference voltage input anchors. \savedanchor\refv{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/inst amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@circ@res@up = \pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfpointlineattime{ \ctikzvalof{tripoles/inst amp/refv pos}}{ \pgfpoint{ \ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left} {\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/inst amp/height 2}\pgf@circ@res@up}} } % we need both because they are normally drawn under the amp, and if you % mirror it vertically you need them \anchor{refv up}{ \refv } \anchor{refv down}{ \refv \pgf@y=-\pgf@y } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } % support for border anchors \savedanchor\leftedge{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/inst amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@x = \ctikzvalof{tripoles/inst amp/port width}\pgf@x \pgf@y=0pt } \anchor{leftedge}{\leftedge} \anchor{rightedge}{\leftedge \pgf@x =-\pgf@x } \anchor{bin up}{ \inOneFixed \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bin down}{ \inOneFixed \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b-}{ \inOne \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b+}{ \inOne \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bout}{ \leftedge \pgf@y=0pt \pgf@x=-\pgf@x } % end border anchors \anchor{west}{ \left } \anchor{east}{ \left \pgf@x=-\pgf@x } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \anchor{text}{ \ifpgf@circ@center@text \pgf@x=\dimexpr -.6\wd\pgfnodeparttextbox\relax \else \leftedge \pgfmathsetlength{\pgf@x}{\pgf@x + \ctikzvalof{left text distance}} \fi \pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax } % let's start drawing the component \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} % \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgf@circ@scaled@Rlen=\scaledRlen % main component, normally in thicker lines \pgfscope \newdimen\pgf@circ@res@right@double \pgf@circ@res@right@double=2\pgf@circ@res@right \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@step %first point (near output) \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right@double}{0}} %from the exit to the top (short side)... (note that the .6 must be copied in \up and \refv anchors \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/inst amp/height 2}\pgf@circ@res@up}} % and then to the input "front up", "down", to the output short side "down" \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/inst amp/height 2}\pgf@circ@res@down}} % ...and close \pgfpathclose \pgf@circ@draworfill \endpgfscope % Negative input terminal \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@up}} % \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@up}} % \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/inst amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@plus\else\pgf@circ@ampli@minus\fi} % Positive input terminal \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@down}} % \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@down}} \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/inst amp/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@minus\else\pgf@circ@ampli@plus\fi} % Output terminal \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right}{0pt}} % % \pgfsetrectcap \pgfusepath{draw} } } % Instrumentation amplifier with terminals for gain resistance between inputs \pgfdeclareshape{inst amp ra} { \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} % bounding-box top left \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/inst amp ra/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{nw}{ \northwest } \anchor{south}{ \northwest \pgf@y=-\pgf@y\pgf@x=0pt\relax } \anchor{north}{ \northwest\pgf@x=0pt\relax } \savedanchor\left{% \pgf@y=0pt } \anchor{leftedge} {\left \pgf@x = \ctikzvalof{tripoles/op amp/port width}\pgf@x } % inputs (+-) \savedanchor\inOneFixed{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/inst amp ra/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/inst amp ra/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{in up}{ \inOneFixed } \anchor{in down}{ \inOneFixed \pgf@y=-\pgf@y } \savedanchor\inOne{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/inst amp ra/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/inst amp ra/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi } \anchor{-}{ \inOne } \anchor{+}{ \inOne \pgf@y=-\pgf@y } % R ampli anchors. They are by default at 20% more than R-length distance % you can change that with the `ra pos` key (use 0.5 for one-R). \savedanchor\raOneFixed{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\pgf@circ@scaled@Rlen \pgf@y=\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{ra up}{ \raOneFixed } \anchor{ra down}{ \raOneFixed \pgf@y=-\pgf@y } \savedanchor\raOne{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\pgf@circ@scaled@Rlen \pgf@y=\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi } \anchor{ra-}{ \raOne } \anchor{ra+}{ \raOne \pgf@y=-\pgf@y } % power supplies \savedanchor\up{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/inst amp ra/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@circ@res@up = \pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfpointlineattime{ \ctikzvalof{tripoles/inst amp ra/up pos}}{ \pgfpoint{ \ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left} {\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf@circ@res@up}} } \anchor{up}{ \up } \anchor{down}{ \up \pgf@y=-\pgf@y } % reference voltage input anchors. \savedanchor\refv{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/inst amp ra/height}\pgf@circ@scaled@Rlen \pgf@y=0.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen \pgf@x=0.5\pgf@x \pgf@circ@res@up = \pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfpointlineattime{ \ctikzvalof{tripoles/inst amp ra/refv pos}}{ \pgfpoint{ \ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left} {\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf@circ@res@up}} } % we need both because they are normally drawn under the amp, and if you % mirror it vertically you need them \anchor{refv up}{ \refv } \anchor{refv down}{ \refv \pgf@y=-\pgf@y } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } % support for border anchors \savedanchor\leftedge{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@x = \ctikzvalof{tripoles/inst amp ra/port width}\pgf@x \pgf@y=0pt } \anchor{leftedge}{\leftedge} \anchor{rightedge}{\leftedge \pgf@x =-\pgf@x } \anchor{bin up}{ \inOneFixed \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bin down}{ \inOneFixed \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b-}{ \inOne \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b+}{ \inOne \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bra up}{ \raOneFixed \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bra down}{ \raOneFixed \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bra-}{ \raOne \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bra+}{ \raOne \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bout}{ \leftedge \pgf@y=0pt \pgf@x=-\pgf@x } % end border anchors \anchor{west}{ \left } \anchor{east}{ \left \pgf@x=-\pgf@x } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \anchor{text}{ \ifpgf@circ@center@text \pgf@x=\dimexpr -.6\wd\pgfnodeparttextbox\relax \else \leftedge \pgfmathsetlength{\pgf@x}{\pgf@x + \ctikzvalof{left text distance}} \fi \pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax } % drawing of the component \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgf@circ@scaled@Rlen=\scaledRlen \newdimen\pgf@circ@res@right@double \pgf@circ@res@right@double=2\pgf@circ@res@right % main component, normally in thicker lines \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@step %primer punto: la linea de salida (lado componente) \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right@double}{0}} %from the exit to the top (short side)... (note that the .6 must be copied in \up anchor \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf@circ@res@up}} % and then to the input "front up", "down", to the output short side "down" \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf@circ@res@down}} % ...and close \pgfpathclose \pgf@circ@draworfill \endpgfscope % ra terminal - \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}} % \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}} % ra terminal + \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {-\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}} % \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left} {-\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}} % Negative input terminal \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@up}} % \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@up}} % \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/inst amp ra/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@plus\else\pgf@circ@ampli@minus\fi} % Positive input terminal \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@down}} % \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@down}} \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/inst amp ra/font} \ifpgf@circuit@oa@iplusup\pgf@circ@ampli@minus\else\pgf@circ@ampli@plus\fi} % Output terminal \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right}{0pt}} % % \pgfsetrectcap \pgfusepath{draw} } } % Buffer % Contributed by Danilo Piazzalunga \pgfdeclareshape{buffer} { \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{bipoles/buffer/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{bipoles/buffer/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \northwest \pgf@y=0pt } \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{north}{ \northwest \pgf@x=0pt } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \savedanchor\left{% \pgf@y=0pt } \anchor{in}{ \northwest \pgf@y=0pt } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{bin}{ \northwest \pgf@y=0pt \pgf@x=0.7\pgf@x } \anchor{bout}{ \northwest \pgf@y=0pt \pgf@x=-0.7\pgf@x } \anchor{text}{ \ifpgf@circ@center@text \pgf@x=\dimexpr -.6\wd\pgfnodeparttextbox\relax \else \northwest \pgfmathsetlength{\pgf@x}{0.7*\pgf@x + \ctikzvalof{left text distance}} \fi \pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgf@circ@scaled@Rlen=\scaledRlen \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{.7\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=.7\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathclose \pgf@circ@draworfill \endpgfscope \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}} \pgfusepath{draw} } } % plain amplifier, no symbols \pgfdeclareshape{plain amp} { \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/plain amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \northwest \pgf@y=0pt } \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{north}{ \northwest \pgf@x=0pt } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \savedanchor\left{% \pgf@y=0pt } \savedanchor\inOne{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/plain amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/plain amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi } \savedanchor\inOneFixed{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/plain amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@y=\ctikzvalof{tripoles/plain amp/input height}\pgf@y \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{-}{ \inOne } \anchor{+}{ \inOne \pgf@y=-\pgf@y } \anchor{in up}{ \inOneFixed } \anchor{in down}{ \inOneFixed \pgf@y=-\pgf@y } % support for border anchors \savedanchor\leftedge{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@x = \ctikzvalof{tripoles/plain amp/port width}\pgf@x \pgf@y=0pt } \anchor{leftedge}{\leftedge} \anchor{rightedge}{\leftedge \pgf@x =-\pgf@x } \anchor{bin up}{ \inOneFixed \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bin down}{ \inOneFixed \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b-}{ \inOne \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{b+}{ \inOne \pgf@y=-\pgf@y \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bout}{ \leftedge \pgf@y=0pt \pgf@x=-\pgf@x } % end border anchors \savedanchor\up{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/plain amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@circ@res@up = \pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfpointlineattime{ \ctikzvalof{tripoles/plain amp/up pos}}{ \pgfpoint{ \ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@left} {\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@right}{0pt}} } \anchor{up}{ \up } \anchor{down}{ \up \pgf@y=-\pgf@y } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{text}{ \ifpgf@circ@center@text \pgf@x=\dimexpr -.6\wd\pgfnodeparttextbox\relax \else \leftedge \pgfmathsetlength{\pgf@x}{\pgf@x + \ctikzvalof{left text distance}} \fi \pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathclose \pgf@circ@draworfill \endpgfscope \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/plain amp/input height}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/plain amp/input height}\pgf@circ@res@up}} \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {\ctikzvalof{tripoles/plain amp/input height}\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@left} {\ctikzvalof{tripoles/plain amp/input height}\pgf@circ@res@down}} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@right}{0pt}} \pgfusepath{draw} } } % plain amplifier, no symbols, one input \pgfdeclareshape{plain mono amp} { \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{\pgfpointorigin} \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/plain amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \northwest \pgf@y=0pt } \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{north}{ \northwest \pgf@x=0pt } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \savedanchor\left{% \pgf@y=0pt } \savedanchor\inOne{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@y=0pt\relax } \anchor{in}{ \inOne } % support for border anchors \savedanchor\leftedge{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@x = \ctikzvalof{tripoles/plain amp/port width}\pgf@x \pgf@y=0pt } \anchor{leftedge}{\leftedge} \anchor{rightedge}{\leftedge \pgf@x =-\pgf@x } \anchor{bin}{ \inOne \pgf@ya=\pgf@y \leftedge \pgf@y=\pgf@ya } \anchor{bout}{ \leftedge \pgf@y=0pt \pgf@x=-\pgf@x } % end border anchors \savedanchor\up{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/plain amp/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x \pgf@circ@res@up = \pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfpointlineattime{ \ctikzvalof{tripoles/plain amp/up pos}}{ \pgfpoint{ \ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@left} {\pgf@circ@res@up}} {\pgfpoint{\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@right}{0pt}} } \anchor{up}{ \up } \anchor{down}{ \up \pgf@y=-\pgf@y } \anchor{out}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{text}{ \ifpgf@circ@center@text \pgf@x=\dimexpr -.6\wd\pgfnodeparttextbox\relax \else \leftedge \pgfmathsetlength{\pgf@x}{\pgf@x + \ctikzvalof{left text distance}} \fi \pgf@y=\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfscope \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgftransformxshift{\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@left} \pgf@circ@res@step=\pgf@circ@res@right \advance\pgf@circ@res@step by -\pgf@circ@res@left \pgf@circ@res@step=\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} \pgfpathclose \pgf@circ@draworfill \endpgfscope \pgfpathmoveto{\pgfpoint {\pgf@circ@res@left} {0pt}} \pgfpathlineto{\pgfpoint {\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@left} {0pt}} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@right}{0pt}} \pgfusepath{draw} } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% electromechanical device (motor/generator) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfdeclareshape{elmech} { \savedmacro{\ctikzclass}{\edef\ctikzclass{electromechanicals}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \savedanchor\northwest{ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/elmech/height}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/elmech/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{center}{ \pgfpointorigin } \anchor{text}{ \pgfpointorigin \advance \pgf@x by -.5\wd\pgfnodeparttextbox \advance \pgf@y by -.5\ht\pgfnodeparttextbox } \anchor{left}{% \northwest \pgf@y=0pt } \anchor{right}{% \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{top}{ \northwest \pgf@x=0pt } \anchor{pathstart}{ \northwest \pgf@x=0pt } \anchor{pathend}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{bottom}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \northwest \pgf@y=0pt } \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{north}{ \northwest \pgf@x=0pt } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \anchorborder{% \@tempdima=\pgf@x\@tempdimb=\pgf@y \northwest\pgf@circ@res@other=-\pgf@x \pgfpointborderellipse{\pgfqpoint{\@tempdima}{\@tempdimb}}{\pgfqpoint{\pgf@circ@res@other}{\pgf@circ@res@other}} } \anchor{block north west}{\northwest\pgf@x=0.5\pgf@x} \anchor{block south west}{\northwest\pgf@x=0.5\pgf@x\pgf@y=-\pgf@y} \anchor{block north east}{\northwest\pgf@x=-0.5\pgf@x} \anchor{block south east}{\northwest\pgf@x=-0.5\pgf@x\pgf@y=-\pgf@y} \anchor{block up right}{ \northwest % remember that pgf@x is negative % center of the block is at 0.5*H+W*cos(30)/2 \pgf@y=\dimexpr0.5\pgf@y - 0.433\pgf@x\relax \pgf@x=-0.5\pgf@x } \anchor{block up left}{ \northwest % remember that pgf@x is negative % center of the block is at 0.5*H+W*cos(30)/2 \pgf@y=\dimexpr0.5\pgf@y - 0.433\pgf@x\relax \pgf@x=0.5\pgf@x } \anchor{block down right}{ \northwest % remember that pgf@x is negative % center of the block is at 0.5*H+W*cos(30)/2 \pgf@y=\dimexpr0.5\pgf@y - 0.433\pgf@x\relax \pgf@y=-\pgf@y \pgf@x=-0.5\pgf@x } \anchor{block down left}{ \northwest % remember that pgf@x is negative % center of the block is at 0.5*H+W*cos(30)/2 \pgf@y=\dimexpr0.5\pgf@y - 0.433\pgf@x\relax \pgf@y=-\pgf@y \pgf@x=0.5\pgf@x } \behindbackgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \pgf@circ@scaled@Rlen=\scaledRlen \pgf@circ@res@step=\ctikzvalof{tripoles/elmech/width}\pgf@circ@scaled@Rlen \pgf@circ@res@up=\ctikzvalof{tripoles/elmech/height}\pgf@circ@scaled@Rlen \pgfscope \pgfstartlinewidth=\pgflinewidth \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} \pgfscope % clip the bar: whole size minus the circle \pgfpathrectanglecorners{\pgfpoint{-.5\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{.5\pgf@circ@res@up}} \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step} \pgfseteorule \pgfusepath{clip} \pgfpathrectangle{\pgfpoint{-.25\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{\pgf@circ@res@up}} \pgfsetfillcolor{\ctikzvalof{color}} \pgfusepath{fill, draw} \endpgfscope \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step} \ifx\tikz@fillcolor\pgfutil@empty % set the default fill color to white \pgfsetfillcolor{white} % ...but override it if the class is defined! \pgf@circ@setifdefinedfill{draw, fill}{draw, fill} \else \pgfsetfillcolor{\tikz@fillcolor} \pgfusepath{draw, fill} \fi \endpgfscope } } %%%%%%%%%%%%%%%%%%% %% Magnetron %%%%%%%%%%%%%%%%%%% \pgfdeclareshape{magnetron} { \savedmacro{\ctikzclass}{\edef\ctikzclass{tubes}} % class of these components \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \savedanchor\northwest{ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@y=\ctikzvalof{tripoles/magnetron/width}\pgf@circ@scaled@Rlen \pgf@y=.5\pgf@y \pgf@x=-\ctikzvalof{tripoles/magnetron/width}\pgf@circ@scaled@Rlen \pgf@x=.5\pgf@x } \anchor{center}{ \pgfpointorigin } \anchor{anode}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{cathode1}{ \northwest \pgf@circ@res@step=\pgf@y \pgfmathparse{cos(105)} \pgf@x=\pgfmathresult\pgf@circ@res@step \pgfmathparse{sin(105)} \pgf@y=\pgfmathresult\pgf@circ@res@step %\pgfpointorigin %\pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@step}}%not working in a scaled tikzpicture } \anchor{cathode2}{ \northwest \pgf@circ@res@step=\pgf@y \pgfmathparse{cos(75)} \pgf@x=\pgfmathresult\pgf@circ@res@step \pgfmathparse{sin(75)} \pgf@y=\pgfmathresult\pgf@circ@res@step %\pgfpointorigin %\pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@step}}%not working in a scaled tikzpicture } \anchor{text}{ \pgfpointorigin \advance \pgf@x by -.5\wd\pgfnodeparttextbox \advance \pgf@y by -.5\ht\pgfnodeparttextbox } \anchor{left}{% \northwest \pgf@y=0pt } \anchor{right}{% \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{top}{ \northwest \pgf@x=0pt } \anchor{pathstart}{ \northwest \pgf@x=0pt } \anchor{pathend}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{bottom}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } \anchor{west}{ \northwest \pgf@y=0pt } \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } \anchor{north}{ \northwest \pgf@x=0pt } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{north east}{ \northwest \pgf@x=-\pgf@x } \anchor{north west}{ \northwest } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \backgroundpath{ \pgfsetcolor{\ctikzvalof{color}} \pgf@circ@scaled@Rlen=\scaledRlen \pgf@circ@res@step=\ctikzvalof{tripoles/magnetron/width}\pgf@circ@scaled@Rlen \northwest \pgf@circ@res@up = \pgf@y \pgf@circ@res@down = -\pgf@y \pgf@circ@res@right = -\pgf@x \pgf@circ@res@left = \pgf@x \pgfmathsetlength{\pgf@circ@res@other}{sin(15)*\pgf@circ@res@up} \pgfscope \pgfstartlinewidth=\pgflinewidth \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} %create outer circle \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@right} \pgf@circ@draworfill %create chambers \foreach \angle in {45,135,225,315}{ \pgfpathmoveto{ \pgfpointpolar{\angle}{0.6\pgf@circ@res@right}} \pgfpathlineto{ \pgfpointpolar{\angle}{\pgf@circ@res@right}} } \pgfsetroundcap \pgfusepath{draw} \pgfscope %draw connection from outside %anode \pgfsetlinewidth{\pgfstartlinewidth} \pgfpathmoveto{\pgfpoint{0\pgf@circ@res@left}{\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{0\pgf@circ@res@right}{.5\pgf@circ@res@down}} %cathodes \pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}} \pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}} \pgfsetbuttcap \pgfusepath{draw} \endpgfscope %create cathode \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{0}{.15\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}} \pgfusepath{draw} %create anode \pgfpathmoveto{\pgfpoint{0.3\pgf@circ@res@left}{.5\pgf@circ@res@down}} \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{.5\pgf@circ@res@down}} \pgfsetbuttcap \pgfusepath{draw} \endpgfscope } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Electronic tubes, submitted by J. op den Brouw %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Draw tube outline \def\pgf@circ@tubes@drawtube{% \ifdim\ctikzvalof{tubes/width}pt>\ctikzvalof{tubes/height}pt\relax \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}} \pgfutil@tempdima=\pgf@circ@res@right \advance\pgfutil@tempdima by -\pgf@circ@res@up \pgfpathlineto{\pgfpoint{\pgfutil@tempdima}{\pgf@circ@res@up}} \pgfpatharc{90}{-90}{\pgf@circ@res@up} \pgfpathlineto{\pgfpoint{-\pgfutil@tempdima}{-\pgf@circ@res@up}} \pgfpatharc{270}{90}{\pgf@circ@res@up} \else \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{0pt}} \pgfutil@tempdima=\pgf@circ@res@up \advance\pgfutil@tempdima by -\pgf@circ@res@right \pgfpathlineto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}} \pgfpatharc{180}{0}{\pgf@circ@res@right} \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfutil@tempdima}} \pgfpatharc{180}{0}{-\pgf@circ@res@right} \fi \pgfpathclose } %% The diode (tube), triode, tetrode and pentode only differ in the %% number of grids. So we construct a generic declare function in %% which we can put code for the grid anchors and grid drawing code %% \pgfcircdeclaretube{tube name}{grid anchors}{grid drawing code} \long\def\pgfcircdeclaretube#1#2#3{% \pgfdeclareshape{#1}{ \savedmacro{\ctikzclass}{\edef\ctikzclass{tubes}} \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} \anchor{center}{ \pgfpointorigin } \savedanchor\northwest{% \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@scaled@Rlen \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@scaled@Rlen % x and y should be half the Rlen \pgf@y=\pgf@circ@res@up \pgf@y=.5\pgf@y \pgf@x=-\pgf@circ@res@right \pgf@x=.5\pgf@x } \anchor{north} {% \northwest \pgf@x=0pt } \anchor{east}{% \northwest \pgf@x=-\pgf@x \pgf@y=0pt } \anchor{south}{% \northwest \pgf@y=-\pgf@y \pgf@x=0pt } \anchor{west}{% \northwest \pgf@y=0pt } \anchor{north west}{% \northwest } \anchor{north east}{% \northwest \pgf@x=-\pgf@x } \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y } \anchor{south west}{ \northwest \pgf@y=-\pgf@y } \anchor{anode} {% \northwest \pgf@x=0pt } \anchor{cathode}{% \northwest \pgf@y=-\pgf@y \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x } \anchor{cathode 1}{% \northwest \pgf@y=-\pgf@y \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x } \anchor{cathode 2}{% \northwest \pgf@y=-\pgf@y \pgf@x=-\ctikzvalof{tubes/cathode width}\pgf@x } \anchor{filament 1}{% \northwest \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})} \pgf@x=\pgfmathresult\pgf@x \pgf@y=-\pgf@y } \anchor{filament 2}{% \northwest \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})} \pgf@x=-\pgfmathresult\pgf@x \pgf@y=-\pgf@y } % Extra anchors #2 \backgroundpath{ \pgfscope % Line width for tripoles \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} \pgf@circ@scaled@Rlen=\scaledRlen % Setup to draw tube \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@scaled@Rlen \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@scaled@Rlen \pgf@circ@res@up=\ctikzvalof{tubes/tube radius}\pgf@circ@res@up \pgf@circ@res@right=\ctikzvalof{tubes/tube radius}\pgf@circ@res@right % Tube outline \pgf@circ@tubes@drawtube % Setup to draw grid, filament, anode and cathode \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@scaled@Rlen \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@scaled@Rlen \pgf@circ@res@up=0.5\pgf@circ@res@up \pgf@circ@res@right=0.5\pgf@circ@res@right % Tube fill color (if any) \pgf@circ@draworfill % Grid drawing #3 % Filament (is not drawn by default) \ifpgf@circuit@tubes@filament \pgf@circ@res@temp=-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up \advance\pgf@circ@res@temp by -\ctikzvalof{tubes/filament distance}\pgf@circ@res@up \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})} \pgf@xa=\pgfmathresult\pgf@circ@res@right \pgfmathparse{\ctikzvalof{tubes/tube radius}+\ctikzvalof{tubes/tube radius}*cos(\ctikzvalof{tubes/filament angle}} \pgf@ya=\pgfmathresult\pgf@circ@res@up \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@temp}} \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}} \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@circ@res@up}} \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@temp}} \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}} \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@circ@res@up}} \pgf@circuit@tubes@filamentfalse \fi % Anode (or plate) \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}} % north \pgfpathlineto{\pgfpoint{0pt}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}} \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tubes/anode width}\pgf@circ@res@right}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/anode width}\pgf@circ@res@right}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}} % Cathode \ifpgf@circuit@tubes@nocathode \pgf@circuit@tubes@nocathodefalse \else \pgfsetcornersarced{\pgfpoint{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}} \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{-\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up}} \ifpgf@circuit@tubes@fullcathode \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\pgf@circ@res@up}} \pgf@circuit@tubes@fullcathodefalse \else \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up-\ctikzvalof{tubes/cathode right extend}\pgf@circ@res@up}} \fi \fi % Draw the background \pgfusepath{draw} \endpgfscope } } } \pgfcircdeclaretube{diodetube}{}{} % shape diode already exists \pgfcircdeclaretube{triode} { \anchor{grid} {% should not be used \northwest \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y } \anchor{control} {% \northwest \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y } } { % Grid protrusion \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}} % Grid dashes: calculations \pgf@xb=2\pgf@circ@res@right \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1 \multiply\pgf@circ@count@a by 2\relax \advance\pgf@circ@count@a by 1\relax \advance\pgf@circ@res@step by -\pgf@xa \divide\pgf@circ@res@step by \pgf@circ@count@a % Grid dashes: draw \pgf@circ@res@temp=\pgf@xa \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} \loop \advance\pgf@circ@res@temp by\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}} \advance\pgf@circ@res@temp by\pgf@circ@res@step \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}} \advance\pgf@circ@count@a by-1 \ifnum\pgf@circ@count@a>0\relax \repeat } \pgfcircdeclaretube{tetrode} { \anchor{grid} {% should not be used \northwest \pgfutil@tempdima=\pgf@y \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y \pgf@y=0.5\pgf@y \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima } \anchor{control} {% \northwest \pgfutil@tempdima=\pgf@y \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y \pgf@y=0.5\pgf@y \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima } \anchor{screen} {% \northwest \pgfutil@tempdima=\pgf@y \pgf@y=\ctikzvalof{tubes/grid separation}\pgf@y \pgf@y=0.5\pgf@y \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima } } { % Grid x/y points \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up \pgfutil@tempdimb=-\pgfutil@tempdima \pgfutil@tempdima=0.5\pgfutil@tempdima \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up \pgfutil@tempdimb=0.5\pgfutil@tempdimb \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up % Grid protrusion \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}} \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdima}} % Grid dashes: calculations \pgf@xb=2\pgf@circ@res@right \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1 \multiply\pgf@circ@count@a by 2\relax \advance\pgf@circ@count@a by 1\relax \advance\pgf@circ@res@step by -\pgf@xa \divide\pgf@circ@res@step by \pgf@circ@count@a % Grid dashes: draw \pgf@circ@res@temp=\pgf@xa \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} \loop \advance\pgf@circ@res@temp by\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}} \advance\pgf@circ@res@temp by\pgf@circ@res@step \advance\pgf@circ@count@a by-1 \ifnum\pgf@circ@count@a>0\relax \repeat } \pgfcircdeclaretube{pentode} { \anchor{grid} {% should not be used \northwest \pgfutil@tempdima=\pgf@y \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima } \anchor{control} {% \northwest \pgfutil@tempdima=\pgf@y \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima } \anchor{screen} {% \northwest \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y } \anchor{suppressor} {% \northwest \pgfutil@tempdima=\pgf@y \pgf@y=\ctikzvalof{tubes/grid separation}\pgf@y \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima } } { % Grid x/y points \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up \pgfutil@tempdimb=-\pgfutil@tempdima \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up \pgf@circ@res@other=\ctikzvalof{tubes/grid shift}\pgf@circ@res@up % Grid protrusion \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}} \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdima}} \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgf@circ@res@other}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@circ@res@other}} % Grid dashes: calculations \pgf@xb=2\pgf@circ@res@right \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1 \multiply\pgf@circ@count@a by 2\relax \advance\pgf@circ@count@a by 1\relax \advance\pgf@circ@res@step by -\pgf@xa \divide\pgf@circ@res@step by \pgf@circ@count@a % Grid dashes: draw \pgf@circ@res@temp=\pgf@xa \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} \loop \advance\pgf@circ@res@temp by\pgf@circ@res@step \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@other}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgf@circ@res@other}} \advance\pgf@circ@res@temp by\pgf@circ@res@step \advance\pgf@circ@count@a by-1 \ifnum\pgf@circ@count@a>0\relax \repeat } \pgfcircdeclaretube{pentode suppressor to cathode} { \anchor{grid} {% should not be used \northwest \pgfutil@tempdima=\pgf@y \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima } \anchor{control} {% \northwest \pgfutil@tempdima=\pgf@y \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima } \anchor{screen} {% \northwest \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y } } { % Grid x/y points \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up \pgfutil@tempdimb=-\pgfutil@tempdima \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up \pgf@circ@res@other=\ctikzvalof{tubes/grid shift}\pgf@circ@res@up % Grid protrusion \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}} \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgf@circ@res@other}} \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@circ@res@other}} % Grid dashes: calculations \pgf@xb=2\pgf@circ@res@right \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1 \multiply\pgf@circ@count@a by 2\relax \advance\pgf@circ@count@a by 1\relax \advance\pgf@circ@res@step by -\pgf@xa \divide\pgf@circ@res@step by \pgf@circ@count@a % Grid dashes: draw \pgf@circ@res@temp=\pgf@xa \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} \loop \advance\pgf@circ@res@temp by\pgf@circ@res@step \ifnum\pgf@circ@count@a>1\relax \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}} \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@other}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgf@circ@res@other}} \fi \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}} \advance\pgf@circ@res@temp by\pgf@circ@res@step \advance\pgf@circ@count@a by-1 \ifnum\pgf@circ@count@a>0\relax \repeat % Grid: connection from suppressor to cathode \pgfsetcornersarced{\pgfpoint{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima-2*\ctikzvalof{tubes/grid separation}\pgf@circ@res@up}} \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right-0.4142136*\ctikzvalof{tubes/cathode corners}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up-0.4142136*\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}} } \endinput