From d045558bbb6184c258cfc1daa90ab4e47a1b224d Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 6 Jul 2021 20:31:34 +0000 Subject: circuitikz (6jul21) git-svn-id: svn://tug.org/texlive/trunk@59856 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/latex/circuitikz/circuitikz-1.1.2.sty | 22413 +------------------ 1 file changed, 1 insertion(+), 22412 deletions(-) (limited to 'Master/texmf-dist/tex/latex/circuitikz/circuitikz-1.1.2.sty') diff --git a/Master/texmf-dist/tex/latex/circuitikz/circuitikz-1.1.2.sty b/Master/texmf-dist/tex/latex/circuitikz/circuitikz-1.1.2.sty index cf515c8783b..cbaf65f51a3 100644 --- a/Master/texmf-dist/tex/latex/circuitikz/circuitikz-1.1.2.sty +++ b/Master/texmf-dist/tex/latex/circuitikz/circuitikz-1.1.2.sty @@ -18,22416 +18,5 @@ \ProvidesPackage{circuitikz-1.1.2} [\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion] -%% Version 3.0 of pgf/TikZ is required -\RequirePackage{tikz} -\usetikzlibrary{calc} -% -% "arrows" library is deprecated, and behave badly with -% arrows on short paths. Change to the new arrows.meta -% In pfgcirc.define, we will add the old definition of -% latex' which we have lost in the transition -% -\usetikzlibrary{arrows.meta, bending} -\usetikzlibrary{fpu} % may be needed for use fpu reciprocal (v1.0.1) - -% The options are listed in the manual in this order - -\DeclareOption{europeanvoltage}{ - \ctikzset{voltage=european} -} - -\DeclareOption{straightvoltages}{ - \pgf@circuit@bipole@voltage@straighttrue -} - -\DeclareOption{americanvoltage}{ - \ctikzset{voltage=american} -} - -\DeclareOption{europeancurrent}{ - \ctikzset{current = european} -} - -\DeclareOption{americancurrent}{ - \ctikzset{current = american} -} - - - -\DeclareOption{americanresistor}{ - \ctikzset{resistor = american} -} - -\DeclareOption{europeanresistor}{ - \ctikzset{resistor = european} -} - -\DeclareOption{americaninductor}{ - \ctikzset{inductor = american} -} - -\DeclareOption{europeaninductor}{ - \ctikzset{inductor = european} -} - -\DeclareOption{cuteinductor}{ - \ctikzset{inductor = cute} -} - -\DeclareOption{americanport}{ - \ctikzset{logic ports = american} -} - -\DeclareOption{europeanport}{ - \ctikzset{logic ports = european} -} - -\DeclareOption{european}{ - \ctikzset{voltage=european} \ctikzset{current=european} \ctikzset{inductor=european} - \ctikzset{resistor=european} \ctikzset{logic ports=european} \ctikzset{gas filled surge arrester choice = european} -} - -\DeclareOption{american}{ - \ctikzset{voltage=american} \ctikzset{current=american} \ctikzset{resistor=american} \ctikzset{inductor=american} \ctikzset{gas filled surge arrester choice = american} - \ctikzset{logic ports = american} -} - -\DeclareOption{fulldiodes}{ - \ctikzset{diode = full} -} - -\DeclareOption{emptydiodes}{ - \ctikzset{diode = empty} -} - -\DeclareOption{europeanvoltages}{ - \ctikzset{voltage=european} -} - -\DeclareOption{americanvoltages}{ - \ctikzset{voltage=american} -} - -\DeclareOption{europeancurrents}{ - \ctikzset{current = european} -} - -\DeclareOption{americancurrents}{ - \ctikzset{current = american} -} - -\DeclareOption{americanresistors}{ - \ctikzset{resistor = american} -} - -\DeclareOption{europeanresistors}{ - \ctikzset{resistor = european} -} - -\DeclareOption{americaninductors}{ - \ctikzset{inductor = american} -} - -\DeclareOption{europeaninductors}{ - \ctikzset{inductor = european} -} - -\DeclareOption{cuteinductors}{ - \ctikzset{inductor = cute} -} - -\DeclareOption{americanports}{ - \ctikzset{logic ports = american} -} - -\DeclareOption{europeanports}{ - \ctikzset{logic ports = european} -} - -\DeclareOption{americangfsurgearrester}{ - \ctikzset{gas filled surge arrester choice = american} -} - -\DeclareOption{europeangfsurgearrester}{ - \ctikzset{gas filled surge arrester choice = european} -} - -\DeclareOption{siunitx}{ - \pgf@circ@siunitxtrue -} - -\DeclareOption{nosiunitx}{ - \pgf@circ@siunitxfalse -} - -\DeclareOption{fulldiode}{ - \ctikzset{diode = full} -} - -\DeclareOption{emptydiode}{ - \ctikzset{diode = empty} -} - -\DeclareOption{strokediode}{ - \ctikzset{diode = stroke} -} - -\DeclareOption{arrowmos}{ - \pgf@circuit@mos@arrowstrue -} - -\DeclareOption{noarrowmos}{ - \pgf@circuit@mos@arrowsfalse -} - -\DeclareOption{fetbodydiode}{ - \pgf@circuit@fet@bodydiodetrue -} - -\DeclareOption{nofetbodydiode}{ - \pgf@circuit@fet@bodydiodefalse -} - -\DeclareOption{fetsolderdot}{ - \pgf@circuit@fet@solderdottrue -} - -\DeclareOption{nofetsolderdot}{ - \pgf@circuit@fet@solderdotfalse -} - -\DeclareOption{emptypmoscircle}{ - \pgf@circuit@pmos@emptycircletrue -} - - -\DeclareOption{lazymos}{ - \ctikzset{tripoles/nmos/width=.5} - \ctikzset{tripoles/nmos/gate height=.35} - \ctikzset{tripoles/nmos/base height=.35} - \ctikzset{tripoles/nmos/height/.initial=1.2} - \ctikzset{tripoles/nmos/base width=.5} - \ctikzset{tripoles/nmos/gate width=.65} - - \ctikzset{tripoles/pmos/width=.5} - \ctikzset{tripoles/pmos/gate height=.35} - \ctikzset{tripoles/pmos/base height=.35} - \ctikzset{tripoles/pmos/height/.initial=1.2} - \ctikzset{tripoles/pmos/base width=.5} - \ctikzset{tripoles/pmos/gate width=.65} - - \pgf@circuit@pmos@emptycircletrue -} - -\DeclareOption{straightlabels}{ - \ctikzset{label/align = straight} -} - -\DeclareOption{rotatelabels}{ - \ctikzset{label/align = rotate} -} - -\DeclareOption{smartlabels}{ - \ctikzset{label/align = smart} -} - -\DeclareOption{compatibility}{ - \pgf@circuit@compattrue -} - -\DeclareOption{oldvoltagedirection}{ - \pgf@circ@oldvoltagedirectiontrue - \pgf@circ@explicitvdirtrue - \pgf@circ@fixbatteriesfalse -} -\DeclareOption{nooldvoltagedirection}{ - \pgf@circ@oldvoltagedirectionfalse - \pgf@circ@explicitvdirtrue - \pgf@circ@fixbatteriesfalse -} - -\DeclareOption{RPvoltages}{ - \pgf@circ@oldvoltagedirectiontrue - \pgf@circ@explicitvdirtrue - \pgf@circ@fixbatteriestrue -} -\DeclareOption{EFvoltages}{ - \pgf@circ@oldvoltagedirectionfalse - \pgf@circ@explicitvdirtrue - \pgf@circ@fixbatteriestrue -} - -\DeclareOption{legacytransistorstext}{ - \pgf@circuit@transisors@fixlabelsfalse -} - -\DeclareOption{nolegacytransistorstext}{ - \pgf@circuit@transisors@fixlabelstrue -} - -\DeclareOption{centertransistorstext}{ - \pgf@circuit@transisors@fixlabelstrue -} - -\DeclareOption{betterproportions}{ - \ctikzset{monopoles/ground/width/.initial=.15} - - \ctikzset{bipoles/resistor/height/.initial=.23} - \ctikzset{bipoles/resistor/width/.initial=.6} - \ctikzset{bipoles/capacitor/height/.initial=.4} - \ctikzset{bipoles/capacitor/width/.initial=.1} - \ctikzset{bipoles/potentiometer/height/.initial=.6} - \ctikzset{bipoles/potentiometer/height 2/.initial=.23} - \ctikzset{bipoles/potentiometer/width/.initial=.6} - \ctikzset{bipoles/photoresistor/height/.initial=.6} - \ctikzset{bipoles/photoresistor/height 2/.initial=.23} - \ctikzset{bipoles/photoresistor/width/.initial=.6} - \ctikzset{bipoles/thermistor/main/.initial=.7} - \ctikzset{bipoles/thermistor/height/.initial=.328}%.23/.7 - \ctikzset{bipoles/thermistor/width/.initial=.6} - \ctikzset{bipoles/thermistorntc/width/.initial=.6} - \ctikzset{bipoles/thermistorntc/main/.initial=.7} - \ctikzset{bipoles/thermistorntc/height/.initial=.328}%.23/.7 - \ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.23/.7 - \ctikzset{bipoles/thermistorptc/width/.initial=.6} - \ctikzset{bipoles/thermistorptc/main/.initial=.7} - \ctikzset{bipoles/thermistorptc/height/.initial=.328}%.23/.7 - \ctikzset{bipoles/varistor/main/.initial=.7} - \ctikzset{bipoles/varistor/height/.initial=.328}%.23/.7 - \ctikzset{bipoles/varistor/width/.initial=.6} - \ctikzset{bipoles/vresistor/height/.initial=.45} - \ctikzset{bipoles/vresistor/width/.initial=.6} - \ctikzset{bipoles/generic/height/.initial=.23} - \ctikzset{bipoles/generic/width/.initial=.6} - \ctikzset{bipoles/generic potentiometer/height/.initial=.6} - \ctikzset{bipoles/generic potentiometer/height 2/.initial=.23} - \ctikzset{bipoles/generic potentiometer/width/.initial=.6} - \ctikzset{bipoles/ageneric/height/.initial=.23} - \ctikzset{bipoles/ageneric/width/.initial=.6} - \ctikzset{bipoles/memristor/height/.initial=.23} - \ctikzset{bipoles/memristor/wave height/.initial=.375} - \ctikzset{bipoles/memristor/width/.initial=.60} - \ctikzset{bipoles/tgeneric/height/.initial=.525} - \ctikzset{bipoles/tgeneric/width/.initial=.6} - \ctikzset{bipoles/tfullgeneric/height/.initial=.525} - \ctikzset{bipoles/tfullgeneric/width/.initial=.60} - \ctikzset{bipoles/fullgeneric/height/.initial=.23} - \ctikzset{bipoles/fullgeneric/width/.initial=.6} - \ctikzset{bipoles/diode/height/.initial=.3} - \ctikzset{bipoles/diode/width/.initial=.25} - \ctikzset{bipoles/bidirectionaldiode/height/.initial=.66} - \ctikzset{bipoles/bidirectionaldiode/width/.initial=.6} - \ctikzset{bipoles/bidirectionaldiode/diode width left/.initial=.3} - \ctikzset{bipoles/bidirectionaldiode/diode width right/.initial=.3} - - \ctikzset{tripoles/thyristor/height/.initial=.66} - \ctikzset{tripoles/thyristor/height 2/.initial=.3} - \ctikzset{tripoles/thyristor/width/.initial=.6} - \ctikzset{tripoles/thyristor/diode height/.initial=.3} - \ctikzset{tripoles/thyristor/diode width left/.initial=.4} - \ctikzset{tripoles/thyristor/diode width right/.initial=.3} - - \ctikzset{tripoles/triac/height/.initial=.66} - \ctikzset{tripoles/triac/width/.initial=.6} - \ctikzset{tripoles/triac/diode width left/.initial=.3} - \ctikzset{tripoles/triac/diode width right/.initial=.3} -} - -% This is a nice hack that prints all the shapes declared -% by the package. Very useful for coverage testing and debugging. -% -% \let\origpgfdeclareshape=\pgfdeclareshape -% \def\pgfdeclareshape#1{% -% \typeout{SHAPE:\space"#1"}% -% \origpgfdeclareshape{#1} -% } - - -%%%%%%%%% -%%%%%%%%%%% Springe nach tex/pgfcirc.defines -%%%---------- open: tex/pgfcirc.defines.tex -% 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. - -% -%% Key managements - -\long\def\pgf@circ@comment#1{} - -\def\circuitikzbasekey{/tikz/circuitikz} - -\pgfkeys{\circuitikzbasekey/.is family} - -\def\circuitikzset#1{\pgfkeys{\circuitikzbasekey,#1}} -\let\ctikzset\circuitikzset -\def\ctikzvalof#1{\pgfkeysvalueof{\circuitikzbasekey/#1}} -\def\ctikzsetvalof#1#2{\pgfkeyssetvalue{\circuitikzbasekey/#1}{#2}} - -%% Temporary Counters - -\newcount\pgf@circ@count@a -\newcount\pgf@circ@count@b -\newcount\pgf@circ@count@c -%%%%%%%%%%%% -%% Dimensions - -% coordinates -\newdimen\pgf@circ@res@up -\newdimen\pgf@circ@res@down -\newdimen\pgf@circ@res@zero -\newdimen\pgf@circ@res@left -\newdimen\pgf@circ@res@right -\newdimen\pgf@circ@res@other -\newdimen\pgf@circ@res@step -\newdimen\pgf@circ@res@temp -% inital thickness -\newdimen \pgfstartlinewidth - -% arrow tips, ported over old arrows library (deprecated) -% see https://tex.stackexchange.com/questions/234084/latex-arrow-tip-with-arrows-meta-library -% this was the original definition of latex' tips, renamed to avoid clashes -% -\pgfarrowsdeclare{latexslim}{latexslim} -{ - \pgfutil@tempdima=0.28pt% - \advance\pgfutil@tempdima by.3\pgflinewidth% - \pgfarrowsleftextend{+-4\pgfutil@tempdima} - \pgfarrowsrightextend{+6\pgfutil@tempdima} -} -{ - \pgfutil@tempdima=0.28pt% - \advance\pgfutil@tempdima by.3\pgflinewidth% - \pgfpathmoveto{\pgfqpoint{6\pgfutil@tempdima}{0\pgfutil@tempdima}} - \pgfpathcurveto - {\pgfqpoint{3.5\pgfutil@tempdima}{.5\pgfutil@tempdima}} - {\pgfqpoint{-1\pgfutil@tempdima}{1.5\pgfutil@tempdima}} - {\pgfqpoint{-4\pgfutil@tempdima}{3.75\pgfutil@tempdima}} - \pgfpathcurveto - {\pgfqpoint{-1.5\pgfutil@tempdima}{1\pgfutil@tempdima}} - {\pgfqpoint{-1.5\pgfutil@tempdima}{-1\pgfutil@tempdima}} - {\pgfqpoint{-4\pgfutil@tempdima}{-3.75\pgfutil@tempdima}} - \pgfpathcurveto - {\pgfqpoint{-1\pgfutil@tempdima}{-1.5\pgfutil@tempdima}} - {\pgfqpoint{3.5\pgfutil@tempdima}{-.5\pgfutil@tempdima}} - {\pgfqpoint{6\pgfutil@tempdima}{0\pgfutil@tempdima}} - \pgfpathclose - \pgfusepathqfill -} - -\pgfarrowsdeclarereversed{latexslim reversed}{latexslim reversed}{latexslim}{latexslim} - -\def\pgf@circ@setifdefinedfill#1#2{% - % if \ctikzclass is defined and \ctikzclass/fill is defined and is not none: - % set the fill color and execute \pgfusepath{#1}, else execute \pgfusepath{#2} - \ifdefined\ctikzclass - \pgfkeysifdefined{\circuitikzbasekey/\ctikzclass/fill}% - {% yes, it's defined - \edef\@@tmp{\ctikzvalof{\ctikzclass/fill}}\edef\@@none{none}% - \ifx\@@tmp\@@none % but it's none - \pgfusepath{#2}% - \else - \pgfsetfillcolor{\@@tmp}% - \pgfusepath{#1}% - \fi - }{% the class is defined but the fill key not; use #2 - \pgfusepath{#2}% - } - \else - \pgfusepath{#2}% - \fi -} - -%% Macro to fill or draw - -\def\pgf@circ@draworfill{% - \ifx\tikz@fillcolor\pgfutil@empty - \pgf@circ@setifdefinedfill{draw,fill}{draw} - \else - \pgfsetfillcolor{\tikz@fillcolor} - \pgfusepath{draw, fill} - \fi -} - -\def\pgf@circ@draworfillandclip{% - \ifx\tikz@fillcolor\pgfutil@empty - \pgf@circ@setifdefinedfill{draw, clip, fill}{draw, clip} - \pgfusepath{draw, clip} - \else - \pgfsetfillcolor{\tikz@fillcolor} - \pgfusepath{draw, clip, fill} - \fi -} - -\def\pgf@circ@maybefill{% - \ifx\tikz@fillcolor\pgfutil@empty - \pgf@circ@setifdefinedfill{fill}{discard} - \else - \pgfsetfillcolor{\tikz@fillcolor} - \pgfusepath{fill} - \fi -} - -%% Macros for setting linewidth -% #1 is the legacy class (bipoles, tripoles) etc -% #2 is the reference linewidth -\def\pgf@circ@setlinewidth#1#2{% - \ifdefined\ctikzclass - \pgfkeysifdefined{\circuitikzbasekey/\ctikzclass/thickness}% - {% yes, it's defined - \edef\@@tmp{\ctikzvalof{\ctikzclass/thickness}}\edef\@@none{none}% - \ifx\@@tmp\@@none % but it's none - \pgfsetlinewidth{\ctikzvalof{#1/thickness}#2}% passthrough legacy class - \else - \pgfsetlinewidth{\@@tmp #2}% - \fi - }{ % key not defined, do the legacy thing - \pgfsetlinewidth{\ctikzvalof{#1/thickness}#2}% - }% Ok, do nothing - \else % no class - \pgfsetlinewidth{\ctikzvalof{#1/thickness}#2}% - \fi -} -% use \pgf@circ@setlinewidth{none}{\pgflinewidth} if there is no legacy case -\ctikzset{none/thickness/.initial=1.0} % do not touch - -%% font changes compatible with plain/LaTeX/ConTeXt -%% thanks to Henri Menke https://github.com/circuitikz/circuitikz/issues/285#issuecomment-537224605 - -\ifpgfutil@format@is@latex - \long\def\pgf@circ@font@tiny{\tiny} - \long\def\pgf@circ@font@small{\small} - \long\def\pgf@circ@font@bold{\textbf} - \long\def\pgf@circ@font@boldmath{\boldmath} - \long\def\pgf@circ@font@sixbm{\fontsize{6}{7}\selectfont\boldmath} - \long\def\pgf@circ@font@tenbm{\fontsize{10}{12}\selectfont\boldmath} - \long\def\pgf@circ@font@twelve{\fontsize{12}{14}\selectfont} -\else\ifpgfutil@format@is@plain - \long\def\pgf@circ@font@tiny{\fiverm} - \long\def\pgf@circ@font@small{\sevenrm} - \long\def\pgf@circ@font@bold#1{{\bf#1}} - \long\def\pgf@circ@font@boldmath{\bf} % to be tested - \long\def\pgf@circ@font@sixbm{\sevenrm\bf} % - \long\def\pgf@circ@font@tenbm{\tenrm\bf} % - \long\def\pgf@circ@font@twelve{\twelverm} % -\else\ifpgfutil@format@is@context - \long\def\pgf@circ@font@tiny{\tfxx} - \long\def\pgf@circ@font@small{\tfx} - \long\def\pgf@circ@font@bold{\bold} - \long\def\pgf@circ@font@boldmath{\bold} % to be tested - \long\def\pgf@circ@font@sixbm{\tfx\bold} % - \long\def\pgf@circ@font@tenbm{\normal\bold}% - \long\def\pgf@circ@font@twelve{\tfa} % -\fi\fi\fi - - -% -% Thanks to Phelype Oleinik https://tex.stackexchange.com/a/520806/38080 -% -% this is needed to avoid problems with \ConTeXt -\ifcsname normalunexpanded\endcsname - \let\pgfcircutil@unexpanded\normalunexpanded -\else - \let\pgfcircutil@unexpanded\unexpanded -\fi -% minimally expand a pgfkey to check if it's {}/undefined or filled. -\def\unexpandedvalueof#1{% - \pgfcircutil@unexpanded\expandafter\expandafter - \expandafter\pgf@circ@valueof@chk\pgfkeysvalueof{#1}} -\def\pgf@circ@valueof@chk#1{% - \ifx\relax#1% - \expandafter\pgfutil@firstoftwo - \else - \expandafter\pgfutil@secondoftwo - \fi - {{}}% #1 is \relax, so consider empty - {\expandafter{#1}}% otherwise, leave the key after one more expansion -}% -% -% text position (added with ieeestd logic ports. Maybe to be extended to other components, -% like amplifiers) -% -\newif\ifpgf@circ@center@text\pgf@circ@center@texttrue -\tikzset{component text/.is choice}% -\tikzset{component text/center/.code={\pgf@circ@center@texttrue}}% -\tikzset{component text/left/.code={\pgf@circ@center@textfalse}}% -\ctikzset{component text/.is choice}% -\ctikzset{component text/center/.code={\pgf@circ@center@texttrue}}% -\ctikzset{component text/left/.code={\pgf@circ@center@textfalse}}% -\ctikzset{left text distance/.initial=0.3em}% - -% voltage options - -\newif\ifpgf@circ@siunitx -\newif\ifpgf@circuit@compat -\newif\ifpgf@circ@oldvoltagedirection % default false -\newif\ifpgf@circ@explicitvdir -\newif\ifpgf@circ@fixbatteries - -\ctikzset{voltage dir/.is choice} -\ctikzset{voltage dir/old/.code={\pgf@circ@oldvoltagedirectiontrue\pgf@circ@fixbatteriesfalse}} -\ctikzset{voltage dir/noold/.code={\pgf@circ@oldvoltagedirectionfalse\pgf@circ@fixbatteriesfalse}} -\ctikzset{voltage dir/RP/.code={\pgf@circ@oldvoltagedirectiontrue\pgf@circ@fixbatteriestrue}} -\ctikzset{voltage dir/EF/.code={\pgf@circ@oldvoltagedirectionfalse\pgf@circ@fixbatteriestrue}} -\tikzset{voltage dir/.style={circuitikz/voltage dir=#1}} - -% Option ">" for twoports -\newif\ifpgf@circuit@inputarrow -\ctikzset{>/.add code={}{\pgf@circuit@inputarrowtrue}} -\ctikzset{inputarrow/.is choice} -\ctikzset{inputarrow/true/.code={\pgf@circuit@inputarrowtrue}} -\ctikzset{inputarrow/false/.code={\pgf@circuit@inputarrowfalse}} - -% Option "boxed" for nodes and twoports -\newif\ifpgf@circuit@boxed -\pgfkeys{/tikz/boxed/.add code={}{\pgf@circuit@boxedtrue}} -\ctikzset{boxed/.add code={}{\pgf@circuit@boxedtrue}} -\pgfkeys{/tikz/box/.add code={}{\pgf@circuit@boxedtrue}} -\ctikzset{box/.add code={}{\pgf@circuit@boxedtrue}} - -% Option "dashed" for nodes and twoports -\newif\ifpgf@circuit@dashed -\pgfkeys{/tikz/dashed/.add code={}{\pgf@circuit@dashedtrue}} -\ctikzset{dashed/.add code={}{\pgf@circuit@dashedtrue}} - -% Option "t=*" for nodes -\pgfkeys{/tikz/t/.add code={}{\ctikzset{text=#1}}} - -\ctikzset{current arrow scale/.initial=16} - -\ctikzset{bipoles/.is family} -\ctikzset{bipoles/border margin/.initial=1.1} -\ctikzset{bipoles/thickness/.initial=2} -\ctikzset{tripoles/thickness/.initial=2} -\ctikzset{quadpoles/thickness/.initial=2} -\ctikzset{nodes width/.initial=.04} - -% Base len for all circuitikz -\newdimen\pgf@circ@Rlen -% scaled length for internal use in scalable shapes -\newdimen\pgf@circ@scaled@Rlen -\ctikzset{bipoles/length/.code={\pgf@circ@Rlen = #1\pgf@circ@scaled@Rlen=\pgf@circ@Rlen}} -\pgf@circ@Rlen = 1.4cm -% by default scale is 1.0 -\pgf@circ@scaled@Rlen=\pgf@circ@Rlen - -%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% main style definitions -%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - -% load a style file: search ctikzstyle-NAME.tex in path -\def\ctikzloadstyle#1{% - \pgfutil@InputIfFileExists{ctikzstyle-#1}{}{% - \tikzerror{I did not find the circuitikz style #1}}% -} - -% load and enact a style -\def\ctikzsetstyle#1{% - \ctikzloadstyle{#1}% - \tikzset{#1 circuit style}% -} - -% global style parameters -\ctikzset{default/scale/.initial=1.0} % do not touch -\ctikzset{default/fill/.initial=none} % do not touch -\ctikzset{default/thickness/.initial=none} % do not touch -% default is use as the generic default style for bipoles - -% mostly bipoles: - -\ctikzset{resistors/scale/.initial=1.0} -\ctikzset{resistors/fill/.initial=none} -\ctikzset{resistors/thickness/.initial=none} - -\ctikzset{capacitors/scale/.initial=1.0} -\ctikzset{capacitors/fill/.initial=none} -\ctikzset{capacitors/thickness/.initial=none} - -\ctikzset{inductors/scale/.initial=1.0} -\ctikzset{inductors/fill/.initial=none} -\ctikzset{inductors/thickness/.initial=none} - -\ctikzset{diodes/scale/.initial=1.0} -\ctikzset{diodes/fill/.initial=none} -\ctikzset{diodes/thickness/.initial=none} - -\ctikzset{batteries/scale/.initial=1.0} -\ctikzset{batteries/fill/.initial=none} -\ctikzset{batteries/thickness/.initial=none} - -\ctikzset{sources/scale/.initial=1.0} -\ctikzset{sources/fill/.initial=none} -\ctikzset{sources/thickness/.initial=none} - -\ctikzset{csources/scale/.initial=1.0} -\ctikzset{csources/fill/.initial=none} -\ctikzset{csources/thickness/.initial=none} - -\ctikzset{instruments/scale/.initial=1.0} -\ctikzset{instruments/fill/.initial=none} -\ctikzset{instruments/thickness/.initial=none} - -\ctikzset{mechanicals/scale/.initial=1.0} -\ctikzset{mechanicals/fill/.initial=none} -\ctikzset{mechanicals/thickness/.initial=none} - -\ctikzset{misc/scale/.initial=1.0} -\ctikzset{misc/fill/.initial=none} -\ctikzset{misc/thickness/.initial=none} - -\ctikzset{blocks/scale/.initial=1.0} -\ctikzset{blocks/fill/.initial=none} -\ctikzset{blocks/thickness/.initial=none} - -% mostly nodes - -\ctikzset{grounds/scale/.initial=1.0} -\ctikzset{grounds/fill/.initial=none} -\ctikzset{grounds/thickness/.initial=none} - -\ctikzset{power supplies/scale/.initial=1.0} -\ctikzset{power supplies/fill/.initial=none} -\ctikzset{power supplies/thickness/.initial=none} - -\ctikzset{transistors/scale/.initial=1.0} -\ctikzset{transistors/fill/.initial=none} -\ctikzset{transistors/thickness/.initial=none} - -\ctikzset{tubes/scale/.initial=1.0} -\ctikzset{tubes/fill/.initial=none} -\ctikzset{tubes/thickness/.initial=none} - -\ctikzset{RF/scale/.initial=1.0} -\ctikzset{RF/fill/.initial=none} -\ctikzset{RF/thickness/.initial=none} - -\ctikzset{electromechanicals/scale/.initial=1.0} -\ctikzset{electromechanicals/fill/.initial=none} -\ctikzset{electromechanicals/thickness/.initial=none} - -% transformers go with inductors -\ctikzset{amplifiers/scale/.initial=1.0} -\ctikzset{amplifiers/fill/.initial=none} -\ctikzset{amplifiers/thickness/.initial=none} - -\ctikzset{switches/scale/.initial=1.0} -\ctikzset{switches/fill/.initial=none} -\ctikzset{switches/thickness/.initial=none} - -\ctikzset{logic ports/scale/.initial=1.0} -\ctikzset{logic ports/fill/.initial=none} -\ctikzset{logic ports/thickness/.initial=none} - -\ctikzset{flipflops/scale/.initial=1.0} -\ctikzset{flipflops/fill/.initial=none} -\ctikzset{flipflops/thickness/.initial=none} - -\ctikzset{muxdemuxes/scale/.initial=1.0} -\ctikzset{muxdemuxes/fill/.initial=none} -\ctikzset{muxdemuxes/thickness/.initial=none} - -\ctikzset{chips/scale/.initial=1.0} -\ctikzset{chips/fill/.initial=none} -\ctikzset{chips/thickness/.initial=none} - -\ctikzset{displays/scale/.initial=1.0} -\ctikzset{displays/fill/.initial=none} -\ctikzset{displays/thickness/.initial=none} - -% grounds and power supplies - -\ctikzset{monopoles/.is family} -\ctikzset{monopoles/ground/width/.initial=.25} -\ctikzset{monopoles/ground/connectionthickness/.initial=1} -\ctikzset{monopoles/ground/thickness/.initial=2} -\ctikzset{monopoles/rground/thickness/.initial=2} -\ctikzset{monopoles/tground/thickness/.initial=3} -\ctikzset{monopoles/vcc/width/.initial=.2} -\ctikzset{monopoles/vcc/arrow/.initial=legacy} -\ctikzset{monopoles/vee/arrow/.initial=legacy} -\ctikzset{monopoles/match/width/.initial=.4} -\ctikzset{monopoles/chassis/width/.initial=.25} -\ctikzset{monopoles/alternative chassis/width/.initial=.25} -\ctikzset{monopoles/equipotentiality/width/.initial=.25} -\ctikzset{monopoles/antenna/width/.initial=.25} -\ctikzset{monopoles/antenna/label/xanchor/.initial=.4} -\ctikzset{monopoles/antenna/label/yanchor/.initial=.75} -\ctikzset{monopoles/txantenna/label/xanchor/.initial=.4} -\ctikzset{monopoles/txantenna/label/yanchor/.initial=.75} -\ctikzset{monopoles/txantenna/width/.initial=.25} -\ctikzset{monopoles/rxantenna/label/xanchor/.initial=.4} -\ctikzset{monopoles/rxantenna/label/yanchor/.initial=.75} -\ctikzset{monopoles/rxantenna/width/.initial=.25} -\ctikzset{monopoles/bareantenna/width/.initial=.25} -\ctikzset{monopoles/bareantenna/label/xanchor/.initial=1} -\ctikzset{monopoles/bareantenna/label/yanchor/.initial=0.5} -\ctikzset{monopoles/waves/width/.initial=0.5} - -% microstrips -\ctikzset{bipoles/mstline/height/.initial=0.3} -\ctikzset{bipoles/mstline/width/.initial=1.2} -\pgfkeys{/tikz/mstlinelen/.add code={}{\ctikzset{bipoles/mstline/width=#1}}} -\ctikzset{monopoles/msport/width/.initial=.5} -\ctikzset{monopoles/msrstub/height/.initial=1.0} -\ctikzset{monopoles/msrstub/width/.initial=0.6} - -% microphone and loudspeaker -\ctikzset{bipoles/loudspeaker/height/.initial=.8} -\ctikzset{bipoles/loudspeaker/depth/.initial=.3} -\ctikzset{bipoles/loudspeaker/width/.initial=.8} -\ctikzset{bipoles/mic/height/.initial=1.2} -\ctikzset{bipoles/mic/depth/.initial=.0} -\ctikzset{bipoles/mic/width/.initial=.8} - -% Zig Zag resistors -\ctikzset{resistors/zigs/.initial=3} -\ctikzset{resistors/width/.code={% - \ctikzset{bipoles/resistor/width=#1}% - \ctikzset{bipoles/vresistor/width=#1}% - \ctikzset{bipoles/potentiometer/width=#1}% - \ctikzset{bipoles/resistivesens/width=#1}% - \ctikzset{bipoles/photoresistor/width=#1}% - \ctikzset{bipoles/thermistor/width=#1}% - \ctikzset{bipoles/thermistorntc/width=#1}% - \ctikzset{bipoles/thermistorptc/width=#1}% - \ctikzset{bipoles/varistor/width=#1}% - \ctikzset{bipoles/generic/width=#1}% - \ctikzset{bipoles/generic potentiometer/width=#1}% - \ctikzset{bipoles/ageneric/width=#1}% - \ctikzset{bipoles/tgeneric/width=#1}% -}} -\ctikzset{wiper pos/.code={% - \ctikzset{bipoles/potentiometer/wiper pos=#1}% - \ctikzset{bipoles/generic potentiometer/wiper pos=#1}% -}} -% zigzag resistor -\ctikzset{bipoles/resistor/height/.initial=.3} -\ctikzset{bipoles/resistor/width/.initial=.8} -\ctikzset{bipoles/potentiometer/height/.initial=.8} -\ctikzset{bipoles/potentiometer/height 2/.initial=.3} -\ctikzset{bipoles/potentiometer/width/.initial=.8} -\ctikzset{bipoles/potentiometer/wiper pos/.initial=.5} -\ctikzset{bipoles/vresistor/height/.initial=.6} -\ctikzset{bipoles/vresistor/width/.initial=.8} -\ctikzset{bipoles/resistivesens/height/.initial=.6} -\ctikzset{bipoles/resistivesens/width/.initial=.8} -% square resistors -\ctikzset{bipoles/photoresistor/height/.initial=.6} -\ctikzset{bipoles/photoresistor/height 2/.initial=.3} -\ctikzset{bipoles/photoresistor/width/.initial=.8} -\ctikzset{bipoles/thermistor/main/.initial=.7} -\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7 -\ctikzset{bipoles/thermistorntc/width/.initial=.8} -\ctikzset{bipoles/thermistorntc/main/.initial=.7} -\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7 -\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7 -\ctikzset{bipoles/thermistorptc/width/.initial=.8} -\ctikzset{bipoles/thermistorptc/main/.initial=.7} -\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7 -\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7 -\ctikzset{bipoles/thermistor/width/.initial=.8} -\ctikzset{bipoles/varistor/main/.initial=.7} -\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7 -\ctikzset{bipoles/varistor/width/.initial=.8} -\ctikzset{bipoles/generic/height/.initial=.30} -\ctikzset{bipoles/generic/width/.initial=.80} -\ctikzset{bipoles/generic potentiometer/height/.initial=.80} -\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30} -\ctikzset{bipoles/generic potentiometer/width/.initial=.80} -\ctikzset{bipoles/generic potentiometer/wiper pos/.initial=.5} -\ctikzset{bipoles/ageneric/height/.initial=.30} -\ctikzset{bipoles/tgeneric/height/.initial=.70} -\ctikzset{bipoles/tgeneric/width/.initial=.80} -\ctikzset{bipoles/ageneric/width/.initial=.80} - -%% Capacitors -\ctikzset{bipoles/capacitor/height/.initial=.6} -\ctikzset{bipoles/capacitor/width/.initial=.2} -\ctikzset{bipoles/ecapacitor/height/.initial=.5} -\ctikzset{bipoles/ecapacitor/width/.initial=.2} -\ctikzset{bipoles/ecapacitor/font/.initial=\pgf@circ@font@sixbm} -%%% pcapacitor is deprecated -\ctikzset{bipoles/pcapacitor/height/.initial=.6} -\ctikzset{bipoles/pcapacitor/width/.initial=.2} -\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1} -\ctikzset{bipoles/ccapacitor/height/.initial=.6} -\ctikzset{bipoles/ccapacitor/width/.initial=.12} -\ctikzset{bipoles/ccapacitor/bend width/.initial=1.1} -\ctikzset{bipoles/vcapacitor/height/.initial=.6} -\ctikzset{bipoles/vcapacitor/width/.initial=.5} -\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4} -\ctikzset{bipoles/piezoelectric/height/.initial=.7} -\ctikzset{bipoles/piezoelectric/width/.initial=.5} - -% Inductors -\ctikzset{inductors/coils/.code={% - \ctikzset{bipoles/cuteinductor/coils=#1}% - \ctikzset{bipoles/cutechoke/coils=#1}% - \ctikzset{bipoles/americaninductor/coils=#1}% - \ctikzset{bipoles/vcuteinductor/coils=#1}% - \ctikzset{bipoles/vamericaninductor/coils=#1}% -}} -\ctikzset{inductors/width/.code={% - \ctikzset{bipoles/cuteinductor/width=#1}% - \ctikzset{bipoles/cutechoke/width=#1}% - \ctikzset{bipoles/americaninductor/width=#1}% - \ctikzset{bipoles/vcuteinductor/width=#1}% - \ctikzset{bipoles/vamericaninductor/width=#1}% - \ctikzset{bipoles/fullgeneric/width=#1}% - \ctikzset{bipoles/tfullgeneric/width=#1}% -}} -\ctikzset{bipoles/cuteinductor/height/.initial=.3} -\ctikzset{bipoles/cuteinductor/lower coil height/.initial=.15} -\ctikzset{bipoles/cuteinductor/width/.initial=.6} -\ctikzset{bipoles/cuteinductor/coils/.initial=5} -\ctikzset{bipoles/cuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil -%% Cute choke settings -\ctikzset{bipoles/cutechoke/height/.initial=.3} -\ctikzset{bipoles/cutechoke/lower coil height/.initial=.15} -\ctikzset{bipoles/cutechoke/width/.initial=.6} -\ctikzset{bipoles/cutechoke/coils/.initial=5} -\ctikzset{bipoles/cutechoke/coil aspect/.initial=.5}%percentage of choke width, which is covered by lower coil -\ctikzset{bipoles/cutechoke/cstep/.initial=.3} -\ctikzset{bipoles/cutechoke/cdist/.initial=1.3} -\ctikzset{bipoles/cutechoke/cthick/.initial=1} -\newif\ifpgf@circuit@bipole@twolineschoke -\pgf@circuit@bipole@twolineschokefalse -\pgfkeys{/tikz/onelinechoke/.add code={}{\pgf@circuit@bipole@twolineschokefalse}} -\ctikzset{onelinechoke/.add code={}{\pgf@circuit@bipole@twolineschokefalse}} -\pgfkeys{/tikz/twolineschoke/.add code={}{\pgf@circuit@bipole@twolineschoketrue}} -\ctikzset{twolineschoke/.add code={}{\pgf@circuit@bipole@twolineschoketrue}} -% -\ctikzset{bipoles/americaninductor/height/.initial=.3} -\ctikzset{bipoles/americaninductor/height 2/.initial=.1} -\ctikzset{bipoles/americaninductor/width/.initial=.8} -\ctikzset{bipoles/americaninductor/coils/.initial=4} -\ctikzset{bipoles/americaninductor/coil height/.initial=.15} -\ctikzset{bipoles/vcuteinductor/height/.initial=.6} -\ctikzset{bipoles/vcuteinductor/lower coil height/.initial=.3} -\ctikzset{bipoles/vcuteinductor/width/.initial=.6} -\ctikzset{bipoles/vcuteinductor/coils/.initial=5} -\ctikzset{bipoles/vcuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil -\ctikzset{bipoles/vamericaninductor/height/.initial=.6} -\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2} -\ctikzset{bipoles/vamericaninductor/width/.initial=.8} -\ctikzset{bipoles/vamericaninductor/coils/.initial=4} -\ctikzset{bipoles/vamericaninductor/coil height/.initial=.15} -\ctikzset{bipoles/tfullgeneric/height/.initial=.70} -\ctikzset{bipoles/tfullgeneric/width/.initial=.80} -\ctikzset{bipoles/fullgeneric/height/.initial=.30} -\ctikzset{bipoles/fullgeneric/width/.initial=.80} - -% Sources - -\ctikzset{bipoles/esource/height/.initial=.60} -\ctikzset{bipoles/esource/width/.initial=.60} -\ctikzset{bipoles/pvsource/height/.initial=.60} -\ctikzset{bipoles/pvsource/width/.initial=.60} -\ctikzset{bipoles/isource/height/.initial=.60} -\ctikzset{bipoles/isource/width/.initial=.60} -\ctikzset{bipoles/oosource/height/.initial=.60} -\ctikzset{bipoles/oosource/width/.initial=.60} -\ctikzset{bipoles/oosource/circlesize/.initial=.65}%circlesize+circleoffset should be =1 -\ctikzset{bipoles/oosource/circleoffset/.initial=.35}%circlesize+circleoffset should be =1 -\ctikzset{bipoles/dcisource/angle/.initial=80} -\ctikzset{bipoles/dcisource/height/.initial=.60} -\ctikzset{bipoles/dcisource/width/.initial=.60} -\ctikzset{bipoles/dcvsource/height/.initial=.60} -\ctikzset{bipoles/dcvsource/width/.initial=.60} -\ctikzset{bipoles/vsourcetri/height/.initial=.60} -\ctikzset{bipoles/vsourcetri/width/.initial=.60} -\ctikzset{bipoles/isourceam/height/.initial=.60} -\ctikzset{bipoles/isourceam/width/.initial=.60} -\ctikzset{bipoles/vsource/height/.initial=.60} -\ctikzset{bipoles/vsource/width/.initial=.60} -\ctikzset{bipoles/vsourceam/height/.initial=.60} -\ctikzset{bipoles/vsourceam/width/.initial=.60} -\ctikzset{bipoles/vsourceam/margin/.initial=.7} -\ctikzset{bipoles/isourcesin/height/.initial=.60} -\ctikzset{bipoles/isourcesin/width/.initial=.60} -\ctikzset{bipoles/vsourcesin/height/.initial=.60} -\ctikzset{bipoles/vsourcesin/width/.initial=.60} -\ctikzset{bipoles/vsourcesquare/height/.initial=.60} -\ctikzset{bipoles/vsourcesquare/width/.initial=.60} -\ctikzset{bipoles/cisource/height/.initial=.7} -\ctikzset{bipoles/cisource/width/.initial=.7} -\ctikzset{bipoles/cisourceam/height/.initial=.7} -\ctikzset{bipoles/cisourceam/width/.initial=.7} -\ctikzset{bipoles/ecsource/height/.initial=.7} -\ctikzset{bipoles/ecsource/width/.initial=.7} -\ctikzset{bipoles/cvsource/height/.initial=.7} -\ctikzset{bipoles/cvsource/width/.initial=.7} -\ctikzset{bipoles/cvsourceam/height/.initial=.7} -\ctikzset{bipoles/cvsourceam/width/.initial=.7} -\ctikzset{bipoles/cvsourceam/margin/.initial=.7} -\ctikzset{bipoles/cvsourceam/text scale/.initial=1} -\ctikzset{bipoles/cisourcesin/width/.initial=.7} -\ctikzset{bipoles/cvsourcesin/height/.initial=.7} -\ctikzset{bipoles/cvsourcesin/width/.initial=.7} -\ctikzset{bipoles/battery/height/.initial=.6} -\ctikzset{bipoles/battery/width/.initial=.3} -\ctikzset{bipoles/battery1/height/.initial=.6} -\ctikzset{bipoles/battery1/width/.initial=.3} -\ctikzset{bipoles/battery2/height/.initial=.6} -\ctikzset{bipoles/battery2/width/.initial=.3} - -% % % ootransformer -\ctikzset{bipoles/oosourcetrans/height/.initial=.6} -\ctikzset{bipoles/oosourcetrans/width/.initial=.6} -\ctikzset{bipoles/oosourcetrans/circlesize/.initial=.6}%circlesize+circleoffset should be =1 -\ctikzset{bipoles/oosourcetrans/circleoffset/.initial=.4}%circlesize+circleoffset should be =1 -\ctikzset{bipoles/oosourcetrans/vectorgroupscale/.initial=1} - -% % % oootransformer -\ctikzset{bipoles/ooosource/height/.initial=.6} -\ctikzset{bipoles/ooosource/circlesize/.initial=.55}%circlesize+circleoffset should be =1 -\ctikzset{bipoles/ooosource/circleoffset/.initial=.45}%circlesize+circleoffset should be =1 -\ctikzset{bipoles/ooosource/vectorgroupscale/.initial=1} - -% % % primary windings -\newif\ifpgf@circ@prim@delta -\newif\ifpgf@circ@prim@wye -\newif\ifpgf@circ@prim@zig -\pgfkeys{tikz/prim/.is choice} -\pgfkeys{tikz/prim/delta/.add code={}{\pgf@circ@prim@deltatrue}} -\pgfkeys{tikz/prim/wye/.add code={}{\pgf@circ@prim@wyetrue}} -\pgfkeys{tikz/prim/zig/.add code={}{\pgf@circ@prim@zigtrue}} - -% % % secondary windings -\newif\ifpgf@circ@sec@delta -\newif\ifpgf@circ@sec@wye -\newif\ifpgf@circ@sec@zig -\pgfkeys{tikz/sec/.is choice} -\pgfkeys{tikz/sec/delta/.add code={}{\pgf@circ@sec@deltatrue}} -\pgfkeys{tikz/sec/wye/.add code={}{\pgf@circ@sec@wyetrue}} -\pgfkeys{tikz/sec/zig/.add code={}{\pgf@circ@sec@zigtrue}} - -% % % tertiary windings (ooosource) -\newif\ifpgf@circ@tert@delta -\newif\ifpgf@circ@tert@wye -\newif\ifpgf@circ@tert@zig -\pgfkeys{tikz/tert/.is choice} -\pgfkeys{tikz/tert/delta/.add code={}{\pgf@circ@tert@deltatrue}} -\pgfkeys{tikz/tert/wye/.add code={}{\pgf@circ@tert@wyetrue}} -\pgfkeys{tikz/tert/zig/.add code={}{\pgf@circ@tert@zigtrue}} - -% diodes - -\ctikzset{bipoles/diode/height/.initial=.50} -\ctikzset{bipoles/diode/width/.initial=.40} -\ctikzset{bipoles/bidirectionaldiode/height/.initial=1.1} -\ctikzset{bipoles/bidirectionaldiode/width/.initial=1} -\ctikzset{bipoles/bidirectionaldiode/diode width left/.initial=.3} -\ctikzset{bipoles/bidirectionaldiode/diode width right/.initial=.3} -\ctikzset{bipoles/varcap/height/.initial=.50} -\ctikzset{bipoles/varcap/width/.initial=.45} - -% switches - -\ctikzset{bipoles/spst/height/.initial=.35} -\ctikzset{bipoles/spst/width/.initial=.35} -\ctikzset{bipoles/spst/depth/.initial=.2} -\ctikzset{bipoles/nos/height/.initial=.3} -\ctikzset{bipoles/nos/width/.initial=.35} -\ctikzset{bipoles/nos/depth/.initial=.2} -\ctikzset{bipoles/ncs/height/.initial=.35} -\ctikzset{bipoles/ncs/width/.initial=.35} -\ctikzset{bipoles/ncs/depth/.initial=.2} -%%% reed switch -\ctikzset{bipoles/reed/height/.initial=.4} -\ctikzset{bipoles/reed/width/.initial=.8}% 0.35 in nos -\ctikzset{bipoles/reed/depth/.initial=.4} - -% misc - -\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30} -\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80} -\ctikzset{bipoles/european gas filled surge arrester/inside/.initial=.30} -\ctikzset{bipoles/american gas filled surge arrester/height/.initial=.60} -\ctikzset{bipoles/american gas filled surge arrester/width/.initial=.60} -\ctikzset{bipoles/american gas filled surge arrester/inside/.initial=.15} -\ctikzset{bipoles/american gas filled surge arrester/dot x/.initial=.25} -\ctikzset{bipoles/american gas filled surge arrester/dot y/.initial=.45} -\ctikzset{bipoles/american gas filled surge arrester/size/.initial=.1} -\ctikzset{bipoles/fuse/height/.initial=.20} -\ctikzset{bipoles/fuse/width/.initial=.50} -\ctikzset{bipoles/afuse/height/.initial=.20} -\ctikzset{bipoles/afuse/width/.initial=.50} -\ctikzset{bipoles/memristor/height/.initial=.30} -\ctikzset{bipoles/memristor/wave height/.initial=.5} -\ctikzset{bipoles/memristor/width/.initial=.80} -\ctikzset{bipoles/open/height/.initial=.3} %necessary for curly voltages -\ctikzset{bipoles/open/width/.initial=.3} %necessary for curly voltages -\ctikzset{bipoles/open/voltage/straight label distance/.initial=0} -\ctikzset{bipoles/open/voltage/distance from node/.initial=.2} -\ctikzset{bipoles/short/height/.initial=0} %dummy height for voltage positioning -\ctikzset{bipoles/short/width/.initial=0} %dummy width for voltage positioning -%\ctikzset{bipoles/short/voltage/straight label distance/.initial=.2} -%\ctikzset{bipoles/short/voltage/distance from node/.initial=.5} -% multiwire -\ctikzset{bipoles/multiwire/height/.initial=0.4} -\ctikzset{bipoles/multiwire/width/.initial=0.2} -\ctikzset{bipoles/multiwire/spacing/.initial=0.05} - -\ctikzset{bipoles/ammeter/height/.initial=.60} -\ctikzset{bipoles/ammeter/width/.initial=.60} -\ctikzset{bipoles/ohmmeter/height/.initial=.60} -\ctikzset{bipoles/ohmmeter/width/.initial=.60} -\ctikzset{bipoles/voltmeter/height/.initial=.60} -\ctikzset{bipoles/voltmeter/width/.initial=.60} -\ctikzset{bipoles/smeter/height/.initial=.60} -\ctikzset{bipoles/smeter/width/.initial=.60} -\ctikzset{bipoles/smeter/voltage/additional label shift/.initial=1} -\ctikzset{bipoles/qmeter/depth/.initial=.40} -\ctikzset{bipoles/qmeter/height/.initial=.80} -\ctikzset{bipoles/qmeter/width/.initial=.60} -% this must be specified for each one -\ctikzset{bipoles/qvprobe/voltage/additional label shift/.initial=.5} -\ctikzset{bipoles/qiprobe/voltage/additional label shift/.initial=.5} -\ctikzset{bipoles/qpprobe/voltage/additional label shift/.initial=.5} -\ctikzset{bipoles/iloop/width/.initial=.40} -\ctikzset{bipoles/iloop/height/.initial=.60} - -\ctikzset{bipoles/oscope/height/.initial=.60} -\ctikzset{bipoles/oscope/width/.initial=.60} -\ctikzset{bipoles/oscope/voltage/additional label shift/.initial=1} - - -% option to not rotate the new (Romano's) instruments -\newif\ifpgf@circuit@straightinstruments\pgf@circuit@straightinstrumentstrue -\pgfkeys{/tikz/straight instruments/.add code={}{\pgf@circuit@straightinstrumentstrue}} -\ctikzset{straight instruments/.add code={}{\pgf@circuit@straightinstrumentstrue}} -\pgfkeys{/tikz/rotated instruments/.add code={}{\pgf@circuit@straightinstrumentsfalse}} -\ctikzset{rotated instruments/.add code={}{\pgf@circuit@straightinstrumentsfalse}} - - -\ctikzset{bipoles/buffer/height/.initial=1} -\ctikzset{bipoles/buffer/width/.initial=1} -\ctikzset{bipoles/not port/width/.initial=1} -\ctikzset{bipoles/not port/height/.initial=.8} -\ctikzset{bipoles/not port/circle width/.initial=.15} -\ctikzset{bipoles/lamp/height/.initial=.60} -\ctikzset{bipoles/lamp/width/.initial=.60} -\ctikzset{bipoles/bulb/height/.initial=.8} -\ctikzset{bipoles/bulb/width/.initial=.8} -\ctikzset{bipoles/tline/height/.initial=.3} -\ctikzset{bipoles/tline/width/.initial=.8} -\ctikzset{bipoles/squid/height/.initial=.60} -\ctikzset{bipoles/squid/width/.initial=.60} -\ctikzset{bipoles/barrier/height/.initial=.60} -\ctikzset{bipoles/barrier/width/.initial=.60} -\ctikzset{bipoles/openbarrier/gap/.initial=0.5} -\ctikzset{bipoles/thermocouple/height/.initial=.250} -\ctikzset{bipoles/thermocouple/height 2/.initial=.60} -\ctikzset{bipoles/thermocouple/width/.initial=.140} -\ctikzset{bipoles/pushbutton/height/.initial=.5} -\ctikzset{bipoles/pushbutton/height 2/.initial=.2} -\ctikzset{bipoles/pushbutton/width/.initial=.50} - -\ctikzset{bipoles/twoport/width/.initial=.7} -\ctikzset{bipoles/twoport/height/.initial=.7} -\ctikzset{bipoles/twoport/text/.initial=} -\ctikzset{bipoles/vco/width/.initial=.7} -\ctikzset{bipoles/bandpass/width/.initial=.7} -\ctikzset{bipoles/bandstop/width/.initial=.7} -\ctikzset{bipoles/highpass/width/.initial=.7} -\ctikzset{bipoles/lowpass/width/.initial=.7} -\ctikzset{bipoles/adc/width/.initial=.7} -\ctikzset{bipoles/dac/width/.initial=.7} -\ctikzset{bipoles/dsp/width/.initial=.7} -\ctikzset{bipoles/fft/width/.initial=.7} -\ctikzset{bipoles/amp/width/.initial=.7} -\ctikzset{bipoles/vamp/width/.initial=.7} -\ctikzset{bipoles/piattenuator/width/.initial=.7} -\ctikzset{bipoles/vpiattenuator/width/.initial=.7} -\ctikzset{bipoles/tattenuator/width/.initial=.7} -\ctikzset{bipoles/vtattenuator/width/.initial=.7} -\ctikzset{bipoles/phaseshifter/width/.initial=.7} -\ctikzset{bipoles/vphaseshifter/width/.initial=.7} -\ctikzset{bipoles/detector/width/.initial=.7} - -% crossing wires -\ctikzset{bipoles/crossing/size/.initial=.2} - -% Transistors starts here - -\newif\ifpgf@circuit@trans@depletiontype -\pgf@circuit@trans@depletiontypefalse - -\newif\ifpgf@circuit@mos@arrows -\ctikzset{tripoles/mos style/.is choice} -\ctikzset{tripoles/mos style/no arrows/.code={\pgf@circuit@mos@arrowsfalse}} -\ctikzset{tripoles/mos style/arrows/.code={\pgf@circuit@mos@arrowstrue}} -\pgfkeys{/tikz/arrowmos/.add code={}{\pgf@circuit@mos@arrowstrue}} -\pgfkeys{/tikz/noarrowmos/.add code={}{\pgf@circuit@mos@arrowsfalse}} - -% Fixed label positions -\newif\ifpgf@circuit@transisors@fixlabels -\pgf@circuit@transisors@fixlabelstrue -\pgfkeys{/tikz/center transistors text/.add code={}{\pgf@circuit@transisors@fixlabelstrue}} -\ctikzset{fix transistors text/.add code={}{\pgf@circuit@transisors@fixlabelstrue}} -\pgfkeys{/tikz/legacy transistors text/.add code={}{\pgf@circuit@transisors@fixlabelsfalse}} -\ctikzset{legacy transistors text/.add code={}{\pgf@circuit@transisors@fixlabelsfalse}} - -% Option solderdot for fet -\newif\ifpgf@circuit@fet@solderdot -\pgfkeys{/tikz/solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}} -\ctikzset{solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}} -\pgfkeys{/tikz/nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}} -\ctikzset{nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}} - -% Option bodydiode for fet -\newif\ifpgf@circuit@fet@bodydiode -\pgfkeys{/tikz/bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}} -\ctikzset{bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}} -\pgfkeys{/tikz/nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}} -\ctikzset{nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}} - -% Option draw fet without gate connection -\newif\ifpgf@circuit@bpt@drawgate -\pgf@circuit@bpt@drawgatetrue -\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}} -\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}} -\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}} -\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}} - -% Option draw bpt with schottky base -\newif\ifpgf@circuit@bpt@schottky -\pgf@circuit@bpt@schottkyfalse -\pgfkeys{/tikz/schottky base/.add code={}{\pgf@circuit@bpt@schottkytrue}} -\ctikzset{schottky base/.add code={}{\pgf@circuit@bpt@schottkytrue}} -\pgfkeys{/tikz/no schottky base/.add code={}{\pgf@circuit@bpt@schottkyfalse}} -\ctikzset{no schottky base/.add code={}{\pgf@circuit@bpt@schottkyfalse}} -\ctikzset{tripoles/schottky base size/.initial=0.07} - -% Option draw bpt without base connection -\newif\ifpgf@circuit@bpt@drawbase -\pgf@circuit@bpt@drawbasetrue -\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}} -\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}} -\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}} -\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}} - -% Option draw bpt with optical input -\newif\ifpgf@circuit@bpt@drawphoto -\pgf@circuit@bpt@drawphotofalse -\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}} -\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}} -\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}} -\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}} - -% Option draw fet without bulk connection -- Added by Burak Kelleci -\newif\ifpgf@circuit@bpt@drawbulk -\pgfkeys{/tikz/bulk/.add code={}{\pgf@circuit@bpt@drawbulktrue}} -\ctikzset{bulk/.add code={}{\pgf@circuit@bpt@drawbulktrue}} -\pgfkeys{/tikz/nobulk/.add code={}{\pgf@circuit@bpt@drawbulkfalse}} -\ctikzset{nobulk/.add code={}{\pgf@circuit@bpt@drawbulkfalse}} - -% Option draw pmos with empty circle -\newif\ifpgf@circuit@pmos@emptycircle -\pgf@circuit@pmos@emptycirclefalse -\ctikzset{tripoles/pmos style/.is choice} -\pgfkeys{/tikz/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}} -\ctikzset{tripoles/pmos style/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}} -% Option draw pmos with no circle -\newif\ifpgf@circuit@pmos@nocircle -\pgf@circuit@pmos@nocirclefalse -\pgfkeys{/tikz/nocircle/.add code={}{\pgf@circuit@pmos@nocircletrue}} -\ctikzset{tripoles/pmos style/nocircle/.add code={}{\pgf@circuit@pmos@nocircletrue}} -% back to normal -\pgfkeys{/tikz/fullcircle/.add code={}{\pgf@circuit@pmos@emptycirclefalse\pgf@circuit@pmos@nocirclefalse}} -\ctikzset{tripoles/pmos style/fullcircle/.add code={}{\pgf@circuit@pmos@emptycirclefalse\pgf@circuit@pmos@nocirclefalse}} -% arrows at the end, the correct way -\newif\ifpgf@circuit@trans@arrowatend -\pgf@circuit@trans@arrowatendfalse -\ctikzset{transistors/arrow pos/.is choice} -\ctikzset{transistors/arrow pos/legacy/.code={\pgf@circuit@trans@arrowatendfalse}} -\ctikzset{transistors/arrow pos/end/.code={\pgf@circuit@trans@arrowatendtrue}} - -\newif\ifpgf@circuit@trans@ntype -\pgf@circuit@trans@ntypetrue %default true -%\newif\ifpgf@circuit@trans@ptype -%\ctikzset{tripoles/nmos/.add code={\pgf@circuit@trans@ntypetrue}} -\ctikzset{tripoles/nmos/width/.initial=.7} -\ctikzset{tripoles/nmos/gate height/.initial=.35} -\ctikzset{tripoles/nmos/base height/.initial=.5} -\ctikzset{tripoles/nmos/conn height/.initial=0} -\ctikzset{tripoles/nmos/height/.initial=1.1} -\ctikzset{tripoles/nmos/base width/.initial=.5} -\ctikzset{tripoles/nmos/gate width/.initial=.62} -\ctikzset{tripoles/nmos/arrow pos/.initial=.6} -\ctikzset{tripoles/nmos/bodydiode scale/.initial=.3} -\ctikzset{tripoles/nmos/bodydiode distance/.initial=.3} -\ctikzset{tripoles/nmos/bodydiode conn/.initial=.6} -\ctikzset{tripoles/nmos/curr direction/.initial=1} - -\ctikzset{tripoles/pmos/width/.initial=.7} -\ctikzset{tripoles/pmos/gate height/.initial=.35} -\ctikzset{tripoles/pmos/base height/.initial=.5} -\ctikzset{tripoles/pmos/conn height/.initial=0} -\ctikzset{tripoles/pmos/height/.initial=1.1} -\ctikzset{tripoles/pmos/base width/.initial=.5} -\ctikzset{tripoles/pmos/gate width/.initial=.62} -\ctikzset{tripoles/pmos/arrow pos/.initial=.4} -\ctikzset{tripoles/pmos/bodydiode scale/.initial=.3} -\ctikzset{tripoles/pmos/bodydiode distance/.initial=.3} -\ctikzset{tripoles/pmos/bodydiode conn/.initial=.6} -\ctikzset{tripoles/pmos/curr direction/.initial=-1} - -\ctikzset{tripoles/hemt/width/.initial=.7} -\ctikzset{tripoles/hemt/gate height/.initial=.35} -\ctikzset{tripoles/hemt/base height/.initial=.5} -\ctikzset{tripoles/hemt/conn height/.initial=0} -\ctikzset{tripoles/hemt/height/.initial=1.1} -\ctikzset{tripoles/hemt/base width/.initial=.5} -\ctikzset{tripoles/hemt/gate width/.initial=.62} -\ctikzset{tripoles/hemt/bodydiode scale/.initial=.3} -\ctikzset{tripoles/hemt/bodydiode distance/.initial=.3} -\ctikzset{tripoles/hemt/bodydiode conn/.initial=.6} -\ctikzset{tripoles/hemt/curr direction/.initial=1} - -\ctikzset{tripoles/nfet/width/.initial=.7} -\ctikzset{tripoles/nfet/gate height/.initial=.35} -\ctikzset{tripoles/nfet/base height/.initial=.5} -\ctikzset{tripoles/nfet/conn height/.initial=0} -\ctikzset{tripoles/nfet/height/.initial=1.1} -\ctikzset{tripoles/nfet/base width/.initial=.5} -\ctikzset{tripoles/nfet/gate width/.initial=.62} -\ctikzset{tripoles/nfet/bodydiode scale/.initial=.3} -\ctikzset{tripoles/nfet/bodydiode distance/.initial=.3} -\ctikzset{tripoles/nfet/bodydiode conn/.initial=.6} -\ctikzset{tripoles/nfet/curr direction/.initial=1} - -\ctikzset{tripoles/pfet/width/.initial=.7} -\ctikzset{tripoles/pfet/gate height/.initial=.35} -\ctikzset{tripoles/pfet/base height/.initial=.5} -\ctikzset{tripoles/pfet/conn height/.initial=0} -\ctikzset{tripoles/pfet/height/.initial=1.1} -\ctikzset{tripoles/pfet/base width/.initial=.5} -\ctikzset{tripoles/pfet/gate width/.initial=.62} -\ctikzset{tripoles/pfet/bodydiode scale/.initial=.3} -\ctikzset{tripoles/pfet/bodydiode distance/.initial=.3} -\ctikzset{tripoles/pfet/bodydiode conn/.initial=.6} -\ctikzset{tripoles/pfet/curr direction/.initial=-1} - -\ctikzset{tripoles/nigfete/width/.initial=.7} -\ctikzset{tripoles/nigfete/gate height/.initial=.35} -\ctikzset{tripoles/nigfete/base height/.initial=.5} -\ctikzset{tripoles/nigfete/conn height/.initial=.35} -\ctikzset{tripoles/nigfete/height/.initial=1.1} -\ctikzset{tripoles/nigfete/base width/.initial=.5} -\ctikzset{tripoles/nigfete/gate width/.initial=.62} -\ctikzset{tripoles/nigfete/bodydiode scale/.initial=.3} -\ctikzset{tripoles/nigfete/bodydiode distance/.initial=.3} -\ctikzset{tripoles/nigfete/bodydiode conn/.initial=.6} -\ctikzset{tripoles/nigfete/curr direction/.initial=1} - -\ctikzset{tripoles/nigfetd/width/.initial=.7} -\ctikzset{tripoles/nigfetd/gate height/.initial=.35} -\ctikzset{tripoles/nigfetd/base height/.initial=.5} -\ctikzset{tripoles/nigfetd/conn height/.initial=.35} -\ctikzset{tripoles/nigfetd/height/.initial=1.1} -\ctikzset{tripoles/nigfetd/base width/.initial=.5} -\ctikzset{tripoles/nigfetd/gate width/.initial=.62} -\ctikzset{tripoles/nigfetd/bodydiode scale/.initial=.3} -\ctikzset{tripoles/nigfetd/bodydiode distance/.initial=.3} -\ctikzset{tripoles/nigfetd/bodydiode conn/.initial=.6} -\ctikzset{tripoles/nigfetd/curr direction/.initial=1} - -\ctikzset{tripoles/nigfetebulk/width/.initial=.7} -\ctikzset{tripoles/nigfetebulk/gate height/.initial=.35} -\ctikzset{tripoles/nigfetebulk/base height/.initial=.5} -\ctikzset{tripoles/nigfetebulk/conn height/.initial=.35} -\ctikzset{tripoles/nigfetebulk/height/.initial=1.1} -\ctikzset{tripoles/nigfetebulk/base width/.initial=.5} -\ctikzset{tripoles/nigfetebulk/gate width/.initial=.62} -\ctikzset{tripoles/nigfetebulk/bodydiode scale/.initial=.3} -\ctikzset{tripoles/nigfetebulk/bodydiode distance/.initial=.3} -\ctikzset{tripoles/nigfetebulk/bodydiode conn/.initial=.6} -\ctikzset{tripoles/nigfetebulk/curr direction/.initial=1} - -\ctikzset{tripoles/pigfete/width/.initial=.7} -\ctikzset{tripoles/pigfete/gate height/.initial=.35} -\ctikzset{tripoles/pigfete/base height/.initial=.5} -\ctikzset{tripoles/pigfete/conn height/.initial=.35} -\ctikzset{tripoles/pigfete/height/.initial=1.1} -\ctikzset{tripoles/pigfete/base width/.initial=.5} -\ctikzset{tripoles/pigfete/gate width/.initial=.62} -\ctikzset{tripoles/pigfete/bodydiode scale/.initial=.3} -\ctikzset{tripoles/pigfete/bodydiode distance/.initial=.3} -\ctikzset{tripoles/pigfete/bodydiode conn/.initial=.6} -\ctikzset{tripoles/pigfete/curr direction/.initial=-1} - -\ctikzset{tripoles/pigfetd/width/.initial=.7} -\ctikzset{tripoles/pigfetd/gate height/.initial=.35} -\ctikzset{tripoles/pigfetd/base height/.initial=.5} -\ctikzset{tripoles/pigfetd/conn height/.initial=.35} -\ctikzset{tripoles/pigfetd/height/.initial=1.1} -\ctikzset{tripoles/pigfetd/base width/.initial=.5} -\ctikzset{tripoles/pigfetd/gate width/.initial=.62} -\ctikzset{tripoles/pigfetd/bodydiode scale/.initial=.3} -\ctikzset{tripoles/pigfetd/bodydiode distance/.initial=.3} -\ctikzset{tripoles/pigfetd/bodydiode conn/.initial=.6} -\ctikzset{tripoles/pigfetd/curr direction/.initial=-1} - -\ctikzset{tripoles/pigfetebulk/width/.initial=.7} -\ctikzset{tripoles/pigfetebulk/gate height/.initial=.35} -\ctikzset{tripoles/pigfetebulk/conn height/.initial=.35} -\ctikzset{tripoles/pigfetebulk/base height/.initial=.5} -\ctikzset{tripoles/pigfetebulk/height/.initial=1.1} -\ctikzset{tripoles/pigfetebulk/base width/.initial=.5} -\ctikzset{tripoles/pigfetebulk/gate width/.initial=.62} -\ctikzset{tripoles/pigfetebulk/bodydiode scale/.initial=.3} -\ctikzset{tripoles/pigfetebulk/bodydiode distance/.initial=.3} -\ctikzset{tripoles/pigfetebulk/bodydiode conn/.initial=.6} -\ctikzset{tripoles/pigfetebulk/curr direction/.initial=-1} - -\ctikzset{tripoles/npn/width/.initial=.6} -\ctikzset{tripoles/npn/base height/.initial=.45} -\ctikzset{tripoles/npn/base height 2/.initial=.15} -\ctikzset{tripoles/npn/base height/.initial=.4} -\ctikzset{tripoles/npn/conn height/.initial=0} -\ctikzset{tripoles/npn/height/.initial=1.1} -\ctikzset{tripoles/npn/base width/.initial=.5} -\ctikzset{tripoles/npn/arrow pos/.initial=.5} -\ctikzset{tripoles/npn/bodydiode scale/.initial=.3} -\ctikzset{tripoles/npn/bodydiode distance/.initial=.3} -\ctikzset{tripoles/npn/bodydiode conn/.initial=.6} -\ctikzset{tripoles/npn/curr direction/.initial=1} - -\ctikzset{tripoles/pnp/width/.initial=.6} -\ctikzset{tripoles/pnp/base height/.initial=.45} -\ctikzset{tripoles/pnp/base height 2/.initial=.15} -\ctikzset{tripoles/pnp/base height/.initial=.4} -\ctikzset{tripoles/pnp/conn height/.initial=0} -\ctikzset{tripoles/pnp/height/.initial=1.1} -\ctikzset{tripoles/pnp/base width/.initial=.5} -\ctikzset{tripoles/pnp/arrow pos/.initial=.5} -\ctikzset{tripoles/pnp/bodydiode scale/.initial=.3} -\ctikzset{tripoles/pnp/bodydiode distance/.initial=.3} -\ctikzset{tripoles/pnp/bodydiode conn/.initial=.6} -\ctikzset{tripoles/pnp/curr direction/.initial=-1} - -\ctikzset{tripoles/pigbt/width/.initial=.6} -\ctikzset{tripoles/pigbt/gate height/.initial=.45} -\ctikzset{tripoles/pigbt/gate height 2/.initial=.15} -\ctikzset{tripoles/pigbt/base height/.initial=.4} -\ctikzset{tripoles/pigbt/outer base height/.initial=.4} -\ctikzset{tripoles/pigbt/outer base thickness/.initial=1} -\ctikzset{tripoles/pigbt/conn height/.initial=0} -\ctikzset{tripoles/pigbt/height/.initial=1.1} -\ctikzset{tripoles/pigbt/gate width/.initial=.62} -\ctikzset{tripoles/pigbt/base width/.initial=.5} -\ctikzset{tripoles/pigbt/bodydiode scale/.initial=.3} -\ctikzset{tripoles/pigbt/bodydiode distance/.initial=.3} -\ctikzset{tripoles/pigbt/bodydiode conn/.initial=.6} -\ctikzset{tripoles/pigbt/curr direction/.initial=-1} - -\ctikzset{tripoles/nigbt/width/.initial=.6} -\ctikzset{tripoles/nigbt/gate height/.initial=.45} -\ctikzset{tripoles/nigbt/gate height 2/.initial=.15} -\ctikzset{tripoles/nigbt/base height/.initial=.4} -\ctikzset{tripoles/nigbt/outer base height/.initial=.4} -\ctikzset{tripoles/nigbt/outer base thickness/.initial=1} -\ctikzset{tripoles/nigbt/conn height/.initial=0} -\ctikzset{tripoles/nigbt/height/.initial=1.1} -\ctikzset{tripoles/nigbt/gate width/.initial=.62} -\ctikzset{tripoles/nigbt/base width/.initial=.5} -\ctikzset{tripoles/nigbt/bodydiode scale/.initial=.3} -\ctikzset{tripoles/nigbt/bodydiode distance/.initial=.3} -\ctikzset{tripoles/nigbt/bodydiode conn/.initial=.6} -\ctikzset{tripoles/nigbt/curr direction/.initial=1} - -\ctikzset{tripoles/Lpigbt/width/.initial=.6} -\ctikzset{tripoles/Lpigbt/gate height/.initial=.45} -\ctikzset{tripoles/Lpigbt/gate height 2/.initial=.15} -\ctikzset{tripoles/Lpigbt/base height/.initial=.4} -\ctikzset{tripoles/Lpigbt/outer base height/.initial=.4} -\ctikzset{tripoles/Lpigbt/outer base thickness/.initial=1} -\ctikzset{tripoles/Lpigbt/conn height/.initial=.4} -\ctikzset{tripoles/Lpigbt/height/.initial=1.1} -\ctikzset{tripoles/Lpigbt/gate width/.initial=.62} -\ctikzset{tripoles/Lpigbt/base width/.initial=.5} -\ctikzset{tripoles/Lpigbt/bodydiode scale/.initial=.3} -\ctikzset{tripoles/Lpigbt/bodydiode distance/.initial=.3} -\ctikzset{tripoles/Lpigbt/bodydiode conn/.initial=.6} -\ctikzset{tripoles/Lpigbt/curr direction/.initial=-1} - -\ctikzset{tripoles/Lnigbt/width/.initial=.6} -\ctikzset{tripoles/Lnigbt/gate height/.initial=.45} -\ctikzset{tripoles/Lnigbt/gate height 2/.initial=.15} -\ctikzset{tripoles/Lnigbt/base height/.initial=.4} -\ctikzset{tripoles/Lnigbt/outer base height/.initial=.4} -\ctikzset{tripoles/Lnigbt/outer base thickness/.initial=1} -\ctikzset{tripoles/Lnigbt/conn height/.initial=.4} -\ctikzset{tripoles/Lnigbt/height/.initial=1.1} -\ctikzset{tripoles/Lnigbt/gate width/.initial=.62} -\ctikzset{tripoles/Lnigbt/base width/.initial=.5} -\ctikzset{tripoles/Lnigbt/bodydiode scale/.initial=.3} -\ctikzset{tripoles/Lnigbt/bodydiode distance/.initial=.3} -\ctikzset{tripoles/Lnigbt/bodydiode conn/.initial=.6} -\ctikzset{tripoles/Lnigbt/curr direction/.initial=1} - -\ctikzset{tripoles/igbt/outer base height/.code={ - \ctikzset{tripoles/nigbt/outer base height/.initial=#1} - \ctikzset{tripoles/pigbt/outer base height/.initial=#1} - \ctikzset{tripoles/Lnigbt/outer base height/.initial=#1} - \ctikzset{tripoles/Lpigbt/outer base height/.initial=#1} - \ctikzset{tripoles/Lnigbt/conn height/.initial=#1} - \ctikzset{tripoles/Lpigbt/conn height/.initial=#1} -}} -\ctikzset{tripoles/igbt/outer base thickness/.code={ - \ctikzset{tripoles/nigbt/outer base thickness=#1} - \ctikzset{tripoles/pigbt/outer base thickness=#1} - \ctikzset{tripoles/Lnigbt/outer base thickness=#1} - \ctikzset{tripoles/Lpigbt/outer base thickness=#1} -}} - -\ctikzset{tripoles/njfet/width/.initial=.7} -\ctikzset{tripoles/njfet/gate height/.initial=.5} -\ctikzset{tripoles/njfet/gate height 2/.initial=.35} -\ctikzset{tripoles/njfet/gate width/.initial=.5} -\ctikzset{tripoles/njfet/conn height/.initial=.35} -\ctikzset{tripoles/njfet/height/.initial=1.1} -\ctikzset{tripoles/njfet/bodydiode scale/.initial=.3} -\ctikzset{tripoles/njfet/bodydiode distance/.initial=.3} -\ctikzset{tripoles/njfet/bodydiode conn/.initial=.6} -\ctikzset{tripoles/njfet/curr direction/.initial=1} - -\ctikzset{tripoles/pjfet/width/.initial=.7} -\ctikzset{tripoles/pjfet/gate height/.initial=.5} -\ctikzset{tripoles/pjfet/gate height 2/.initial=.35} -\ctikzset{tripoles/pjfet/gate width/.initial=.5} -\ctikzset{tripoles/pjfet/conn height/.initial=.35} -\ctikzset{tripoles/pjfet/height/.initial=1.1} -\ctikzset{tripoles/pjfet/bodydiode scale/.initial=.3} -\ctikzset{tripoles/pjfet/bodydiode distance/.initial=.3} -\ctikzset{tripoles/pjfet/bodydiode conn/.initial=.6} -\ctikzset{tripoles/pjfet/curr direction/.initial=-1} - -\ctikzset{tripoles/isfet/width/.initial=1} -\ctikzset{tripoles/isfet/gate height/.initial=.35} -\ctikzset{tripoles/isfet/base height/.initial=.5} -\ctikzset{tripoles/isfet/height/.initial=1.1} -\ctikzset{tripoles/isfet/base width/.initial=.3} -\ctikzset{tripoles/isfet/gate width/.initial=.5} -\ctikzset{tripoles/isfet/conn height/.initial=0} -\ctikzset{tripoles/isfet/wave width/.initial=.16} -\ctikzset{tripoles/isfet/wave amp/.initial=.06} -\ctikzset{tripoles/isfet/waves y sep/.initial=.22} -\ctikzset{tripoles/isfet/waves x sep/.initial=.8} -\ctikzset{tripoles/isfet/bodydiode scale/.initial=.3} -\ctikzset{tripoles/isfet/bodydiode distance/.initial=.3} -\ctikzset{tripoles/isfet/bodydiode conn/.initial=.6} -\ctikzset{tripoles/isfet/curr direction/.initial=1} -% -% multi-emitter and multi-collector BJTs by Romano Giannetti -% -\ctikzset{tripoles/bjt/emitters/.initial=1} -\ctikzset{tripoles/bjt/collectors/.initial=1} -\pgfkeys{/tikz/emitters/.add code={}{\ctikzset{tripoles/bjt/emitters=#1}}} -\pgfkeys{/tikz/collectors/.add code={}{\ctikzset{tripoles/bjt/collectors=#1}}} -\ctikzset{tripoles/bjt/pins width/.initial=0.3} -\pgfkeys{/tikz/bjt pins width/.add code={}{\ctikzset{tripoles/bjt/pins width=#1}}} -\ctikzset{tripoles/bjt/multi height/.initial=.5} -\pgfkeys{/tikz/bjt multi height/.add code={}{\ctikzset{tripoles/bjt/multi height/.initial=#1}}} -% -\ctikzset{tripoles/bjt/width/.initial=.3} -\ctikzset{tripoles/bjt/base height 2/.initial=.4} -\ctikzset{tripoles/bjt/base height/.initial=1.1} -\ctikzset{tripoles/bjt/height/.initial=.4} -\ctikzset{tripoles/bjt/base width/.initial=1} -\ctikzset{tripoles/bjt/arrow pos/.initial=.5} -% do NOT touch these two! -\ctikzset{tripoles/bjt/npn/curr direction/.initial=1} -\ctikzset{tripoles/bjt/pnp/curr direction/.initial=-1} - -%% transistors stop here - -%% Logic ports - -\newif\ifpgf@circuit@europeanlogicport -\ctikzset{logic ports/.is choice} -\ctikzset{logic ports/european/.code= {\pgf@circuit@europeanlogicporttrue - \tikzset{and port/.style={shape=european and port}}% - \tikzset{or port/.style={shape=european or port}}% - \tikzset{xor port/.style={shape=european xor port}}% - \tikzset{buffer port/.style={shape=european buffer port}}% - \tikzset{not port/.style={shape=european not port}}% - \tikzset{nand port/.style={shape=european nand port}}% - \tikzset{nor port/.style={shape=european nor port}}% - \tikzset{xnor port/.style={shape=european xnor port}}% -}} -\ctikzset{logic ports/american/.code= {\pgf@circuit@europeanlogicportfalse - \tikzset{and port/.style={shape=american and port}}% - \tikzset{or port/.style={shape=american or port}}% - \tikzset{xor port/.style={shape=american xor port}}% - \tikzset{buffer port/.style={shape=american buffer port}}% - \tikzset{not port/.style={shape=american not port}}% - \tikzset{nand port/.style={shape=american nand port}}% - \tikzset{nor port/.style={shape=american nor port}}% - \tikzset{xnor port/.style={shape=american xnor port}}% -}} - -\ctikzset{logic ports origin/.is choice} -\ctikzset{logic ports origin/legacy/.code={ - \ctikzset{tripoles/american and port/origin/.initial=0.8}% - \ctikzset{tripoles/american nand port/origin/.initial=0.8}% - \ctikzset{tripoles/american nor port/origin/.initial=0.8}% - \ctikzset{tripoles/american or port/origin/.initial=0.8}% - \ctikzset{tripoles/american xor port/origin/.initial=0.8}% - \ctikzset{tripoles/american xnor port/origin/.initial=0.8}% - \ctikzset{tripoles/european and port/origin/.initial=0.8}% - \ctikzset{tripoles/european nand port/origin/.initial=0.8}% - \ctikzset{tripoles/european or port/origin/.initial=0.8}% - \ctikzset{tripoles/european nor port/origin/.initial=0.8}% - \ctikzset{tripoles/european xor port/origin/.initial=0.8}% - \ctikzset{tripoles/european xnor port/origin/.initial=0.8}% - \ctikzset{tripoles/european buffer port/origin/.initial=0.8}% - \ctikzset{tripoles/european not port/origin/.initial=0.8}% - }% -} -\ctikzset{logic ports origin/center/.code={% - \ctikzset{tripoles/american and port/origin/.initial=0}% - \ctikzset{tripoles/american nand port/origin/.initial=0}% - \ctikzset{tripoles/american nor port/origin/.initial=0}% - \ctikzset{tripoles/american or port/origin/.initial=0}% - \ctikzset{tripoles/american xor port/origin/.initial=0}% - \ctikzset{tripoles/american xnor port/origin/.initial=0}% - \ctikzset{tripoles/european and port/origin/.initial=0}% - \ctikzset{tripoles/european nand port/origin/.initial=0}% - \ctikzset{tripoles/european or port/origin/.initial=0}% - \ctikzset{tripoles/european nor port/origin/.initial=0}% - \ctikzset{tripoles/european xor port/origin/.initial=0}% - \ctikzset{tripoles/european xnor port/origin/.initial=0}% - \ctikzset{tripoles/european buffer port/origin/.initial=0}% - \ctikzset{tripoles/european not port/origin/.initial=0}% - }% -} - -\newif\ifpgfcirc@roundy@or@shapes\pgfcirc@roundy@or@shapesfalse -\ctikzset{american or shape/.is choice} -\ctikzset{american or shape/roundy/.code={\pgfcirc@roundy@or@shapestrue}} -\ctikzset{american or shape/pointy/.code={\pgfcirc@roundy@or@shapesfalse}} - -\newif\ifpgfcirc@draw@leads\pgfcirc@draw@leadstrue -\ctikzset{logic ports draw input leads/.is choice} -\ctikzset{logic ports draw input leads/true/.code={\pgfcirc@draw@leadstrue}} -\ctikzset{logic ports draw input leads/false/.code={\pgfcirc@draw@leadsfalse}} -\tikzset{input leads/.code={\pgfcirc@draw@leadstrue}} -\tikzset{no input leads/.code={\pgfcirc@draw@leadsfalse}} - -\ctikzset{tripoles/american and port/width/.initial=1.1} -\ctikzset{tripoles/american and port/height/.initial=.8} -\ctikzset{tripoles/american and port/port width/.initial=.7} -\ctikzset{tripoles/american and port/input height/.initial=.5} -\ctikzset{tripoles/american nand port/width/.initial=1.1} -\ctikzset{tripoles/american nand port/height/.initial=.8} -\ctikzset{tripoles/american nand port/port width/.initial=.7} -\ctikzset{tripoles/american nand port/circle width/.initial=.15} -\ctikzset{tripoles/american nand port/input height/.initial=.5} -\ctikzset{tripoles/american or port/width/.initial=1.1} -\ctikzset{tripoles/american or port/height/.initial=.8} -\ctikzset{tripoles/american or port/port width/.initial=.7} -\ctikzset{tripoles/american or port/input height/.initial=.5} -\ctikzset{tripoles/american or port/input skip/.initial=.25} -\ctikzset{tripoles/american or port/aaa/.initial=.6} -\ctikzset{tripoles/american or port/bbb/.initial=.4} -\ctikzset{tripoles/american or port/ccc/.initial=.5} -\ctikzset{tripoles/american or port/ddd/.initial=.0} -\ctikzset{tripoles/american nor port/width/.initial=1.1} -\ctikzset{tripoles/american nor port/height/.initial=.8} -\ctikzset{tripoles/american nor port/port width/.initial=.7} -\ctikzset{tripoles/american nor port/input height/.initial=.5} -\ctikzset{tripoles/american nor port/input skip/.initial=.25} -\ctikzset{tripoles/american nor port/circle width/.initial=.15} -\ctikzset{tripoles/american nor port/aaa/.initial=.6} -\ctikzset{tripoles/american nor port/bbb/.initial=.4} -\ctikzset{tripoles/american nor port/ccc/.initial=.5} -\ctikzset{tripoles/american nor port/ddd/.initial=.0} -\ctikzset{tripoles/american xor port/width/.initial=1.1} -\ctikzset{tripoles/american xor port/height/.initial=.8} -\ctikzset{tripoles/american xor port/port width/.initial=.7} -\ctikzset{tripoles/american xor port/input height/.initial=.5} -\ctikzset{tripoles/american xor port/input skip/.initial=.15} -\ctikzset{tripoles/american xor port/distance/.initial=.1} -\ctikzset{tripoles/american xnor port/width/.initial=1.1} -\ctikzset{tripoles/american xnor port/height/.initial=.8} -\ctikzset{tripoles/american xnor port/port width/.initial=.7} -\ctikzset{tripoles/american xnor port/input height/.initial=.5} -\ctikzset{tripoles/american xnor port/input skip/.initial=.15} -\ctikzset{tripoles/american xnor port/distance/.initial=.1} -\ctikzset{tripoles/american xnor port/circle width/.initial=.15} -\ctikzset{tripoles/american and port/origin/.initial=0.8} -\ctikzset{tripoles/american and port/inputs/.initial=2} -% variable number of inputs -\ctikzset{tripoles/american nand port/origin/.initial=0.8} -\ctikzset{tripoles/american nand port/inputs/.initial=2} -\ctikzset{tripoles/american nor port/origin/.initial=0.8} -\ctikzset{tripoles/american nor port/inputs/.initial=2} -\ctikzset{tripoles/american nor port/angle/.initial=70} -\ctikzset{tripoles/american nor port/inner/.initial=0.3} -\ctikzset{tripoles/american or port/origin/.initial=0.8} -\ctikzset{tripoles/american or port/inputs/.initial=2} -\ctikzset{tripoles/american or port/angle/.initial=70} -\ctikzset{tripoles/american or port/inner/.initial=0.3} -\ctikzset{tripoles/american xor port/origin/.initial=0.8} -\ctikzset{tripoles/american xor port/inputs/.initial=2} -\ctikzset{tripoles/american xor port/angle/.initial=70} -\ctikzset{tripoles/american xor port/inner/.initial=0.3} -\ctikzset{tripoles/american xnor port/origin/.initial=0.8} -\ctikzset{tripoles/american xnor port/inputs/.initial=2} -\ctikzset{tripoles/american xnor port/angle/.initial=70} -\ctikzset{tripoles/american xnor port/inner/.initial=0.3} - -\ctikzset{tripoles/european and port/width/.initial=1.4} -\ctikzset{tripoles/european and port/height/.initial=.65} -\ctikzset{tripoles/european and port/reserved/.initial=.6} -\ctikzset{tripoles/european and port/input height/.initial=.6} -\ctikzset{tripoles/european or port/width/.initial=1.4} -\ctikzset{tripoles/european or port/height/.initial=.65} -\ctikzset{tripoles/european or port/reserved/.initial=.6} -\ctikzset{tripoles/european or port/input height/.initial=.6} -\ctikzset{tripoles/european xor port/width/.initial=1.4} -\ctikzset{tripoles/european xor port/height/.initial=.65} -\ctikzset{tripoles/european xor port/reserved/.initial=.6} -\ctikzset{tripoles/european xor port/input height/.initial=.6} -\ctikzset{tripoles/european nand port/width/.initial=1.4} -\ctikzset{tripoles/european nand port/not height/.initial=.3} -\ctikzset{tripoles/european nand port/not width/.initial=.8} -\ctikzset{tripoles/european nand port/height/.initial=.65} -\ctikzset{tripoles/european nand port/reserved/.initial=.6} -\ctikzset{tripoles/european nand port/input height/.initial=.6} -\ctikzset{tripoles/european buffer port/width/.initial=1.4} -\ctikzset{tripoles/european buffer port/not height/.initial=.3} -\ctikzset{tripoles/european buffer port/not width/.initial=.8} -\ctikzset{tripoles/european buffer port/height/.initial=.65} -\ctikzset{tripoles/european buffer port/reserved/.initial=.6} -\ctikzset{tripoles/european buffer port/input height/.initial=0} -\ctikzset{tripoles/european not port/width/.initial=1.4} -\ctikzset{tripoles/european not port/not height/.initial=.3} -\ctikzset{tripoles/european not port/not width/.initial=.8} -\ctikzset{tripoles/european not port/height/.initial=.65} -\ctikzset{tripoles/european not port/reserved/.initial=.6} -\ctikzset{tripoles/european not port/input height/.initial=0} -\ctikzset{tripoles/european xnor port/width/.initial=1.4} -\ctikzset{tripoles/european xnor port/not height/.initial=.3} -\ctikzset{tripoles/european xnor port/not width/.initial=.8} -\ctikzset{tripoles/european xnor port/height/.initial=.65} -\ctikzset{tripoles/european xnor port/reserved/.initial=.6} -\ctikzset{tripoles/european xnor port/input height/.initial=.6} -\ctikzset{tripoles/european nor port/width/.initial=1.4} -\ctikzset{tripoles/european nor port/not height/.initial=.3} -\ctikzset{tripoles/european nor port/not width/.initial=.8} -\ctikzset{tripoles/european nor port/height/.initial=.65} -\ctikzset{tripoles/european nor port/reserved/.initial=.6} -\ctikzset{tripoles/european nor port/input height/.initial=.6} -% variable number of inputs -\ctikzset{tripoles/european and port/origin/.initial=0.8} -\ctikzset{tripoles/european and port/inputs/.initial=2} -\ctikzset{tripoles/european nand port/origin/.initial=0.8} -\ctikzset{tripoles/european nand port/inputs/.initial=2} -\ctikzset{tripoles/european or port/origin/.initial=0.8} -\ctikzset{tripoles/european or port/inputs/.initial=2} -\ctikzset{tripoles/european nor port/origin/.initial=0.8} -\ctikzset{tripoles/european nor port/inputs/.initial=2} -\ctikzset{tripoles/european xor port/origin/.initial=0.8} -\ctikzset{tripoles/european xor port/inputs/.initial=2} -\ctikzset{tripoles/european xnor port/origin/.initial=0.8} -\ctikzset{tripoles/european xnor port/inputs/.initial=2} -\ctikzset{tripoles/european buffer port/origin/.initial=0.8} -\ctikzset{tripoles/european buffer port/inputs/.initial=1}% -\ctikzset{tripoles/european not port/origin/.initial=0.8} -\ctikzset{tripoles/european not port/inputs/.initial=1}% -%%% parameters that are not used anymore after multi-input -%%% gates --- left for compatibility of source code. -\ctikzset{tripoles/american xor port/aaa/.initial=.6} -\ctikzset{tripoles/american xor port/bbb/.initial=.4} -\ctikzset{tripoles/american xor port/ccc/.initial=.5} -\ctikzset{tripoles/american xor port/ddd/.initial=.0} -\ctikzset{tripoles/american xnor port/aaa/.initial=.6} -\ctikzset{tripoles/american xnor port/bbb/.initial=.4} -\ctikzset{tripoles/american xnor port/ccc/.initial=.5} -\ctikzset{tripoles/american xnor port/ddd/.initial=.0} -% switches for logic gates -% -\pgfkeys{/tikz/number inputs/.initial=0} -\pgfkeys{/tikz/number inputs/.default=0} - -%% flip-flop specific keys (most others are the same as chips) - -\ctikzset{multipoles/flipflop/font/.initial=\pgf@circ@font@small} -\ctikzset{multipoles/flipflop/fontud/.initial=\pgf@circ@font@tiny} -\ctikzset{multipoles/flipflop/width/.initial=1.2} -\ctikzset{multipoles/flipflop/pin spacing/.initial=0.6} -\ctikzset{multipoles/flipflop/clock wedge size/.initial=0.2} - -%% muxdemuxes keys - -\ctikzset{multipoles/muxdemux/base len/.initial=0.4} -\ctikzset{multipoles/muxdemux/Lh/.initial=8.0} -\ctikzset{multipoles/muxdemux/Rh/.initial=6.0} -\ctikzset{multipoles/muxdemux/w/.initial=3.0} -\ctikzset{multipoles/muxdemux/inset w/.initial=0.0} -\ctikzset{multipoles/muxdemux/inset Lh/.initial=0.0} -\ctikzset{multipoles/muxdemux/inset Rh/.initial=0.0} -\ctikzset{multipoles/muxdemux/NL/.initial=8} -\ctikzset{multipoles/muxdemux/NR/.initial=1} -\ctikzset{multipoles/muxdemux/NB/.initial=3} -\ctikzset{multipoles/muxdemux/NT/.initial=0} -\ctikzset{multipoles/muxdemux/square pins/.initial=0} -% -% switches for op amps -% changing input polarity -% -\newif\ifpgf@circuit@oa@iplusup\pgf@circuit@oa@iplusupfalse -\pgfkeys{/tikz/noinv input up/.add code={}{\pgf@circuit@oa@iplusuptrue}} -\ctikzset{noinv input up/.add code={}{\pgf@circuit@oa@iplusuptrue}} -\pgfkeys{/tikz/noinv input down/.add code={}{\pgf@circuit@oa@iplusupfalse}} -\ctikzset{noinv input down/.add code={}{\pgf@circuit@oa@iplusupfalse}} -% -% changing output polarity (for fully diff objects) -% -\newif\ifpgf@circuit@oa@oplusup\pgf@circuit@oa@oplusuptrue -\pgfkeys{/tikz/noinv output up/.add code={}{\pgf@circuit@oa@oplusuptrue}} -\ctikzset{noinv output up/.add code={}{\pgf@circuit@oa@oplusuptrue}} -\pgfkeys{/tikz/noinv output down/.add code={}{\pgf@circuit@oa@oplusupfalse}} -\ctikzset{noinv output down/.add code={}{\pgf@circuit@oa@oplusupfalse}} - -% Operational amplifier -\ctikzset{tripoles/op amp/width/.initial=1.7} % Total width -\ctikzset{tripoles/op amp/port width/.initial=.7} % Terminals length -\ctikzset{tripoles/op amp/height/.initial=1.4} % Total height -\ctikzset{tripoles/op amp/input height/.initial=.5} % Input port vertical separation -\ctikzset{tripoles/op amp/up pos/.initial=.45} % Top and bottom anchor position -\ctikzset{tripoles/op amp/font/.initial=\pgf@circ@font@tenbm} % Absolute font size needed! - -% Fully differential operational amplifier -\ctikzset{tripoles/fd op amp/width/.initial=1.7} % Total width -\ctikzset{tripoles/fd op amp/port width/.initial=.7} % Terminals length -\ctikzset{tripoles/fd op amp/height/.initial=1.4} % Total height -\ctikzset{tripoles/fd op amp/input height/.initial=.5} % Input port vertical separation -\ctikzset{tripoles/fd op amp/output height/.initial=.5} % Output port vertical separation -\ctikzset{tripoles/fd op amp/up pos/.initial=.45} % Top and bottom anchor position -\ctikzset{tripoles/fd op amp/font/.initial=\pgf@circ@font@tenbm} % Absolute font size needed! - -\ctikzset{tripoles/en amp/width/.initial=1.7} -\ctikzset{tripoles/en amp/port width/.initial=.7} -\ctikzset{tripoles/en amp/height/.initial=1.6} -\ctikzset{tripoles/en amp/input height/.initial=.3} -\ctikzset{tripoles/en amp/up pos/.initial=.45} -\ctikzset{tripoles/en amp/font/.initial=\pgf@circ@font@tenbm} % Absolute font size needed! -\ctikzset{tripoles/en amp/font2/.initial=\pgf@circ@font@twelve} % Absolute font size needed! -\ctikzset{tripoles/en amp/text/.initial={$\mathstrut{\triangleright}\,{\infty}$}} -\tikzset{ - en amp text/.code = {% - \ctikzsetvalof{tripoles/en amp/text}{#1}% - }, - en amp text A/.code = {% - \ctikzsetvalof{tripoles/en amp/text}{$\mathstrut{\triangleright}\,\mathrm{A}$}% - }, -} - -% Transconductance amplifier -\ctikzset{tripoles/gm amp/width/.initial=1.7} % Total width -\ctikzset{tripoles/gm amp/port width/.initial=.7} % Terminals length -\ctikzset{tripoles/gm amp/height/.initial=1.4} % Left side of the trapezoid -\ctikzset{tripoles/gm amp/height 2/.initial=0.5} % Right side of the trapezoid -\ctikzset{tripoles/gm amp/input height/.initial=.5} % Input port vertical separation -\ctikzset{tripoles/gm amp/up pos/.initial=.45} % Top and bottom anchor position -\ctikzset{tripoles/gm amp/font/.initial=\pgf@circ@font@tenbm} % Absolute font size needed! - -% Instrumentation amplifier -\ctikzset{tripoles/inst amp/width/.initial=1.7} % Total width -\ctikzset{tripoles/inst amp/port width/.initial=.7} % Terminals length -\ctikzset{tripoles/inst amp/height/.initial=1.4} % Left side of the trapezoid -\ctikzset{tripoles/inst amp/height 2/.initial=0.6} % Right side of the trapezoid -\ctikzset{tripoles/inst amp/input height/.initial=.5} % Input ports vertical separation -\ctikzset{tripoles/inst amp/up pos/.initial=.4} % Top and bottom anchor position -\ctikzset{tripoles/inst amp/refv pos/.initial=.7} % Top and bottom voltage reference position -\ctikzset{tripoles/inst amp/font/.initial=\pgf@circ@font@tenbm} % Absolute font size needed! - -% Instrumentation amplifier with differential output -\ctikzset{tripoles/fd inst amp/width/.initial=1.7} % Total width -\ctikzset{tripoles/fd inst amp/port width/.initial=.7} % Terminals length -\ctikzset{tripoles/fd inst amp/height/.initial=1.4} % Left side of the trapezoid -\ctikzset{tripoles/fd inst amp/height 2/.initial=0.6} % Right side of the trapezoid -\ctikzset{tripoles/fd inst amp/input height/.initial=.5} % Input ports vertical separation -\ctikzset{tripoles/fd inst amp/output height/.initial=.5} % Output ports vertical separation -\ctikzset{tripoles/fd inst amp/up pos/.initial=.4} % Top and bottom anchor position -\ctikzset{tripoles/fd inst amp/refv pos/.initial=.7} % Top and bottom voltage reference position -\ctikzset{tripoles/fd inst amp/font/.initial=\pgf@circ@font@tenbm} % Absolute font size needed! - -% Instrumentation amplifier with gain resistor terminals -\ctikzset{tripoles/inst amp ra/width/.initial=2.4} % Total width -\ctikzset{tripoles/inst amp ra/port width/.initial=.7} % Terminals length -\ctikzset{tripoles/inst amp ra/height/.initial=2.9} % Left side of the trapezoid -\ctikzset{tripoles/inst amp ra/height 2/.initial=0.4} % Right side of the trapezoid -\ctikzset{tripoles/inst amp ra/input height/.initial=.7} % Input ports vertical separation -\ctikzset{tripoles/inst amp ra/up pos/.initial=.4} % Top and bottom anchor position -\ctikzset{tripoles/inst amp ra/refv pos/.initial=.7} % Top and bottom voltage reference position -\ctikzset{tripoles/inst amp ra/ra pos/.initial=.6} % Gain resistor terminals vertical separation -\ctikzset{tripoles/inst amp ra/font/.initial=\pgf@circ@font@tenbm} % Absolute font size needed! - -% Plain amplifier -\ctikzset{tripoles/plain amp/width/.initial=1.7} % Total width -\ctikzset{tripoles/plain amp/port width/.initial=.7} % Terminals length -\ctikzset{tripoles/plain amp/height/.initial=1.4} % Total height -\ctikzset{tripoles/plain amp/input height/.initial=.5} % Input ports vertical separation -\ctikzset{tripoles/plain amp/up pos/.initial=.45} % Top and bottom anchor position - -% changing fonts and symbols of amplifiers -\ctikzset{amplifiers/symbol font/.code={% - \ctikzset{tripoles/inst amp ra/font=#1}% - \ctikzset{tripoles/fd inst amp/font=#1}% - \ctikzset{tripoles/inst amp/font=#1}% - \ctikzset{tripoles/gm amp/font=#1}% - \ctikzset{tripoles/en amp/font=#1}% - \ctikzset{tripoles/fd op amp/font=#1}% - \ctikzset{tripoles/op amp/font=#1}% -}} -\ctikzset{amplifiers/plus/.initial={$+$}} -\ctikzset{amplifiers/minus/.initial={$-$}} -\tikzset{amp symbol font/.code={% - \ctikzset{amplifiers/symbol font={#1}}% - } -} -\tikzset{amp plus/.code={\ctikzsetvalof{amplifiers/plus}{#1}}} -\tikzset{amp minus/.code={\ctikzsetvalof{amplifiers/minus}{#1}}} -\def\pgf@circ@ampli@plus{\ctikzvalof{amplifiers/plus}} -\def\pgf@circ@ampli@minus{\ctikzvalof{amplifiers/minus}} - -\ctikzset{tripoles/thyristor/height/.initial=1.10} -\ctikzset{tripoles/thyristor/height 2/.initial=.5} -\ctikzset{tripoles/thyristor/width/.initial=1.0} -\ctikzset{tripoles/thyristor/diode height/.initial=.5} -\ctikzset{tripoles/thyristor/diode width left/.initial=.4} -\ctikzset{tripoles/thyristor/diode width right/.initial=.3} - -\ctikzset{tripoles/triac/height/.initial=1.1} -\ctikzset{tripoles/triac/width/.initial=1} -\ctikzset{tripoles/triac/diode width left/.initial=.3} -\ctikzset{tripoles/triac/diode width right/.initial=.3} - -%% Cute switches -\ctikzset{bipoles/cuteswitch/shape/.initial={ocirc}} -\ctikzset{bipoles/cuteswitch/height/.initial=.6} -\ctikzset{bipoles/cuteswitch/height 2/.initial=.2} -\ctikzset{bipoles/cuteswitch/width/.initial=.50} -\ctikzset{bipoles/cuteswitch/thickness/.initial=1} - -\ctikzset{tripoles/spdt/width/.initial=.85} -\ctikzset{tripoles/spdt/height/.initial=.45} -\ctikzset{tripoles/spdt/margin/.initial=.45} - -\ctikzset{tripoles/toggleswitch/height/.initial=.8} -\ctikzset{tripoles/toggleswitch/height 2/.initial=.0} -\ctikzset{tripoles/toggleswitch/width/.initial=.80} - -\ctikzset{tripoles/mixer/width/.initial=0.7} -\ctikzset{tripoles/adder/width/.initial=0.7} -\ctikzset{tripoles/circulator/width/.initial=.7} -\ctikzset{tripoles/oscillator/width/.initial=.7} - - -\ctikzset{tripoles/wilkinson/height/.initial=1.3} -\ctikzset{tripoles/wilkinson/width/.initial=1.3} - -\ctikzset{quadpoles/transformer/inner/.initial=0.4} -\ctikzset{quadpoles/transformer/width/.initial=1.5} -\ctikzset{quadpoles/transformer/width1/.initial=.4} -\ctikzset{quadpoles/transformer/height/.initial=1.5} -\ctikzset{quadpoles/transformer/height1/.initial=.8} -\ctikzset{quadpoles/transformer core/inner/.initial=0.4} -\ctikzset{quadpoles/transformer core/width/.initial=1.5} -\ctikzset{quadpoles/transformer core/height/.initial=1.5} -\ctikzset{quadpoles/transformer core/core height/.initial=.5} -\ctikzset{quadpoles/transformer core/core width/.initial=.05} -\ctikzset{quadpoles/gyrator/inner/.initial=0.4} -\ctikzset{quadpoles/gyrator/width/.initial=1.5} -\ctikzset{quadpoles/gyrator/height/.initial=1.5} -\ctikzset{quadpoles/fourport/width/.initial=1.3} -\ctikzset{quadpoles/fourport/height/.initial=1.3} -\ctikzset{quadpoles/coupler/width/.initial=1.3} -\ctikzset{quadpoles/coupler/height/.initial=1.3} -\ctikzset{quadpoles/coupler2/width/.initial=1.3} -\ctikzset{quadpoles/coupler2/height/.initial=1.3} - -\ctikzset{/tikz/circuitikz/tripoles/magnetron/width/.initial=1} - -\ctikzset{quadpoles style/.is choice} -\ctikzset{quadpoles style/inward/.code={% default value - \ctikzset{quadpoles/transformer/inner=0.4}% - \ctikzset{quadpoles/transformer/width=1.5}% - \ctikzset{quadpoles/transformer core/inner=0.4}% - \ctikzset{quadpoles/transformer core/width=1.5}% - \ctikzset{quadpoles/gyrator/inner=0.4}% - \ctikzset{quadpoles/gyrator/width=1.5}% - }% -} -\ctikzset{quadpoles style/inline/.code={% now horizontal baffle - \ctikzset{quadpoles/transformer/inner=1}% - \ctikzset{quadpoles/transformer/width=0.6}% - \ctikzset{quadpoles/transformer core/inner=1}% - \ctikzset{quadpoles/transformer core/width=0.6}% - \ctikzset{quadpoles/gyrator/inner=1} % FIXME - \ctikzset{quadpoles/gyrator/width=0.6}% - }% -} - -% -% multipoles -% -\ctikzset{multipoles/thickness/.initial=2} -\ctikzset{multipoles/font/.initial=\pgf@circ@font@tiny} -% DIP (dual in line package) chips -\ctikzset{multipoles/dipchip/width/.initial=1.2} -\ctikzset{multipoles/dipchip/num pins/.initial=8} -\ctikzset{multipoles/dipchip/pin spacing/.initial=0.4} -\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/dipchip/num pins=#1}}} -% QFP (quad flat package) chips -\ctikzset{multipoles/qfpchip/num pins/.initial=8} -\ctikzset{multipoles/qfpchip/pin spacing/.initial=0.4} -\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/qfpchip/num pins=#1}}} -% chip numbers -\newif\ifpgf@circuit@chip@shownumbers\pgf@circuit@chip@shownumberstrue -\pgfkeys{/tikz/show numbers/.add code={}{\pgf@circuit@chip@shownumberstrue}} -\ctikzset{show numbers/.add code={}{\pgf@circuit@chip@shownumberstrue}} -\pgfkeys{/tikz/hide numbers/.add code={}{\pgf@circuit@chip@shownumbersfalse}} -\ctikzset{hide numbers/.add code={}{\pgf@circuit@chip@shownumbersfalse}} -\newif\ifpgf@circuit@chip@straightnumbers\pgf@circuit@chip@straightnumberstrue -\pgfkeys{/tikz/straight numbers/.add code={}{\pgf@circuit@chip@straightnumberstrue}} -\ctikzset{straight numbers/.add code={}{\pgf@circuit@chip@straightnumberstrue}} -\pgfkeys{/tikz/rotated numbers/.add code={}{\pgf@circuit@chip@straightnumbersfalse}} -\ctikzset{rotated numbers/.add code={}{\pgf@circuit@chip@straightnumbersfalse}} -% external chip pins -\ctikzset{multipoles/external pins thickness/.initial=1} -\ctikzset{multipoles/external pins width/.initial=0.2} -\ctikzset{multipoles/external pad fraction/.initial=0} -\pgfkeys{/tikz/external pins width/.add code={}{\ctikzset{multipoles/external pins width=#1}}} -\pgfkeys{/tikz/external pad fraction/.add code={}{\ctikzset{multipoles/external pad fraction=#1}}} -% topmarks -\newif\ifpgf@circuit@chip@topmark\pgf@circuit@chip@topmarktrue -\pgfkeys{/tikz/topmark/.add code={}{\pgf@circuit@chip@topmarktrue}} -\ctikzset{topmark/.add code={}{\pgf@circuit@chip@topmarktrue}} -\pgfkeys{/tikz/no topmark/.add code={}{\pgf@circuit@chip@topmarkfalse}} -\ctikzset{no topmark/.add code={}{\pgf@circuit@chip@topmarkfalse}} - -% rotary switch by Romano -\ctikzset{multipoles/rotary/thickness/.initial=1} -\ctikzset{multipoles/rotary/shape/.initial=ocirc} -\ctikzset{multipoles/rotary/channels/.initial=5} -\ctikzset{multipoles/rotary/angle/.initial=60} -\ctikzset{multipoles/rotary/wiper/.initial=20} -\ctikzset{multipoles/rotary/arrow/.is choice} -\newif\ifpgf@circ@rotaryarrow\pgf@circ@rotaryarrowfalse -\newif\ifpgf@circ@rotaryarrow@cw\pgf@circ@rotaryarrow@cwfalse -\newif\ifpgf@circ@rotaryarrow@ccw\pgf@circ@rotaryarrow@ccwfalse -\ctikzset{multipoles/rotary/arrow/none/.code={\pgf@circ@rotaryarrowfalse\pgf@circ@rotaryarrow@cwfalse\pgf@circ@rotaryarrow@ccwfalse}} -\ctikzset{multipoles/rotary/arrow/both/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwtrue\pgf@circ@rotaryarrow@ccwtrue}} -\ctikzset{multipoles/rotary/arrow/cw/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwtrue\pgf@circ@rotaryarrow@ccwfalse}} -\ctikzset{multipoles/rotary/arrow/ccw/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwfalse\pgf@circ@rotaryarrow@ccwtrue}} - -\tikzset{% - rotary switch/.style args={#1in#2wiper#3}{% - shape=rotaryswitch, - /tikz/circuitikz/multipoles/rotary/channels=#1, - /tikz/circuitikz/multipoles/rotary/angle=#2, - /tikz/circuitikz/multipoles/rotary/wiper=#3, - }, - rotary switch -/.style args={#1in#2wiper#3}{ - rotary switch=#1 in #2 wiper #3, - /tikz/circuitikz/multipoles/rotary/arrow=none, - }, - rotary switch <-/.style args={#1in#2wiper#3}{ - rotary switch=#1 in #2 wiper #3, - /tikz/circuitikz/multipoles/rotary/arrow=ccw, - }, - rotary switch ->/.style args={#1in#2wiper#3}{ - rotary switch=#1 in #2 wiper #3, - /tikz/circuitikz/multipoles/rotary/arrow=cw, - }, - rotary switch <->/.style args={#1in#2wiper#3}{ - rotary switch=#1 in #2 wiper #3, - /tikz/circuitikz/multipoles/rotary/arrow=both, - }, - % Notice that these should be the same as the initial values of the keys - rotary switch/.default={5 in 60 wiper 20}, - rotary switch -/.default={5 in 60 wiper 20}, - rotary switch <-/.default={5 in 60 wiper 20}, - rotary switch ->/.default={5 in 60 wiper 20}, - rotary switch <->/.default={5 in 60 wiper 20}, -} - -% %Mechanical section -\ctikzset{/tikz/circuitikz/tripoles/elmech/height/.initial=.8} -\ctikzset{/tikz/circuitikz/tripoles/elmech/width/.initial=.6} -\ctikzset{bipoles/spring/height/.initial=.5} -\ctikzset{bipoles/spring/width/.initial=.5} -\ctikzset{bipoles/inerter/height/.initial=.7} -\ctikzset{bipoles/inerter/width/.initial=.175} -\ctikzset{bipoles/mass/height/.initial=.55} -\ctikzset{bipoles/mass/box height/.initial=.4} -\ctikzset{bipoles/mass/width/.initial=.5} - -\ctikzset{bipoles/damper/height/.initial=.35} -\ctikzset{bipoles/damper/length/.initial=.3} -\ctikzset{bipoles/damper/width/.initial=.4} - - -\ctikzset{bipole/.is family} -\ctikzset{bipole/kind/.initial=} -\ctikzset{bipole/name/.initial=} -\newif\ifpgf@circuit@bipole@isvoltage -\ctikzset{bipole/is voltage/.is if=pgf@circuit@bipole@isvoltage} -\newif\ifpgf@circuit@bipole@voltageoutsideofsymbol -\ctikzset{bipole/is voltageoutsideofsymbol/.is if=pgf@circuit@bipole@voltageoutsideofsymbol} -\newif\ifpgf@circuit@bipole@strokedsymbol -\ctikzset{bipole/is strokedsymbol/.is if=pgf@circuit@bipole@strokedsymbol} -\newif\ifpgf@circuit@bipole@iscurrent -\ctikzset{bipole/is current/.is if=pgf@circuit@bipole@iscurrent} - -\ctikzset{bipole/voltage/.is family} -\newif\ifpgf@circuit@bipole@voltage@backward -\ctikzset{bipole/voltage/direction/.is choice} -\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}} -\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}} -\newif\ifpgf@circuit@bipole@voltage@below -\ctikzset{bipole/voltage/position/.is choice} -\ctikzset{bipole/voltage/position/above/.code={\pgf@circuit@bipole@voltage@belowfalse}} -\ctikzset{bipole/voltage/position/below/.code={\pgf@circuit@bipole@voltage@belowtrue}} - -\ctikzset{bipole/voltage/label/unit/.initial=} -\ctikzset{bipole/voltage/label/name/.initial=} - -\ctikzset{bipole/current/.is family} -\newif\ifpgf@circuit@bipole@current@backward -\ctikzset{bipole/current/direction/.is choice} -\ctikzset{bipole/current/direction/forward/.code={\pgf@circuit@bipole@current@backwardfalse}} -\ctikzset{bipole/current/direction/backward/.code={\pgf@circuit@bipole@current@backwardtrue}} -\newif\ifpgf@circuit@bipole@current@before -\ctikzset{bipole/current/x position/.is choice} -\ctikzset{bipole/current/x position/after/.code={\pgf@circuit@bipole@current@beforefalse}} -\ctikzset{bipole/current/x position/before/.code={\pgf@circuit@bipole@current@beforetrue}} -\newif\ifpgf@circuit@bipole@current@below -\ctikzset{bipole/current/y position/.is choice} -\ctikzset{bipole/current/y position/above/.code={\pgf@circuit@bipole@current@belowfalse}} -\ctikzset{bipole/current/y position/below/.code={\pgf@circuit@bipole@current@belowtrue}} -\ctikzset{bipole/current/label/unit/.initial=} -\ctikzset{bipole/current/label/name/.initial=} - -\ctikzset{bipole/flow/.is family} -\newif\ifpgf@circuit@bipole@flow@backward -\ctikzset{bipole/flow/direction/.is choice} -\ctikzset{bipole/flow/direction/forward/.code={\pgf@circuit@bipole@flow@backwardfalse}} -\ctikzset{bipole/flow/direction/backward/.code={\pgf@circuit@bipole@flow@backwardtrue}} -\newif\ifpgf@circuit@bipole@flow@before -\ctikzset{bipole/flow/x position/.is choice} -\ctikzset{bipole/flow/x position/after/.code={\pgf@circuit@bipole@flow@beforefalse}} -\ctikzset{bipole/flow/x position/before/.code={\pgf@circuit@bipole@flow@beforetrue}} -\newif\ifpgf@circuit@bipole@flow@below -\ctikzset{bipole/flow/y position/.is choice} -\ctikzset{bipole/flow/y position/above/.code={\pgf@circuit@bipole@flow@belowfalse}} -\ctikzset{bipole/flow/y position/below/.code={\pgf@circuit@bipole@flow@belowtrue}} -\ctikzset{bipole/flow/label/unit/.initial=} -\ctikzset{bipole/flow/label/name/.initial=} -\ctikzset{flow/distance/.initial = .5} -\ctikzset{flow/offset/.initial = .2}%distance between flow-arrow and conductor - -\ctikzset{bipole/label/.is family} -\ctikzset{bipole/label/position/.initial=90} -\ctikzset{bipole/label/unit/.initial=} -\ctikzset{bipole/label/name/.initial=} -\ctikzset{bipole/annotation/.is family} -\ctikzset{bipole/annotation/position/.initial=-90} -\ctikzset{bipole/annotation/unit/.initial=} -\ctikzset{bipole/annotation/name/.initial=} - -\newif\ifpgf@circuit@europeanresistor -\ctikzset{resistor/.is choice} -\ctikzset{resistor/american/.code = \pgf@circuit@europeanresistorfalse } -\ctikzset{resistor/european/.code = \pgf@circuit@europeanresistortrue } - -\ctikzset{inductor/.is choice} -\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}} -\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}} -\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}} - -% -% Flipping arrows in LED and photodiodes -% -\newif\ifpgf@led@fliparrows -\newif\ifpgf@pd@fliparrows -\pgf@led@fliparrowsfalse -\pgf@pd@fliparrowsfalse -% -% by default the arrows start (LED) and go (PD) to the anode. -% -\ctikzset{led arrows from anode/.code=\pgf@led@fliparrowsfalse} -\ctikzset{pd arrows to anode/.code=\pgf@pd@fliparrowsfalse} -% -% but they can start form the cathode (LED) or go to it (PD) -% -\ctikzset{led arrows from cathode/.code=\pgf@led@fliparrowstrue} -\ctikzset{pd arrows to cathode/.code=\pgf@pd@fliparrowstrue} - -\newif\ifpgf@circuit@strokediode -\newif\ifpgf@circuit@fulldiode -\pgf@circuit@strokediodefalse -\pgf@circuit@fulldiodefalse - -\ctikzset{diode/.is choice} -\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default -\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue } -\ctikzset{diode/stroke/.code = \pgf@circuit@strokediodetrue} - -\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full}} -\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty}} -\tikzset{stroke diodes/.style = { \circuitikzbasekey/diode = stroke}} - -\ctikzset{thickness/.initial=2} -\ctikzset{color/.initial=black} -\pgfkeys{/tikz/color/.add code={}{\ctikzset{color={#1}}}} - -\newif\ifpgf@circ@siunitx -\newif\ifpgf@circ@siunitx@res - -% -% voltage and current options -% - -\newif\ifpgf@circuit@europeancurrent -\newif\ifpgf@circuit@europeanvoltage -\newif\ifpgf@circuit@bipole@voltage@straight - -\ctikzset{voltage/.is choice} -% -% straight is expected to be a subset of european, so disable it in american style -% -\ctikzset{voltage/american/.code = {\pgf@circuit@europeanvoltagefalse\pgf@circuit@bipole@voltage@straightfalse}} -\ctikzset{voltage/european/.code = {\pgf@circuit@europeanvoltagetrue\pgf@circuit@bipole@voltage@straightfalse}} -\ctikzset{voltage/straight/.code = {\pgf@circuit@europeanvoltagetrue\pgf@circuit@bipole@voltage@straighttrue}} -\ctikzset{voltage/curved/.code = {\pgf@circuit@europeanvoltagetrue\pgf@circuit@bipole@voltage@straighttrue}} - -\ctikzset{current/.is choice} -\ctikzset{current/american/.code = \pgf@circuit@europeancurrentfalse} -\ctikzset{current/european/.code = \pgf@circuit@europeancurrenttrue} - -% this is left for backward compatibility... -\ctikzset{straight/.is choice} -\ctikzset{straight/true/.code = {\pgf@circuit@bipole@voltage@straighttrue}} -\ctikzset{straight/false/.code = {\pgf@circuit@bipole@voltage@straightfalse}} -\ctikzset{bipole/straight/.is if=pgf@circuit@bipole@voltage@straight} -% never used, removed (RG 2020-05-17) -% \ctikzset{straightvoltage value/.initial=true} -% \ctikzset{straightvoltage/.style = {/tikz/circuitikz/straight=true}} - -% -% voltage is used also to set parameters, apart for the /.is choice -% above. I hope it is ok --- would be a mess otherwise -% - -\ctikzset{voltage/distance from node/.initial=.5} %\pgf@circ@Rlen units -\ctikzset{voltage/distance from line/.initial=.08} % pos, tra 0 e 1 -\ctikzset{voltage/bump a/.initial=1.2} -\ctikzset{voltage/bump b/.initial=1.5} -\ctikzset{voltage/shift/.initial=0.0} % shift form the cable of voltage symbols -\ctikzset{voltage shift/.style={voltage/shift=#1}} -\tikzset{voltage shift/.style={\circuitikzbasekey/voltage/shift=#1}} -\ctikzset{voltage/european label distance/.initial=1.4} -\ctikzset{voltage/american label distance/.initial=1.1} -% shaping the +/- sign, see pgfcircvoltage.tex -\ctikzset{voltage/american font/.initial={}} -\ctikzset{voltage/american plus/.initial={$+$}} -\ctikzset{voltage/american minus/.initial={$-$}} - -% special cases for voltage positions -\ctikzset{bipoles/generic/voltage/distance from node/.initial=.4} -\ctikzset{bipoles/generic/voltage/bump b/.initial=2} -\ctikzset{bipoles/generic/voltage/european label distance/.initial=1.8} -%\ctikzset{bipoles/thermocouple/voltage/distance from node/.initial=.3} -\ctikzset{bipoles/thermocouple/voltage/bump b/.initial=2.2} -\ctikzset{bipoles/thermocouple/voltage/european label distance/.initial=1.5} -\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4} -\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2} -\ctikzset{bipoles/ageneric/voltage/european label distance/.initial=1.8} -\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4} -\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2} -\ctikzset{bipoles/fullgeneric/voltage/european label distance/.initial=1.8} -\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4} -\ctikzset{bipoles/memristor/voltage/bump b/.initial=2} -\ctikzset{bipoles/memristor/voltage/european label distance/.initial=1.8} -%\ctikzset{bipoles/tline/voltage/distance from node/.initial=.2} -\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4} -\ctikzset{bipoles/tline/voltage/european label distance/.initial=2.1} -%\ctikzset{bipoles/varistor/voltage/distance from node/.initial=.2} -\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4} -\ctikzset{bipoles/varistor/voltage/european label distance/.initial=2} -%\ctikzset{bipoles/photoresistor/voltage/distance from node/.initial=.2} -\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=2} -\ctikzset{bipoles/photoresistor/voltage/european label distance/.initial=1.8} -%\ctikzset{bipoles/thermistor/voltage/distance from node/.initial=.2} -\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4} -\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=2} -%\ctikzset{bipoles/thermistorntc/voltage/distance from node/.initial=.2} -\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6} -%\ctikzset{bipoles/thermistorptc/voltage/distance from node/.initial=.2} -\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6} -% -% american open voltage adjusting -% -\newif\ifpgf@adjust@open@voltage\pgf@adjust@open@voltagetrue -\ctikzset{american open voltage/.is choice} -\ctikzset{american open voltage/center/.code={\pgf@adjust@open@voltagetrue}} -\ctikzset{american open voltage/legacy/.code={\pgf@adjust@open@voltagefalse}} - -% -% currents -% -\ctikzset{current/distance/.initial = .5} - -% -% voltage and current styles -% - -\tikzset{american currents/.style = {\circuitikzbasekey/current = american}} -\tikzset{european currents/.style = {\circuitikzbasekey/current = european}} -\tikzset{american voltages/.style = {\circuitikzbasekey/voltage = american}} -\tikzset{european voltages/.style = {\circuitikzbasekey/voltage = european}} -\tikzset{straight voltages/.style = {\circuitikzbasekey/voltage = straight}} -\tikzset{american resistors/.style = {\circuitikzbasekey/resistor = american}} -\tikzset{european resistors/.style = {\circuitikzbasekey/resistor = european}} - -\newif\ifpgf@circuit@europeangfsurgearrester -\ctikzset{gas filled surge arrester choice/.is choice} -\ctikzset{gas filled surge arrester choice/european/.code= {\pgf@circuit@europeangfsurgearrestertrue}} -\ctikzset{gas filled surge arrester choice/american/.code= {\pgf@circuit@europeangfsurgearresterfalse}} - -\tikzset{american gas filled surge arrester set/.style = {\circuitikzbasekey/gas filled surge arrester choice=american}} -\tikzset{european gas filled surge arrester set/.style = {\circuitikzbasekey/gas filled surge arrester choice=european}} -\tikzset{american inductors/.style = {\circuitikzbasekey/inductor = american}} -\tikzset{european inductors/.style = {\circuitikzbasekey/inductor = european}} -\tikzset{cute inductors/.style = {\circuitikzbasekey/inductor = cute}} -\tikzset{american ports/.style = {\circuitikzbasekey/logic ports = american}} -\tikzset{european ports/.style = {\circuitikzbasekey/logic ports = european}} - -% -% general styles -% - -\tikzset{european/.style = {european currents, european voltages, european resistors, european inductors, european ports, european gas filled surge arrester set}} -\tikzset{american/.style = {american currents, american voltages, american resistors, american inductors, american ports, american gas filled surge arrester set}} -\tikzset{cute/.style = {european currents, european voltages, american resistors, cute inductors, american ports}} - - -% noise sources -\ctikzset{bipoles/noise sources/fillcolor/.initial=gray!50} - -\ctikzset{label/align/.is choice} -\ctikzset{label/align/straight/.code={\ctikzsetvalof{label/align}{straight}}} -\ctikzset{label/align/rotate/.code={\ctikzsetvalof{label/align}{rotate}}} -\ctikzset{label/align/smart/.code={\ctikzsetvalof{label/align}{smart}}} - -% seven segment displays by RGtti - -\newif\ifpgf@circ@sevenseg@dot -\newif\ifpgf@circ@sevenseg@box -\def\pgf@circ@sevenseg@dotstate{empty} -\ctikzset{seven seg/.is family} -\ctikzset{seven seg/dot/.is choice} -% none means no dot, not space for it. Empty means no dot, but space -\ctikzset{seven seg/dot/none/.code={\pgf@circ@sevenseg@dotfalse}} -\ctikzset{seven seg/dot/empty/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{empty}}} -\ctikzset{seven seg/dot/off/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{off}}} -\ctikzset{seven seg/dot/on/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{on}}} -% -\ctikzset{seven seg/width/.initial=0.4}% relative to \pgf@circ@Rlen -\ctikzset{seven seg/thickness/.initial=4pt}% segment thickness -\ctikzset{seven seg/segment sep/.initial=0.2pt}% gap between segments -\ctikzset{seven seg/box sep/.initial=1pt}% external box gap -\ctikzset{seven seg/color on/.initial=red}% color for segment "on" -\ctikzset{seven seg/color off/.initial=gray!20!white} % ...and "off" -\ctikzset{seven seg/box/.is choice} -\ctikzset{seven seg/box/off/.code={\pgf@circ@sevenseg@boxfalse}} -\ctikzset{seven seg/box/on/.code={\pgf@circ@sevenseg@boxtrue}} - -\ctikzset{seven seg/bits/.initial=0000000} - -\ctikzset{seven seg/value/.code={% - \edef\@@tmp{#1}% - \edef\@@n{0} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111110}\fi - \edef\@@n{1} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110000}\fi - \edef\@@n{2} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1101101}\fi - \edef\@@n{3} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111001}\fi - \edef\@@n{4} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110011}\fi - \edef\@@n{5} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011011}\fi - \edef\@@n{6} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011111}\fi - \edef\@@n{7} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110000}\fi - \edef\@@n{8} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111111}\fi - \edef\@@n{9} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111011}\fi - \edef\@@n{10}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi - \edef\@@n{11}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi - \edef\@@n{12}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi - \edef\@@n{13}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi - \edef\@@n{14}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi - \edef\@@n{15}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi - \edef\@@n{A} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi - \edef\@@n{B} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi - \edef\@@n{C} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi - \edef\@@n{D} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi - \edef\@@n{E} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi - \edef\@@n{F} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi - \edef\@@n{a} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi - \edef\@@n{b} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi - \edef\@@n{c} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi - \edef\@@n{d} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi - \edef\@@n{e} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi - \edef\@@n{f} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi - \edef\@@n{-} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0000001}\fi -}} - -\tikzset{% - seven segment val/.style args={#1dot#2box#3}{% - shape=bare7seg, - /tikz/circuitikz/seven seg/value=#1, - /tikz/circuitikz/seven seg/dot=#2, - /tikz/circuitikz/seven seg/box=#3, - }, - seven segment bits/.style args={#1dot#2box#3}{% - shape=bare7seg, - /tikz/circuitikz/seven seg/bits=#1, - /tikz/circuitikz/seven seg/dot=#2, - /tikz/circuitikz/seven seg/box=#3, - }, -} - - -%%%%%%%%%% new -\pgfkeys{\circuitikzbasekey/.search also={/tikz}} - -% Electronic tubes: diodetube, triode, tetrode and pentode -\ctikzset{tubes/width/.initial=1} % relative width -\ctikzset{tubes/height/.initial=1.4} % relative height -\ctikzset{tubes/tube radius/.initial=0.40} % radius of tube circle -\ctikzset{tubes/anode distance/.initial=0.40} % distance from center -\ctikzset{tubes/anode width/.initial=0.40} % width of an anode/plate -\ctikzset{tubes/grid protrusion/.initial=0.25} % distance from center -\ctikzset{tubes/grid dashes/.initial=5} % number of grid dashes -\ctikzset{tubes/grid separation/.initial=0.2} % separation between grids -\ctikzset{tubes/grid shift/.initial=0.0} % y shift grids from center -\ctikzset{tubes/cathode distance/.initial=0.40} % distance from grid -\ctikzset{tubes/cathode width/.initial=0.40} % width of an cathode -\ctikzset{tubes/cathode corners/.initial=0.06} % corners of the cathode wire -\ctikzset{tubes/cathode right extend/.initial=0.075} % extension at the right side -\ctikzset{tubes/filament distance/.initial=0.1} % distance from cathode -\ctikzset{tubes/filament angle/.initial=15} % Angle from centerpoint - -\newif\ifpgf@circuit@tubes@filament\pgf@circuit@tubes@filamentfalse -\pgfkeys{/tikz/filament/.add code={}{\pgf@circuit@tubes@filamenttrue}} -\ctikzset{tubes/filament/.add code={}{\pgf@circuit@tubes@filamenttrue}} -\newif\ifpgf@circuit@tubes@nocathode\pgf@circuit@tubes@nocathodefalse -\pgfkeys{/tikz/nocathode/.add code={}{\pgf@circuit@tubes@nocathodetrue}} -\ctikzset{tubes/nocathode/.add code={}{\pgf@circuit@tubes@nocathodetrue}} -\newif\ifpgf@circuit@tubes@fullcathode\pgf@circuit@tubes@fullcathodefalse -\pgfkeys{/tikz/fullcathode/.add code={}{\pgf@circuit@tubes@fullcathodetrue}} -\ctikzset{tubes/fullcathode/.add code={}{\pgf@circuit@tubes@fullcathodetrue}} - -% powerelectronic blocks -\ctikzset{bipoles/sacdc/width/.initial=.7} -\ctikzset{bipoles/sdcac/width/.initial=.7} -\ctikzset{bipoles/tacdc/width/.initial=.7} -\ctikzset{bipoles/tdcac/width/.initial=.7} -\ctikzset{quadpoles/gridnode/width/.initial=.7} %not sure if quadpole? - -%%%---------- close: tex/pgfcirc.defines -%%%%%%%%%%% Springe nach tex/pgfcircutils -%%%---------- open: tex/pgfcircutils.tex -% 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. - -\def\pgf@circ@handleSI#1{ - \noexpandarg - \def\pgf@temp{} - \StrBetween{#1}{<}{>}[\pgf@circ@handleSI@unit] - \StrLen{\pgf@circ@handleSI@unit}[\pgf@circ@handleSI@unit@len] - - \ifnum\pgf@circ@handleSI@unit@len=0 - \pgf@circ@siunitx@resfalse - \else - \IfEndWith{#1}{>}{ - \pgf@circ@siunitx@restrue - \noexpandarg - \StrBefore{#1}{<}[\pgf@circ@handleSI@val] - %\typeout{si |#1|} - }{ - \pgf@circ@siunitx@resfalse - %\typeout{no si |#1|} - } -\fi -} - -\def\pgf@circ@ifkeyempty#1{ - \pgfextra{ - \ctikzset{#1/.get=\pgf@circ@temp} - \edef\pgf@temp{} - } - \ifx\pgf@circ@temp\pgf@temp - } - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Math routines - -\def\pgf@circ@stripdecimals#1.#2\pgf@nil{#1} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% useful commands - -\ifpgfutil@format@is@latex - %% flipping text - \def\ctikzflipx#1{\scalebox{-1}[1]{#1}} - \def\ctikzflipy#1{\scalebox{1}[-1]{#1}} - \def\ctikzflipxy#1{\scalebox{-1}[-1]{#1}} - % text mode overbar - % Thanks to @egreg https://tex.stackexchange.com/a/24133/38080 - \def\ctikztextnot#1{$\overline{\hbox{#1}}\m@th$} -\else\ifpgfutil@format@is@plain - % text mode overbar - % Thanks to @egreg https://tex.stackexchange.com/a/24133/38080 - \def\ctikztextnot#1{$\overline{\hbox{#1}}$} -\else\ifpgfutil@format@is@context - % text mode overbar - % Thanks to @egreg https://tex.stackexchange.com/a/24133/38080 - \def\ctikztextnot#1{$\overline{\hbox{#1}}$} -\fi\fi\fi - -%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% switch to use fpu in reciprocal scale transformations -%% -%% this code has been contributed by Schrödinger's cat -%% https://tex.stackexchange.com/a/529159/38080 -%% -\tikzset{use fpu reciprocal/.code={% -\def\pgfmathreciprocal@##1{% - \begingroup - \pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}% - \pgfmathparse{1/##1}% - \pgfmath@smuggleone\pgfmathresult - \endgroup -}}}% - -%%%---------- close: tex/pgfcircutils - -%%%%%%%%%%% Springe nach tex/pgfcircshapes -%%%---------- open: tex/pgfcircshapes.tex -% 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. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Other shapes - -%% Nothing - -\pgfdeclareshape{emptyshape}{ - \savedanchor{\northeast}{% - \pgf@x=.5\wd\pgfnodeparttextbox% - \pgf@y=.5\ht\pgfnodeparttextbox% - } - \anchor{north}{\northeast\pgf@x=0cm\relax} - \anchor{east}{\northeast\pgf@y=0cm\relax} - \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax} - \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x} - \anchor{north east}{\northeast} - \anchor{north west}{\northeast\pgf@x=-\pgf@x} - \anchor{south east}{\northeast\pgf@y=-\pgf@y} - \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x} - \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}} - \anchor{center}{ - \pgfpointorigin - } -} -% -% Provision for changing opacity. Only expert use, see the manual. -% -\ctikzset{poles/open fill opacity/.initial=1.0}% better not touch it -\tikzset{open poles opacity/.code={% - \ctikzset{poles/open fill opacity=#1}% -}} -\ctikzset{poles/full fill opacity/.initial=1.0}% better not touch it -\tikzset{full poles opacity/.code={% - \ctikzset{poles/full fill opacity=#1}% -}} - -%% Full terminal - -\pgfdeclareshape{circ}{ - \anchor{center}{ - \pgfpointorigin - } - \savedanchor\northwest{% - \pgf@y=\ctikzvalof{nodes width}\pgf@circ@Rlen - \pgf@x=-\pgf@y - } - \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } - \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{west}{ \northwest \pgf@y=0pt } - \anchor{w}{ \northwest \pgf@y=0pt } - \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{north}{ \northwest \pgf@x=0pt } - \anchor{n}{ \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{ - \pgf@circ@res@left=\pgf@x - \pgf@circ@res@up=\pgf@y - \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up} - }{\pgfpoint{\ctikzvalof{nodes width}*\pgf@circ@Rlen}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}} - } - \behindforegroundpath{ - - \pgfscope - \pgfpathcircle{\pgfpointorigin}{\ctikzvalof{nodes width}*\pgf@circ@Rlen} - \pgfsetcolor{\ctikzvalof{color}} - \pgfsetfillopacity{\ctikzvalof{poles/full fill opacity}}% normally 1.0 - \pgfusepath{draw,fill} - \endpgfscope - - } -} - -%% Empty round terminal - -\pgfdeclareshape{ocirc}{ - \anchor{center}{ - \pgfpointorigin - } - \savedanchor\northwest{% - \pgf@y=\ctikzvalof{nodes width}\pgf@circ@Rlen - \pgf@x=-\pgf@y - } - \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } - \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{west}{ \northwest \pgf@y=0pt } - \anchor{w}{ \northwest \pgf@y=0pt } - \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{north}{ \northwest \pgf@x=0pt } - \anchor{n}{ \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{ - \pgf@circ@res@left=\pgf@x - \pgf@circ@res@up=\pgf@y - \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up} - }{\pgfpoint{\ctikzvalof{nodes width}*\pgf@circ@Rlen}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}} - } - - \behindforegroundpath{ - - \pgfscope - \pgfpathcircle{\pgfpointorigin}{\ctikzvalof{nodes width}*\pgf@circ@Rlen} - \pgfsetcolor{\ctikzvalof{color}} - \ifx\tikz@fillcolor\pgfutil@empty - % set the default fill color to white - \pgfsetfillcolor{white} - % ...but override it if the class is defined! - % note that this element has no class, but will inherit it when used - % into another component - \pgf@circ@setifdefinedfill{draw, fill}{draw, fill} - \else - \pgfsetfillcolor{\tikz@fillcolor} - \fi - \pgfsetfillopacity{\ctikzvalof{poles/open fill opacity}}% normally 1.0 - \pgfusepath{draw,fill} - \endpgfscope - - } -} - -%% Diamond terminal - -\pgfdeclareshape{diamondpole}{ - \anchor{center}{ - \pgfpointorigin - } - \savedanchor\northwest{% - \pgfmathsetlength{\pgf@y}{sqrt(2)*\ctikzvalof{nodes width}*\pgf@circ@Rlen} - \pgf@x=-\pgf@y - } - \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } - \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{west}{ \northwest \pgf@y=0pt } - \anchor{w}{ \northwest \pgf@y=0pt } - \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{north}{ \northwest \pgf@x=0pt } - \anchor{n}{ \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{ - % \typeout{IN\space X:\the\pgf@x\space Y:\the\pgf@y} - \pgfmathsetmacro{\@@switchx}{ifthenelse(\pgf@x>0,1,-1)} - \pgfmathsetmacro{\@@switchy}{ifthenelse(\pgf@y>0,1,-1)} - \pgfmathsetlength{\pgf@xa}{abs(\pgf@x)} - \pgfmathsetlength{\pgf@ya}{abs(\pgf@y)} - \pgfextracty{\pgf@circ@res@up}{\northwest} - % \typeout{MID\space X:\the\pgf@xa\space Y:\the\pgf@ya\space L:\the\pgf@circ@res@up} - % \typeout{MID\space SX:\@@switchx\space SY:\@@switchy} - \pgfpointintersectionoflines - {\pgfpointorigin}{\pgfqpoint{\pgf@xa}{\pgf@ya}} - {\pgfqpoint{0pt}{\pgf@circ@res@up}}{\pgfqpoint{\pgf@circ@res@up}{0pt}} - % \typeout{CROSS \space X:\the\pgf@x\space Y:\the\pgf@y} - \pgf@x=\@@switchx\pgf@x - \pgf@y=\@@switchy\pgf@y - } - \behindforegroundpath{ - \pgfscope - \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen} - \pgftransformrotate{45} - \pgfpathrectanglecorners - {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}} - {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}} - \pgfsetcolor{\ctikzvalof{color}} - \pgfsetfillopacity{\ctikzvalof{poles/full fill opacity}}% normally 1.0 - \pgfusepath{draw,fill} - \endpgfscope - } -} - -%% Diamond terminal, unfilled - -\pgfdeclareshape{odiamondpole}{ - \anchor{center}{ - \pgfpointorigin - } - \savedanchor\northwest{% - \pgfmathsetlength{\pgf@y}{sqrt(2)*\ctikzvalof{nodes width}*\pgf@circ@Rlen} - \pgf@x=-\pgf@y - } - \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } - \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{west}{ \northwest \pgf@y=0pt } - \anchor{w}{ \northwest \pgf@y=0pt } - \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{north}{ \northwest \pgf@x=0pt } - \anchor{n}{ \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{ - % \typeout{IN\space X:\the\pgf@x\space Y:\the\pgf@y} - \pgfmathsetmacro{\@@switchx}{ifthenelse(\pgf@x>0,1,-1)} - \pgfmathsetmacro{\@@switchy}{ifthenelse(\pgf@y>0,1,-1)} - \pgfmathsetlength{\pgf@xa}{abs(\pgf@x)} - \pgfmathsetlength{\pgf@ya}{abs(\pgf@y)} - \pgfextracty{\pgf@circ@res@up}{\northwest} - % \typeout{MID\space X:\the\pgf@xa\space Y:\the\pgf@ya\space L:\the\pgf@circ@res@up} - % \typeout{MID\space SX:\@@switchx\space SY:\@@switchy} - \pgfpointintersectionoflines - {\pgfpointorigin}{\pgfqpoint{\pgf@xa}{\pgf@ya}} - {\pgfqpoint{0pt}{\pgf@circ@res@up}}{\pgfqpoint{\pgf@circ@res@up}{0pt}} - % \typeout{CROSS \space X:\the\pgf@x\space Y:\the\pgf@y} - \pgf@x=\@@switchx\pgf@x - \pgf@y=\@@switchy\pgf@y - } - \behindforegroundpath{ - \pgfscope - \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen} - \pgftransformrotate{45} - \pgfpathrectanglecorners - {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}} - {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}} - \pgfsetcolor{\ctikzvalof{color}} - \ifx\tikz@fillcolor\pgfutil@empty - % set the default fill color to white - \pgfsetfillcolor{white} - % ...but override it if the class is defined! - % note that this element has no class, but will inherit it when used - % into another component - \pgf@circ@setifdefinedfill{draw, fill}{draw, fill} - \else - \pgfsetfillcolor{\tikz@fillcolor} - \fi - \pgfsetfillopacity{\ctikzvalof{poles/open fill opacity}}% normally 1.0 - \pgfusepath{draw,fill} - \endpgfscope - } -} - -%% square terminal, filled - -\pgfdeclareshape{squarepole}{ - \anchor{center}{ - \pgfpointorigin - } - \savedanchor\northwest{% - \pgfmathsetlength{\pgf@y}{\ctikzvalof{nodes width}*\pgf@circ@Rlen} - \pgf@x=-\pgf@y - } - \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } - \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{west}{ \northwest \pgf@y=0pt } - \anchor{w}{ \northwest \pgf@y=0pt } - \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{north}{ \northwest \pgf@x=0pt } - \anchor{n}{ \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{ - \pgf@xa=\pgf@x - \pgf@ya=\pgf@y - \pgfextracty{\pgf@circ@res@up}{\northwest} - \pgfpointborderrectangle - {\pgfqpoint{\pgf@xa}{\pgf@ya}} - {\pgfqpoint{\pgf@circ@res@up}{\pgfqpoint{\pgf@circ@res@up}}} - } - \behindforegroundpath{ - \pgfscope - \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen} - \pgfpathrectanglecorners - {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}} - {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}} - \pgfsetcolor{\ctikzvalof{color}} - \pgfsetfillopacity{\ctikzvalof{poles/full fill opacity}}% normally 1.0 - \pgfusepath{draw,fill} - \endpgfscope - } -} -%% square terminal, unfilled - -\pgfdeclareshape{osquarepole}{ - \anchor{center}{ - \pgfpointorigin - } - \savedanchor\northwest{% - \pgfmathsetlength{\pgf@y}{\ctikzvalof{nodes width}*\pgf@circ@Rlen} - \pgf@x=-\pgf@y - } - \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } - \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{west}{ \northwest \pgf@y=0pt } - \anchor{w}{ \northwest \pgf@y=0pt } - \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{north}{ \northwest \pgf@x=0pt } - \anchor{n}{ \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{ - \pgf@xa=\pgf@x - \pgf@ya=\pgf@y - \pgfextracty{\pgf@circ@res@up}{\northwest} - \pgfpointborderrectangle - {\pgfqpoint{\pgf@xa}{\pgf@ya}} - {\pgfqpoint{\pgf@circ@res@up}{\pgfqpoint{\pgf@circ@res@up}}} - } - \behindforegroundpath{ - \pgfscope - \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen} - \pgfpathrectanglecorners - {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}} - {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}} - \pgfsetcolor{\ctikzvalof{color}} - \ifx\tikz@fillcolor\pgfutil@empty - % set the default fill color to white - \pgfsetfillcolor{white} - % ...but override it if the class is defined! - % note that this element has no class, but will inherit it when used - % into another component - \pgf@circ@setifdefinedfill{draw, fill}{draw, fill} - \else - \pgfsetfillcolor{\tikz@fillcolor} - \fi - \pgfsetfillopacity{\ctikzvalof{poles/open fill opacity}}% normally 1.0 - \pgfusepath{draw,fill} - \endpgfscope - } -} -% BNC connector - -\pgfdeclareshape{bnc}{ - \anchor{center}{ - \pgfpointorigin - } - % BNC size is 2.5 times the size of the internal "ocirc" - \savedanchor\northwest{% - \pgf@y=\ctikzvalof{nodes width}\pgf@circ@Rlen - \pgf@y=2.5\pgf@y - \pgf@x=-\pgf@y - } - % center is on the opening - \anchor{center}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{zero}{ \pgfpointorigin } - \anchor{hot}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{shield}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - % geo-anchors - \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{right}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{west}{ \northwest \pgf@y=0pt } - \anchor{left}{ \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 } - % put the node text above and centered - \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest} - \pgfpoint{-.5\wd\pgfnodeparttextbox}{ - \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax - } - } - \anchorborder{ - \pgf@circ@res@left=\pgf@x - \pgf@circ@res@up=\pgf@y - \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up} - }{\pgfpoint{2.5*\ctikzvalof{nodes width}*\pgf@circ@Rlen}{2.5*\ctikzvalof{nodes width}*\pgf@circ@Rlen}} - } - \behindforegroundpath{ - \pgfextracty{\pgf@circ@res@other}{\northwest} - \pgf@circ@res@step=\ctikzvalof{nodes width}\pgf@circ@Rlen - \pgfscope - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@setlinewidth{bipoles}{\pgflinewidth} - \pgfsetcolor{\ctikzvalof{color}} - % external circle - \pgfscope - % clipping path: first a rectangle bigger then the shape - % to avoid problems with the line thickness - \pgfpathrectanglecorners{\pgfpoint{-2\pgf@circ@res@other}{-2\pgf@circ@res@other}} - {\pgfpoint{2\pgf@circ@res@other}{2\pgf@circ@res@other}} - % next the opening to the right - \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}} - {\pgfpoint{2\pgf@circ@res@other}{\pgf@circ@res@step}} - % do the difference and clip before drawing - \pgfseteorule - \pgfusepath{clip} - \pgfpathcircle{\pgfpointorigin}{\pgf@circ@res@other} - \pgfusepath{draw} - \endpgfscope - % internal circle - \pgfpathcircle{\pgfpointorigin}{\pgf@circ@res@step} - \pgf@circ@draworfill - % and the contact line to the right - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfusepath{draw} - \endpgfscope - } -} - -%% Fill for correct rectangular joins - -\pgfdeclareshape{rectjoinfill}{ - \savedanchor{\northeast}{% - \pgf@x=.5\pgflinewidth% - \pgf@y=.5\pgflinewidth% - } - \anchor{north}{\northeast\pgf@x=0cm\relax} - \anchor{east}{\northeast\pgf@y=0cm\relax} - \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax} - \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x} - \anchor{north east}{\northeast} - \anchor{north west}{\northeast\pgf@x=-\pgf@x} - \anchor{south east}{\northeast\pgf@y=-\pgf@y} - \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x} - \anchor{center}{ - \pgfpointorigin - } - \anchorborder{ - \pgf@circ@res@left=\pgf@x - \pgf@circ@res@up=\pgf@y - } - \behindforegroundpath{ - \pgfscope - \pgfpathrectanglecorners - {\pgfpoint{0}{.5\pgflinewidth}} - {\pgfpoint{0}{-.5\pgflinewidth}} - \pgfsetcolor{\ctikzvalof{color}} - \pgfusepath{draw,fill} - \endpgfscope - } -} - -%% transistor arrow - -\def\pgf@circ@find@linescale{ - % find the scale inverse of the scale factor: line width do not scale - % with scale=..., transform shape so we have to counteract it. - \iftikz@fullytransformed % this is true if `transform shape` is active - % from @Circumscribe https://tex.stackexchange.com/a/474035/38080 - % Note that this trick is not working inside a `spy` environment... - \pgfgettransformentries{\scaleA}{\scaleB}{\scaleC}{\scaleD}{\whatevs}{\whatevs}% - \pgfmathsetmacro{\@@factor}{1.0/sqrt(abs(\scaleA*\scaleD-\scaleB*\scaleC))}% - \else - \pgfmathsetmacro{\@@factor}{1.0} - \fi -} - -\pgfdeclareshape{trarrow}{% - % this arrow is only filled but grows with the linewidth, more or less - % like currarrow do - \savedanchor{\northeast}{% - \pgf@circ@res@step = \pgf@circ@Rlen - \pgf@circ@find@linescale - \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale} - \pgfpoint{0.7*\pgf@circ@res@step +0.5*\@@factor*\pgflinewidth} - {0.8*\pgf@circ@res@step+0.7593*\@@factor*\pgflinewidth} - } - % The arrow size should be more or less the same of a currarrow, which is - % both filled and stroke, for backward output compatibility (more or less) - % - % angle \beta W is \pgf@circ@Rlen/\ctikzvalof{current arrow scale} - % |-\__ currarrow as the tip at (W,0) - % | | and the upper tail at (-0.7*W, 0.8*W) - % | \__ it then "overshoot" do to the linew width L - % | \__ xangle \alpha - % ---0-------> - % - % \beta = atan(0.7/0.8) \alpha=atan(0.8/1.7) - % tip overshoot is (L/2)/sin(\alpha) = 1.743*L only in x direction - % tail overshoot is -(L/2) in x, and (L/2)/sin(\beta) = 0.7539*L in y - % - \savedanchor{\northwest}{% - \pgf@circ@res@step = \pgf@circ@Rlen - \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale} - \pgf@circ@find@linescale - \pgfpoint{-0.7*\pgf@circ@res@step -0.5*\@@factor*\pgflinewidth} - {0.8*\pgf@circ@res@step+0.7593*\@@factor*\pgflinewidth} - } - \savedanchor{\tip}{% - \pgf@circ@res@step = \pgf@circ@Rlen - \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale} - \pgf@circ@find@linescale - \pgfpoint{\pgf@circ@res@step + 1.743*\@@factor*\pgflinewidth}{0pt} - } - \anchor{north}{\northeast\pgf@x=0cm\relax} - \anchor{east}{\northeast\pgf@y=0cm\relax} - \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax} - \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x} - \anchor{north east}{\northeast} - \anchor{north west}{\northeast\pgf@x=-\pgf@x} - \anchor{south east}{\northeast\pgf@y=-\pgf@y} - \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x} - \anchor{center}{ - \pgfpointorigin - } - \anchor{tip}{ - \tip - } - \anchor{btip}{% this anchor is behind the tip of half a linewidth - \tip - \pgf@circ@find@linescale - \pgf@circ@res@temp=\@@factor\pgflinewidth - \advance\pgf@x by -.5\pgf@circ@res@temp - } - \behindforegroundpath{ - \pgfscope - \northwest - \pgf@circ@res@up=\pgf@y - \pgf@circ@res@left=\pgf@x - \tip - \pgf@circ@res@step = \pgf@x - % - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}} - \pgfpathclose - \pgfsetcolor{\ctikzvalof{color}} - \pgfusepath{fill} % just fill - \endpgfscope - } -} - -%% Current arrow - -\pgfdeclareshape{currarrow}{ - \savedanchor{\northeast}{% - \pgf@circ@res@step = \pgf@circ@Rlen - \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale} - \pgf@x=.5\pgf@circ@res@step - \pgf@y=\pgf@x% - } - \anchor{north}{\northeast\pgf@x=0cm\relax} - \anchor{east}{\northeast\pgf@y=0cm\relax} - \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax} - \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x} - \anchor{north east}{\northeast} - \anchor{north west}{\northeast\pgf@x=-\pgf@x} - \anchor{south east}{\northeast\pgf@y=-\pgf@y} - \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x} - \anchor{center}{ - \pgfpointorigin - } - \anchor{tip}{ - \pgfpointorigin - \pgf@circ@res@step = \pgf@circ@Rlen - \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale} - \pgf@x =\pgf@circ@res@step - } - \behindforegroundpath{ - \pgfscope - \pgf@circ@res@step = \pgf@circ@Rlen - \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale} - - \pgfpathmoveto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{.8\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}} - \pgfsetcolor{\ctikzvalof{color}} - \pgfusepath{draw,fill} - - \endpgfscope - } -} - -%% Flow arrow - -\pgfdeclareshape{flowarrow}{ - \savedanchor{\northeast}{% - \pgf@circ@res@step = \pgf@circ@Rlen - \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale} - \pgf@y=.5\pgf@circ@res@step - \pgf@circ@res@step = \pgf@circ@Rlen - \divide \pgf@circ@res@step by 4 - \pgf@x=\pgf@circ@res@step% - } - \anchor{north}{\northeast\pgf@x=0cm\relax} - \anchor{east}{\northeast\pgf@y=0cm\relax} - \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax} - \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x} - \anchor{north east}{\northeast} - \anchor{north west}{\northeast\pgf@x=-\pgf@x} - \anchor{south east}{\northeast\pgf@y=-\pgf@y} - \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x} - \anchor{text}{% text centered above - \pgfpointorigin - \pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox} - } - \anchor{center}{ - \pgfpointorigin - } - \anchor{tip}{ - \pgfpointorigin - \pgf@circ@res@step = \pgf@circ@Rlen - \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale} - \pgf@x =\pgf@circ@res@step - } - \behindforegroundpath{ - \pgfscope - \pgf@circ@res@step = \pgf@circ@Rlen - \divide \pgf@circ@res@step by 4 - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfsetcolor{\ctikzvalof{color}} - \pgfusepath{draw} - \pgftransformshift{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfnode{currarrow}{tip}{}{}{\pgfusepath{fill}} - \endpgfscope - } -} - -%% Input arrow - -\pgfdeclareshape{inputarrow}{ - \savedanchor{\northeast}{% this is really not northeast, really -northwest - \pgf@circ@res@step = \pgf@circ@Rlen - \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale} - \pgf@y=.5\pgf@circ@res@step - \pgf@x=1.7\pgf@circ@res@step - } - \anchor{north}{\northeast\pgf@x=0cm\relax} - \anchor{east}{\northeast\pgf@y=0cm\relax\pgf@x=0cm\relax} - \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax} - \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x} - \anchor{north east}{\northeast\pgf@x=0cm\relax} - \anchor{north west}{\northeast\pgf@x=-\pgf@x} - \anchor{south east}{\northeast\pgf@y=-\pgf@y\pgf@x=0cm\relax} - \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x} - \savedanchor{\tip}{ - \pgfpointorigin - } - \anchor{center}{ - \tip - } - \anchor{tip}{ - \tip - } - \behindforegroundpath{ - - \pgfscope - \pgf@circ@res@step = \pgf@circ@Rlen - \divide \pgf@circ@res@step by 16 - - \pgfpathmoveto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0pt}{0pt}} - \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{.8\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}} - \pgfsetcolor{\ctikzvalof{color}} - \pgfusepath{fill} - - \endpgfscope - } -} - - -%% box - -\pgfdeclareshape{box}{ - \anchor{center}{ - \pgfpointorigin - } - \behindforegroundpath{ - - \pgfscope - \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen - \pgf@circ@res@step = 0.5\pgf@circ@res@step - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@step}}{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}} - \pgf@circ@draworfill - \endpgfscope - } -} - -%% box scaled with blocks - -\pgfdeclareshape{blockbox}{ - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{blocks/scale}\pgf@circ@Rlen}} - \anchor{center}{ - \pgfpointorigin - } - \behindforegroundpath{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{blocks/scale}\pgf@circ@Rlen} - \pgfscope - \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen - \pgf@circ@res@step = 0.5\pgf@circ@res@step - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@step}}{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}} - \pgf@circ@draworfill - \endpgfscope - } -} - -% full nodes for wire crossing - -\pgfdeclareshape{jump crossing} -{ - \savedanchor\northwest{% - \pgf@y=\ctikzvalof{bipoles/crossing/size}\pgf@circ@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-\pgf@y - } - \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } - \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{west}{ \northwest \pgf@y=0pt } - \anchor{w}{ \northwest \pgf@y=0pt } - \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{north}{ \northwest \pgf@x=0pt } - \anchor{n}{ \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 } - \behindbackgroundpath{ - \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 - % horizontal jumper - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0pt}} - \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left} - \pgfsetbeveljoin - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - % vertical, broken path - \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{0.5\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{0pt}{0.3\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfusepath{draw} - - } -} -\pgfdeclareshape{plain crossing} -{ - \savedanchor\northwest{% - \pgf@y=\ctikzvalof{bipoles/crossing/size}\pgf@circ@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-\pgf@y - } - \anchor{center}{ \pgf@y=0pt \pgf@x=0pt } - \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x } - \anchor{west}{ \northwest \pgf@y=0pt } - \anchor{w}{ \northwest \pgf@y=0pt } - \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{north}{ \northwest \pgf@x=0pt } - \anchor{n}{ \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 } - \behindbackgroundpath{ - \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 - % horizontal jumper - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - % vertical, broken path - \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{0.1\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{0pt}{0.1\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfusepath{draw} - - } -} - -%%%---------- close: tex/pgfcircshapes -%%%%%%%%%%% Springe nach tex/pgfcircmonopoles -%%%---------- open: tex/pgfcircmonopoles.tex -% 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. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Monopoles -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%% -%% Grounds -%%%%%%%%%%%%% - - -%% Ground symbol -% #1 -> name -% #2 -> width -% #3 -> depth -% #4 -> code -\long\def\pgf@circ@declareground#1#2#3#4{ - \pgfdeclareshape{#1}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{grounds}} % class of these components - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor{\southeast}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@x=\ctikzvalof{monopoles/ground/width}\pgf@circ@scaled@Rlen - \pgf@x=#2\pgf@x - \pgf@y=\ctikzvalof{monopoles/ground/width}\pgf@circ@scaled@Rlen - \pgf@y=-#3\pgf@y - } - \anchor{north}{\pgfpointorigin} - \anchor{north east}{\southeast\pgf@y=0pt\relax} - \anchor{east}{\southeast\pgf@y=.5\pgf@y} - \anchor{south east}{\southeast} - \anchor{south}{\southeast\pgf@x=0pt\relax} - \anchor{south west}{\southeast\pgf@x=-\pgf@x} - \anchor{west}{\southeast\pgf@y=.5\pgf@y\pgf@x=-\pgf@x} - \anchor{north west}{\southeast\pgf@y=0pt\pgf@x=-\pgf@x} - \anchor{left}{\pgfpointorigin} - \anchor{right}{\pgfpointorigin} - \anchor{center}{\pgfpointorigin} - \behindforegroundpath{ - \pgf@circ@scaled@Rlen=\scaledRlen - \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@scaled@Rlen - \pgfscope - \pgfstartlinewidth=\pgflinewidth - #4 - \endpgfscope - } - } -} - - -\pgf@circ@declareground{ground}{0.6}{1.6}{ - \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{-1.2\pgf@circ@res@step}} - \pgfusepath{draw} - \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}} - \pgfusepath{draw} -} - -\pgf@circ@declareground{tlground}{0.6}{0.4}{ - \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{0pt}} - \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-0.2\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-0.2\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-0.4\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-0.4\pgf@circ@res@step}} - \pgfusepath{draw} -} - - -\pgf@circ@declareground{rground}{0.6}{1}{ - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@setlinewidth{monopoles/rground}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-\pgf@circ@res@step}} - \pgfsetroundcap\pgfusepath{draw} -} - -\pgf@circ@declareground{tground}{0.6}{0}{ - \pgfpathmoveto{\pgfpointorigin} - \pgfusepath{draw} - - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@setlinewidth{monopoles/tground}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{0pt}} - \pgfusepath{draw} -} - -\pgf@circ@declareground{sground}{0.6}{1.8}{ - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0}{-1.8\pgf@circ@res@step}} - \pgfpathclose - \pgf@circ@draworfill -} - -% noiseless ground -\pgf@circ@declareground{nground}{0.9}{1.6}{ - \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{-1.2\pgf@circ@res@step}} - \pgfusepath{draw} - \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.9\pgf@circ@res@step}{-1.6\pgf@circ@res@step}} - \pgfpatharc{0}{180}{0.9\pgf@circ@res@step} - \pgfusepath{draw} -} - -% protective ground -\pgf@circ@declareground{pground}{0.9}{1.8}{ - \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth} - \pgfpathcircle{\pgfpoint{0pt}{-0.9\pgf@circ@res@step}}{0.9\pgf@circ@res@step} - \pgf@circ@draworfill - \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{-1\pgf@circ@res@step}} - \pgfusepath{draw} - \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.2\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.2\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.4\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.4\pgf@circ@res@step}} - \pgfusepath{draw} -} - -% chassis ground -\pgf@circ@declareground{cground}{1}{2}{ - \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}} - \pgfusepath{draw} - \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-1.00\pgf@circ@res@step}{-2.10\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{-0.75\pgf@circ@res@step}{-1.50\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{ 0.75\pgf@circ@res@step}{-1.50\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{ 0.50\pgf@circ@res@step}{-2.10\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{ 0.00\pgf@circ@res@step}{-1.50\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{-0.25\pgf@circ@res@step}{-2.10\pgf@circ@res@step}} - \pgfusepath{draw} -} - -% Contributed by @fotesan https://github.com/fotesan -% european ground -\pgf@circ@declareground{eground}{1.1}{1.7}{ - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@setlinewidth{monopoles/tground}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@step}{-\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{-\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-1.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{-.6\pgf@circ@res@step}{-1\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.7\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{-.1\pgf@circ@res@step}{-1\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{-.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@step}{-1.7\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@step}{-1\pgf@circ@res@step}} - \pgfusepath{draw} -} - -\pgf@circ@declareground{eground2}{1.1}{1.7}{ - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@setlinewidth{monopoles/tground}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@step}{-\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{-\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-1.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@step}{-1\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{-.45\pgf@circ@res@step}{-1.7\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@step}{-1.7\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@step}{-1\pgf@circ@res@step}} - \pgfusepath{draw} -} - -%%%%%%%%%%%%%%%%%% -%% Power supplies -%%%%%%%%%%%%%%%%%% - -% Vcc -\pgfdeclareshape{vcc}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{power supplies}} % class of these components - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \saveddimen{\scaledwidth}{% thanks to @Schrödinger's cat on https://tex.stackexchange.com/a/506249/38080 - \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}% - \pgfmathsetmacro{\gscale}{sqrt(abs(\tmpa*\tmpd-\tmpb*\tmpc))}% abs should not be needed - \pgfmathsetlength{\pgf@x}{(\ctikzvalof{\ctikzclass/scale}*\gscale*\ctikzvalof{monopoles/vcc/width})*\pgf@circ@Rlen}% - } - \savedanchor{\northeast}{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@circ@res@step - \pgf@y=3\pgf@x% - } - \anchor{north}{\northeast\pgf@x=0cm\relax} - \anchor{east}{\northeast\pgf@y=0.5\pgf@y\relax} - \anchor{south}{\pgfpointorigin} - \anchor{west}{\northeast\pgf@y=0.5\pgf@y\pgf@x=-\pgf@x} - \anchor{north east}{\northeast} - \anchor{north west}{\northeast\pgf@x=-\pgf@x} - \anchor{south east}{\northeast\pgf@y=0pt\relax} - \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x} - \anchor{center}{\pgfpointorigin} - \anchor{left}{\pgfpointorigin} - \anchor{right}{\pgfpointorigin} - \anchor{text}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen - \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}} - \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}} - \pgf@x=0pt - \pgf@y=2\pgf@circ@res@step - \advance \pgf@y by 0.5\ht\pgfnodeparttextbox - \pgf@x=-.5\wd\pgfnodeparttextbox - } - \behindforegroundpath{ - \pgf@circ@scaled@Rlen=\scaledRlen - \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen - \pgfscope - \edef\pgf@circ@temp{\ctikzvalof{monopoles/vcc/arrow}}\edef\pgf@temp{legacy} - \ifx\pgf@temp\pgf@circ@temp - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0}{1.5\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfsetlinewidth{\pgfstartlinewidth} - \else - \pgfsetarrowsend{\pgf@circ@temp} - \fi - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf@circ@res@step}} - \pgfusepath{draw} - \endpgfscope - } -} - -% Vee -\pgfdeclareshape{vee}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{power supplies}} % class of these components - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \saveddimen{\scaledwidth}{% thanks to @Schrödinger's cat on https://tex.stackexchange.com/a/506249/38080 - \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}% - \pgfmathsetmacro{\gscale}{sqrt(abs(\tmpa*\tmpd-\tmpb*\tmpc))}% abs should not be needed - \pgfmathsetlength{\pgf@x}{(\ctikzvalof{\ctikzclass/scale}*\gscale*\ctikzvalof{monopoles/vcc/width})*\pgf@circ@Rlen}% - } - \savedanchor{\northeast}{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@circ@res@step - \pgf@y=-3\pgf@x% - } - \anchor{south}{\northeast\pgf@x=0cm\relax} - \anchor{east}{\northeast\pgf@y=0.5\pgf@y\relax} - \anchor{north}{\pgfpointorigin} - \anchor{west}{\northeast\pgf@y=0.5\pgf@y\pgf@x=-\pgf@x} - \anchor{south east}{\northeast} - \anchor{south west}{\northeast\pgf@x=-\pgf@x} - \anchor{north east}{\northeast\pgf@y=0pt\relax} - \anchor{north west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x} - \anchor{center}{\pgfpointorigin} - \anchor{left}{\pgfpointorigin} - \anchor{right}{\pgfpointorigin} - \anchor{text}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen - \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}} - \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}} - \pgf@x=0pt - \pgf@y=-2\pgf@circ@res@step - \advance \pgf@y by -1.5\ht\pgfnodeparttextbox - \pgf@x=-.5\wd\pgfnodeparttextbox - } - - \behindforegroundpath{ - \pgf@circ@scaled@Rlen=\scaledRlen - \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen - \pgfscope - \edef\pgf@circ@temp{\ctikzvalof{monopoles/vee/arrow}}\edef\pgf@temp{legacy} - \ifx\pgf@temp\pgf@circ@temp - - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0}{-1.5\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfsetlinewidth{\pgfstartlinewidth} - \else - \pgfsetarrowsend{\pgf@circ@temp} - \fi - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}} - \pgfusepath{draw} - \endpgfscope - } -} - -%%%%%%%%%%%%%%%% -%% RF elements -%%%%%%%%%%%%%%%% - -% Legacy tlinestub -% Contributed by Leonardo Azzinnari -\pgfdeclareshape{tlinestub}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor{\northeast}{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step = \ctikzvalof{bipoles/tline/width} \pgf@circ@scaled@Rlen - \pgf@x=1.2\pgf@circ@res@step - \pgf@circ@res@step = \ctikzvalof{bipoles/tline/width} \pgf@circ@scaled@Rlen - \pgf@y=.2\pgf@circ@res@step% - } - % the center is on the left side of the shape for facility of usage - \anchor{north}{\northeast\pgf@x=0.5\pgf@x\relax} - \anchor{east}{\northeast\pgf@y=0cm\relax} - \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0.5\pgf@x\relax} - \anchor{west}{\pgfpointorigin} - \anchor{north east}{\northeast} - \anchor{north west}{\northeast\pgf@x=0cm\relax} - \anchor{south east}{\northeast\pgf@y=-\pgf@y} - \anchor{south west}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y} - \anchor{center}{\pgfpointorigin} - \behindforegroundpath{ - \pgfstartlinewidth=\pgflinewidth - - \pgf@circ@scaled@Rlen=\scaledRlen - \pgf@circ@res@step=\ctikzvalof{bipoles/tline/width} \pgf@circ@scaled@Rlen - \pgf@circ@res@step=0.6\pgf@circ@scaled@Rlen - - \pgfscope\begin{pgftransparencygroup} - \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}} - \pgf@circ@maybefill - \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{1.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}} - \pgfpatharc{90}{-90}{0.125\pgf@circ@res@step and 0.25\pgf@circ@res@step} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-0.25\pgf@circ@res@step}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}} - \pgfusepath{draw} - \end{pgftransparencygroup} \endpgfscope - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0pt}} - \pgfusepath{draw} - } -} - -%% New antennas without tails - -% main body of antennas -\def\pgf@circ@antennabody{% - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@scaled@Rlen=\scaledRlen - \pgfsetcolor{\ctikzvalof{color}} - \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{2\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{2\pgf@circ@res@step}} - \pgfsetbeveljoin - \pgfpathclose - \pgf@circ@draworfill - \endpgfscope - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{2\pgf@circ@res@step}} - \pgfusepath{draw} -} - -% Waves for the antennas. -\def\pgf@circ@antennawaves{% - \pgfscope - % define a triangle for clipping the waves - \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{4.2\pgf@circ@res@step}{3\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{4.2\pgf@circ@res@step}{-1\pgf@circ@res@step}} - \pgfpathclose - \pgfusepath{clip} - % ...and build the waves as clipped circles - \pgf@circ@count@a=8\pgf@circ@res@other=0.5\pgf@circ@res@step - \pgfmathloop% - \ifnum\pgf@circ@count@a>2 - \pgfpathcircle{\pgfpoint{0pt}{\pgf@circ@res@step}}{\the\pgf@circ@count@a*\pgf@circ@res@other} - \advance\pgf@circ@count@a-1\relax% - \repeatpgfmathloop - \pgfusepath{draw} - \endpgfscope -} - -% additional shape with the waves -\pgfdeclareshape{waves}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \anchor{center}{\pgfpointorigin} - \savedanchor{\northeast}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/waves/width}\pgf@circ@scaled@Rlen - \pgf@x=\pgf@circ@res@step - \pgf@y=\pgf@circ@res@step - } - \anchor{text}{ - \northeast - \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax - } - \anchor{top}{\northeast\pgf@x=0pt} - \anchor{right}{\northeast\pgf@y=0pt} - \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0pt} - \anchor{bottom}{\northeast\pgf@y=-\pgf@y\pgf@x=0pt} - \anchor{north}{\northeast\pgf@x=0pt} - \anchor{north east}{\northeast} - \anchor{east}{\northeast\pgf@y=0pt} - \anchor{south east}{\northeast\pgf@y=-\pgf@y} - \anchor{south}{\northeast\pgf@y=-\pgf@y\pgf@x=0pt} - \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x} - \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0pt} - \anchor{north west}{\northeast\pgf@x=-\pgf@x} - \behindforegroundpath{ - \pgf@circ@scaled@Rlen=\scaledRlen - \pgf@circ@res@step=\ctikzvalof{monopoles/waves/width}\pgf@circ@scaled@Rlen - \pgf@circ@res@step=0.5\pgf@circ@res@step - \pgfsetcolor{\ctikzvalof{color}} - \pgfscope - % define a triangle for clipping the waves - \pgfpathmoveto{\pgfpoint{-2\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{2.1\pgf@circ@res@step}{2\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{2.1\pgf@circ@res@step}{-2\pgf@circ@res@step}} - \pgfpathclose - \pgfusepath{clip} - % ...and build the waves as clipped circles - \c@pgf@counta=8\pgf@circ@res@other=0.5\pgf@circ@res@step - \pgfmathloop% - \ifnum\c@pgf@counta>1 - \pgfpathcircle{\pgfpoint{-2\pgf@circ@res@step}{0pt}}{\the\c@pgf@counta*\pgf@circ@res@other} - \advance\c@pgf@counta-1\relax% - \repeatpgfmathloop - \pgfusepath{draw} - \endpgfscope - } -} - -% the three types of antennas: simple, TX, RX. Notice that you can flip them... - -\pgfdeclareshape{bareantenna}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \anchor{center}{\pgfpointorigin} - \savedanchor{\northeast}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen - \pgf@x=\pgf@circ@res@step - \pgf@y=2\pgf@circ@res@step - } - \anchor{text}{ - \northeast - \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x - \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y - \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax - } - \anchor{top}{\northeast\pgf@x=0pt} - \anchor{right}{\northeast\pgf@y=0.5\pgf@y} - \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y} - \anchor{bottom}{\pgfpointorigin} - \anchor{north}{\northeast\pgf@x=0pt} - \anchor{east}{\northeast\pgf@y=0.5\pgf@y} - \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y} - \anchor{south}{\pgfpointorigin} - \anchor{north east}{\northeast} - \anchor{north west}{\northeast\pgf@x=-\pgf@x} - \anchor{south east}{\northeast\pgf@y=0pt\relax} - \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x} - \behindforegroundpath{ - \pgf@circ@antennabody - } -} - -\pgfdeclareshape{bareTXantenna}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \anchor{center}{\pgfpointorigin} - \savedanchor{\northeast}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen - \pgf@x=\pgf@circ@res@step - \pgf@y=2\pgf@circ@res@step - } - \savedanchor{\savedwaves}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen - \pgf@x=4.2\pgf@circ@res@step - \pgf@y=\pgf@circ@res@step - } - \anchor{text}{ - \northeast - \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x - \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y - \pgf@x=\dimexpr-\pgf@x-\wd\pgfnodeparttextbox\relax - \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax - } - \anchor{waves}{\savedwaves} - \anchor{top}{\northeast\pgf@x=0pt} - \anchor{right}{\northeast\pgf@y=0.5\pgf@y} - \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y} - \anchor{bottom}{\pgfpointorigin} - \anchor{north}{\northeast\pgf@x=0pt} - \anchor{east}{\northeast\pgf@y=0.5\pgf@y} - \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y} - \anchor{south}{\pgfpointorigin} - \anchor{north east}{\northeast} - \anchor{north west}{\northeast\pgf@x=-\pgf@x} - \anchor{south east}{\northeast\pgf@y=0pt\relax} - \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x} - \behindforegroundpath{ - \pgf@circ@antennabody - \pgf@circ@antennawaves - } -} - -\pgfdeclareshape{bareRXantenna}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \anchor{center}{\pgfpointorigin} - \savedanchor{\northeast}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen - \pgf@x=\pgf@circ@res@step - \pgf@y=2\pgf@circ@res@step - } - \savedanchor{\savedwaves}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen - \pgf@x=-4.2\pgf@circ@res@step - \pgf@y=\pgf@circ@res@step - } - \anchor{text}{ - \northeast - \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x - \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y - \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax - } - \anchor{waves}{\savedwaves} - \anchor{top}{\northeast\pgf@x=0pt} - \anchor{right}{\northeast\pgf@y=0.5\pgf@y} - \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y} - \anchor{bottom}{\pgfpointorigin} - \anchor{north}{\northeast\pgf@x=0pt} - \anchor{east}{\northeast\pgf@y=0.5\pgf@y} - \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y} - \anchor{south}{\pgfpointorigin} - \anchor{north east}{\northeast} - \anchor{north west}{\northeast\pgf@x=-\pgf@x} - \anchor{south east}{\northeast\pgf@y=0pt\relax} - \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x} - \behindforegroundpath{ - \pgf@circ@antennabody - \pgftransformxshift{-5.2\pgf@circ@res@step} - \pgf@circ@antennawaves - } -} - -% Microstrip monopoles - -\pgfdeclareshape{mslstub}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor{\southeast}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@x=\ctikzvalof{bipoles/mstline/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@scaled@Rlen - \pgf@y=-.5\pgf@y - } - \savedanchor{\northwest}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@x=\ctikzvalof{bipoles/mstline/width}\pgf@circ@scaled@Rlen - \pgf@x=-.5\pgf@x - \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - } - \anchor{north}{\northwest\pgf@x=0pt\relax} - \anchor{north east}{\northwest\pgf@x=-\pgf@x} - \anchor{east}{\southeast\pgf@y=0pt\relax} - \anchor{south east}{\southeast} - \anchor{south}{\southeast\pgf@x=0pt\relax} - \anchor{south west}{\southeast\pgf@x=-\pgf@x} - \anchor{west}{\northwest\pgf@y=0pt\relax} - \anchor{north west}{\northwest} - % - \anchor{center}{\northwest\pgf@y=0pt\relax} - \anchor{left}{\northwest\pgf@y=0pt\relax} - \anchor{right}{\southeast\pgf@y=0pt\relax} - % put the node text above and centered - \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest} - \pgfpoint{-.5\wd\pgfnodeparttextbox}{ - \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax - } - } - \behindbackgroundpath{ - \pgfextracty{\pgf@circ@res@up}{\northwest} - \pgfextractx{\pgf@circ@res@right}{\southeast} - \pgfextractx{\pgf@circ@res@left}{\northwest} - \pgfextracty{\pgf@circ@res@down}{\southeast} - \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up} - \pgfstartlinewidth=\pgflinewidth - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@draworfill - \endpgfscope - } -} - -\pgfdeclareshape{msrstub}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor{\southeast}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@x=\ctikzvalof{monopoles/msrstub/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \pgf@y=0pt\relax - } - \savedanchor{\northwest}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@x=\ctikzvalof{monopoles/msrstub/width}\pgf@circ@scaled@Rlen - \pgf@x=-.5\pgf@x - \pgf@y=\ctikzvalof{monopoles/msrstub/height}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - } - \anchor{north}{\northwest\pgf@x=0pt\relax} - \anchor{north east}{\northwest\pgf@x=-\pgf@x} - \anchor{east}{\southeast\pgf@y=0pt\relax} - \anchor{south east}{\southeast} - \anchor{south}{\southeast\pgf@x=0pt\relax} - \anchor{south west}{\southeast\pgf@x=-\pgf@x} - \anchor{west}{\northwest\pgf@y=0pt\relax} - \anchor{north west}{\northwest} - % - \anchor{center}{\pgfpointorigin} - \anchor{left}{\pgfpointorigin} - \anchor{right}{\pgfpointorigin} - % put the node text above and centered - \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest} - \pgfpoint{-.5\wd\pgfnodeparttextbox}{ - \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax - } - } - \behindbackgroundpath{ - \pgfextracty{\pgf@circ@res@up}{\northwest} - \pgfextractx{\pgf@circ@res@right}{\southeast} - \pgfextractx{\pgf@circ@res@left}{\northwest} - \pgfextracty{\pgf@circ@res@down}{\southeast} - \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up} - \pgfstartlinewidth=\pgflinewidth - \pgfscope - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@step}} - \pgfusepath{draw} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpointpolar{135}{\pgf@circ@res@step}} - \pgfpatharc{135}{45}{\pgf@circ@res@step} - \pgfpathlineto{\pgfpointpolar{45}{\pgf@circ@res@up}} - \pgfpatharc{45}{135}{\pgf@circ@res@up} - \pgfclosepath - \pgf@circ@draworfill - \endpgfscope - } -} - -\pgfdeclareshape{msport}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor{\southeast}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@x=\ctikzvalof{monopoles/msport/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@scaled@Rlen - \pgf@y=-.5\pgf@y - } - \savedanchor{\northwest}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@x=\ctikzvalof{monopoles/msport/width}\pgf@circ@scaled@Rlen - \pgf@x=-.5\pgf@x - \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - } - \anchor{north}{\northwest\pgf@x=0pt\relax} - \anchor{north east}{\northwest\pgf@x=-\pgf@x} - \anchor{east}{\southeast\pgf@y=0pt\relax} - \anchor{south east}{\southeast} - \anchor{south}{\southeast\pgf@x=0pt\relax} - \anchor{south west}{\southeast\pgf@x=-\pgf@x} - \anchor{west}{\northwest\pgf@y=0pt\relax} - \anchor{north west}{\northwest} - % - \anchor{center}{\northwest\pgf@y=0pt\relax} - \anchor{left}{\northwest\pgf@y=0pt\relax} - \anchor{right}{\southeast\pgf@y=0pt\relax} - % put the node text above and centered - \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest} - \pgfpoint{-.5\wd\pgfnodeparttextbox}{ - \dimexpr-.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax - } - } - \behindbackgroundpath{ - \pgfextracty{\pgf@circ@res@up}{\northwest} - \pgfextractx{\pgf@circ@res@right}{\southeast} - \pgfextractx{\pgf@circ@res@left}{\northwest} - \pgfextracty{\pgf@circ@res@down}{\southeast} - \pgfmathsetlength{\pgf@circ@res@step}{0.5*\pgf@circ@res@up} - \pgfstartlinewidth=\pgflinewidth - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@down}} - \pgfpathclose - \pgf@circ@draworfill - \endpgfscope - } -} - -% Legacy antennas (with tails) -\def\pgf@circ@shift@antenna@xy#1#2{% - \pgf@y=\dimexpr\pgf@y+#2\pgf@circ@res@step - \pgf@x=\dimexpr\pgf@x+#1\pgf@circ@res@step -\relax} - -% Legacy antenna -\pgfdeclareshape{antenna}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \anchor{center}{\pgfpointorigin} - \savedanchor{\northeast}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@scaled@Rlen - \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth - \pgf@y=4\pgf@circ@res@step - } - \anchor{north}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=0cm\pgf@circ@shift@antenna@xy{0}{2}} - \anchor{east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@circ@shift@antenna@xy{0}{3}\relax} - \anchor{south}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{0}{4}\relax} - \anchor{west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{3}} - \anchor{north east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@circ@shift@antenna@xy{0}{2}} - \anchor{north west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{2}} - \anchor{south east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{0}{4}} - \anchor{south west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{4}} - \anchor{text}{ - \northeast - \pgf@x=\ctikzvalof{monopoles/antenna/label/xanchor}\pgf@x - \pgf@y=\ctikzvalof{monopoles/antenna/label/yanchor}\pgf@y - } - \behindforegroundpath{ - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@scaled@Rlen=\scaledRlen - \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@scaled@Rlen - - \pgftransformxshift{ -4\pgf@circ@res@step } - - \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}} - \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - - \pgfusepath{draw} - - \pgfscope - \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfsetcolor{\ctikzvalof{color}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfusepath{draw} - \endpgfscope - \pgfsetlinewidth{\pgfstartlinewidth} - - } -} - -% Legacy TX antenna -\pgfdeclareshape{txantenna}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \anchor{center}{\pgfpointorigin} - \savedanchor{\northeast}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@scaled@Rlen - \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth - \pgf@y=4\pgf@circ@res@step - } - \anchor{north}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{2}} - \anchor{east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@circ@shift@antenna@xy{4}{3}\relax} - \anchor{south}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{4}\relax} - \anchor{west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{3}} - \anchor{north east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@circ@shift@antenna@xy{4}{2}} - \anchor{north west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{2}} - \anchor{south east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{4}{4}} - \anchor{south west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{4}} - \anchor{text}{ - \northeast - \pgf@x=\ctikzvalof{monopoles/txantenna/label/xanchor}\pgf@x - \pgf@y=\ctikzvalof{monopoles/txantenna/label/yanchor}\pgf@y - } - \behindforegroundpath{ - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@scaled@Rlen=\scaledRlen - \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@scaled@Rlen - - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}} - \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}} - \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - - \pgfusepath{draw} - - \pgfscope - \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfsetcolor{\ctikzvalof{color}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfusepath{draw} - \endpgfscope - \pgfpathmoveto{\pgfpoint{5.5\pgf@circ@res@step}{6\pgf@circ@res@step}} - % \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step} - \pgfpatharc{30}{-30}{2\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{6.25\pgf@circ@res@step}} - \pgfpatharc{30}{-30}{2.5\pgf@circ@res@step} - \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.5\pgf@circ@res@step}} - \pgfpatharc{30}{-30}{3\pgf@circ@res@step} - \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.75\pgf@circ@res@step}} - \pgfpatharc{30}{-30}{3.5\pgf@circ@res@step} - \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{7\pgf@circ@res@step}} - \pgfpatharc{30}{-30}{4\pgf@circ@res@step} - \pgfusepath{draw} - \pgfsetlinewidth{\pgfstartlinewidth} - - } -} - -% Legacy RX antenna -\pgfdeclareshape{rxantenna}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \anchor{center}{\pgfpointorigin} - \savedanchor{\northeast}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@scaled@Rlen - \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth - \pgf@y=4\pgf@circ@res@step - } - \anchor{north}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{2}} - \anchor{east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@circ@shift@antenna@xy{4}{3}\relax} - \anchor{south}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{4}\relax} - \anchor{west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{3}} - \anchor{north east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@circ@shift@antenna@xy{4}{2}} - \anchor{north west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{2}} - \anchor{south east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{4}{4}} - \anchor{south west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{4}} - \anchor{text}{ - \northeast - \pgf@x=\ctikzvalof{monopoles/rxantenna/label/xanchor}\pgf@x - \pgf@y=\ctikzvalof{monopoles/rxantenna/label/yanchor}\pgf@y - } - \behindforegroundpath{ - \pgfstartlinewidth=\pgflinewidth - \pgf@circ@scaled@Rlen=\scaledRlen - \pgf@circ@res@step=\ctikzvalof{monopoles/rxantenna/width}\pgf@circ@scaled@Rlen - - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}} - \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}} - \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - - \pgfusepath{draw} - - \pgfscope - \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}} - \pgfsetcolor{\ctikzvalof{color}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfusepath{draw} - \endpgfscope - - \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{7\pgf@circ@res@step}} - % \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step} - \pgfpatharc{150}{210}{4\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.75\pgf@circ@res@step}} - \pgfpatharc{150}{210}{3.5\pgf@circ@res@step} - \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.5\pgf@circ@res@step}} - \pgfpatharc{150}{210}{3\pgf@circ@res@step} - \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{6.25\pgf@circ@res@step}} - \pgfpatharc{150}{210}{2.5\pgf@circ@res@step} - \pgfpathmoveto{\pgfpoint{8\pgf@circ@res@step}{6\pgf@circ@res@step}} - \pgfpatharc{150}{210}{2\pgf@circ@res@step} - \pgfusepath{draw} - \pgfsetlinewidth{\pgfstartlinewidth} - } -} - -% Legacy match -\pgfdeclareshape{match}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor{\northeast}{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@circ@res@step = \ctikzvalof{monopoles/match/width} \pgf@circ@scaled@Rlen - \pgf@x=2\pgf@circ@res@step - \pgf@circ@res@step = \ctikzvalof{monopoles/match/width} \pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@circ@res@step% - } - % the center is on the left side of the shape for facility of usage - \anchor{north}{\northeast\pgf@x=0.5\pgf@x\relax} - \anchor{east}{\northeast\pgf@y=0cm\relax} - \anchor{south}{\northeast\pgf@y=0pt\pgf@x=0.5\pgf@x\relax} - \anchor{west}{\pgfpointorigin} - \anchor{north east}{\northeast} - \anchor{north west}{\northeast\pgf@x=0cm\relax} - \anchor{south east}{\northeast\pgf@y=0pt\relax} - \anchor{south west}{\pgfpointorigin} - \anchor{center}{ - \pgfpointorigin - } - \anchor{text}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@x=\ctikzvalof{monopoles/match/width}\pgf@circ@scaled@Rlen - \pgf@x=1.5\pgf@x - \advance \pgf@x by -.5\wd\pgfnodeparttextbox - \pgf@y=-1.5\ht\pgfnodeparttextbox - } - \behindforegroundpath{ - \pgf@circ@scaled@Rlen=\scaledRlen - \pgf@circ@res@step=\ctikzvalof{monopoles/match/width}\pgf@circ@scaled@Rlen - - \pgfscope - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0pt}} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0.5\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0}} - \pgfusepath{fill} - - \pgfsetlinewidth{\pgfstartlinewidth} - \endpgfscope - } -} - -%%%---------- close: tex/pgfcircmonopoles -%%%%%%%%%%% Springe nach tex/pgfcircbipoles -%%%---------- open: tex/pgfcircbipoles.tex -% 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. - -%% Generic macro for defining a bipole shape -% #1 - additional anchors -% #2 - lower y-size of the bipole (from the center). -% #3 - #shape is the name of the shape -% #4 - upper y-size of the bipole (from the center) -% #5 - width of the bipole -% #6 - macros drawing the bipole -% -\long\def\pgfcircdeclarebipole{% - \pgfcircdeclarebipolescaled{default}} - -%% Generic macro for defining a bipole shape -% #1 - scale factor -% #2 - additional anchors -% #3 - lower y-size of the bipole (from the center). -% #4 - #shape is the name of the shape -% #5 - upper y-size of the bipole (from the center) -% #6 - width of the bipole -% #7 - macros drawing the bipole -% -\long\def\pgfcircdeclarebipolescaled#1#2#3#4#5#6#7{ - \pgfdeclareshape{#4shape}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{#1}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor{\northeast}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen - \pgf@y=#5\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=#6\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - } - \savedanchor{\northeastborder}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen - \pgf@y=#5\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y - \pgf@x=#6\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x - } - \savedanchor{\southwestborder}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen - \pgf@y=-#3\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y - \pgf@x=-#6\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x - } - \savedanchor{\southwest}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen - \pgf@y=-#3\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-#6\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - } - \savedanchor{\centerpoint}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen - \pgf@circ@res@down=-#3\pgf@circ@scaled@Rlen - \pgf@circ@res@up=#5\pgf@circ@scaled@Rlen - \pgfpointorigin - \pgf@y=\pgf@circ@res@up - \advance\pgf@y by\pgf@circ@res@down - \pgf@y=.5\pgf@y - } - \anchor{center}{\pgfpointorigin} - \anchor{n}{ - \northeast - \pgf@x=0cm - } - \anchor{north east}{ - \northeast - } - \anchor{north west}{ - \northeast - \pgf@x=-\pgf@x - } - \anchor{ne}{ - \northeast - } - \anchor{nw}{ - \northeast - \pgf@x=-\pgf@x - } - \anchor{e}{ - \northeast - \pgf@y=0cm - } - \anchor{s}{ - \southwest - \pgf@x=0cm - } - \anchor{south east}{ - \southwest - \pgf@x=-\pgf@x - } - \anchor{south west}{ - \southwest - } - \anchor{se}{ - \southwest - \pgf@x=-\pgf@x - } - \anchor{sw}{ - \southwest - } - \anchor{w}{ - \southwest - \pgf@y=0cm - } - \anchor{north}{ - \northeast - \pgf@x=0cm - } - \anchor{east}{ - \northeast - \pgf@y=0cm - } - \anchor{south}{ - \southwest - \pgf@x=0cm - } - \anchor{west}{ - \southwest - \pgf@y=0cm - } - \anchor{right}{ - \northeast - \pgf@y=0cm - } - \anchor{above}{ - \northeast - \pgf@x=0cm - } - \anchor{left}{ - \southwest - \pgf@y=0cm - } - \anchor{below}{ - \southwest - \pgf@x=0cm - } - \anchor{a}{ - \northeast - \pgf@y=0cm - } - \anchor{b}{ - \southwest - \pgf@y=0cm - } - \savedanchor{\textanchor}{% - \pgf@y=\ht\pgfnodeparttextbox - \pgf@x=-.5\wd\pgfnodeparttextbox - } - \anchor{text}{ - \textanchor - } - \anchorborder{% - \ifpgf@circuit@bipole@inverted - \pgf@circ@res@left=-\pgf@x - \pgf@circ@res@right=-\pgf@y - \else - \pgf@circ@res@left=\pgf@x - \pgf@circ@res@right=\pgf@y - \fi - \ifdim\pgf@circ@res@right>0cm - \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\northeastborder} - \else - \southwestborder - \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\pgfpoint{-\pgf@x}{-\pgf@y}} - \fi - } - - #2 - - \backgroundpath{ - \pgfsetcolor{\ctikzvalof{color}} - - \northeast - \pgf@circ@res@up = \pgf@y - \pgf@circ@res@zero = 0cm - \pgf@circ@res@left = -\pgf@x - \pgf@circ@res@right = \pgf@x - \southwest - \pgf@circ@res@down = \pgf@y - \pgf@circ@scaled@Rlen=\scaledRlen - \pgfstartlinewidth=\pgflinewidth - \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners! - #7 - - \pgfsetlinewidth{\pgfstartlinewidth} - } - } -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Standard bipole shapes declarations -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%% -% Resistive components -%%%%%%%%%%%%%%%%%%%%%%%% - -%% Short circuit - -%%% NOTICE that the short is really NOT drawn; we trust the fact that its -%%% natural length is zero. -\pgfcircdeclarebipole -{} -{0} -{short} -{0} -{0} -{ } - -%% Open circuit -\pgfcircdeclarebipole -{} -{\ctikzvalof{bipoles/open/height}} -{open} -{\ctikzvalof{bipoles/open/height}} -{\ctikzvalof{bipoles/open/width}} -{ } - -% multiwire(s) -\pgfcircdeclarebipole -{} -{\ctikzvalof{bipoles/multiwire/height}} -{multiwire} -{\ctikzvalof{bipoles/multiwire/height}} -{\ctikzvalof{bipoles/multiwire/width}} -{ - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfusepath{draw} -} - -\pgfcircdeclarebipole -{} -{\ctikzvalof{bipoles/multiwire/height}} -{bmultiwire} -{\ctikzvalof{bipoles/multiwire/height}} -{\ctikzvalof{bipoles/multiwire/width}} -{ - \pgf@circ@res@other=\ctikzvalof{bipoles/multiwire/spacing}\pgf@circ@Rlen - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@other}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfusepath{draw} -} - -\pgfcircdeclarebipole -{} -{\ctikzvalof{bipoles/multiwire/height}} -{tmultiwire} -{\ctikzvalof{bipoles/multiwire/height}} -{\ctikzvalof{bipoles/multiwire/width}} -{ - \pgf@circ@res@other=\ctikzvalof{bipoles/multiwire/spacing}\pgf@circ@Rlen - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@other}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+2\pgf@circ@res@other}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{2\pgf@circ@res@other}{\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfusepath{draw} -} - -% -% -%% Generic bipole - used as resistor by some (bleah) -\pgfcircdeclarebipolescaled{resistors} -{} -{\ctikzvalof{bipoles/generic/height}} -{generic} -{\ctikzvalof{bipoles/generic/height}} -{\ctikzvalof{bipoles/generic/width}} -{ - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill -} - -% -% generic crossed, suggested by Radványi Patrik Tamás -% inherit "generic" properties -% -\pgfcircdeclarebipolescaled{resistors} -{} -{\ctikzvalof{bipoles/generic/height}} -{xgeneric} -{\ctikzvalof{bipoles/generic/height}} -{\ctikzvalof{bipoles/generic/width}} -{ - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - % cross it - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfusepath{draw} -} -%% Generic empty tunable -\pgfcircdeclarebipolescaled{resistors} -{} -{\ctikzvalof{bipoles/tgeneric/height}} -{tgeneric} -{\ctikzvalof{bipoles/tgeneric/height}} -{\ctikzvalof{bipoles/tgeneric/width}} -{ - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - \pgfscope - \pgfsetarrowsend{latexslim} - \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -%% Generic asymmetric bipole -\pgfcircdeclarebipolescaled{resistors} -{} -{\ctikzvalof{bipoles/ageneric/height}} -{ageneric} -{\ctikzvalof{bipoles/ageneric/height}} -{\ctikzvalof{bipoles/ageneric/width}} -{ - \pgfscope - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - \endpgfscope - - \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{stroke,fill} -} - -%% Memristor -\pgfcircdeclarebipolescaled{resistors} -{} -{\ctikzvalof{bipoles/memristor/height}} -{memristor} -{\ctikzvalof{bipoles/memristor/height}} -{\ctikzvalof{bipoles/memristor/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 14 - - \pgfscope - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - \endpgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{.8*\pgf@circ@res@right}{0pt}} - - \pgfusepath{draw} - - \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{stroke,fill} -} - -%% Photoresistor -\pgfcircdeclarebipolescaled{resistors} -{} -{\ctikzvalof{bipoles/photoresistor/height 2}} -{photoresistor} -{\ctikzvalof{bipoles/photoresistor/height}} -{\ctikzvalof{bipoles/photoresistor/width}} -{ - \pgfscope - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - \endpgfscope - - \pgfscope - \pgfsetarrowsend{latexslim} - \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{-1.2\pgf@circ@res@down}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@right}{-1.2\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -%% Thermistor -\pgfcircdeclarebipolescaled{resistors} -{{% anchor for labelling the type of dependency - \anchor{label}{% - \southwest - \pgf@x=0.4\pgf@x - \pgf@y=1.2\pgf@y - }% -}} -{\ctikzvalof{bipoles/thermistor/height}} -{thermistor} -{\ctikzvalof{bipoles/thermistor/height}} -{\ctikzvalof{bipoles/thermistor/width}} -{ - \pgfscope - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/thermistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/thermistor/main}\pgf@circ@res@up}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - \endpgfscope - - %\pgfscope - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{1.2\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{1.2\pgf@circ@res@down}} - \pgfusepath{draw} - %\endpgfscope -} - -%% Thermistor PTC -\pgfcircdeclarebipolescaled{resistors} -{} -{\ctikzvalof{bipoles/thermistorptc/height 2}} -{thermistorptc} -{\ctikzvalof{bipoles/thermistorptc/height}} -{\ctikzvalof{bipoles/thermistorptc/width}} -{ - \pgfscope - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/thermistorptc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/thermistorptc/main}\pgf@circ@res@up}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - \endpgfscope - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgfsetlinewidth{\pgfstartlinewidth} - \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\pgf@circ@font@tiny$\vartheta$} - \pgfsetarrowsend{latexslim} - \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}} - \pgfusepath{draw} -} - -%% Thermistor NTC -\pgfcircdeclarebipolescaled{resistors} -{} -{\ctikzvalof{bipoles/thermistorntc/height 2}} -{thermistorntc} -{\ctikzvalof{bipoles/thermistorntc/height}} -{\ctikzvalof{bipoles/thermistorntc/width}} -{ - \pgfscope - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/thermistorntc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/thermistorntc/main}\pgf@circ@res@up}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - \endpgfscope - - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgfsetlinewidth{\pgfstartlinewidth} - \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\pgf@circ@font@tiny$\vartheta$} - \pgfsetarrowsend{latexslim} - \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfusepath{draw} -} - -%% Generic tunable -\pgfcircdeclarebipolescaled{resistors} -{ - \savedanchor{\wiper}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen - \pgf@ya=\ctikzvalof{bipoles/generic potentiometer/height}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@ya - \pgf@xa=\ctikzvalof{bipoles/generic potentiometer/width}\pgf@circ@scaled@Rlen - \pgfmathsetlength{\pgf@x}{(\ctikzvalof{bipoles/generic potentiometer/wiper pos}-0.5)*\pgf@xa} - } - \anchor{wiper}{\wiper} - \anchor{W}{\wiper} -} -{\ctikzvalof{bipoles/generic potentiometer/height 2}} -{genericpotentiometer} -{\ctikzvalof{bipoles/generic potentiometer/height}} -{\ctikzvalof{bipoles/generic potentiometer/width}} -{ - - \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 14 - - \pgfscope - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - \endpgfscope - \pgfscope - %\pgfsetlinewidth{\pgfstartlinewidth} - \pgfsetarrowsend{latexslim} - \pgfextractx{\pgf@circ@res@other}{\wiper} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -%% Zig zag resistores -\def\pgf@circ@zigzag#1{% - \divide \pgf@circ@res@step by \numexpr4*\zigs\relax - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \pgf@circ@count@a=\zigs\relax - % first half zig - \advance\pgf@circ@res@other by \pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-#1\pgf@circ@res@down}} - \pgfmathloop% - \advance\pgf@circ@count@a by -1\relax% Loop zigs -1 times - \ifnum\pgf@circ@count@a>0 - \advance\pgf@circ@res@other by 2\pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{#1\pgf@circ@res@down}} - \advance\pgf@circ@res@other by 2\pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-#1\pgf@circ@res@down}} - \repeatpgfmathloop% - % last zig and a half - \advance\pgf@circ@res@other by 2\pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{#1\pgf@circ@res@down}} - \advance\pgf@circ@res@other by \pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}} - \pgfsetbeveljoin - \pgfusepath{draw} -} - -%% Resistor -\pgfcircdeclarebipolescaled{resistors} -{ -\savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}} -} -{\ctikzvalof{bipoles/resistor/height}} -{resistor} -{\ctikzvalof{bipoles/resistor/height}} -{\ctikzvalof{bipoles/resistor/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth} - \pgf@circ@zigzag{1} -} - - -%% Variable resistor -\pgfcircdeclarebipolescaled{resistors} -{ -\savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}} -} -{\ctikzvalof{bipoles/vresistor/height}} -{vresistor} -{\ctikzvalof{bipoles/vresistor/height}} -{\ctikzvalof{bipoles/vresistor/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/vresistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth} - \pgf@circ@zigzag{.5} - - \pgfscope - \pgfsetarrowsend{latexslim} - \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -%% Potentiometer -\pgfcircdeclarebipolescaled{resistors} -{ - \savedanchor{\wiper}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen - \pgf@ya=\ctikzvalof{bipoles/potentiometer/height}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@ya - \pgf@xa=\ctikzvalof{bipoles/potentiometer/width}\pgf@circ@scaled@Rlen - \pgfmathsetlength{\pgf@x}{(\ctikzvalof{bipoles/potentiometer/wiper pos}-0.5)*\pgf@xa} - } - \anchor{wiper}{\wiper} - \anchor{W}{\wiper} - \savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}} -} -{\ctikzvalof{bipoles/potentiometer/height 2}} -{potentiometer} -{\ctikzvalof{bipoles/potentiometer/height}} -{\ctikzvalof{bipoles/potentiometer/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/potentiometer/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth} - \pgf@circ@zigzag{1} - - \pgfscope - %\pgfsetlinewidth{\pgfstartlinewidth} - \pgfsetarrowsend{latexslim} - \pgfextractx{\pgf@circ@res@other}{\wiper} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -%% Resistive sensor -\pgfcircdeclarebipolescaled{resistors} -{% anchor for labelling the type of dependency - \anchor{label}{\southwest\pgf@x=0.4\pgf@x}% - \savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}} -} -{\ctikzvalof{bipoles/resistivesens/height}} -{resistivesens} -{\ctikzvalof{bipoles/resistivesens/height}} -{\ctikzvalof{bipoles/resistivesens/width}} -{% - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistivesens/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth} - \pgf@circ@zigzag{.5} - - \pgfscope - \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{-.9\pgf@circ@res@other}{\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -%%%%%%%%%%%%%% -%% Capacitors -%%%%%%%%%%%%% - -%% Plain Capacitor -\pgfcircdeclarebipolescaled{capacitors} -{} -{\ctikzvalof{bipoles/capacitor/height}} -{capacitor} -{\ctikzvalof{bipoles/capacitor/height}} -{\ctikzvalof{bipoles/capacitor/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{draw} - -} - -%% Capacitive sensor -\pgfcircdeclarebipolescaled{capacitors} -{ - \anchor{label}{\southwest\pgf@x=2.6\pgf@x\pgf@y=1.2\pgf@y}% -} -{\ctikzvalof{bipoles/capacitor/height}} -{capacitivesens} -{\ctikzvalof{bipoles/capacitor/height}} -{\ctikzvalof{bipoles/capacitor/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{draw} - \pgfscope - \pgfpathmoveto{\pgfpoint{2.6\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-2.6\pgf@circ@res@right}{1.2\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{-4.4\pgf@circ@res@right}{1.2\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -%% Polar Capacitor (DEPRECATED) -\pgfcircdeclarebipolescaled{capacitors} -{} -{\ctikzvalof{bipoles/pcapacitor/height}} -{polarcapacitor} -{\ctikzvalof{bipoles/pcapacitor/height}} -{\ctikzvalof{bipoles/pcapacitor/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+ \ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgftransformrotate{-90} - \pgfpathsine{\pgfpoint{\pgf@circ@res@up}{-\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}} - \pgfpathcosine{\pgfpoint{\pgf@circ@res@up}{\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}} - \pgfusepath{draw} - \endpgfscope - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{draw} -} - - -%% Curved capacitor -% see https://tex.stackexchange.com/questions/509594/polar-capacitor-orientation-in-circuitikz-seems-wrong -% for a rationale -% -\pgfcircdeclarebipolescaled{capacitors} -{} -{\ctikzvalof{bipoles/ccapacitor/height}} -{ccapacitor} -{\ctikzvalof{bipoles/ccapacitor/height}} -{\ctikzvalof{bipoles/ccapacitor/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right+ \ctikzvalof{bipoles/ccapacitor/bend width}\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgftransformrotate{-90} - \pgfpathsine{\pgfpoint{\pgf@circ@res@up}{-\ctikzvalof{bipoles/ccapacitor/bend width}\pgf@circ@res@right}} - \pgfpathcosine{\pgfpoint{\pgf@circ@res@up}{\ctikzvalof{bipoles/ccapacitor/bend width}\pgf@circ@res@right}} - \pgfusepath{draw} - \endpgfscope - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfusepath{draw} -} - - - - -%% Electrolytic Capacitor -\pgfcircdeclarebipolescaled{capacitors} -{} -{\ctikzvalof{bipoles/ecapacitor/height}} -{ecapacitor} -{\ctikzvalof{bipoles/ecapacitor/height}} -{\ctikzvalof{bipoles/ecapacitor/width}} -{ - \pgfsetrectcap - % % % Draw plus pole - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgf@circ@draworfill - % % Draw minus pole - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfsetfillcolor{\ctikzvalof{color}} - \pgfusepath{draw,fill} - \pgfsetfillcolor{\ctikzvalof{color}} - % % plus pole annotation - \pgftext[right,at=\pgfpoint{1.2\pgf@circ@res@left}{.6\pgf@circ@res@up}] - {\ctikzvalof{bipoles/ecapacitor/font} $+$} -} - -%% Variable Capacitor -\pgfcircdeclarebipolescaled{capacitors} -{} -{\ctikzvalof{bipoles/vcapacitor/height}} -{vcapacitor} -{\ctikzvalof{bipoles/vcapacitor/height}} -{\ctikzvalof{bipoles/vcapacitor/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/capacitor width} \pgf@circ@res@right - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}} - \pgfusepath{draw} - - \pgfscope - \pgfsetarrowsend{latexslim} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{0pt}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfusepath{draw} -} - - -%% Piezoelectric Element - -\pgfcircdeclarebipolescaled{capacitors} -{} -{\ctikzvalof{bipoles/piezoelectric/height}} -{piezoelectric} -{\ctikzvalof{bipoles/piezoelectric/height}} -{\ctikzvalof{bipoles/piezoelectric/width}} -{ - % \pgf@circ@res@step = \ctikzvalof{bipoles/piezoelectric/width}\pgf@circ@Rlen - % \divide \pgf@circ@res@step by 5 - - %% Outer markings - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{draw} - - %% Inner Box - \pgf@circ@res@step = \pgf@circ@res@right \divide \pgf@circ@res@step by 10 - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathrectanglecorners - {\pgfpoint{\pgf@circ@res@left+4*\pgf@circ@res@step}{\pgf@circ@res@up-\pgf@circ@res@step}} - {\pgfpoint{\pgf@circ@res@right-4*\pgf@circ@res@step}{\pgf@circ@res@down+\pgf@circ@res@step}} - \pgf@circ@draworfill - \endpgfscope -} - -%%%%%%%%%%%%%%% -%% Inductors -%%%%%%%%%%%%%%% - -%% cute inductor -\pgfcircdeclarebipolescaled{inductors} -{ - \savedanchor{\midtap}{% - \pgf@x=0pt\relax - \pgfmathsetlength{\pgf@y}{% - (mod(\ctikzvalof{bipoles/cuteinductor/coils},2) ?% - \ctikzvalof{bipoles/cuteinductor/height} :% even - -\ctikzvalof{bipoles/cuteinductor/lower coil height}) %odd - *\pgf@circ@scaled@Rlen/2 - } - } - \anchor{midtap}{\midtap} -} -{\ctikzvalof{bipoles/cuteinductor/lower coil height}} -{cuteinductor} -{\ctikzvalof{bipoles/cuteinductor/height}} -{\ctikzvalof{bipoles/cuteinductor/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - - \pgfmathsetlength{\pgf@circ@res@other}%width of small coil - {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)} - - - \pgfmathsetlength{\pgf@circ@res@step} - {(\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases - \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}} - { - \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up} - \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down} - } - \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up} - \pgfsetbuttcap - \pgfsetbeveljoin - \pgfusepath{stroke} -} - -%% cute inductive sensor -\pgfcircdeclarebipolescaled{inductors} -{% anchor for labelling the type of dependency - \anchor{label}{\southwest\pgf@x=0.8\pgf@x\pgf@y=2.6\pgf@y}% - \savedanchor{\midtap}{% - \pgf@x=0pt\relax - \pgfmathsetlength{\pgf@y}{% - (mod(\ctikzvalof{bipoles/cuteinductor/coils},2) ?% - \ctikzvalof{bipoles/cuteinductor/height} :% even - -\ctikzvalof{bipoles/cuteinductor/lower coil height}) %odd - *\pgf@circ@scaled@Rlen/2 - } - } - \anchor{midtap}{\midtap} -} -{\ctikzvalof{bipoles/cuteinductor/lower coil height}} -{scuteinductor} -{\ctikzvalof{bipoles/cuteinductor/height}} -{\ctikzvalof{bipoles/cuteinductor/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - - \pgfmathsetlength{\pgf@circ@res@other}%width of small coil - {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)} - - - \pgfmathsetlength{\pgf@circ@res@step} - {(\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases - \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}} - { - \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up} - \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down} - } - \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up} - \pgfsetbuttcap - \pgfsetbeveljoin - \pgfusepath{stroke} - \pgfscope - \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@right}{2\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-.8\pgf@circ@res@right}{2.6\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{-1.6\pgf@circ@res@right}{2.6\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -%% cute choke -\pgfcircdeclarebipolescaled{inductors} -{ - \savedanchor{\midtap}{% - \pgf@x=0pt\relax - \pgfmathsetlength{\pgf@y}{% - (mod(\ctikzvalof{bipoles/cuteinductor/coils},2) ?% - \ctikzvalof{bipoles/cuteinductor/height} :% even - -\ctikzvalof{bipoles/cuteinductor/lower coil height}) %odd - *\pgf@circ@scaled@Rlen/2 - } - } - \anchor{midtap}{\midtap} -} -{\ctikzvalof{bipoles/cutechoke/lower coil height}} -{cutechoke} -{\ctikzvalof{bipoles/cutechoke/height}} -{\ctikzvalof{bipoles/cutechoke/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - - \pgfmathsetlength{\pgf@circ@res@other}%width of small coil - {0.5*\ctikzvalof{bipoles/cutechoke/coil aspect}*\ctikzvalof{bipoles/cutechoke/width}*\scaledRlen/(\ctikzvalof{bipoles/cutechoke/coils}-1)} - - - \pgfmathsetlength{\pgf@circ@res@step} - {(\ctikzvalof{bipoles/cutechoke/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cutechoke/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cutechoke/coils}/2} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases - \foreach \x in {2,...,\ctikzvalof{bipoles/cutechoke/coils}} - { - \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up} - \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down} - } - \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up} - \pgfsetbuttcap - \pgfsetbeveljoin - \pgfusepath{stroke} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfsetlinewidth{\ctikzvalof{bipoles/cutechoke/cthick}\pgflinewidth} - \pgfusepath{stroke} - - \ifpgf@circuit@bipole@twolineschoke - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up+\ctikzvalof{bipoles/cutechoke/cstep}\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up+\ctikzvalof{bipoles/cutechoke/cstep}\pgf@circ@res@up}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfsetlinewidth{\ctikzvalof{bipoles/cutechoke/cthick}\pgflinewidth} - \pgfusepath{stroke} - \fi -} - -%% variable cute inductor -\pgfcircdeclarebipolescaled{inductors} -{ - \savedanchor{\midtap}{% - \pgf@x=0pt\relax - \pgfmathsetlength{\pgf@y}{% - (mod(\ctikzvalof{bipoles/cuteinductor/coils},2) ?% - \ctikzvalof{bipoles/cuteinductor/height} :% even - -\ctikzvalof{bipoles/cuteinductor/lower coil height}) %odd - *\pgf@circ@scaled@Rlen/2 - } - } - \anchor{midtap}{\midtap} -} -{\ctikzvalof{bipoles/vcuteinductor/lower coil height}} -{vcuteinductor} -{\ctikzvalof{bipoles/vcuteinductor/height}} -{\ctikzvalof{bipoles/vcuteinductor/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - - \pgfmathsetlength{\pgf@circ@res@other}%width of small coil - {0.5*\ctikzvalof{bipoles/vcuteinductor/coil aspect}*\ctikzvalof{bipoles/vcuteinductor/width}*\scaledRlen/(\ctikzvalof{bipoles/vcuteinductor/coils}-1)} - - - \pgfmathsetlength{\pgf@circ@res@step} - {(\ctikzvalof{bipoles/vcuteinductor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/vcuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/vcuteinductor/coils}/2} - - \pgfscope - \pgfsetarrowsend{latexslim} - \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases - \foreach \x in {2,...,\ctikzvalof{bipoles/vcuteinductor/coils}} - { - \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up} - \pgfpatharc{0}{-180}{\pgf@circ@res@other and -.5\pgf@circ@res@down} - } - \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up} - \pgfsetbuttcap - \pgfsetbeveljoin - \pgfusepath{stroke} -} - -%% american inductor -\pgfcircdeclarebipolescaled{inductors} -{ - \savedanchor{\midtap}{% - \pgf@x=0pt\relax - \pgfmathsetlength{\pgf@y}{% - (mod(\ctikzvalof{bipoles/americaninductor/coils},2) ?% - 2*\ctikzvalof{bipoles/americaninductor/coil height} :% even - 0) %odd - *\pgf@circ@scaled@Rlen/2 - } - } - \anchor{midtap}{\midtap} -} -{\ctikzvalof{bipoles/americaninductor/height 2}} -{americaninductor} -{\ctikzvalof{bipoles/americaninductor/height}} -{\ctikzvalof{bipoles/americaninductor/width}} -{ - \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@scaled@Rlen - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth - \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils} - \divide \pgf@circ@res@step by 2 - \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@scaled@Rlen - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases - \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}} - { - \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other} - } - \pgfsetbuttcap - \pgfsetbeveljoin - \pgfusepath{stroke} -} - - -%% american inductive sensor -\pgfcircdeclarebipolescaled{inductors} -{% anchor for labelling the type of dependency - \anchor{label}{\southwest\pgf@x=0.8\pgf@x\pgf@y=2.6\pgf@y}% - \savedanchor{\midtap}{% - \pgf@x=0pt\relax - \pgfmathsetlength{\pgf@y}{% - (mod(\ctikzvalof{bipoles/americaninductor/coils},2) ?% - 2*\ctikzvalof{bipoles/americaninductor/coil height} :% even - 0) %odd - *\pgf@circ@scaled@Rlen/2 - } - } - \anchor{midtap}{\midtap} -} -{\ctikzvalof{bipoles/americaninductor/height 2}} -{samericaninductor} -{\ctikzvalof{bipoles/americaninductor/height}} -{\ctikzvalof{bipoles/americaninductor/width}} -{ - \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@scaled@Rlen - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth - \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils} - \divide \pgf@circ@res@step by 2 - \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@scaled@Rlen - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases - \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}} - { - \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other} - } - \pgfsetbuttcap - \pgfsetbeveljoin - \pgfusepath{stroke} - \pgfscope - \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@right}{2\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-.8\pgf@circ@res@right}{2.6\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{-1.6\pgf@circ@res@right}{2.6\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -%% variable american inductor -\pgfcircdeclarebipolescaled{inductors} -{ - \savedanchor{\midtap}{% - \pgf@x=0pt\relax - \pgfmathsetlength{\pgf@y}{% - (mod(\ctikzvalof{bipoles/vamericaninductor/coils},2) ?% - 2*\ctikzvalof{bipoles/vamericaninductor/coil height} :% even - 0) %odd - *\pgf@circ@scaled@Rlen/2 - } - } - \anchor{midtap}{\midtap} -} -{\ctikzvalof{bipoles/vamericaninductor/height 2}} -{vamericaninductor} -{\ctikzvalof{bipoles/vamericaninductor/height}} -{\ctikzvalof{bipoles/vamericaninductor/width}} -{ - \pgf@circ@res@step=\ctikzvalof{bipoles/vamericaninductor/width}\pgf@circ@scaled@Rlen - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth - \divide \pgf@circ@res@step by \ctikzvalof{bipoles/vamericaninductor/coils} - \divide \pgf@circ@res@step by 2 - \pgf@circ@res@other = \ctikzvalof{bipoles/vamericaninductor/coil height}\pgf@circ@scaled@Rlen - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases - \foreach \x in {1,...,\ctikzvalof{bipoles/vamericaninductor/coils}} - { - \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other} - } - \pgfsetbuttcap - \pgfsetbeveljoin - \pgfusepath{stroke} - - \pgfscope - \pgfsetarrowsend{latexslim} - \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -%% Generic bipole, filled - used as inductor by some -\pgfcircdeclarebipolescaled{inductors} -{ - \anchor{midtap}{\northeast\pgf@x=0pt\relax} -} -{\ctikzvalof{bipoles/fullgeneric/height}} -{fullgeneric} -{\ctikzvalof{bipoles/fullgeneric/height}} -{\ctikzvalof{bipoles/fullgeneric/width}} -{ - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfusepath{draw,fill} -} - -%% Generic sensor, filled - used as inductive sensor by some -\pgfcircdeclarebipolescaled{inductors} -{% anchor for labelling the type of dependency - \anchor{label}{\southwest\pgf@x=0.4\pgf@x\pgf@y=2\pgf@y}% - \anchor{midtap}{\northeast\pgf@x=0pt\relax} -} -{\ctikzvalof{bipoles/fullgeneric/height}} -{sfullgeneric} -{\ctikzvalof{bipoles/fullgeneric/height}} -{\ctikzvalof{bipoles/fullgeneric/width}} -{ - - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfusepath{draw,fill} - %\pgfscope - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-2\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{2\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{2\pgf@circ@res@down}} - \pgfusepath{draw} - %\endpgfscope -} - -%% Generic full tunable -\pgfcircdeclarebipolescaled{inductors} -{ - \anchor{midtap}{\northeast\pgf@x=0pt\relax} -} -{\ctikzvalof{bipoles/tfullgeneric/height}} -{tfullgeneric} -{\ctikzvalof{bipoles/tfullgeneric/height}} -{\ctikzvalof{bipoles/tfullgeneric/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen - \divide \pgf@circ@res@step by 14 - - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfusepath{draw,fill} - - \pgfscope - \pgfsetarrowsend{latexslim} - \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -%%%%%%%%%%% -%% Battery -%%%%%%%%%%% - -%% Battery -\pgfcircdeclarebipolescaled{batteries} -{} -{\ctikzvalof{bipoles/battery/height}} -{battery} -{\ctikzvalof{bipoles/battery/height}} -{\ctikzvalof{bipoles/battery/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/battery/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 6 - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \ifpgf@circ@fixbatteries - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \else - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}} - \fi - \pgfusepath{draw} -} - - -%% Battery 1 % poles with equl thickness - -\pgfcircdeclarebipolescaled{batteries} -{} -{\ctikzvalof{bipoles/battery1/height}} -{battery1} -{\ctikzvalof{bipoles/battery1/height}} -{\ctikzvalof{bipoles/battery1/width}} -{ - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}} - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}} - \pgfusepath{draw} - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \ifpgf@circ@fixbatteries - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@down}} - \else - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}} - \fi - \pgfusepath{draw} -} - -%% Battery 2 % negative pole thicker - -\pgfcircdeclarebipolescaled{batteries} -{} -{\ctikzvalof{bipoles/battery2/height}} -{battery2} -{\ctikzvalof{bipoles/battery2/height}} -{\ctikzvalof{bipoles/battery2/width}} -{ - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}} - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}} - \pgfusepath{draw} - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \ifpgf@circ@fixbatteries - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{draw} - \pgfsetlinewidth{3\pgflinewidth} - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@down}} - \else - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfusepath{draw} - \pgfsetlinewidth{3\pgflinewidth} - \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}} - \fi - \pgfusepath{draw} -} - -%%%%%%%%%%% -%% Round and diamond sources -%%%%%%%%%%% - -%% Independent voltage source -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/vsource/height}} -{vsource} -{\ctikzvalof{bipoles/vsource/height}} -{\ctikzvalof{bipoles/vsource/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfusepath{draw} -} - -%% To change the internal symbols of the voltage source american style -\ctikzset{bipoles/vsourceam/inner plus/.initial={$+$}} -\ctikzset{bipoles/vsourceam/inner minus/.initial={$-$}} -%% Independent voltage source - American style -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/vsourceam/height}} -{vsourceAM} -{\ctikzvalof{bipoles/vsourceam/height}} -{\ctikzvalof{bipoles/vsourceam/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - \pgfsetcolor{\ctikzvalof{color}} - \ifpgf@circ@oldvoltagedirection - \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{\ctikzvalof{bipoles/vsourceam/inner plus}} - \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{\ctikzvalof{bipoles/vsourceam/inner minus}} - \else - \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{\ctikzvalof{bipoles/vsourceam/inner minus}} - \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{\ctikzvalof{bipoles/vsourceam/inner plus}} - \fi -} - -%% Independent sinusoidal voltage source -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/vsourcesin/height}} -{vsourcesin} -{\ctikzvalof{bipoles/vsourcesin/height}} -{\ctikzvalof{bipoles/vsourcesin/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - - \pgf@circ@res@up = .5\pgf@circ@res@up - \pgfscope - \pgftransformrotate{90} - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}} - \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}} - \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}} - \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}} - \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -% Square Voltage source - contributed by Alistair Kwan -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/vsourcesquare/height}} -{vsourcesquare} -{\ctikzvalof{bipoles/vsourcesquare/height}} -{\ctikzvalof{bipoles/vsourcesquare/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - \pgf@circ@res@up = .5\pgf@circ@res@up - \pgfscope - \pgftransformrotate{90} - \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}} - \pgfpathlineto{\pgfpoint{-1\pgf@circ@res@up}{1\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{1\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{-1\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{-1\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -% Triangle Voltage source - contributed by Ralf Farkas -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/vsourcetri/height}} -{vsourcetri} -{\ctikzvalof{bipoles/vsourcetri/height}} -{\ctikzvalof{bipoles/vsourcetri/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - - \pgf@circ@res@up = .5\pgf@circ@res@up - \pgfscope - \pgftransformrotate{90} - \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}} - \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - - -%% PV Source -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/pvsource/height}} -{pvsource} -{\ctikzvalof{bipoles/pvsource/height}} -{\ctikzvalof{bipoles/pvsource/width}} -{ - \pgfpointorigin - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}} - \pgf@circ@draworfill - - \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{0}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}} - \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{0}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}} - \pgfusepath{draw} - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@down}} - \pgfusepath{draw} - - %Arrow Part - \pgfscope - \pgfsetarrowsend{latex} - \pgfpathmoveto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}} - \pgfpathlineto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}} - \pgfpathlineto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}} - \pgfusepath{draw} - \endpgfscope - -} - -%% Empty Source -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/esource/height}} -{esource} -{\ctikzvalof{bipoles/esource/height}} -{\ctikzvalof{bipoles/esource/width}} -{ - \pgfpointorigin - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill -} - -%% DC Current Source with open shape -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/dcisource/height}} -{dcisource} -{\ctikzvalof{bipoles/dcisource/height}} -{\ctikzvalof{bipoles/dcisource/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@maybefill - \edef\@@angle{\ctikzvalof{bipoles/dcisource/angle}} - \pgfpathmoveto{\pgfpointpolar{\@@angle}{\pgf@circ@res@up}} - \pgfpatharc{\@@angle}{-\@@angle}{\pgf@circ@res@up} - \pgfpathmoveto{\pgfpointpolar{180-\@@angle}{\pgf@circ@res@up}} - \pgfpatharc{180-\@@angle}{180+\@@angle}{\pgf@circ@res@up} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfusepath{draw} - \pgfscope - \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}} - \endpgfscope -} - -%% DC-Voltage source -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/dcvsource/height}} -{dcvsource} -{\ctikzvalof{bipoles/dcvsource/height}} -{\ctikzvalof{bipoles/dcvsource/width}} -{ - \pgfpointorigin - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@left}} - \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@right}} - \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@left}} - \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@right}} - \pgfusepath{draw} -} - -%% Independent current source -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/isource/height}} -{isource} -{\ctikzvalof{bipoles/isource/height}} -{\ctikzvalof{bipoles/isource/width}} -{ - \pgfpointorigin - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}} - \pgf@circ@draworfill -} - -%% Independent double oo source -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/oosource/height}} -{oosource} -{\ctikzvalof{bipoles/oosource/height}} -{\ctikzvalof{bipoles/oosource/width}} -{ - \pgfpointorigin - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}} - {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left} - \pgf@circ@maybefill - \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@right}{0}} - {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@right} - \pgf@circ@draworfill - \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}} - {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left} - \pgfusepath{draw} -} - -% % % winding symbols -% triangle -\def\pgf@circ@delta#1{ - \pgfscope - \pgftransformscale{-.01\pgf@circ@res@left*#1} - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \pgftransformrotate{-\pgfcircmathresult} - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0}{.866\pgf@circ@res@up}} - \pgfpathclose - \pgfusepath{stroke} - \endpgfscope -} - -% star -\def\pgf@circ@wye#1{ - \pgfscope - \pgftransformscale{-.015\pgf@circ@res@left*#1} - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \pgftransformrotate{-\pgfcircmathresult} - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpointorigin} - \pgfpathlineto{\pgfpointpolar{-30}{\pgf@circ@res@down}} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpointpolar{-150}{\pgf@circ@res@down}} - \pgfusepath{stroke} - \endpgfscope -} - -% zigzag -\def\pgf@circ@zig#1{ - \pgfscope - \pgftransformscale{-.015\pgf@circ@res@left*#1} - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \pgftransformrotate{-\pgfcircmathresult} - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpointpolar{90}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpointpolar{60}{\pgf@circ@res@up}} - - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpointpolar{210}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpointpolar{0}{\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpointorigin} - \pgfpathlineto{\pgfpointpolar{330}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpointpolar{-60}{\pgf@circ@res@up}} - \pgfusepath{stroke} - \endpgfscope -} - -% % % % round three-phase transformer -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/oosourcetrans/height}} -{oosourcetrans} -{\ctikzvalof{bipoles/oosourcetrans/height}} -{\ctikzvalof{bipoles/oosourcetrans/width}} -{ - - \pgfpointorigin - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosourcetrans/circleoffset}\pgf@circ@res@left}{0}} - {\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf@circ@res@left} - \pgf@circ@maybefill - \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosourcetrans/circleoffset}\pgf@circ@res@right}{0}} - {\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf@circ@res@right} - \pgf@circ@draworfill - \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosourcetrans/circleoffset}\pgf@circ@res@left}{0}} - {\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf@circ@res@left} - \pgfusepath{draw} - - -% % % % draw inner symbols - - %%primary winding - \ifpgf@circ@prim@delta - \pgfscope - \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf@circ@res@left} - \pgf@circ@delta{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}} - \endpgfscope - - \else\ifpgf@circ@prim@wye - \pgfscope - \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf@circ@res@left} - \pgf@circ@wye{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}} - \endpgfscope - - \else\ifpgf@circ@prim@zig - \pgfscope - \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf@circ@res@left} - \pgf@circ@zig{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}} - \endpgfscope - \fi\fi\fi - - %%secondary winding - \ifpgf@circ@sec@delta - \pgfscope - \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf@circ@res@right} - \pgf@circ@delta{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}} - \endpgfscope - - \else\ifpgf@circ@sec@wye - \pgfscope - \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf@circ@res@right} - \pgf@circ@wye{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}} - \endpgfscope - - \else\ifpgf@circ@sec@zig - \pgfscope - \pgftransformxshift{\ctikzvalof{bipoles/oosourcetrans/circlesize}\pgf@circ@res@right} - \pgf@circ@zig{\ctikzvalof{bipoles/oosourcetrans/vectorgroupscale}} - \endpgfscope - \fi\fi\fi -} - - -% % % % ooosource for three phase transformer -\pgfcircdeclarebipolescaled{sources} -{ - \anchor{right}{ - \northeast - \pgf@y=0pt - \pgfmathparse{ - \ctikzvalof{bipoles/ooosource/circleoffset}* sin(30) + - %%the sqrt must be > 0, the circles have to intersect - sqrt( - pow(\ctikzvalof{bipoles/ooosource/circlesize},2) - - pow(\ctikzvalof{bipoles/ooosource/circleoffset}*cos(30),2) - ) - } - \pgf@x=\pgfmathresult\pgf@x - } - \anchor{east}{ - \northeast - \pgf@y=0pt - } - \savedanchor{\centerprim}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf@circ@Rlen - \pgf@circ@scaled@Rlen=-\ctikzvalof{bipoles/ooosource/circleoffset}\pgf@circ@scaled@Rlen - \pgf@y=0pt - \pgf@x=.5\pgf@circ@scaled@Rlen - } - \anchor{centerprim}{ - \centerprim - } - \savedanchor{\centersec}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf@circ@Rlen - \pgf@circ@scaled@Rlen=-\ctikzvalof{bipoles/ooosource/circleoffset}\pgf@circ@scaled@Rlen - \pgfpointpolar{60}{.5\pgf@circ@scaled@Rlen} - \pgf@y=-\pgf@y - \pgf@x=-\pgf@x - } - \anchor{centersec}{ - \centersec - } - \savedanchor{\centertert}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf@circ@Rlen - \pgf@circ@scaled@Rlen=-\ctikzvalof{bipoles/ooosource/circleoffset}\pgf@circ@scaled@Rlen - \pgfpointpolar{60}{.5\pgf@circ@scaled@Rlen} - \pgf@y=\pgf@y - \pgf@x=-\pgf@x - } - \anchor{centertert}{ - \centertert - } - - % add some anchors in case the are needed :) - \anchor{prim1}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf@circ@Rlen - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@scaled@Rlen - \pgfpointadd{\centerprim}{\pgfpointpolar{135}{.5\pgf@circ@scaled@Rlen}} - } - \anchor{prim2}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf@circ@Rlen - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@scaled@Rlen - \pgfpointadd{\centerprim}{\pgfpointpolar{-135}{.5\pgf@circ@scaled@Rlen}} - } - \anchor{sec1}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf@circ@Rlen - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@scaled@Rlen - \pgfpointadd{\centersec}{\pgfpointpolar{0}{.5\pgf@circ@scaled@Rlen}} - } - \anchor{sec2}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf@circ@Rlen - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@scaled@Rlen - \pgfpointadd{\centersec}{\pgfpointpolar{45}{.5\pgf@circ@scaled@Rlen}} - } - \anchor{sec3}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf@circ@Rlen - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@scaled@Rlen - \pgfpointadd{\centersec}{\pgfpointpolar{90}{.5\pgf@circ@scaled@Rlen}} - } - \anchor{tert1}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf@circ@Rlen - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@scaled@Rlen - \pgfpointadd{\centertert}{\pgfpointpolar{0}{.5\pgf@circ@scaled@Rlen}} - } - \anchor{tert2}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf@circ@Rlen - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@scaled@Rlen - \pgfpointadd{\centertert}{\pgfpointpolar{-45}{.5\pgf@circ@scaled@Rlen}} - } - \anchor{tert3}{ - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/height}\pgf@circ@Rlen - \pgf@circ@scaled@Rlen=\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@scaled@Rlen - \pgfpointadd{\centertert}{\pgfpointpolar{-90}{.5\pgf@circ@scaled@Rlen}} - } -} -{\ctikzvalof{bipoles/ooosource/height}} -{ooosource} -{\ctikzvalof{bipoles/ooosource/height}} -{\ctikzvalof{bipoles/ooosource/height}} -{ -% \pgf@circ@res@other = \ctikzvalof{bipoles/ooosource/vectorgroup} \pgf@circ@scaled@Rlen - -% % filling -% left - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/ooosource/circleoffset}\pgf@circ@res@left}{0}}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@left} - \pgf@circ@maybefill - - % up - \pgfscope - \pgfpointorigin - \pgfpathcircle{\pgfpointpolar{60}{\ctikzvalof{bipoles/ooosource/circleoffset}\pgf@circ@res@right}}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@right} - \pgf@circ@maybefill - \endpgfscope -% down - \pgfscope - \pgfpointorigin - \pgfpathcircle{\pgfpointpolar{-60}{\ctikzvalof{bipoles/ooosource/circleoffset}\pgf@circ@res@right}}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@right} - \pgf@circ@draworfill - \endpgfscope - -% drawing - % left - \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/ooosource/circleoffset}\pgf@circ@res@left}{0}}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@left} - \pgfusepath{draw} - - % up - \pgfscope - \pgfpointorigin - \pgfpathcircle{\pgfpointpolar{60}{\ctikzvalof{bipoles/ooosource/circleoffset}\pgf@circ@res@right}}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@right} - \pgfusepath{draw} - \endpgfscope - -% % % draw inner symbols - -% % primary winding - \ifpgf@circ@prim@delta - \pgfscope - \pgftransformxshift{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@left} - \pgf@circ@delta{\ctikzvalof{bipoles/ooosource/vectorgroupscale}} - \endpgfscope - - \else\ifpgf@circ@prim@wye - \pgfscope - \pgftransformxshift{.6\pgf@circ@res@left} - \pgf@circ@wye{\ctikzvalof{bipoles/ooosource/vectorgroupscale}} - \endpgfscope - - \else\ifpgf@circ@prim@zig - \pgfscope - \pgftransformxshift{.6\pgf@circ@res@left} - \pgf@circ@zig{\ctikzvalof{bipoles/ooosource/vectorgroupscale}} - \endpgfscope - \fi\fi\fi - -% % secondary winding - \ifpgf@circ@sec@delta - \pgfscope - \pgfpointorigin - \pgftransformshift{\pgfpointpolar{60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@right}} - \pgf@circ@delta{\ctikzvalof{bipoles/ooosource/vectorgroupscale}} - \endpgfscope - - \else\ifpgf@circ@sec@wye - \pgfscope - \pgftransformshift{\pgfpointpolar{60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@right}} - \pgf@circ@wye{\ctikzvalof{bipoles/ooosource/vectorgroupscale}} - \endpgfscope - - \else\ifpgf@circ@sec@zig - \pgfscope - \pgftransformshift{\pgfpointpolar{60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@right}} - \pgf@circ@zig{\ctikzvalof{bipoles/ooosource/vectorgroupscale}} - \endpgfscope - \fi\fi\fi - -% % tertiary winding - \ifpgf@circ@tert@delta - \pgfscope - \pgftransformshift{\pgfpointpolar{-60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@right}} - \pgf@circ@delta{\ctikzvalof{bipoles/ooosource/vectorgroupscale}} - \endpgfscope - - \else\ifpgf@circ@tert@wye - \pgfscope - \pgftransformshift{\pgfpointpolar{-60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@right}} - \pgf@circ@wye{\ctikzvalof{bipoles/ooosource/vectorgroupscale}} - \endpgfscope - - \else\ifpgf@circ@tert@zig - \pgfscope - \pgftransformshift{\pgfpointpolar{-60}{\ctikzvalof{bipoles/ooosource/circlesize}\pgf@circ@res@right}} - \pgf@circ@zig{\ctikzvalof{bipoles/ooosource/vectorgroupscale}} - \endpgfscope - \fi\fi\fi -} - -%% Independent current source - American -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/isourceam/height}} -{isourceAM} -{\ctikzvalof{bipoles/isourceam/height}} -{\ctikzvalof{bipoles/isourceam/width}} -{ - \pgfpointorigin - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - - \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfusepath{draw} - \pgfscope - \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}} - \endpgfscope -} - -%% Independent sinusoidal current source -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/isource/height}} -{isourcesin} -{\ctikzvalof{bipoles/isource/height}} -{\ctikzvalof{bipoles/isource/width}} -{ - \pgfpointorigin - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - - \pgf@circ@res@up = .5\pgf@circ@res@up - \pgfscope - \pgftransformrotate{90} - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}} - \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}} - \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}} - \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}} - \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -%% Empty controlled source -\pgfcircdeclarebipolescaled{csources} -{} -{\ctikzvalof{bipoles/ecsource/height}} -{ecsource} -{\ctikzvalof{bipoles/ecsource/height}} -{\ctikzvalof{bipoles/ecsource/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}} - \pgfpathclose - \pgf@circ@draworfill -} - -%% Controlled voltage source -\pgfcircdeclarebipolescaled{csources} -{} -{\ctikzvalof{bipoles/cvsource/height}} -{cvsource} -{\ctikzvalof{bipoles/cvsource/height}} -{\ctikzvalof{bipoles/cvsource/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}} - \pgfpathclose - \pgf@circ@draworfill - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfusepath{draw} -} - -%% To change the internal symbols of the controlled voltage source american style -\ctikzset{bipoles/cvsourceam/inner plus/.initial={$+$}} -\ctikzset{bipoles/cvsourceam/inner minus/.initial={$-$}} -%% Controlled voltage source - American -\pgfcircdeclarebipolescaled{csources} -{} -{\ctikzvalof{bipoles/cvsourceam/height}} -{cvsourceAM} -{\ctikzvalof{bipoles/cvsourceam/height}} -{\ctikzvalof{bipoles/cvsourceam/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}} - \pgfpathclose - \pgf@circ@draworfill - - \pgfsetcolor{\ctikzvalof{color}} - \ifpgf@circ@oldvoltagedirection - \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{\ctikzvalof{bipoles/cvsourceam/inner plus}} - \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{\ctikzvalof{bipoles/cvsourceam/inner minus}} - \else - \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{\ctikzvalof{bipoles/cvsourceam/inner minus}} - \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{\ctikzvalof{bipoles/cvsourceam/inner plus}} - \fi -} - -%% Controlled sinusoidal voltage source -\pgfcircdeclarebipolescaled{csources} -{} -{\ctikzvalof{bipoles/cvsourcesin/height}} -{cvsourcesin} -{\ctikzvalof{bipoles/cvsourcesin/height}} -{\ctikzvalof{bipoles/cvsourcesin/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}} - \pgfpathclose - \pgf@circ@draworfill - \endpgfscope - - \pgf@circ@res@up = .5\pgf@circ@res@up - \pgfscope - \pgftransformrotate{90} - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}} - \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}} - \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}} - \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}} - \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -%% Controlled sinusoidal current source -\pgfcircdeclarebipolescaled{csources} -{} -{\ctikzvalof{bipoles/cvsourcesin/height}} -{cisourcesin} -{\ctikzvalof{bipoles/cvsourcesin/height}} -{\ctikzvalof{bipoles/cvsourcesin/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}} - \pgfpathclose - \pgf@circ@draworfill - \endpgfscope - - \pgf@circ@res@up = .5\pgf@circ@res@up - \pgfscope - \pgftransformrotate{90} - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}} - \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}} - \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}} - \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}} - \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -%% Controlled current source -\pgfcircdeclarebipolescaled{csources} -{} -{\ctikzvalof{bipoles/cisource/height}} -{cisource} -{\ctikzvalof{bipoles/cisource/height}} -{\ctikzvalof{bipoles/cisource/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}} - \pgfpathclose - \pgf@circ@draworfill - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}} - \pgfusepath{draw} -} - -%% Controlled current source - American -\pgfcircdeclarebipolescaled{csources} -{} -{\ctikzvalof{bipoles/cisourceam/height}} -{cisourceAM} -{\ctikzvalof{bipoles/cisourceam/height}} -{\ctikzvalof{bipoles/cisourceam/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}} - \pgfpathclose - \pgf@circ@draworfill - \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfusepath{draw} - \pgfscope - \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}} - \endpgfscope -} - -%% Cute Independent voltage source -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/vsource/height}} -{vsourceC} -{\ctikzvalof{bipoles/vsource/height}} -{\ctikzvalof{bipoles/vsource/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}} - \pgfsetlinewidth{\@@thicker\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfsetroundcap\pgfusepath{draw} -} - -%% Cute Independent current source -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/isource/height}} -{isourceC} -{\ctikzvalof{bipoles/isource/height}} -{\ctikzvalof{bipoles/isource/width}} -{ - \pgfpointorigin - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}} - \pgfsetlinewidth{\@@thicker\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@down}} - \pgfsetroundcap\pgfusepath{draw} -} - -%% Cute Controlled voltage source -\pgfcircdeclarebipolescaled{csources} -{} -{\ctikzvalof{bipoles/cvsource/height}} -{cvsourceC} -{\ctikzvalof{bipoles/cvsource/height}} -{\ctikzvalof{bipoles/cvsource/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@draworfill - \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}} - \pgfsetlinewidth{\@@thicker\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfsetroundcap\pgfusepath{draw} -} - -%% Cute Controlled current source -\pgfcircdeclarebipolescaled{csources} -{} -{\ctikzvalof{bipoles/cisource/height}} -{cisourceC} -{\ctikzvalof{bipoles/cisource/height}} -{\ctikzvalof{bipoles/cisource/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@draworfill - \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}} - \pgfsetlinewidth{\@@thicker\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{.6\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{.6\pgf@circ@res@down}} - \pgfsetroundcap\pgfusepath{draw} -} - -%% Noise voltage source -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/vsource/height}} -{vsourceN} -{\ctikzvalof{bipoles/vsource/height}} -{\ctikzvalof{bipoles/vsource/width}} -{ - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - % - \pgf@circ@scaled@Rlen=\scaledRlen - \pgf@circ@res@step=0.125\pgf@circ@scaled@Rlen\relax - \edef\pgf@noise@temp{dashed} - \edef\pgf@noise@fill{\ctikzvalof{bipoles/noise sources/fillcolor}} - \ifx\pgf@noise@temp\pgf@noise@fill - % fillable in this case - \pgf@circ@draworfillandclip - \pgfmathsetmacro{\@@thinner}{.5*\ctikzvalof{bipoles/thickness}} - \pgfsetlinewidth{\@@thinner\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - % - \advance\pgf@circ@res@up by -4\pgf@circ@res@step \advance\pgf@circ@res@down by -4\pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{draw} - \else - \pgfsetfillcolor{\pgf@noise@fill} - \pgfusepath{draw,fill} - \fi - \endpgfscope - \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}} - \pgfsetlinewidth{\@@thicker\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfsetroundcap\pgfusepath{draw} -} -%% Noise current source - -\pgfcircdeclarebipolescaled{sources} -{} -{\ctikzvalof{bipoles/isource/height}} -{isourceN} -{\ctikzvalof{bipoles/isource/height}} -{\ctikzvalof{bipoles/isource/width}} -{ - \pgfpointorigin - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - % - \pgf@circ@scaled@Rlen=\scaledRlen - \pgf@circ@res@step=0.125\pgf@circ@scaled@Rlen\relax - \edef\pgf@noise@temp{dashed} - \edef\pgf@noise@fill{\ctikzvalof{bipoles/noise sources/fillcolor}} - \ifx\pgf@noise@temp\pgf@noise@fill - % fillable in this case - \pgf@circ@draworfillandclip - \pgfmathsetmacro{\@@thinner}{.5*\ctikzvalof{bipoles/thickness}} - \pgfsetlinewidth{\@@thinner\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - % - \advance\pgf@circ@res@up by -4\pgf@circ@res@step \advance\pgf@circ@res@down by -4\pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{draw} - \else - \pgfsetfillcolor{\pgf@noise@fill} - \pgfusepath{draw,fill} - \fi - \endpgfscope - \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}} - \pgfsetlinewidth{\@@thicker\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@down}} - \pgfsetroundcap\pgfusepath{draw} -} - -%%%%%%%%%%%%%% -%% Diodes -%%%%%%%%%%%%%% - -%% Black generic diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{fulldiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfscope - \pgftransformxshift{\pgf@circ@res@left} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfusepath{draw,fill} - \endpgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} -} - -%% Black Zener diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{fullzdiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfscope - \pgftransformxshift{\pgf@circ@res@left} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfusepath{draw,fill} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -%% Black alternative zigzag Zener diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{fullzzdiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfscope - \pgftransformxshift{\pgf@circ@res@left} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfusepath{draw,fill} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -%% Black Schottky diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{fullsdiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfscope - \pgftransformxshift{\pgf@circ@res@left} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfusepath{draw,fill} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope - -} - -%% Black tunnel diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{fulltdiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfscope - \pgftransformxshift{\pgf@circ@res@left} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfusepath{draw,fill} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -% -% draw LED arrows -% -\def\pgf@circ@draw@ledarrows{% - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfsetarrowsend{latexslim} - \ifpgf@led@fliparrows - \pgfpathmoveto{\pgfpoint{0pt}{0.8\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-0.6\pgf@circ@res@right}{1.8\pgf@circ@res@up}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@right}{0.6\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{1.6\pgf@circ@res@up}} - \pgfusepath{draw} - \else - \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}} - \pgfusepath{draw} - \fi -} -% -% ---and photodiode arrows -% -\def\pgf@circ@draw@pdarrows{% - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfsetarrowsstart{latexslim} - \ifpgf@pd@fliparrows - \pgfpathmoveto{\pgfpoint{0pt}{0.8\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-0.6\pgf@circ@res@right}{1.8\pgf@circ@res@up}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@right}{0.6\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{1.6\pgf@circ@res@up}} - \pgfusepath{draw} - \else - \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}} - \pgfusepath{draw} - \fi -} -%% Black light emitting diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{fulllediode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfscope - \pgftransformxshift{\pgf@circ@res@left} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfusepath{draw,fill} - \endpgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgf@circ@draw@ledarrows -} - -%% Black photodiode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{fullpdiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfscope - \pgftransformxshift{\pgf@circ@res@left} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfusepath{draw,fill} - \endpgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgf@circ@draw@pdarrows -} - -%% Black varcap -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/varcap/height}} -{fullvarcap} -{\ctikzvalof{bipoles/varcap/height}} -{\ctikzvalof{bipoles/varcap/width}} -{ - \pgf@circ@res@temp=\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgfsetlinewidth{\pgf@circ@res@temp} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}} - \pgfusepath{draw,fill} - % - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} -} - -%% Code for the diode triangle -\def\pgf@circ@basicdiodeshape{ - % \pgfscope - \pgftransformxshift{\pgf@circ@res@left} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfpathclose - \pgf@circ@draworfill - \pgfscope - % to allow filling, we need to draw explicitly the stroke here. - \pgfsetlinewidth{\pgfstartlinewidth} - \ifpgf@circuit@bipole@strokedsymbol - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0pt}{0pt}} - \pgfusepath{draw} - \fi - \endpgfscope - % \endpgfscope -} - -%% Empty generic diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{emptydiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfscope - \pgf@circ@basicdiodeshape - \endpgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} -} - -%% Empty Zener diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{emptyzdiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfscope - \pgf@circ@basicdiodeshape - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.6\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -%% Empty alternative zigzag Zener diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{emptyzzdiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfscope - \pgf@circ@basicdiodeshape - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} -%% Empty Schottky diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{emptysdiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfscope - \pgf@circ@basicdiodeshape - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope - -} - -%% Empty tunnel diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{emptytdiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfscope - \pgf@circ@basicdiodeshape - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -%% Empty light emitting diode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{emptylediode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfscope - \pgf@circ@basicdiodeshape - \endpgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgf@circ@draw@ledarrows -} - -%% Empty photodiode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/diode/height}} -{emptypdiode} -{\ctikzvalof{bipoles/diode/height}} -{\ctikzvalof{bipoles/diode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfscope - \pgf@circ@basicdiodeshape - \endpgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgf@circ@draw@pdarrows -} - -%% Empty varcap -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/varcap/height}} -{emptyvarcap} -{\ctikzvalof{bipoles/varcap/height}} -{\ctikzvalof{bipoles/varcap/width}} -{ - \pgf@circ@res@temp=\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgfsetlinewidth{\pgf@circ@res@temp} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - % \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}} - \pgfpathclose - \pgf@circ@draworfill - \pgfscope - % to allow filling, we need to draw explicitily the stroke here. - \pgfsetlinewidth{\pgfstartlinewidth} - \ifpgf@circuit@bipole@strokedsymbol - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfusepath{draw} - \fi - \endpgfscope - % - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} -} - -%% Empty bidirectionaldiode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/bidirectionaldiode/height}} -{emptybidirectionaldiode} -{\ctikzvalof{bipoles/bidirectionaldiode/height}} -{\ctikzvalof{bipoles/bidirectionaldiode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgf@circ@res@other = \ctikzvalof{bipoles/bidirectionaldiode/diode width left}\pgf@circ@res@left - \pgf@circ@res@step = \ctikzvalof{bipoles/bidirectionaldiode/diode width right}\pgf@circ@res@right - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - - \pgf@circ@draworfill - - \pgfsetlinewidth{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - - \pgfusepath{draw} -} - -%% Full bidirectionaldiode -\pgfcircdeclarebipolescaled{diodes} -{} -{\ctikzvalof{bipoles/bidirectionaldiode/height}} -{fullbidirectionaldiode} -{\ctikzvalof{bipoles/bidirectionaldiode/height}} -{\ctikzvalof{bipoles/bidirectionaldiode/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgf@circ@res@other = \ctikzvalof{bipoles/bidirectionaldiode/diode width left}\pgf@circ@res@left - \pgf@circ@res@step = \ctikzvalof{bipoles/bidirectionaldiode/diode width right}\pgf@circ@res@right - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - - \pgfusepath{draw, fill} - - \pgfsetlinewidth{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - - \pgfusepath{draw} -} - -%% Black thyristor -\pgfcircdeclarebipolescaled{diodes} -{ - \anchor{gate}{\northeast} - \anchor{anode}{\southwest\pgf@y=0cm} - \anchor{G}{\northeast} - \anchor{cathode}{\northeast\pgf@y=0cm } -} -{\ctikzvalof{tripoles/thyristor/height 2}} -{fullthyristor} -{\ctikzvalof{tripoles/thyristor/height}} -{\ctikzvalof{tripoles/thyristor/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left - \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right - - \pgfscope - \pgftransformxshift{\pgf@circ@res@other} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}} - - \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}} - \pgfusepath{draw,fill} - - \pgfsetlinewidth{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}} - - \pgfusepath{draw} - - \pgfsetlinewidth{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - - \pgfusepath{draw} - -} - -%% Empty thyristor - -\pgfcircdeclarebipolescaled{diodes} -{ - \anchor{gate}{\northeast} - \anchor{anode}{\southwest\pgf@y=0cm} - \anchor{G}{\northeast} - \anchor{cathode}{\northeast\pgf@y=0cm } -} -{\ctikzvalof{tripoles/thyristor/height 2}} -{emptythyristor} -{\ctikzvalof{tripoles/thyristor/height}} -{\ctikzvalof{tripoles/thyristor/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left - \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right - - \pgfscope - \pgftransformxshift{\pgf@circ@res@other} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}} - - \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfpathclose - \pgf@circ@draworfill - \pgfscope - % to allow filling, we need to draw explicitily the stroke here. - \pgfsetlinewidth{\pgfstartlinewidth} - \ifpgf@circuit@bipole@strokedsymbol - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{0pt}{0pt}} - \pgfusepath{draw} - \fi - \endpgfscope - - \pgfsetlinewidth{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}} - - \pgfusepath{draw} - - \pgfsetlinewidth{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - - \pgfusepath{draw} -} - -%% Empty triac -\pgfcircdeclarebipolescaled{diodes} -{ - \anchor{gate}{\northeast} - \anchor{anode}{\southwest\pgf@y=0cm} - \anchor{G}{\northeast} - \anchor{cathode}{\northeast\pgf@y=0cm } -} -{\ctikzvalof{tripoles/triac/height}} -{emptytriac} -{\ctikzvalof{tripoles/triac/height}} -{\ctikzvalof{tripoles/triac/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left - \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - - \pgf@circ@draworfill - - \pgfsetlinewidth{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2) - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - - \pgfusepath{draw} -} - -%% Full triac -\pgfcircdeclarebipolescaled{diodes} -{ - \anchor{gate}{\northeast} - \anchor{anode}{\southwest\pgf@y=0cm} - \anchor{G}{\northeast} - \anchor{cathode}{\northeast\pgf@y=0cm } -} -{\ctikzvalof{tripoles/triac/height}} -{fulltriac} -{\ctikzvalof{tripoles/triac/height}} -{\ctikzvalof{tripoles/triac/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left - \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} - - \pgfusepath{draw,fill} - - \pgfsetlinewidth{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2) - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2) - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - - \pgfusepath{draw} -} - -%%%%%%%%%%%%% -%% switches -%%%%%%%%%%%%% - -%% (Closing) SPST -\pgfcircdeclarebipolescaled{switches} -{} -{\ctikzvalof{bipoles/spst/depth}} -{cspst} -{\ctikzvalof{bipoles/spst/height}} -{\ctikzvalof{bipoles/spst/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgfscope - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathmoveto{\pgfpointpolar{90}{1.2\pgf@circ@res@right}} - \pgfpatharc{90}{-20}{1.2\pgf@circ@res@right} - \pgfsetarrowsend{latexslim} - \pgfsetbeveljoin - \pgfusepath{draw} - \endpgfscope -} - -%% Opening SPST -\pgfcircdeclarebipolescaled{switches} -{} -{\ctikzvalof{bipoles/spst/depth}} -{ospst} -{\ctikzvalof{bipoles/spst/height}} -{\ctikzvalof{bipoles/spst/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgfscope - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathmoveto{\pgfpointpolar{-10}{1.2\pgf@circ@res@right}} - \pgfpatharc{-10}{90}{1.2\pgf@circ@res@right} - \pgfsetarrowsend{latexslim} - \pgfsetbeveljoin - \pgfusepath{draw} - \endpgfscope -} - -%% Normal open Switch -\pgfcircdeclarebipolescaled{switches} -{} -{\ctikzvalof{bipoles/nos/depth}} -{nos} -{\ctikzvalof{bipoles/nos/height}} -{\ctikzvalof{bipoles/nos/width}} -{ - - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfsetbuttcap - \pgfusepath{draw} -} - -%% Normal closed Switch -\pgfcircdeclarebipolescaled{switches} -{} -{\ctikzvalof{bipoles/ncs/depth}} -{ncs} -{\ctikzvalof{bipoles/ncs/height}} -{\ctikzvalof{bipoles/ncs/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} -} - -%% Push Button -\pgfcircdeclarebipolescaled{switches} -{} -{\ctikzvalof{bipoles/pushbutton/height 2}} -{pushbutton} -{\ctikzvalof{bipoles/pushbutton/height}} -{\ctikzvalof{bipoles/pushbutton/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{0}{.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}} - \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}} - \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}} -} - -%% Normally closed Push Button -\pgfcircdeclarebipolescaled{switches} -{} -{\ctikzvalof{bipoles/pushbutton/height 2}} -{ncpushbutton} -{\ctikzvalof{bipoles/pushbutton/height}} -{\ctikzvalof{bipoles/pushbutton/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - % This is the radius of the "ocirc" shape (see pgfcircshapes.tex) - % Warning, if the nodes will have a class, we have to touch this. - \pgf@circ@res@temp=\ctikzvalof{nodes width}\pgf@circ@Rlen - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp}} - \pgfpathmoveto{\pgfpoint{0}{-\pgf@circ@res@temp}} - \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}} - \pgfusepath{draw} - % - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}} - \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}} - \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}} -} -%%% reed switches -\pgfcircdeclarebipolescaled{switches} -{} -{\ctikzvalof{bipoles/reed/depth}} -{reed} -{\ctikzvalof{bipoles/reed/height}} -{\ctikzvalof{bipoles/reed/width}} -{ - % this is designed to be the same as a "nos". - \pgfmathsetmacro{\@@tmpx}{0.9*\ctikzvalof{bipoles/nos/width}/\ctikzvalof{bipoles/reed/width}} - \pgfmathsetmacro{\@@tmpy}{\ctikzvalof{bipoles/nos/height}/\ctikzvalof{bipoles/reed/height}} - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - % eclosure - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@up}{\pgf@circ@res@up}} - \pgfpatharc{90}{-90}{\pgf@circ@res@up} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@up}{-\pgf@circ@res@up}} - \pgfpatharc{270}{90}{\pgf@circ@res@up} - \pgfpathclose - \pgf@circ@draworfill - % switch - \pgfpathmoveto{\pgfpoint{\@@tmpx\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\@@tmpx\pgf@circ@res@right}{\@@tmpy\pgf@circ@res@up}} - % connection lines - \pgfsetbuttcap - \pgfusepath{draw} - \endpgfscope - % connection lines - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\@@tmpx\pgf@circ@res@left}{0pt}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{\@@tmpx\pgf@circ@res@right}{0pt}} - \pgfusepath{draw} -} - -% cute switch "to" shapes help function -% #1 -> name -% #2 -> barposition -% #3 -> arrowcode -\long\def\pgfcircdeclarecutesw#1#2#3{ - \pgfcircdeclarebipolescaled{switches} - { - \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) - % If cnnecting nodes are scaled, we have to modify this - \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} - \anchor{cout}{\northeast \pgf@y=0cm} - \anchor{cin}{\southwest\pgf@y=0cm} - \anchor{out}{\northeast \pgf@y=0cm\advance\pgf@x by \radius} - \anchor{in}{\southwest\pgf@y=0cm\advance\pgf@x by -\radius} - } - {\ctikzvalof{bipoles/cuteswitch/height 2}} - {#1} - {\ctikzvalof{bipoles/cuteswitch/height}} - {\ctikzvalof{bipoles/cuteswitch/width}}{ - \pgfscope - % This is the radius of the "ocirc" shape (see pgfcircshapes.tex) - % If cnnecting nodes are scaled, we have to modify this - \pgf@circ@res@temp=\ctikzvalof{nodes width}\pgf@circ@Rlen - \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 - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{draw}} - \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}} - \pgfnode{\cshape}{center}{}{\thisshape-out}{\pgfusepath{draw}} - } -} - -%% closed cute switch -\pgfcircdeclarecutesw{cuteclosedswitch} - {\pgfpoint{\pgf@circ@res@right}{1.5\pgf@circ@res@temp}} - {} - -%% open cute switch -\pgfcircdeclarecutesw{cuteopenswitch} - {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - {} - -%% closing cute switch -\pgfcircdeclarecutesw{cuteclosingswitch} - {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - { - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node - \pgfpathmoveto{\pgfpointpolar{70}{1.2\pgf@circ@res@right}} - \pgfpatharc{70}{-10}{1.2\pgf@circ@res@right} - \pgfsetarrowsend{latexslim} - \pgfusepath{draw} - } - -%% opening cute switch -\pgfcircdeclarecutesw{cuteopeningswitch} - {\pgfpoint{\pgf@circ@res@right}{1.5\pgf@circ@res@temp}} - { - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node - \pgfpathmoveto{\pgfpointpolar{-10}{1.2\pgf@circ@res@right}} - \pgfpatharc{-10}{60}{1.2\pgf@circ@res@right} - \pgfsetarrowsend{latexslim} - \pgfusepath{draw} - } - -%%%%%%%%%%%%%%%%% -%% Instruments -%%%%%%%%%%%%%%%%% - -% % METERINGSHAPE -\long\def\drawmeteringcircle{ - \def\pgf@circ@temp{right} - \ifx\tikz@res@label@pos\pgf@circ@temp - \pgf@circ@res@step=-1.2\pgf@circ@res@up - \else - \def\pgf@circ@temp{below} - \ifx\tikz@res@label@pos\pgf@circ@temp - \pgf@circ@res@step=-1.2\pgf@circ@res@up - \else - \pgf@circ@res@step=1.2\pgf@circ@res@up - \fi - \fi - %draw connections to circle - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfusepath{draw} - %draw circle - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up} - \pgf@circ@draworfill - \endpgfscope - %draw arrow - \pgfscope - \pgfsetarrowsend{latex} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -%AMPEREMETER -\pgfcircdeclarebipolescaled{instruments} -{} -{\ctikzvalof{bipoles/ammeter/height}} -{ammeter} -{\ctikzvalof{bipoles/ammeter/height}} -{\ctikzvalof{bipoles/ammeter/width}} -{ - \drawmeteringcircle - \pgfnode{circle}{center}{\pgf@circ@font@bold{A}}{}{} -} -%OHMMETER -\pgfcircdeclarebipolescaled{instruments} -{} -{\ctikzvalof{bipoles/ohmmeter/height}} -{ohmmeter} -{\ctikzvalof{bipoles/ohmmeter/height}} -{\ctikzvalof{bipoles/ohmmeter/width}} -{ - \drawmeteringcircle - \pgfnode{circle}{center}{\boldmath$\Omega$}{}{} -} -%VOLTMETER -\pgfcircdeclarebipolescaled{instruments} -{} -{\ctikzvalof{bipoles/voltmeter/height}} -{voltmeter} -{\ctikzvalof{bipoles/voltmeter/height}} -{\ctikzvalof{bipoles/voltmeter/width}} -{ - \drawmeteringcircle - \pgfnode{circle}{center}{\pgf@circ@font@bold{V}}{}{} - -} - -% oscilloscope, suggested by @nobrl https://github.com/circuitikz/circuitikz/issues/176 -\pgfcircdeclarebipolescaled{instruments} -{ - \anchor{in 1}{\southwest\pgf@y=0.75\pgf@y\pgf@x=0.4\pgf@x} - \anchor{in 2}{\southwest\pgf@y=0.75\pgf@y\pgf@x=-0.4\pgf@x} - % put the node text above and centered - \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfpoint{-.5\wd\pgfnodeparttextbox}{ - \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax - } - } -} -{\ctikzvalof{bipoles/oscope/height}} -{oscope} -{\ctikzvalof{bipoles/oscope/height}} -{\ctikzvalof{bipoles/oscope/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfextractx{\pgf@circ@res@right}{\northeast} - \pgfextractx{\pgf@circ@res@left}{\southwest} - \pgfextracty{\pgf@circ@res@down}{\southwest} - \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up} - \pgfscope - \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}} - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - % this would create a round (analog?) scope... - % \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - \endpgfscope - % get the rotation - \ifpgf@circuit@straightinstruments - \pgfgettransformentries\a\b\temp\temp\temp\temp - \pgfmathsetmacro{\rot}{-atan2(\b,\a)} - \else - \edef\rot{0} - \fi - % and unrotate the scope - \pgfscope - \pgftransformrotate{\rot} - % grid - \pgfscope - \pgfsetlinewidth{0.5\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.25\pgf@circ@res@down}} - \pgfpathgrid[stepx=\pgf@circ@res@step, stepy=\pgf@circ@res@step]% - {\pgfpoint{0.75\pgf@circ@res@left}{0.5\pgf@circ@res@down}} - {\pgfpoint{0.75\pgf@circ@res@right}{0.5\pgf@circ@res@up}} - \pgfsetstrokeopacity{0.5} - \pgfusepath{draw} - \endpgfscope - % function displayed, thanks to - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.25\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.05\pgf@circ@res@left}{0.25\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.05\pgf@circ@res@left}{0.25\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.65\pgf@circ@res@right}{0.25\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.65\pgf@circ@res@right}{0.25\pgf@circ@res@down}} - \pgfusepath{draw} - \endpgfscope -} - -% generic round meter with always horizontal text, no arrow -\pgfcircdeclarebipolescaled{instruments} -{} -{\ctikzvalof{bipoles/esource/height}} -{rmeter} -{\ctikzvalof{bipoles/esource/height}} -{\ctikzvalof{bipoles/esource/width}} -{ - \pgfpointorigin - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - % draw the text label - % get the rotation - \ifpgf@circuit@straightinstruments - \pgfgettransformentries\a\b\temp\temp\temp\temp - \pgfmathsetmacro{\rot}{-atan2(\b,\a)} - \else - \edef\rot{0} - \fi - % and unrotate the scope - \pgfscope - \pgfsetcolor{\ctikzvalof{color}} - \pgftransformrotate{\rot} - \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}} - \endpgfscope -} - -% generic round meter with always horizontal text, with arrow -\pgfcircdeclarebipolescaled{instruments} -{} -{\ctikzvalof{bipoles/esource/height}} -{rmeterwa} -{\ctikzvalof{bipoles/esource/height}} -{\ctikzvalof{bipoles/esource/width}} -{ - \pgfpointorigin - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - % draw the text label - % get the rotation - \ifpgf@circuit@straightinstruments - \pgfgettransformentries\a\b\temp\temp\temp\temp - \pgfmathsetmacro{\rot}{-atan2(\b,\a)} - \else - \edef\rot{0} - \fi - % and unrotate the scope - \pgfscope - \pgftransformrotate{\rot} - \pgfsetcolor{\ctikzvalof{color}} - \pgfsetlinewidth{\pgfstartlinewidth} - % arrow: create a center hole to have better visual - \pgfscope - % clipping path: first a rectangle bigger then the shape - % to avoid problems with the line thickness - \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}} - {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}} - % next open a circle into it - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{.6\pgf@circ@res@up}}{\pgfpoint{.6\pgf@circ@res@left}{0}} - % do the difference and clip before drawing - \pgfseteorule - \pgfusepath{clip} - \pgfsetarrowsend{latexslim} - % the arrow is better if it has a bit of breath and it's not 45º - \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@left}{1.2\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@right}{1.2\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope - \pgftext[center]{\ctikzvalof{bipoles/twoport/text}} - \endpgfscope -} - -% generic square meter with always horizontal text -\pgfcircdeclarebipolescaled{instruments} -{ - \anchor{in 1}{\southwest\pgf@y=0.75\pgf@y\pgf@x=0.4\pgf@x} - \anchor{in 2}{\southwest\pgf@y=0.75\pgf@y\pgf@x=-0.4\pgf@x} - % put the node text above and centered - \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfpoint{-.5\wd\pgfnodeparttextbox}{ - \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax - } - } -} -{\ctikzvalof{bipoles/smeter/height}} -{smeter} -{\ctikzvalof{bipoles/smeter/height}} -{\ctikzvalof{bipoles/smeter/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfextractx{\pgf@circ@res@right}{\northeast} - \pgfextractx{\pgf@circ@res@left}{\southwest} - \pgfextracty{\pgf@circ@res@down}{\southwest} - \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up} - \pgfscope - \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}} - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgf@circ@draworfill - \endpgfscope - % get the rotation - \ifpgf@circuit@straightinstruments - \pgfgettransformentries\a\b\temp\temp\temp\temp - \pgfmathsetmacro{\rot}{-atan2(\b,\a)} - \else - \edef\rot{0} - \fi - % and unrotate the scope - \pgfscope - \pgftransformrotate{\rot} - % the metering window - \pgfscope - \def\@starta{105}\def\@stopa{75} - \pgfsetlinewidth{\pgfstartlinewidth} - \pgftransformshift{\pgfpoint{0pt}{-1.8\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpointpolar{\@starta}{2\pgf@circ@res@up}} - \pgfpatharc{\@starta}{\@stopa}{2\pgf@circ@res@up} - \pgfpathlineto{\pgfpointpolar{\@stopa}{2.5\pgf@circ@res@up}} - \pgfpatharc{\@stopa}{\@starta}{2.5\pgf@circ@res@up} - \pgfclosepath - \pgfpathmoveto{\pgfpointpolar{80}{2\pgf@circ@res@up}} - \pgfpathlineto{\pgfpointpolar{80}{2.4\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope - \pgftext[center, y=0.5\pgf@circ@res@down]{\ctikzvalof{bipoles/twoport/text}} - \endpgfscope -} - -% probes qucs style: -% #1 : name -% #2 : extra code -\long\def\pgfcirc@qucsprobe#1#2{ - \pgfcircdeclarebipolescaled{instruments} - { - \anchor{v+}{\southwest\pgf@x=0.6\pgf@x} - \anchor{v-}{\southwest\pgf@x=-0.6\pgf@x} - % put the node text above and centered - \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfpoint{-.5\wd\pgfnodeparttextbox}{ - \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax - } - } - } - {\ctikzvalof{bipoles/qmeter/depth}} - {#1} - {\ctikzvalof{bipoles/qmeter/height}} - {\ctikzvalof{bipoles/qmeter/width}} - { - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfextractx{\pgf@circ@res@right}{\northeast} - \pgfextractx{\pgf@circ@res@left}{\southwest} - \pgfextracty{\pgf@circ@res@down}{\southwest} - \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up} - \pgfscope - \pgfscope - \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}} - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgf@circ@draworfill - \endpgfscope - \def\@starta{103}\def\@stopa{77} - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfscope - \pgftransformshift{\pgfpoint{0pt}{-1.7\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpointpolar{\@starta}{2.1\pgf@circ@res@up}} - \pgfpatharc{\@starta}{\@stopa}{2.1\pgf@circ@res@up} - \pgfpathlineto{\pgfpointpolar{\@stopa}{2.5\pgf@circ@res@up}} - \pgfpatharc{\@stopa}{\@starta}{2.5\pgf@circ@res@up} - \pgfclosepath - \pgfpathmoveto{\pgfpointpolar{83}{2.1\pgf@circ@res@up}} - \pgfpathlineto{\pgfpointpolar{83}{2.4\pgf@circ@res@up}} - \pgfusepath{draw} - \pgf@circ@draworfill - \endpgfscope - #2 - \endpgfscope - } -} - -\pgfcirc@qucsprobe{qiprobe}{ - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfusepath{draw} - \pgfnode{currarrow}{center}{}{}{} -} - -\pgfcirc@qucsprobe{qvprobe}{ - \pgfmathsetlength{\pgf@circ@res@other}{\ctikzvalof{nodes width}*\pgf@circ@scaled@Rlen} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left}{0pt}} - \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{0pt}}{\pgf@circ@res@other} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@right-\pgf@circ@res@other}{0pt}}{\pgf@circ@res@other} - \pgfusepath{draw} - \pgfscope - % "+" and "-", drawn so that they scale correctly - \pgfsetlinewidth{2\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{-1.5\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{-3.5\pgf@circ@res@other}} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+0\pgf@circ@res@other}{-2.5\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+2\pgf@circ@res@other}{-2.5\pgf@circ@res@other}} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right+0\pgf@circ@res@other}{-2.5\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right-2\pgf@circ@res@other}{-2.5\pgf@circ@res@other}} - \pgfusepath{draw} - \endpgfscope -} - -\pgfcirc@qucsprobe{qpprobe}{ - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfusepath{draw} - \pgfnode{currarrow}{center}{}{}{} - \pgfmathsetlength{\pgf@circ@res@other}{\ctikzvalof{nodes width}*\pgf@circ@scaled@Rlen} - \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@left}{-3\pgf@circ@res@other}}{\pgf@circ@res@other} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{-4\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@right}{-3\pgf@circ@res@other}}{\pgf@circ@res@other} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right}{-4\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{draw} - \pgfscope - % "+" and "-", drawn so that they scale correctly - \pgfsetlinewidth{2\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+3\pgf@circ@res@other}{-2\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+3\pgf@circ@res@other}{-4\pgf@circ@res@other}} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+2\pgf@circ@res@other}{-3\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+4\pgf@circ@res@other}{-3\pgf@circ@res@other}} - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right-4\pgf@circ@res@other}{-3\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right-2\pgf@circ@res@other}{-3\pgf@circ@res@other}} - \pgfusepath{draw} - \endpgfscope -} - -% current loop for oscope and similar: stylized -\pgfcircdeclarebipolescaled{instruments} -{ - \anchor{i}{\northeast\pgf@x=0pt\relax} - \anchor{text}{ - \pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfextractx{\pgf@circ@res@left}{\northeast} - \pgfpoint{-.5\wd\pgfnodeparttextbox+\pgf@circ@res@left}{ - \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax - } - } -} -{\ctikzvalof{bipoles/iloop/height}} -{iloop} -{\ctikzvalof{bipoles/iloop/height}} -{\ctikzvalof{bipoles/iloop/width}} -{ - \pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfextractx{\pgf@circ@res@right}{\northeast} - \pgf@circ@res@down=-\pgf@circ@res@up - \pgf@circ@res@left=-\pgf@circ@res@right - \pgfscope - \pgfstartlinewidth=\pgflinewidth - \pgfsetcolor{\ctikzvalof{color}} - % external ellipse - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgflinewidth} - % clipping path: first a rectangle bigger then the shape - % to avoid problems with the line thickness - \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}} - {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}} - % next the opening to the left - \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{.1\pgf@circ@res@down}} - {\pgfpoint{0pt}{.1\pgf@circ@res@up}} - % do the difference and clip before drawing - \pgfseteorule - \pgfusepath{clip} - \pgfpathellipse{\pgfpointorigin}{ - \pgfpoint{0pt}{0.8\pgf@circ@res@up}}{ - \pgfpoint{0.4\pgf@circ@res@right}{0pt}} - \pgfusepath{draw} - \endpgfscope - % internal wire - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{0pt}} - \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - % and the contact line up - \pgfpathmoveto{\pgfpoint{0pt}{0.8\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - -% current loop for oscope and similar: real (double connection) -\pgfcircdeclarebipolescaled{instruments} -{ - \anchor{i+}{ - \pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfextractx{\pgf@circ@res@right}{\northeast} - \pgf@circ@res@step=0.4\pgf@circ@res@right - \pgf@circ@res@other=0.8\pgf@circ@res@up - \pgfpointpolar{105}{\pgf@circ@res@step and \pgf@circ@res@other} - \pgf@y=\pgf@circ@res@up - } - \anchor{i-}{ - \pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfextractx{\pgf@circ@res@right}{\northeast} - \pgf@circ@res@step=0.4\pgf@circ@res@right - \pgf@circ@res@other=0.8\pgf@circ@res@up - \pgfpointpolar{75}{\pgf@circ@res@step and \pgf@circ@res@other} - \pgf@y=\pgf@circ@res@up - } - \anchor{text}{ - \pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfextractx{\pgf@circ@res@left}{\northeast} - \pgfpoint{-.5\wd\pgfnodeparttextbox+\pgf@circ@res@left}{ - \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax - } - } -} -{\ctikzvalof{bipoles/iloop/height}} -{iloop2} -{\ctikzvalof{bipoles/iloop/height}} -{\ctikzvalof{bipoles/iloop/width}} -{ - \pgfextracty{\pgf@circ@res@up}{\northeast} - \pgfextractx{\pgf@circ@res@right}{\northeast} - \pgf@circ@res@down=-\pgf@circ@res@up - \pgf@circ@res@left=-\pgf@circ@res@right - % must be the same than internal i+ and i- anchors definition - \pgf@circ@res@step=0.4\pgf@circ@res@right - \pgf@circ@res@other=0.8\pgf@circ@res@up - \def\@plus{\pgfpointpolar{105}{\pgf@circ@res@step and \pgf@circ@res@other}} - \def\@minus{\pgfpointpolar{75}{\pgf@circ@res@step and \pgf@circ@res@other}} - \pgfscope - \pgfstartlinewidth=\pgflinewidth - \pgfsetcolor{\ctikzvalof{color}} - % external ellipse - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgflinewidth} - % clipping path: first a rectangle bigger then the shape - % to avoid problems with the line thickness - \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}} - {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}} - % next the opening to the left - \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{.1\pgf@circ@res@down}} - {\pgfpoint{0pt}{.1\pgf@circ@res@up}} - % do the difference and clip before drawing - \pgfseteorule - \pgfusepath{clip} - \pgfpathmoveto{\@plus} - \pgfpatharc{105}{435}{\pgf@circ@res@step and \pgf@circ@res@other} - \pgfusepath{draw} - \endpgfscope - % internal wire - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{0pt}} - \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - % and the contact line up - % I use ...left and ---right as temporal lengths here to avoid defining more - \pgfextractx{\pgf@circ@res@left}{\@plus} - \pgfextractx{\pgf@circ@res@right}{\@minus} - \pgfpathmoveto{\@plus} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathmoveto{\@minus} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope -} - - -%% Varistor -\pgfcircdeclarebipolescaled{resistors} -{} -{\ctikzvalof{bipoles/varistor/height}} -{varistor} -{\ctikzvalof{bipoles/varistor/height}} -{\ctikzvalof{bipoles/varistor/width}} -{ - \pgfscope - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/varistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/varistor/main}\pgf@circ@res@up}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - \endpgfscope - - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfusepath{draw} - - \pgftext[top,x=.65\pgf@circ@res@left,y=1.2\pgf@circ@res@down]{{\pgf@circ@font@tiny\textsf{U}}} -} - -%%%%%%%%%%%%%% -%% RF bipoles -%%%%%%%%%%%%%% - -% transmission line -\pgfcircdeclarebipolescaled{RF} -{} -{\ctikzvalof{bipoles/tline/height}} -{tline} -{\ctikzvalof{bipoles/tline/height}} -{\ctikzvalof{bipoles/tline/width}} -{ - \pgf@circ@res@step=.2\pgf@circ@res@right % half x axis - \begin{pgftransparencygroup} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}} - \pgfpatharc{-90}{90}{-\pgf@circ@res@step and -\pgf@circ@res@up} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@down}} - \pgf@circ@draworfill - \pgfpathellipse{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0pt}} - {\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{-\pgf@circ@res@up}} - \pgf@circ@draworfill - \end{pgftransparencygroup} - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfusepath{stroke} -} - -% microstrip transmission line -\pgfcircdeclarebipolescaled{RF} -{} -{\ctikzvalof{bipoles/mstline/height}} -{mstline} -{\ctikzvalof{bipoles/mstline/height}} -{\ctikzvalof{bipoles/mstline/width}} -{ - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill -} - -%%%%%%%%%%%%%%%%%%% -%% Block diagrams -%%%%%%%%%%%%%%%%%%% - -%% Draw the two-port fillable box -\def\pgf@circ@twoportbox{ - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@draworfill - \endpgfscope -} - -%% Generic two port box -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/twoport/height}} -{twoport} -{\ctikzvalof{bipoles/twoport/height}} -{\ctikzvalof{bipoles/twoport/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - % draw outer box - \pgf@circ@twoportbox - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225 - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}} - -} - -%% voltage controled oscillator -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/vco/width}} -{vco} -{\ctikzvalof{bipoles/twoport/width}} -{\ctikzvalof{bipoles/vco/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/vco/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - % draw circle - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@step} - \pgf@circ@draworfill - \endpgfscope - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner sine waves - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-.5\pgf@circ@res@step}{0\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} -} - -%% bandpass filter -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/bandpass/width}} -{bandpass} -{\ctikzvalof{bipoles/bandpass/width}} -{\ctikzvalof{bipoles/bandpass/width}} -{ - - \pgf@circ@res@step = \ctikzvalof{bipoles/bandpass/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}} - \pgfusepath{draw} -} - -%% bandstop filter -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/bandstop/width}} -{bandstop} -{\ctikzvalof{bipoles/bandstop/width}} -{\ctikzvalof{bipoles/bandstop/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/bandstop/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225% 134 degree, because >= 135 is not possible - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt}% always draw solid line for inner symbol - \pgfsetarrows{-}%never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} -} - -%% highpass filter -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/highpass/width}} -{highpass} -{\ctikzvalof{bipoles/highpass/width}} -{\ctikzvalof{bipoles/highpass/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/highpass/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}} - \pgfusepath{draw} -} - -%% lowpass filter -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/lowpass/width}} -{lowpass} -{\ctikzvalof{bipoles/lowpass/width}} -{\ctikzvalof{bipoles/lowpass/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/lowpass/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}} - \pgfusepath{draw} -} - -%% ADC -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/adc/width}} -{adc} -{\ctikzvalof{bipoles/adc/width}} -{\ctikzvalof{bipoles/adc/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/adc/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\texti{A} - \def\textii{D} - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \def\texti{D} - \def\textii{A} - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible - \def\texti{D} - \def\textii{A} - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \def\texti{A} - \def\textii{D} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}} - \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}} -} - -%% DAC -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/dac/width}} -{dac} -{\ctikzvalof{bipoles/dac/width}} -{\ctikzvalof{bipoles/dac/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/dac/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\texti{D} - \def\textii{A} - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \def\texti{A} - \def\textii{D} - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible - \def\texti{A} - \def\textii{D} - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \def\texti{D} - \def\textii{A} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}} - \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}} -} - -%% DSP -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/dsp/width}} -{dsp} -{\ctikzvalof{bipoles/dsp/width}} -{\ctikzvalof{bipoles/dsp/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/dsp/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225 - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgftext[center,x=0,y=0]{\textsf{DSP}} -} - -%% FFT -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/fft/width}} -{fft} -{\ctikzvalof{bipoles/fft/width}} -{\ctikzvalof{bipoles/fft/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/fft/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225 - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgftext[center,x=0,y=0]{\textsf{FFT}} -} - -%% Amplifier -\pgfcircdeclarebipolescaled{blocks} -{} -{ - \ifpgf@circuit@boxed - \ctikzvalof{bipoles/twoport/width} - \else - \ctikzvalof{bipoles/amp/width} - \fi -} -{amp} -{ - \ifpgf@circuit@boxed - \ctikzvalof{bipoles/twoport/width} - \else - \ctikzvalof{bipoles/amp/width} - \fi -} -{ - \ifpgf@circuit@boxed - \ctikzvalof{bipoles/twoport/width} - \else - \ctikzvalof{bipoles/amp/width} - \fi -} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@scaled@Rlen - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \ifpgf@circuit@boxed - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}} - \pgf@circ@draworfill - \fi - - % draw input arrow - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - \ifpgf@circuit@boxed - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn - \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box - \else - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \fi - - \pgfsetarrows{-} %never draw arrows - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}} - \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}} - - \pgfpathclose - \pgf@circ@draworfill - - % draw inner text - \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}} -} - - -%% variable amplifier -\pgfcircdeclarebipolescaled{blocks} -{} -{ - \ifpgf@circuit@boxed - \ctikzvalof{bipoles/twoport/width} - \else - \ctikzvalof{bipoles/amp/width} - \fi -} -{vamp} -{ - \ifpgf@circuit@boxed - \ctikzvalof{bipoles/twoport/width} - \else - \ctikzvalof{bipoles/amp/width} - \fi -} -{ - \ifpgf@circuit@boxed - \ctikzvalof{bipoles/twoport/width} - \else - \ctikzvalof{bipoles/amp/width} - \fi -} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@scaled@Rlen - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \ifpgf@circuit@boxed - \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}} - \fi - - % draw input arrow - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - \ifpgf@circuit@boxed - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn - \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box - \else - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \fi - - - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - - \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}} - \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}} - - \pgfpathclose - \pgf@circ@draworfill - - % draw inner text - \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}} - - % draw arrow - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfsetarrowsend{latex} - \pgfpathmoveto{\pgfpoint{-0.8\pgf@circ@res@step}{-0.5\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@step}{0.6\pgf@circ@res@step}} - \pgfusepath{draw} -} - -%% pi attenuator -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/piattenuator/width}} -{piattenuator} -{\ctikzvalof{bipoles/piattenuator/width}} -{\ctikzvalof{bipoles/piattenuator/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/piattenuator/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}} - \pgfusepath{draw} -} - -%% variable pi attenuator -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/vpiattenuator/width}} -{vpiattenuator} -{\ctikzvalof{bipoles/vpiattenuator/width}} -{\ctikzvalof{bipoles/vpiattenuator/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/vpiattenuator/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgfsetarrowsend{latex} - \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}} - \pgfusepath{draw} -} - -%% T attenuator -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/tattenuator/width}} -{tattenuator} -{\ctikzvalof{bipoles/tattenuator/width}} -{\ctikzvalof{bipoles/tattenuator/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/tattenuator/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}} - \pgfusepath{draw} -} - -%% variable T attenuator -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/vtattenuator/width}} -{vtattenuator} -{\ctikzvalof{bipoles/vtattenuator/width}} -{\ctikzvalof{bipoles/vtattenuator/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/vtattenuator/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}} - \pgfusepath{draw} - - \pgfsetarrowsend{latex} - \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}} - \pgfusepath{draw} -} - -%% phase shifter -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/phaseshifter/width}} -{phaseshifter} -{\ctikzvalof{bipoles/phaseshifter/width}} -{\ctikzvalof{bipoles/phaseshifter/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/phaseshifter/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225 - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % inner symbol - \pgftext[center,x=0,y=0]{\Large$\varphi$} -} - -%% variable phase shifter -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/phaseshifter/width}} -{vphaseshifter} -{\ctikzvalof{bipoles/vphaseshifter/width}} -{\ctikzvalof{bipoles/vphaseshifter/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/vphaseshifter/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225 - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % inner symbol - \pgftext[center,x=0,y=0]{\Large$\varphi$} - - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfsetarrowsend{latex} - \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.65\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.65\pgf@circ@res@up}} - \pgfusepath{draw} -} - -%% detector -\pgfcircdeclarebipolescaled{blocks} -{} -{\ctikzvalof{bipoles/detector/width}} -{detector} -{\ctikzvalof{bipoles/detector/width}} -{\ctikzvalof{bipoles/detector/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/detector/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % draw inner stuff - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{0.8\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0}} - \pgfpathlineto{\pgfpoint{0.75\pgf@circ@res@right}{0}} - \pgfusepath{draw} - - \ifpgf@circuit@fulldiode - \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@scaled@Rlen / \ctikzvalof{bipoles/generic/width}} - \pgftransformscale{\pgfmathresult} - \pgfnode{fulldiodeshape}{center}{}{pgf@fulldiode}{\pgfusepath{fill}} - \else - \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@scaled@Rlen / \ctikzvalof{bipoles/resistor/width}} - \pgftransformscale{\pgfmathresult} - \pgfnode{emptydiodeshape}{center}{}{pgf@emptydiode}{\pgfusepath{fill}} - \fi - -} - -%% single phase ac/dc converter -\pgfcircdeclarebipolescaled{blocks} -{ - \anchor{dc1}{ - \northeast - \pgf@y=.4\pgf@y - } - \anchor{dc2}{ - \northeast - \pgf@y=-.4\pgf@y - } -} -{\ctikzvalof{bipoles/sacdc/width}} -{sacdc} -{\ctikzvalof{bipoles/sacdc/width}} -{\ctikzvalof{bipoles/sacdc/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/sacdc/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - % draw sin wave - \pgfpathmoveto{\pgfpoint{-.76\pgf@circ@res@step}{.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfusepath{draw} - - % draw equal sign - \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@step}{-.375\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@step}{-0.375\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@step}{-.625\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@step}{-0.625\pgf@circ@res@step}} - \pgfusepath{draw} -} - - - -%% single phase dc/ac converter -\pgfcircdeclarebipolescaled{blocks} -{ - \anchor{dc1}{ - \northeast - \pgf@y=.4\pgf@y - \pgf@x=-\pgf@x - } - \anchor{dc2}{ - \northeast - \pgf@y=-.4\pgf@y - \pgf@x=-\pgf@x - } -} -{\ctikzvalof{bipoles/sdcac/width}} -{sdcac} -{\ctikzvalof{bipoles/sdcac/width}} -{\ctikzvalof{bipoles/sdcac/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/sdcac/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - % draw sin wave - \pgfpathmoveto{\pgfpoint{.14\pgf@circ@res@step}{-.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfusepath{draw} - - % draw equal sign - \pgfpathmoveto{\pgfpoint{-.2\pgf@circ@res@step}{.375\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{-0.7\pgf@circ@res@step}{0.375\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{-.2\pgf@circ@res@step}{.625\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{-0.7\pgf@circ@res@step}{0.625\pgf@circ@res@step}} - \pgfusepath{draw} -} - - -%% threephase ac/dc converter -\pgfcircdeclarebipolescaled{blocks} -{ - \anchor{dc1}{ - \northeast - \pgf@y=.4\pgf@y - } - \anchor{dc2}{ - \northeast - \pgf@y=-.4\pgf@y - } - \anchor{ac1}{ - \northeast - \pgf@y=.6\pgf@y - \pgf@x=-\pgf@x - } - \anchor{ac2}{ - \northeast - \pgf@y=0\pgf@y - \pgf@x=-\pgf@x - } - \anchor{ac3}{ - \northeast - \pgf@y=-.6\pgf@y - \pgf@x=-\pgf@x - } -} -{\ctikzvalof{bipoles/tacdc/width}} -{tacdc} -{\ctikzvalof{bipoles/tacdc/width}} -{\ctikzvalof{bipoles/tacdc/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/tacdc/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - % draw sin waves - \pgfpathmoveto{\pgfpoint{-.76\pgf@circ@res@step}{.65\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{-.76\pgf@circ@res@step}{.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{-.76\pgf@circ@res@step}{.35\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfusepath{draw} - - - - - % draw equal sign - \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@step}{-.375\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@step}{-0.375\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@step}{-.625\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@step}{-0.625\pgf@circ@res@step}} - \pgfusepath{draw} -} - - -%% threephase dc/ac converter -\pgfcircdeclarebipolescaled{blocks} -{ - \anchor{dc1}{ - \northeast - \pgf@y=.4\pgf@y - \pgf@x=-\pgf@x - } - \anchor{dc2}{ - \northeast - \pgf@y=-.4\pgf@y - \pgf@x=-\pgf@x - } - \anchor{ac1}{ - \northeast - \pgf@y=.6\pgf@y - } - \anchor{ac2}{ - \northeast - \pgf@y=0\pgf@y - } - \anchor{ac3}{ - \northeast - \pgf@y=-.6\pgf@y - } -} -{\ctikzvalof{bipoles/tdcac/width}} -{tdcac} -{\ctikzvalof{bipoles/tdcac/width}} -{\ctikzvalof{bipoles/tdcac/width}} -{ - \pgf@circ@res@step = \ctikzvalof{bipoles/tdcac/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - % rotate inner symbol - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135 - \pgftransformrotate{270} - \fi\fi - \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible - \pgftransformrotate{180} - \fi\fi - \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315 - \pgftransformrotate{90} - \fi\fi - - % draw inner symbol - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - - % draw sin waves - \pgfpathmoveto{\pgfpoint{.14\pgf@circ@res@step}{-.65\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{.14\pgf@circ@res@step}{-.5\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{.14\pgf@circ@res@step}{-.35\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.17\pgf@circ@res@step}{-.17\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.17\pgf@circ@res@step}{.17\pgf@circ@res@step}} - \pgfusepath{draw} - - - - - % draw equal sign - \pgfpathmoveto{\pgfpoint{-.2\pgf@circ@res@step}{.375\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{-0.7\pgf@circ@res@step}{0.375\pgf@circ@res@step}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{-.2\pgf@circ@res@step}{.625\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{-0.7\pgf@circ@res@step}{0.625\pgf@circ@res@step}} - \pgfusepath{draw} -} - - -%%%%%%%%%%%%%%%%%%%%%%% -%% MECHANICAL SYMBOLS -%%%%%%%%%%%%%%%%%%%%%%% - -%% mechanical capacitance - stiffness/spring - -\pgfcircdeclarebipolescaled{mechanicals} -{} -{\ctikzvalof{bipoles/spring/height}} -{spring} -{\ctikzvalof{bipoles/spring/height}} -{\ctikzvalof{bipoles/spring/width}}{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - - \pgfmathsetlength{\pgf@circ@res@step} - {(\ctikzvalof{bipoles/spring/width}*\pgf@circ@scaled@Rlen+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth)/16} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}} - \pgfsetcornersarced{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}} - \advance\pgf@circ@res@other by 2\pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}} - \advance\pgf@circ@res@other by 2\pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}} - \advance\pgf@circ@res@other by 2\pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}} - \advance\pgf@circ@res@other by 2\pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}} - \advance\pgf@circ@res@other by 2\pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}} - \advance\pgf@circ@res@other by 2\pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}} - \advance\pgf@circ@res@other by 2\pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}} - \advance\pgf@circ@res@other by \pgf@circ@res@step - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}} - \pgfsetbuttcap - \pgfsetbeveljoin - \pgfusepath{stroke} -} - -%% mechanical capacitance - inerter -\pgfcircdeclarebipolescaled{mechanicals} -{} -{\ctikzvalof{bipoles/inerter/height}} -{inerter} -{\ctikzvalof{bipoles/inerter/height}} -{\ctikzvalof{bipoles/inerter/width}} -{ - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill -} - - -%% mechanical inductance - mass -\pgfcircdeclarebipolescaled{mechanicals} -{} -{\ctikzvalof{bipoles/mass/box height}} -{mass} -{\ctikzvalof{bipoles/mass/height}} -{\ctikzvalof{bipoles/mass/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgftransformationadjustments - \pgfpathrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - {\pgfpoint{-2\pgf@circ@res@down}{-2\pgf@circ@res@down}} - \pgf@circ@draworfill - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfsetrectcap - \pgfsetmiterjoin - \pgfusepath{stroke} -} - -%% mechanical resistor - damper -\pgfcircdeclarebipolescaled{mechanicals} -{} -{\ctikzvalof{bipoles/damper/height}} -{damper} -{\ctikzvalof{bipoles/damper/height}} -{\ctikzvalof{bipoles/damper/width}} -{ - \pgfpathrectanglecorners{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgf@circ@maybefill - - % line into the damper - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right} - {\pgf@circ@res@zero}} - \pgfusepath{stroke} - - % damper box - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - - \pgfsetrectcap - \pgfsetmiterjoin - \pgfusepath{stroke} - - % damper vertical element - \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right} - {.8\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right} - {.8\pgf@circ@res@up}} - \pgfsetbuttcap - \pgfusepath{stroke} - -} -%% mechanical viscoelastic element, suggested by @alex -%% in https://tex.stackexchange.com/questions/484268/combined-spring-damper-in-circuitikz -\pgfcircdeclarebipolescaled{mechanicals} -{} % extra anchors -{\ctikzvalof{bipoles/damper/height}} % depth (under the path line) -{viscoe} % name -{\ctikzvalof{bipoles/damper/height}} % height (above the path line) -{\ctikzvalof{bipoles/damper/width}} % width -{ % draw the bipole - \pgfpathrectanglecorners{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgf@circ@maybefill - - % spring into the damper - \pgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfsetcornersarced{\pgfpoint{.25\pgf@circ@res@up}{.25\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.75\pgf@circ@res@left}{.75\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@left}{-.75\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.75\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{-.75\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{.75\pgf@circ@res@up}} - \pgfusepath{stroke} - \endpgfscope - % damper box - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - - \pgfsetrectcap - \pgfsetmiterjoin - \pgfusepath{stroke} - - % damper vertical element - \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right} - {.8\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right} - {.8\pgf@circ@res@up}} - \pgfsetbuttcap - \pgfusepath{stroke} - -} - -%%%%%%%%%%%%%%%% -%% Crossing -%%%%%%%%%%%%%%%% - -%% crossing bipole (but see also nodes) -\pgfcircdeclarebipole -{} -{\ctikzvalof{bipoles/crossing/size}} -{crossing} -{\ctikzvalof{bipoles/crossing/size}} -{\ctikzvalof{bipoles/crossing/size}}{ - \pgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left} - \pgfsetbeveljoin - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfusepath{draw} - \endpgfscope -} - -%%%%%%%%%%%%%%%%%%%%%%%%% -%% Miscellaneous bipoles -%%%%%%%%%%%%%%%%%%%%%%%%% - -%% loudspeaker and microphone - -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/loudspeaker/depth}} -{loudspeaker} -{\ctikzvalof{bipoles/loudspeaker/height}} -{\ctikzvalof{bipoles/loudspeaker/width}}{ - - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}} - {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@left}{.4\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.8\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.8\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{.4\pgf@circ@res@up}} - \pgfpathclose - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill -} - -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/mic/depth}} -{mic} -{\ctikzvalof{bipoles/mic/height}} -{\ctikzvalof{bipoles/mic/width}}{ - - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathcircle{\pgfpoint{0pt}{.6\pgf@circ@res@up}}{.4\pgf@circ@res@up} - \pgf@circ@draworfill - \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope - \pgfscope - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{-.2\pgf@circ@res@up}{0pt}} - % 0.25358 is 0.6-0.4*cos(30) - \pgfpathlineto{\pgfpoint{-.2\pgf@circ@res@up}{.25358\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.25358\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfusepath{draw} - - \pgfusepath{draw} - \endpgfscope -} - -%% european gas filled surge arrester -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/european gas filled surge arrester/height}} -{european gas filled surge arrester} -{\ctikzvalof{bipoles/european gas filled surge arrester/height}} -{\ctikzvalof{bipoles/european gas filled surge arrester/width}} -{ - - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgf@circ@draworfill - - \pgfscope - \pgfsetarrowsend{latexslim} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/european gas filled surge arrester/inside}\pgf@circ@res@left}{0pt}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfusepath{draw} - - \endpgfscope -} - -%% american gas filled surge arrester -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/american gas filled surge arrester/height}} -{american gas filled surge arrester} -{\ctikzvalof{bipoles/american gas filled surge arrester/height}} -{\ctikzvalof{bipoles/american gas filled surge arrester/width}}{ - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpointorigin \pgf@circ@res@other = \pgf@x \advance \pgf@circ@res@other by -\pgf@circ@res@up - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}} - \pgfusepath{draw} - - \pgfscope - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up} - \pgf@circ@draworfill - \endpgfscope - - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfusepath{draw} - - \pgfscope - \pgfsetarrowsend{latex} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/american gas filled surge arrester/inside}\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/american gas filled surge arrester/inside}\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfusepath{draw} - \endpgfscope{} - - \pgfcircle{\pgfpoint{\ctikzvalof{bipoles/american gas filled surge arrester/dot x}\pgf@circ@res@left}{\ctikzvalof{bipoles/american gas filled surge arrester/dot y}\pgf@circ@res@down}}{\ctikzvalof{bipoles/american gas filled surge arrester/size}\pgf@circ@res@down} - \pgfusepath{fill} -} - -%% thermocouple -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/thermocouple/height 2}} -{thermocouple} -{\ctikzvalof{bipoles/thermocouple/height}} -{\ctikzvalof{bipoles/thermocouple/width}} -{ - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}} - \pgfusepath{draw} - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}} - \pgfusepath{draw} -} - -%% fuse -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/fuse/height}} -{fuse} -{\ctikzvalof{bipoles/fuse/height}} -{\ctikzvalof{bipoles/fuse/width}} -{ - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}} - \pgfusepath{draw} - - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgf@circ@draworfill -} - -%% asymmetric fuse -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/afuse/height}} -{afuse} -{\ctikzvalof{bipoles/afuse/height}} -{\ctikzvalof{bipoles/afuse/width}} -{ - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}} - \pgfusepath{draw} - - \pgfscope - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgf@circ@draworfill - \endpgfscope - - \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfusepath{stroke,fill} -} - -%% SQUID added by Cor Molenaar 5 March 2010 -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/squid/height}} -{squid} -{\ctikzvalof{bipoles/squid/height}} -{\ctikzvalof{bipoles/squid/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@down}} - \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@down}} - - \pgfusepath{draw} -} - -% Generic barrier added by Cor Molenaar 5 March 2010 -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/barrier/height}} -{barrier} -{\ctikzvalof{bipoles/barrier/height}} -{\ctikzvalof{bipoles/barrier/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@down}} - \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@up}} - - \pgfusepath{draw} -} - -% -% open version of the barrier symbol -% suggested by Radványi Patrik Tamás -% -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/barrier/height}} -{openbarrier} -{\ctikzvalof{bipoles/barrier/height}} -{\ctikzvalof{bipoles/barrier/width}} -{ - % this is set with normal wire linewidth - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/openbarrier/gap}*\pgf@circ@res@left}{0pt}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/openbarrier/gap}*\pgf@circ@res@right}{0pt}} - \pgfusepath{draw} - - % do the cross part - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@down}} - \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@up}} - - \pgfusepath{draw} -} -%% Lamp -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/lamp/height}} -{lamp} -{\ctikzvalof{bipoles/lamp/height}} -{\ctikzvalof{bipoles/lamp/width}} -{ - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@down}} - \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@up}} - \pgfusepath{draw} -} - -%% bulb -\pgfcircdeclarebipolescaled{misc} -{} -{\ctikzvalof{bipoles/bulb/height}} -{bulb} -{\ctikzvalof{bipoles/bulb/height}} -{\ctikzvalof{bipoles/bulb/width}} -{% - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{0.8\pgf@circ@res@up}}{\pgfpoint{0.8\pgf@circ@res@left}{0}} - \pgf@circ@draworfill - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left} - \pgfsetbeveljoin - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}} - \pgfusepath{draw} -} - - -% end of pgfcircbipoles.tex -%%%---------- close: tex/pgfcircbipoles -%%%%%%%%%%% Springe nach tex/pgfcirctripoles -%%%---------- open: tex/pgfcirctripoles.tex -% 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}} - -} - -%%%---------- close: tex/pgfcirctripoles -%%%%%%%%%%% Springe nach tex/pgfcircquadpoles -%%%---------- open: tex/pgfcircquadpoles.tex -% 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. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Quadripoles - -\long\def\pgfcircdeclarequadpole#1#2#3{ - \pgfdeclareshape{#1} - { - \savedmacro{\ctikzclass}{\edef\ctikzclass{inductors}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - % shapename - \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}} - \anchor{center}{ - \northwest - \pgf@x=0pt - \pgf@y=0pt - } - \savedmacro{\stretto}{\def\stretto{\ctikzvalof{quadpoles/#1/inner}}} - \savedanchor\northwest{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@y=\ctikzvalof{quadpoles/#1/height}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=.5\pgf@circ@scaled@Rlen - \pgf@x=-\ctikzvalof{quadpoles/#1/width}\pgf@x - } - %% we define the upper right (positive coord) dot (which is B1) - \savedanchor{\innerdot}{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@xa=.5\pgf@circ@scaled@Rlen - \pgf@xa=-\ctikzvalof{quadpoles/#1/width}\pgf@xa - % by default use the cute inductor size - \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa-\ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@scaled@Rlen/2} - % check if it's american - \edef\pgf@circ@temp{\ctikzvalof{inductor}} - \edef\pgf@temp{american} - \ifx\pgf@circ@temp\pgf@temp - \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa-\ctikzvalof{bipoles/americaninductor/height}*\pgf@circ@scaled@Rlen/2} - \fi - % check if it's european - \edef\pgf@temp{european} - \ifx\pgf@circ@temp\pgf@temp - \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa-\ctikzvalof{bipoles/fullgeneric/height}*\pgf@circ@scaled@Rlen/2} - \fi - \pgfmathsetlength\pgf@y{0.5*\pgf@circ@scaled@Rlen} - } - \savedanchor{\outerdot}{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@xa=.5\pgf@circ@scaled@Rlen - \pgf@xa=-\ctikzvalof{quadpoles/#1/width}\pgf@xa - % by default use the cute inductor size - \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa+\ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@scaled@Rlen/2} - % check if it's american - \edef\pgf@circ@temp{\ctikzvalof{inductor}} - \edef\pgf@temp{american} - \ifx\pgf@circ@temp\pgf@temp - \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa+\ctikzvalof{bipoles/americaninductor/height}*\pgf@circ@scaled@Rlen/2} - \fi - % check if it's european - \edef\pgf@temp{european} - \ifx\pgf@circ@temp\pgf@temp - \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa+\ctikzvalof{bipoles/fullgeneric/height}*\pgf@circ@scaled@Rlen/2} - \fi - \pgfmathsetlength\pgf@y{0.5*\pgf@circ@scaled@Rlen} - } - \anchor{A2}{ - \northwest - \pgf@y=-\pgf@y - } - \anchor{B1}{ - \northwest - \pgf@x=-\pgf@x - } - \anchor{A1}{ - \northwest - } - \anchor{B2}{ - \northwest - \pgf@x=-\pgf@x - \pgf@y=-\pgf@y - } - %% dot's anchors - \anchor{inner dot A1}{\innerdot\pgf@x=-\pgf@x} - \anchor{outer dot A1}{\outerdot\pgf@x=-\pgf@x} - \anchor{inner dot A2}{\innerdot\pgf@x=-\pgf@x\pgf@y=-\pgf@y} - \anchor{outer dot A2}{\outerdot\pgf@x=-\pgf@x\pgf@y=-\pgf@y} - \anchor{inner dot B1}{\innerdot} - \anchor{outer dot B1}{\outerdot} - \anchor{inner dot B2}{\innerdot\pgf@y=-\pgf@y} - \anchor{outer dot B2}{\outerdot\pgf@y=-\pgf@y} - % geographical - \anchor{north}{ - \northwest - \pgf@x=0pt - } - \anchor{south}{ - \northwest - \pgf@x=0pt - \pgf@y=-\pgf@y - } - \anchor{west}{ - \northwest - \pgf@y=0pt - } - \anchor{east}{ - \northwest - \pgf@y=0pt - \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{base}{ - \northwest - \pgf@x=0pt - } - #3 - \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 - #2 - } - } -} - - -\def\pgf@circ@drawtransformerbasicanchor{ - \ctikzvalof{quadpoles/trans/height} - \anchor{AA2}{ - \northwest - \pgf@x=\ctikzvalof{quadpoles/transformer/width1}\pgf@x - \pgf@x=.7\pgf@x - \pgf@y=-\pgf@y - \pgf@y=\ctikzvalof{quadpoles/transformer/height1}\pgf@y - } - \anchor{BB1}{ - \northwest - \pgf@x=-\pgf@x - \pgf@x=\ctikzvalof{quadpoles/transformer/width1}\pgf@x - \pgf@x=.7\pgf@x - \pgf@y=\ctikzvalof{quadpoles/transformer/height1}\pgf@y - } - \anchor{AA1}{ - \northwest - \pgf@x=\ctikzvalof{quadpoles/transformer/width1}\pgf@x - \pgf@x=.7\pgf@x - \pgf@y=\ctikzvalof{quadpoles/transformer/height1}\pgf@y - } - \anchor{BB2}{ - \northwest - \pgf@x=-\pgf@x - \pgf@x=\ctikzvalof{quadpoles/transformer/width1}\pgf@x - \pgf@x=.7\pgf@x - \pgf@y=-\pgf@y - \pgf@y=\ctikzvalof{quadpoles/transformer/height1}\pgf@y - } -} - -%% Null styles that can be used to change individually the L1 and L2 -%% inductors of the transformer. - -\ctikzset{transformer L1/.style={}} -\ctikzset{transformer L2/.style={}} - -\def\pgf@circ@drawtransformerbasicbody{ - \pgfscope - \pgfslopedattimetrue - \pgfallowupsidedownattimetrue - \pgftransformlineattime{.5}{% - \pgfpoint% - {\stretto\pgf@circ@res@left}% - {\pgf@circ@res@up}% - }{% - \pgfpoint - {\stretto\pgf@circ@res@left}% - {\pgf@circ@res@down}% - } - - \pgfkeys{\circuitikzbasekey/.cd, transformer L1} - \edef\pgf@circ@temp{\ctikzvalof{inductor}}% - \def\pgf@temp{european}% - \ifx\pgf@temp\pgf@circ@temp% - \pgfnode{fullgenericshape}{center}{}{\thisshape-L1}{\pgfusepath{stroke}} - \else% - \def\pgf@temp{cute} - \ifx\pgf@temp\pgf@circ@temp% - \pgfnode{cuteinductorshape}{center}{}{\thisshape-L1}{\pgfusepath{stroke}} - \else% - \pgfnode{americaninductorshape}{center}{}{\thisshape-L1}{\pgfusepath{stroke}} - \fi% - \fi% - - - \endpgfscope - \pgfscope - \pgfslopedattimetrue - \pgfallowupsidedownattimetrue - \pgftransformlineattime{.5}{% - \pgfpoint% - {\stretto\pgf@circ@res@right}% - {\pgf@circ@res@down}% - }{% - \pgfpoint - {\stretto\pgf@circ@res@right}% - {\pgf@circ@res@up}% - } - - \pgfkeys{\circuitikzbasekey/.cd, transformer L2} - \edef\pgf@circ@temp{\ctikzvalof{inductor}}% - \def\pgf@temp{european}% - \ifx\pgf@temp\pgf@circ@temp% - \pgfnode{fullgenericshape}{center}{}{\thisshape-L2}{\pgfusepath{stroke}} - \else% - \def\pgf@temp{cute} - \ifx\pgf@temp\pgf@circ@temp% - \pgfnode{cuteinductorshape}{center}{}{\thisshape-L2}{\pgfusepath{stroke}} - \else% - \pgfnode{americaninductorshape}{center}{}{\thisshape-L2}{\pgfusepath{stroke}} - \fi% - \fi% - - \endpgfscope - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpointanchor{\thisshape-L1}{b}} - - \pgfpathmoveto{\pgfpointanchor{\thisshape-L1}{a}} - \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpointanchor{\thisshape-L2}{a}} - - \pgfpathmoveto{\pgfpointanchor{\thisshape-L2}{b}} - \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - - \pgfusepath{draw} - -} - - -\pgfcircdeclarequadpole{transformer}{ - \pgf@circ@drawtransformerbasicbody -}{\pgf@circ@drawtransformerbasicanchor} - -\pgfcircdeclarequadpole{transformer core}{ - - \pgf@circ@drawtransformerbasicbody - - % use the chocke line thickness - \pgfsetlinewidth{\ctikzvalof{bipoles/cutechoke/cthick}\pgflinewidth} - - % Find the distance from center for the lines representing the core - % the 2.5 is for backward compatibility --- the distance was calculated as a fraction - % of the whole component, now as a fraction of the distance between coils, to be - % compatible with the quadpoles "inner" style. - \pgfmathsetlength{\pgf@circ@res@other}{2.5*\stretto*\ctikzvalof{quadpoles/transformer core/core width}*\pgf@circ@res@right} - - \pgfmoveto{\pgfpoint% - {\pgf@circ@res@other}% - {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}% - } - \pgflineto{ - \pgfpoint% - {\pgf@circ@res@other}% - {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}% - } - - %% this should be just -\pgf@circ@res@other, but in case someone define an asymmetric trafo someday... - \pgfmathsetlength{\pgf@circ@res@other}{2.5*\stretto*\ctikzvalof{quadpoles/transformer core/core width}*\pgf@circ@res@left} - \pgfmoveto{\pgfpoint% - {\pgf@circ@res@other}% - {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}% - } - \pgflineto{ - \pgfpoint% - {\pgf@circ@res@other}% - {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}% - } - - \pgf@circ@setlinewidth{bipoles}{\pgflinewidth} - \pgfusepath{draw} -}{\pgf@circ@drawtransformerbasicanchor} - - -\pgfcircdeclarequadpole{gyrator}{ - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - - \pgfusepath{draw} - - \pgf@circ@setlinewidth{quadpoles}{\pgflinewidth} - \pgfmathsetlength{\pgf@circ@res@other}{min(.7*\stretto*\pgf@circ@res@up, .8*\pgf@circ@res@right)} % radius - \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@left}{-\pgf@circ@res@other}} - \pgfpatharc{-90}{90}{\pgf@circ@res@other} - \pgfpathclose - \pgf@circ@draworfill - - \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@other}} - \pgfpatharc{90}{270}{\pgf@circ@res@other} - \pgfpathclose - \pgf@circ@draworfill -}{} - -%%%%%%%%%%%%%%%%%%%% -%% Block elements -%%%%%%%%%%%%%%%%%%%% - -\pgfdeclareshape{mixer} -{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor\northwest{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \ifpgf@circuit@boxed - \pgf@y=\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \else - \pgf@y=\ctikzvalof{tripoles/mixer/width}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-\ctikzvalof{tripoles/mixer/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \fi - } - \anchor{center}{ - \pgfpointorigin - } - \anchor{left}{% - \northwest - \pgf@y=0pt - } - \anchor{1}{ - \northwest - \pgf@y=0pt - } - \anchor{2}{ - \northwest - \pgf@y=-\pgf@y - \pgf@x=0pt - } - \anchor{3}{ - \northwest - \pgf@y=0pt - \pgf@x=-\pgf@x - } - \anchor{4}{ - \northwest - \pgf@y=\pgf@y - \pgf@x=0pt - } - \anchor{in 1}{ - \northwest - \pgf@y=0pt - } - \anchor{in1}{ - \northwest - \pgf@y=0pt - } - \anchor{in}{ - \northwest - \pgf@y=0pt - } - \anchor{in 2}{ - \northwest - \pgf@y=-\pgf@y - \pgf@x=0pt - } - \anchor{in2}{ - \northwest - \pgf@y=-\pgf@y - \pgf@x=0pt - } - \anchor{out}{ - \northwest - \pgf@y=0pt - \pgf@x=-\pgf@x - } - \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/mixer/width}\pgf@circ@scaled@Rlen - - \pgfscope - \pgfstartlinewidth=\pgflinewidth - - % draw outer box - \ifpgf@circuit@boxed - \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}} - \fi - - % draw outer circle - \ifpgf@circuit@boxed - \pgf@circ@res@step=.7\pgf@circ@res@step - \pgfsetdash{}{0pt} % draw solid circle if boxed - \else - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \fi - \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step} - \pgf@circ@draworfill - - % draw inner stuff - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathmoveto{\pgfpointpolar{135}{0.5\pgf@circ@res@step}} - \pgfpathlineto{\pgfpointpolar{-45}{0.5\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathmoveto{\pgfpointpolar{45}{0.5\pgf@circ@res@step}} - \pgfpathlineto{\pgfpointpolar{-135}{0.5\pgf@circ@res@step}} - \pgfusepath{draw} - - \endpgfscope - } -} - -\pgfdeclareshape{adder} -{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor\northwest{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \ifpgf@circuit@boxed - \pgf@y=\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \else - \pgf@y=\ctikzvalof{tripoles/adder/width}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-\ctikzvalof{tripoles/adder/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \fi - } - \anchor{center}{ - \pgfpointorigin - } - \anchor{left}{% - \northwest - \pgf@y=0pt - } - \anchor{1}{ - \northwest - \pgf@y=0pt - } - \anchor{2}{ - \northwest - \pgf@y=-\pgf@y - \pgf@x=0pt - } - \anchor{3}{ - \northwest - \pgf@y=0pt - \pgf@x=-\pgf@x - } - \anchor{4}{ - \northwest - \pgf@y=\pgf@y - \pgf@x=0pt - } - \anchor{in 1}{ - \northwest - \pgf@y=0pt - } - \anchor{in1}{ - \northwest - \pgf@y=0pt - } - \anchor{in}{ - \northwest - \pgf@y=0pt - } - \anchor{in 2}{ - \northwest - \pgf@y=-\pgf@y - \pgf@x=0pt - } - \anchor{in2}{ - \northwest - \pgf@y=-\pgf@y - \pgf@x=0pt - } - \anchor{out}{ - \northwest - \pgf@y=0pt - \pgf@x=-\pgf@x - } - \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/adder/width}\pgf@circ@scaled@Rlen - - \pgfscope - \pgfstartlinewidth=\pgflinewidth - - % draw outer box - \ifpgf@circuit@boxed - \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}} - \fi - - % draw outer circle - \ifpgf@circuit@boxed - \pgf@circ@res@step=.7\pgf@circ@res@step{} - \pgfsetdash{}{0pt} % draw solid circle if boxed - \else - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \fi - \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step} - \pgf@circ@draworfill - - % draw inner stuff - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetlinewidth{\pgfstartlinewidth} - - \pgfpathmoveto{\pgfpointorigin} - \pgfpathmoveto{\pgfpointpolar{0}{0.3\pgf@circ@res@step}} - \pgfpathlineto{\pgfpointpolar{180}{0.3\pgf@circ@res@step}} - \pgfpathmoveto{\pgfpointorigin} - \pgfpathmoveto{\pgfpointpolar{90}{0.3\pgf@circ@res@step}} - \pgfpathlineto{\pgfpointpolar{270}{0.3\pgf@circ@res@step}} - \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} - \pgfusepath{draw} - - \endpgfscope - } -} - -\pgfdeclareshape{oscillator} -{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor\northwest{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \ifpgf@circuit@boxed - \pgf@y=\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen - \else - \pgf@y=\ctikzvalof{tripoles/oscillator/width}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-\ctikzvalof{tripoles/oscillator/width}\pgf@circ@scaled@Rlen - \fi - } - \anchor{center}{ - \pgfpointorigin - } - \anchor{north}{ - \northwest - \pgf@x=.5\pgf@x - } - \anchor{south}{ - \northwest - \pgf@x=.5\pgf@x - \pgf@y=-\pgf@y - } - \anchor{east}{ - \northwest - \pgf@y=0pt - \pgf@x=0pt - } - \anchor{west}{ - \northwest - \pgf@y=0pt - } - \anchor{south west}{ \northwest \pgf@y=-\pgf@y} - \anchor{north east}{ \northwest \pgf@x=0pt\relax} - \anchor{north west}{ \northwest } - \anchor{south east}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y } - \anchor{text}{ - \pgf@x=-2\pgf@x - \advance \pgf@x by -.5\wd\pgfnodeparttextbox - \advance \pgf@y by -1.5\ht\pgfnodeparttextbox - } - \backgroundpath{ - \pgfsetcolor{\ctikzvalof{color}} - \pgf@circ@scaled@Rlen=\scaledRlen - - \pgf@circ@res@step=\ctikzvalof{tripoles/oscillator/width}\pgf@circ@scaled@Rlen{} - - \pgfscope - \pgfstartlinewidth=\pgflinewidth - - \pgftransformxshift{-0.5\pgf@circ@res@step} % The oscillator is shifted to the left, so a connection comes out of the anchor "east" - - % draw outer box - \ifpgf@circuit@boxed{} - \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}} - \fi - - % draw outer circle - \ifpgf@circuit@boxed - \pgf@circ@res@step=.7\pgf@circ@res@step{} - \pgfsetdash{}{0pt} % draw solid circle if boxed - \else - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \fi - \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step} - \pgf@circ@draworfill - - % draw inner sine waves - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners! - \pgfpathmoveto{\pgfpoint{-0.3\pgf@circ@res@step}{0\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}} - \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}} - \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}} - - \pgfusepath{draw} - - \endpgfscope - } -} - -\pgfdeclareshape{circulator} -{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor\northwest{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \ifpgf@circuit@boxed - \pgf@y=\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \else - \pgf@y=\ctikzvalof{tripoles/circulator/width}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-\ctikzvalof{tripoles/circulator/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \fi - } - \anchor{center}{ - \pgfpointorigin - } - \anchor{left}{% - \northwest - \pgf@y=0pt - } - \anchor{1}{ - \northwest - \pgf@y=0pt - } - \anchor{2}{ - \northwest - \pgf@y=0pt - \pgf@x=-\pgf@x - } - \anchor{3}{ - \northwest - \pgf@y=-\pgf@y - \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/circulator/width}\pgf@circ@scaled@Rlen - - \pgfscope - \pgfstartlinewidth=\pgflinewidth - - % draw outer box - \ifpgf@circuit@boxed - \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}} - \fi - - % draw outer circle - \ifpgf@circuit@boxed{} - \pgf@circ@res@step=.7\pgf@circ@res@step{} - \pgfsetdash{}{0pt} % draw solid circle if boxed - \else - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \fi - \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step} - \pgf@circ@draworfill - - % inner arrow - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetlinewidth{\pgfstartlinewidth} - - \pgfsetarrowsend{latex} - \pgfpathmoveto{\pgfpoint{-0.25\pgf@circ@res@step}{0}} - \pgfpatharc{180}{-90} {0.25\pgf@circ@res@step} - \pgfpathlineto{\pgfpoint{-5pt}{-0.2\pgf@circ@res@step}} - \pgfusepath{draw} - - \endpgfscope - } -} - -%% gridnode -\pgfdeclareshape{gridnode} -{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}} - \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{quadpoles/gridnode/width}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=-\ctikzvalof{quadpoles/gridnode/width}\pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - } - \anchor{center}{ - \pgfpointorigin - } - - \anchor{north}{ - \northwest - \pgf@x=0pt - } - \anchor{up}{ - \northwest - \pgf@x=0pt - } - \anchor{south}{ - \northwest - \pgf@x=0pt - \pgf@y=-\pgf@y - } - \anchor{down}{ - \northwest - \pgf@x=0pt - \pgf@y=-\pgf@y - } - \anchor{east}{ - \northwest - \pgf@y=0pt - \pgf@x=-\pgf@x - } - \anchor{right}{ - \northwest - \pgf@y=0pt - \pgf@x=-\pgf@x - } - \anchor{west}{ - \northwest - \pgf@y=0pt - } - \anchor{left}{ - \northwest - \pgf@y=0pt - } - \anchor{south west}{ - \northwest - \pgf@y=-\pgf@y - } - \anchor{north east}{ - \northwest - \pgf@x=-\pgf@x - \relax - } - \anchor{north west}{ - \northwest - } - \anchor{south east}{ - \northwest - \pgf@x=-\pgf@x - \pgf@y=-\pgf@y - } - \anchor{text}{ - \pgf@x=-2\pgf@x - \advance \pgf@x by -.5\wd\pgfnodeparttextbox - \advance \pgf@y by -1.5\ht\pgfnodeparttextbox - } - \backgroundpath{ - \pgfsetcolor{\ctikzvalof{color}} - \pgf@circ@scaled@Rlen=\scaledRlen - - \pgf@circ@res@step=\ctikzvalof{quadpoles/gridnode/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 - - \pgf@circ@res@step = \ctikzvalof{quadpoles/gridnode/width}\pgf@circ@scaled@Rlen - \divide \pgf@circ@res@step by 2 - - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}} - \pgf@circ@res@other = \pgf@circ@res@left - \advance\pgf@circ@res@other by \pgf@circ@res@step - - \ifpgf@circuit@dashed - \pgfsetdash{{0.1cm}{0.1cm}}{0cm} - \fi - - % draw outer box - \pgf@circ@twoportbox - - - \ifpgf@circuit@inputarrow - { - \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}} - } - \fi - - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{0.05mm} - - % draw grid - \foreach \line in {-1,-.5,...,1} - { - \pgfpathmoveto{\pgfpoint{\line\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\line\pgf@circ@res@up}} - - \pgfpathmoveto{\pgfpoint{\line\pgf@circ@res@right}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\line\pgf@circ@res@down}} - } - - %prevent from draw the inner cross twice - \foreach \line in {-.5,0,...,.5} - { - \pgfpathmoveto{\pgfpoint{\line\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\line\pgf@circ@res@up}} - - \pgfpathmoveto{\pgfpoint{\line\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\line\pgf@circ@res@down}} - } - \pgfusepath{draw} - } -} - - -% Wilkinson divider -\pgfdeclareshape{wilkinson}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}} - \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/wilkinson/height}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x= \pgf@circ@scaled@Rlen - \pgf@x=.5\pgf@x - \pgf@x=-\ctikzvalof{tripoles/wilkinson/width}\pgf@x - } - \anchor{center}{ - \northwest - \pgf@x=0pt - \pgf@y=0pt - } - \anchor{north}{ - \northwest - \pgf@x=0pt - } - \anchor{south}{ - \northwest - \pgf@x=0pt - \pgf@y=-\pgf@y - } - \anchor{west}{ - \northwest - \pgf@y=0pt - } - \anchor{east}{ - \northwest - \pgf@y=0pt - \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{in}{ - \northwest - \pgf@y=0pt - } - \anchor{out1}{ - \northwest - \pgf@x=-\pgf@x - \pgf@y=-0.5\pgf@y - } - \anchor{out2}{ - \northwest - \pgf@x=-\pgf@x - \pgf@y=0.5\pgf@y - } - \anchor{text}{ - \northwest - \advance \pgf@y by 0.5\ht\pgfnodeparttextbox - \pgf@x=-.5\wd\pgfnodeparttextbox - } - \backgroundpath{ - \pgfsetcolor{\ctikzvalof{color}} - \pgf@circ@scaled@Rlen=\scaledRlen - - \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 - - \pgfstartlinewidth=\pgflinewidth - - % draw outer box - \pgf@circ@twoportbox - - % draw inner stuff - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - \pgfsetarrows{-} %never draw arrows - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}} - - \pgfusepath{draw} - - \pgfsetdash{}{0pt} % always draw solid line for inner symbol - % draw inner resisitor - european or american style is recognised - { - \pgftransformshift{\pgfpoint{0.5\pgf@circ@res@right}{0pt}} - \pgftransformrotate{90} - - % calculate size of resistor - \ifpgf@circuit@europeanresistor - \pgfmathparse{\pgf@circ@res@up / \pgf@circ@scaled@Rlen / \ctikzvalof{bipoles/generic/width} / 2} - \pgftransformscale{\pgfmathresult} - \pgfnode{genericshape}{center}{}{wilk@int@R}{\pgfusepath{fill}} - \else - \pgfmathparse{\pgf@circ@res@up / \pgf@circ@scaled@Rlen / \ctikzvalof{bipoles/resistor/width} / 2} - \pgftransformscale{\pgfmathresult} - \pgfnode{resistorshape}{center}{}{wilk@int@R}{\pgfusepath{fill}} - \fi - } - - \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpointanchor{wilk@int@R}{right}} - - \pgfpathmoveto{\pgfpointanchor{wilk@int@R}{left}} - \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}} - \pgfusepath{draw} - - } -} - -%% couplers generics -\long\def\pgfcircdeclarefourport#1#2{ - - \pgfdeclareshape{#1}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \anchor{center}{ - \northwest - \pgf@x=0pt - \pgf@y=0pt - } - \savedanchor\northwest{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@y=\ctikzvalof{quadpoles/#1/height}\pgf@circ@scaled@Rlen - \pgf@y=.5\pgf@y - \pgf@x=.5\pgf@circ@scaled@Rlen - \pgf@x=-\ctikzvalof{quadpoles/#1/width}\pgf@x - } - \anchor{north}{ - \northwest - \pgf@x=0pt - } - \anchor{south}{ - \northwest - \pgf@x=0pt - \pgf@y=-\pgf@y - } - \anchor{west}{ - \northwest - \pgf@y=0pt - } - \anchor{east}{ - \northwest - \pgf@y=0pt - \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{port1}{ - \northwest - \pgf@y=-0.5\pgf@y - } - \anchor{port2}{ - \northwest - \pgf@x=-\pgf@x - \pgf@y=-0.5\pgf@y - } - \anchor{port3}{ - \northwest - \pgf@x=-\pgf@x - \pgf@y=0.5\pgf@y - } - \anchor{port4}{ - \northwest - \pgf@y=0.5\pgf@y - } - \anchor{1}{ - \northwest - \pgf@y=-0.5\pgf@y - } - \anchor{2}{ - \northwest - \pgf@x=-\pgf@x - \pgf@y=-0.5\pgf@y - } - \anchor{3}{ - \northwest - \pgf@x=-\pgf@x - \pgf@y=0.5\pgf@y - } - \anchor{4}{ - \northwest - \pgf@y=0.5\pgf@y - } - - \anchor{text}{ - \northwest - \advance \pgf@y by 0.5\ht\pgfnodeparttextbox - \pgf@x=-.5\wd\pgfnodeparttextbox - } - \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 - - \pgfstartlinewidth=\pgflinewidth - - % draw outer box - \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} - \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - \pgf@circ@draworfill - - % draw inner stuff - #2 - - % draw inner text - \pgftext[center,x=-0.15\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}} - } - } -} - -% four-port -\pgfcircdeclarefourport{fourport}{} - -% straight coupler -\pgfcircdeclarefourport{coupler}{ - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}} - \pgfusepath{draw} - - \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@up}} - \pgfsetarrows{latex-latex} - \pgfusepath{draw} - \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@down}} - \pgfsetarrows{latex-latex} - \pgfusepath{draw} -} - -% "bended" coupler -\pgfcircdeclarefourport{coupler2}{ - \pgfsetlinewidth{\pgfstartlinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}} - \pgfusepath{draw} - - \pgfscope - \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}} - \pgfpatharc{0}{90} {0.4\pgf@circ@res@up} - \pgfsetarrowsend{latex} - \pgfusepath{draw} - \endpgfscope - \pgfscope - \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}} - \pgfpatharc{0}{-90} {0.4\pgf@circ@res@up} - \pgfsetarrowsend{latex} - \pgfusepath{draw} - \endpgfscope - \pgfscope - \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}} - \pgfpatharc{180}{90} {0.4\pgf@circ@res@up} - \pgfsetarrowsend{latex} - \pgfusepath{draw} - \endpgfscope - \pgfscope - \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}} - \pgfpatharc{-180}{-90} {0.4\pgf@circ@res@up} - \pgfsetarrowsend{latex} - \pgfusepath{draw} - \endpgfscope -} - -%%%---------- close: tex/pgfcircquadpoles -%%%%%%%%%%% Springe nach tex/pgfcircmultipoles -%%%---------- open: tex/pgfcircmultipoles.tex -% 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. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Multipoles by Romano Giannetti -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%% -%% Chips -%%%%%%%%% - -% let's use the same shifts everywhere, no magic numbers -\def\pgf@circ@dip@pin@shift{0.5} -\def\pgf@circ@qfp@pin@shift{0.25} - -% derived from https://tex.stackexchange.com/a/146753/38080 -% original author Mark Wibrow -% Thanks also to John Kormylo https://tex.stackexchange.com/a/372996/38080 -% a lot of thanks to @marmot for the un-rotation hint -% https://tex.stackexchange.com/a/473571/38080 - -% DIP (dual in line package) chips - -\pgfdeclareshape{dipchip}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{chips}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedmacro\numpins{% - \pgf@circ@count@a=\ctikzvalof{multipoles/dipchip/num pins}% - \def\numpins{\the\pgf@circ@count@a} - } - \savedanchor\centerpoint{% - \pgf@x=-.5\wd\pgfnodeparttextbox% - \pgf@y=-.5\ht\pgfnodeparttextbox% - \advance\pgf@y by+.5\dp\pgfnodeparttextbox% - }% - \savedanchor\origin{\pgfpoint{0pt}{0pt}} - \anchor{center}{\origin} - \anchor{text}{\centerpoint}% to adjust text - \saveddimen\height{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{((\numpins) - *\ctikzvalof{multipoles/dipchip/pin spacing})*\pgf@circ@scaled@Rlen/2}% - }% - \saveddimen{\chipspacing}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/dipchip/pin spacing}}} - \saveddimen{\width}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/dipchip/width}}} - \saveddimen{\extshift}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/external pins width}}} - % standard anchors - \savedanchor\northwest{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@y{0.5*((\numpins) - *\ctikzvalof{multipoles/dipchip/pin spacing})*\pgf@circ@scaled@Rlen/2}% - \pgfmathsetlength\pgf@x{-0.5*\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/dipchip/width}} - } - \anchor{dot}{\northwest - \pgfmathsetlength\pgf@x{\pgf@x + 0.3*\chipspacing} - \pgfmathsetlength\pgf@y{\pgf@y - 0.3*\chipspacing} - } - \anchor{nw}{\northwest} - \anchor{ne}{\northwest\pgf@x=-\pgf@x} - \anchor{se}{\northwest\pgf@x=-\pgf@x\pgf@y=-\pgf@y} - \anchor{sw}{\northwest\pgf@y=-\pgf@y} - \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{n}{\northwest\pgf@x=0pt } - \anchor{e}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt } - \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{w}{\northwest\pgf@y=0pt } - \anchor{north}{\northwest\pgf@x=0pt } - \anchor{east}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt } - \anchor{south}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{west}{\northwest\pgf@y=0pt } - % start drawing - \backgroundpath{% - \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 - \pgf@circ@res@step = \ctikzvalof{multipoles/dipchip/pin spacing}\pgf@circ@scaled@Rlen - \pgf@circ@res@other = \ctikzvalof{multipoles/external pins width}\pgf@circ@scaled@Rlen - \pgfscope% (for the line width) - \pgf@circ@setlinewidth{multipoles}{\pgflinewidth} - \pgfpathrectanglecorners{\pgfpoint{-\width/2}{-\height/2}}{\pgfpoint{\width/2}{\height/2}}% - \pgf@circ@draworfill - %% upside mark - \ifpgf@circuit@chip@topmark - \pgfpathmoveto{\pgfpoint{0.2*\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpatharc{0}{180}{0.2*\pgf@circ@res@left} - \fi - \pgfusepath{stroke}% - \pgfsetcolor{\ctikzvalof{color}} - % Adding the pin number - \ifpgf@circuit@chip@shownumbers - \pgf@circ@count@a=\numpins\relax - \divide\pgf@circ@count@a by 2 \pgf@circ@count@b=\pgf@circ@count@a - % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080 - \ifpgf@circuit@chip@straightnumbers - \pgfgettransformentries\a\b\temp\temp\temp\temp - \pgfmathsetmacro{\rot}{-atan2(\b,\a)} - \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)} - \else - \pgfmathsetmacro{\rot}{0} - \pgfmathsetmacro{\quadrant}{0} - \fi - \def\pgf@circ@strut{\vrule width 0pt height 1em depth 0.4em\relax} - \def\mytext{\ctikzvalof{multipoles/font}\space\pgf@circ@strut\the\pgf@circ@count@c\space} - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - \ifcase\quadrant % rotation 0 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgftext[left, - at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgftext[right, - at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - \or % rotation -90 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgftext[top, - at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgftext[bottom, - at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - \or %rotation 180 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgftext[right, - at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgftext[left, - at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - \or % rotation +90 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgftext[bottom, - at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgftext[top, - at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - \fi - \advance\pgf@circ@count@a-1\relax% - \repeatpgfmathloop - \fi - \endpgfscope - \ifdim\pgf@circ@res@other>0pt - \pgfscope - \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth} - \pgf@circ@count@a=\numpins\relax - \divide\pgf@circ@count@a by 2 \pgf@circ@count@b=\pgf@circ@count@a - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - \edef\padfrac{\ctikzvalof{multipoles/external pad fraction}} - \ifnum\padfrac>0 - \pgf@circ@res@temp=\pgf@circ@res@step\divide\pgf@circ@res@temp by \padfrac - % left side pads - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - % right side pads - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \else - % left side pins - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - % right side pins - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \fi - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop - \pgfusepath{stroke} - \endpgfscope - \fi - }% - % \pgf@sh@s@ contains all the code for the shape - % and is executed just before a node is drawn. - \pgfutil@g@addto@macro\pgf@sh@s@dipchip{% - % Start with the maximum pin number and go backwards. - \pgf@circ@count@a=\numpins\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@dipchip@pin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@dippinanchor{\the\pgf@circ@count@a}{1}% - } - \expandafter\xdef\csname pgf@anchor@dipchip@bpin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@dippinanchor{\the\pgf@circ@count@a}{0}% - } - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop% - }% - } - -% QFP (quad flat package) chips - -\pgfdeclareshape{qfpchip}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{chips}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedmacro\numpins{% - \pgf@circ@count@a=\ctikzvalof{multipoles/qfpchip/num pins}% - \def\numpins{\the\pgf@circ@count@a} - } - \savedanchor\centerpoint{% - \pgf@x=-.5\wd\pgfnodeparttextbox% - \pgf@y=-.5\ht\pgfnodeparttextbox% - \advance\pgf@y by+.5\dp\pgfnodeparttextbox% - }% - \savedanchor\origin{\pgfpoint{0pt}{0pt}} - \anchor{center}{\origin} - \anchor{text}{\centerpoint}% to adjust text - \saveddimen\height{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{((\numpins+2) - *\ctikzvalof{multipoles/qfpchip/pin spacing})*\pgf@circ@scaled@Rlen/4}% - }% - \saveddimen\width{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{((\numpins+2) - *\ctikzvalof{multipoles/qfpchip/pin spacing})*\pgf@circ@scaled@Rlen/4}% - }% - \saveddimen{\chipspacing}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/qfpchip/pin spacing}}} - \saveddimen{\extshift}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/external pins width}}} - % standard anchors - \savedanchor\northwest{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@y{0.5*((\numpins+2) - *\ctikzvalof{multipoles/qfpchip/pin spacing})*\pgf@circ@scaled@Rlen/4}% - \pgf@x=-\pgf@y - } - \anchor{dot}{\northwest - \pgfmathsetlength\pgf@x{\pgf@x + 0.3*\chipspacing} - \pgfmathsetlength\pgf@y{\pgf@y - 0.3*\chipspacing} - } - \anchor{nw}{\northwest} - \anchor{ne}{\northwest\pgf@x=-\pgf@x} - \anchor{se}{\northwest\pgf@x=-\pgf@x\pgf@y=-\pgf@y} - \anchor{sw}{\northwest\pgf@y=-\pgf@y} - \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{n}{\northwest\pgf@x=0pt } - \anchor{e}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt } - \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{w}{\northwest\pgf@y=0pt } - \anchor{north}{\northwest\pgf@x=0pt } - \anchor{east}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt } - \anchor{south}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{west}{\northwest\pgf@y=0pt } - % start drawing - \backgroundpath{% - \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 - \pgf@circ@res@step = \ctikzvalof{multipoles/qfpchip/pin spacing}\pgf@circ@scaled@Rlen - \pgf@circ@res@other = \ctikzvalof{multipoles/external pins width}\pgf@circ@scaled@Rlen - \pgfscope% (for the line width) - \pgf@circ@setlinewidth{multipoles}{\pgflinewidth} - %% upside mark - \ifpgf@circuit@chip@topmark - \pgfpathmoveto{\pgfpoint{-\width/2}{\height/2-\pgf@circ@res@step/2}} - \pgfpathlineto{\pgfpoint{-\width/2+\pgf@circ@res@step/2}{\height/2}} - \else - \pgfpathmoveto{\pgfpoint{-\width/2}{\height/2}} - \fi - %% rest of the shape - \pgfpathlineto{\pgfpoint{\width/2}{\height/2}} - \pgfpathlineto{\pgfpoint{\width/2}{-\height/2}} - \pgfpathlineto{\pgfpoint{-\width/2}{-\height/2}} - \pgfpathclose - \pgf@circ@draworfill - % Adding the pin number - \pgfsetcolor{\ctikzvalof{color}} - \ifpgf@circuit@chip@shownumbers - \pgf@circ@count@a=\numpins% - \divide\pgf@circ@count@a by 4 \pgf@circ@count@b=\pgf@circ@count@a - % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080 - \ifpgf@circuit@chip@straightnumbers - \pgfgettransformentries\a\b\temp\temp\temp\temp - \pgfmathsetmacro{\rot}{-atan2(\b,\a)} - \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)} - \else - \pgfmathsetmacro{\rot}{0} - \pgfmathsetmacro{\quadrant}{0} - \fi - \def\pgf@circ@strut{\vrule width 0pt height 1em depth 0.4em\relax} - \def\mytext{\ctikzvalof{multipoles/font}\space\pgf@circ@strut\the\pgf@circ@count@c\space} - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - \ifcase\quadrant % rotation 0 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgftext[left, - at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % bottom - \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax - \pgftext[bottom, - at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgftext[right, - at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % top - \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax - \pgftext[top, - at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}, - rotate=\rot]{\mytext} - \or % rotation -90 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgftext[top, - at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % bottom - \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax - \pgftext[left, - at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgftext[bottom, - at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % top - \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax - \pgftext[right, - at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}, - rotate=\rot]{\mytext} - \or %rotation 180 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgftext[right, - at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % bottom - \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax - \pgftext[top, - at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgftext[left, - at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % top - \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax - \pgftext[bottom, - at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}, - rotate=\rot]{\mytext} - \or % rotation +90 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgftext[bottom, - at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % bottom - \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax - \pgftext[right, - at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgftext[top, - at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % top - \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax - \pgftext[left, - at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}, - rotate=\rot]{\mytext} - \fi - \advance\pgf@circ@count@a-1\relax% - \repeatpgfmathloop - \fi - \endpgfscope - \ifdim\pgf@circ@res@other>0pt - \pgfscope - \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth} - \pgf@circ@count@a=\numpins% - \divide\pgf@circ@count@a by 4 \pgf@circ@count@b=\pgf@circ@count@a - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - \edef\padfrac{\ctikzvalof{multipoles/external pad fraction}} - \ifnum\padfrac>0 - \pgf@circ@res@temp=\pgf@circ@res@step\divide\pgf@circ@res@temp by \padfrac - % left side pads - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - % bottom side pads - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}} - % right side pads - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - % top side pads - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}} - \else - % left side pins - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - % bottom side pins - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}} - % right side pins - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - % top side pins - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}} - \fi - \advance\pgf@circ@count@a-1\relax% - \repeatpgfmathloop - \pgfusepath{stroke} - \endpgfscope - \fi - }% - % \pgf@sh@s@ contains all the code for the shape - % and is executed just before a node is drawn. - \pgfutil@g@addto@macro\pgf@sh@s@qfpchip{% - % Start with the maximum pin number and go backwards. - \pgf@circ@count@a=\numpins% - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - \expandafter\xdef\csname pgf@anchor@qfpchip@pin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@qfppinanchor{\the\pgf@circ@count@a}{1}% - } - \expandafter\xdef\csname pgf@anchor@qfpchip@bpin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@qfppinanchor{\the\pgf@circ@count@a}{0}% - } - \advance\pgf@circ@count@a-1\relax% - \repeatpgfmathloop% - }% - } - -%% anchors for DIP -\def\pgf@circ@dippinanchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin - \c@pgf@countc=\numpins\relax - \divide\c@pgf@countc by 2 - \ifnum #1 > \the\c@pgf@countc - % right side - \pgfpoint{\width/2+#2*\extshift}{-\height/2+(\pgf@circ@dip@pin@shift-\c@pgf@countc+#1-1)*\chipspacing} - \else - \pgfpoint{-\width/2-#2*\extshift}{\height/2+(\pgf@circ@dip@pin@shift-#1)*\chipspacing} -\fi -} - -%% anchors for QFP -\def\pgf@circ@qfppinanchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin - \c@pgf@countc=\numpins\relax - \divide\c@pgf@countc by 4 - \ifnum #1 > \the\c@pgf@countc - \c@pgf@countb=\c@pgf@countc \multiply \c@pgf@countb by 2 - \ifnum #1 > \the\c@pgf@countb - \c@pgf@countb=\c@pgf@countc \multiply \c@pgf@countb by 3 - \ifnum #1 > \the\c@pgf@countb - % 3*npins/4 < pin, top side - \pgfpoint{\width/2+(\pgf@circ@qfp@pin@shift+\c@pgf@countb-#1)*\chipspacing}{\height/2+#2*\extshift}% - \else - % 2*npins/4 < pin <= 3*npins/4, right side - \pgfpoint{\width/2+#2*\extshift}{\height/2+(\pgf@circ@qfp@pin@shift-\c@pgf@countb+#1-1)*\chipspacing}% - \fi - \else - % npins/4 < pin <= 2*npins/4, bottom side - \pgfpoint{\width/2+(\pgf@circ@qfp@pin@shift-\c@pgf@countb+#1-1)*\chipspacing}{-\height/2-#2*\extshift}% - \fi - \else - % <= npins/4, left side - \pgfpoint{-\width/2-#2*\extshift}{\height/2+(\pgf@circ@qfp@pin@shift-#1)*\chipspacing}% - \fi -} - -%%%%%%%%%%%%%%%%% -%% Rotary Switch -%%%%%%%%%%%%%%%%% - -\pgfdeclareshape{rotaryswitch} -{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{switches}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedanchor\northeast{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt - % the magic number is 0.25/cos(35) - % try to recalculate it for the actual switch - \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen - \pgf@circ@res@temp=.3052\pgf@circ@res@temp - \edef\a{\ctikzvalof{multipoles/rotary/angle}} - \edef\r{\ctikzvalof{nodes width}} - \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@scaled@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp} - \pgfmathsetlength{\pgf@x}{\r*\pgf@circ@scaled@Rlen + \pgf@circ@res@temp} - } - \savedanchor\northwest{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt - % the magic number is 0.25/cos(35) - % try to recalculate it for the actual switch - \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen - \pgf@circ@res@temp=.3052\pgf@circ@res@temp - \edef\a{\ctikzvalof{multipoles/rotary/angle}} - \edef\r{\ctikzvalof{nodes width}} - \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@scaled@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp} - \pgfmathsetlength{\pgf@x}{-\r*\pgf@circ@scaled@Rlen - (\a<90 ? 1 : 1-2*cos(\a))*\pgf@circ@res@temp} - } - \savedanchor\central{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt - % the magic number is 0.25/cos(35) - % try to recalculate it for the actual switch - \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen - \pgf@circ@res@temp=.3052\pgf@circ@res@temp - \edef\a{\ctikzvalof{multipoles/rotary/angle}} - \edef\r{\ctikzvalof{nodes width}} - \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@scaled@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp} - \pgfmathsetlength{\pgf@x}{(\a<90 ? 0 : cos(\a))*\pgf@circ@res@temp} - } - % external square limits - \savedanchor\extnorthwest{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgf@x=-\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen - % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt - \pgf@x=.3052\pgf@x % the magic number is 0.25/cos(35) - \pgf@x=2.5\pgf@x % external square size - \pgf@y=-\pgf@x %square thing when angle=180? - } - \saveddimen{\width}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{0.3052*\pgf@circ@scaled@Rlen*\ctikzvalof{tripoles/spdt/width}}} - % 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{multipoles/rotary/shape}}} - \savedmacro{\channels}{\def\channels{\ctikzvalof{multipoles/rotary/channels}}} - \savedmacro{\angle}{\def\angle{\ctikzvalof{multipoles/rotary/angle}}} - \savedmacro{\wiper}{\def\wiper{\ctikzvalof{multipoles/rotary/wiper}}} - \savedmacro{\stepa}{\pgfmathsetmacro{\stepa}{2*\ctikzvalof{multipoles/rotary/angle}/(\ctikzvalof{multipoles/rotary/channels}-1)}} - % mid of the lever, to stack switches - %\anchor{mid}{\midlever} - \anchor{mid}{\northwest - \pgf@circ@res@temp=-\pgf@x - \pgfmathsetlength{\pgf@x}{\pgf@circ@res@temp*(-1+cos(\wiper))} - \pgfmathsetlength{\pgf@y}{\pgf@circ@res@temp*sin(\wiper)} - } - % center anchors - \anchor{cin}{ \northwest \pgf@y=0pt\advance\pgf@x by \radius} - % horizontal angles - \anchor{in}{ \northwest \pgf@y=0pt} - \anchor{ain}{ \northwest \pgf@y=0pt} - - \anchor{center}{ \central \pgf@y=0pt } - \anchor{east}{ \northeast \pgf@y=0pt } - \anchor{west}{ \northwest \pgf@y=0pt } - \anchor{south}{ \central \pgf@y=-\pgf@y } - \anchor{north}{ \central } - \anchor{south west}{ \northwest \pgf@y=-\pgf@y } - \anchor{north east}{ \northeast } - \anchor{north west}{ \northwest } - \anchor{south east}{ \northeast \pgf@y=-\pgf@y } - - \anchor{ext center}{ \pgf@y=0pt \pgf@x=0pt \advance\pgf@x by -\width} - \anchor{ext east}{ \extnorthwest \pgf@y=0pt \pgf@x=-\pgf@x \advance\pgf@x by -\width} - \anchor{ext west}{ \extnorthwest \pgf@y=0pt \advance\pgf@x by -\width} - \anchor{ext south}{ \extnorthwest \pgf@x=0pt \pgf@y=-\pgf@y \advance\pgf@x by -\width} - \anchor{ext north}{ \extnorthwest \pgf@x=0pt \advance\pgf@x by -\width} - \anchor{ext south west}{ \extnorthwest \pgf@y=-\pgf@y \advance\pgf@x by -\width} - \anchor{ext north east}{ \extnorthwest \pgf@x=-\pgf@x \advance\pgf@x by -\width} - \anchor{ext north west}{ \extnorthwest \advance\pgf@x by -\width} - \anchor{ext south east}{ \extnorthwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y \advance\pgf@x by -\width} - - \backgroundpath{ - \pgfsetcolor{\ctikzvalof{color}} - \pgf@circ@res@right = \width - \pgf@circ@res@left = -\width - - \pgfscope %wiper - % This is the radius of the "ocirc" shape (see pgfcircshapes.tex) - \pgf@circ@res@temp=\radius\relax - \pgf@circ@res@temp=\ctikzvalof{multipoles/rotary/thickness}\pgf@circ@res@temp - \pgfsetlinewidth{2\pgf@circ@res@temp} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@circ@res@left}{0pt}}{\pgfpointpolar{\wiper}{2\pgf@circ@res@right}}} - \pgfsetroundcap\pgfusepath{draw} - \endpgfscope - - \ifpgf@circ@rotaryarrow - \pgfscope % arrow - \ifpgf@circ@rotaryarrow@ccw\pgfsetarrowsstart{latexslim}\fi - \pgf@circ@setlinewidth{bipoles}{\pgflinewidth} - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % center of cin node - \pgftransformrotate{\wiper} - \pgfpathmoveto{\pgfpointpolar{50}{1.0\pgf@circ@res@right}} - \pgfpatharc{50}{-50}{1.0\pgf@circ@res@right} - \ifpgf@circ@rotaryarrow@cw\pgfsetarrowsend{latexslim}\fi - \pgfusepath{draw} - \endpgfscope - \fi - - % \typeout{CHANNELS\space\channels\space ANGLE\space\angle STEPA\space\stepa} - \pgf@circ@count@a=\channels\relax - \pgfmathsetmacro{\currenta}{-\angle} - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - % \typeout{LOOPIN\space\space\the\pgf@circ@count@a\space CURRENTA\space\currenta\space RIGHT\space\the\pgf@circ@res@right} - \pgfscope - \pgftransformshift{\pgfpointadd{\pgfpoint{\pgf@circ@res@left}{0pt}}{\pgfpointpolar{\currenta}{2\pgf@circ@res@right}}} - \pgfnode{\cshape}{center}{}{\thisshape-out \the\pgf@circ@count@a}{\pgfusepath{stroke}} - \endpgfscope - \pgfmathsetmacro{\currenta}{\currenta+\stepa} - % \typeout{LOOPOUT\space\the\pgf@circ@count@a\space CURRENTA\space\currenta\space RIGHT\space\the\pgf@circ@res@right} - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop - - \pgfscope % input - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}} - \endpgfscope - } - % \pgf@sh@s@ contains all the code for the shape - % and is executed just before a node is drawn. - \pgfutil@g@addto@macro\pgf@sh@s@rotaryswitch{% - % Start with the maximum pin number and go backwards. - \pgf@circ@count@a=\channels\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@rotaryswitch@out\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{1}{0}% - } - \expandafter\xdef\csname pgf@anchor@rotaryswitch@cout\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{0}{0}% - } - \expandafter\xdef\csname pgf@anchor@rotaryswitch@aout\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{0}{1}% - } - \expandafter\xdef\csname pgf@anchor@rotaryswitch@sqout\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@rotarysqanchor{\the\pgf@circ@count@a}{0}% - } - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop% - }% -} - -\def\pgf@circ@rotaryanchor#1#2#3{% #1: numero del pin; #2: 1 - x pos, 0 - center; #3 0: inner, 1 outer - \pgf@circ@res@temp=\width - \pgfmathsetmacro{\myangle}{\angle-(#1-1)*\stepa} - \pgfmathsetlength{\pgf@x}{2*(\pgf@circ@res@temp+#3*\radius/2)*cos(\myangle))+#2*\radius} - \pgfmathsetlength{\pgf@y}{2*(\pgf@circ@res@temp+#3*\radius/2)*sin(\myangle)} - \advance\pgf@x by -\pgf@circ@res@temp -} - -\def\pgf@circ@rotarysqanchor#1{% external square anchors - \pgf@circ@res@temp=\width - \pgfmathsetmacro{\myangle}{\angle-(#1-1)*\stepa} - \pgfpointborderrectangle{\pgfpointpolar{\myangle}{1pt}}{\pgfpoint{2.5\pgf@circ@res@temp}{2.5\pgf@circ@res@temp}} - \advance\pgf@x by -\pgf@circ@res@temp -} - -%%%%%%%%%%%%%%%%%%%%%%%%%% -% Seven segments displays -%%%%%%%%%%%%%%%%%%%%%%%%%% - -\pgfdeclareshape{bare7seg}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{displays}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedmacro{\dotstatus}{\edef\dotstatus{\pgf@circ@sevenseg@dotstate}} - \saveddimen{\dotspace}{% the dot is on the right, and occupy the same as the thickness - \ifpgf@circ@sevenseg@dot - \pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/thickness}} - \else - \pgf@x=0pt - \fi - } - % The object extension is more or less (-width/2,-width) to (width/2,width) - % and adjusted for line thickness (both sides) and eventually the dot - \saveddimen{\width}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen}} - \saveddimen{\gap}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/segment sep}}} - \saveddimen{\boxgap}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/box sep}}} - \savedanchor{\southwest}{% both negative - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength{\pgf@x}{-0.5*\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen - -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}} - \pgfmathsetlength{\pgf@y}{-\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen - -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}} - } - \savedanchor{\northeast}{% both positive - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \ifpgf@circ@sevenseg@dot - \pgfmathsetlength{\pgf@circ@res@other}{\ctikzvalof{seven seg/thickness}} - \else - \pgf@circ@res@other=0pt - \fi - \pgfmathsetlength{\pgf@x}{0.5*\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen - +0.5*\ctikzvalof{seven seg/thickness}+\pgf@circ@res@other+\ctikzvalof{seven seg/box sep}} - \pgfmathsetlength{\pgf@y}{\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen - +0.5*\ctikzvalof{seven seg/thickness}+\ctikzvalof{seven seg/box sep}} - } - \savedanchor{\topright}{% anchor without the box sep and the thickness - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength{\pgf@x}{0.5*\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen} - \pgfmathsetlength{\pgf@y}{\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen} - } - \anchor{center}{\pgfpointorigin} - \anchor{north west}{\southwest\pgf@y=-\pgf@y} - \anchor{north east}{\northeast} - \anchor{south east}{\northeast\pgf@y=-\pgf@y} - \anchor{south west}{\southwest} - \anchor{north}{\northeast\pgf@x=0pt} - \anchor{east}{\northeast\pgf@y=0pt} - \anchor{south}{\southwest\pgf@x=0pt} - \anchor{west}{\southwest\pgf@y=0pt} - \anchor{a}{\topright\pgf@x=0pt} - \anchor{b}{\topright\pgf@y=0.5\pgf@y} - \anchor{c}{\topright\pgf@y=-0.5\pgf@y} - \anchor{d}{\topright\pgf@y=-\pgf@y\pgf@x=0pt} - \anchor{e}{\topright\pgf@x=-\pgf@x\pgf@y=-0.5\pgf@y} - \anchor{f}{\topright\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y} - \anchor{g}{\pgfpointorigin} - \anchor{dot}{\topright\pgf@y=-\pgf@y\advance\pgf@x by \dotspace} - \behindbackgroundpath{% - \southwest % I do not want the dot here, it will stick out - \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{multipoles}{\pgflinewidth} - \pgfsetcolor{\ctikzvalof{color}} - \pgfpathrectanglecorners% - {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} - {\pgfpoint{\pgf@circ@res@left+\dotspace}{\pgf@circ@res@up}} - \ifpgf@circ@sevenseg@box - \pgf@circ@draworfill - \else - \pgf@circ@maybefill - \fi - \endpgfscope - \edef\bits{\ctikzvalof{seven seg/bits}} - \pgfscope - \pfg@circ@sseg@drawbits{\bits} - \endpgfscope - \pgfscope - \ifpgf@circ@sevenseg@dot - \pgf@circ@sseg@drawdots - \fi - \endpgfscope - } -} - -\def\pgf@circ@sseg@splitbits#1#2#3#4#5#6#7\relax{%split the seven bits - \edef\@@a{#1}\edef\@@b{#2}\edef\@@c{#3}\edef\@@d{#4}\edef\@@e{#5}\edef\@@f{#6}\edef\@@g{#7}% -} -\def\pgf@circ@sseg@drawone#1#2#3#4#5{% #1 on off the x1, y1, x2 , y2 - \ifnum #1 > 0\relax - \pgfsetcolor{\ctikzvalof{seven seg/color on}} - \else - \pgfsetcolor{\ctikzvalof{seven seg/color off}} - \fi - \pgfpathmoveto{\pgfpoint{#2}{#3}} - \pgfpathlineto{\pgfpoint{#4}{#5}} - \pgfusepath{draw} -} -\def\pfg@circ@sseg@drawbits#1{% #1 must be 7 bits - \expandafter\pgf@circ@sseg@splitbits#1\relax% a bit of magic... - \pgfmathsetlength{\pgf@circ@res@other}{0.5*\ctikzvalof{seven seg/thickness}} - \pgfsetlinewidth{\ctikzvalof{seven seg/thickness}} - % \pgfsetroundcap - \pgfsetarrowsstart{Triangle Cap[]} - \pgfsetarrowsend{Triangle Cap[]} - % segments - \pgf@circ@sseg@drawone{\@@a}{-\width/2+\gap}{\width}{\width/2-\gap}{\width} - \pgf@circ@sseg@drawone{\@@b}{\width/2}{\width-\gap}{\width/2}{0pt+\gap} - \pgf@circ@sseg@drawone{\@@c}{\width/2}{0pt-\gap}{\width/2}{-\width+\gap} - \pgf@circ@sseg@drawone{\@@d}{\width/2-\gap}{-\width}{-\width/2+\gap}{-\width} - \pgf@circ@sseg@drawone{\@@e}{-\width/2}{-\width+\gap}{-\width/2}{0pt-\gap} - \pgf@circ@sseg@drawone{\@@f}{-\width/2}{0pt+\gap}{-\width/2}{\width-\gap} - \pgf@circ@sseg@drawone{\@@g}{-\width/2+\gap}{0pt}{\width/2-\gap}{0pt} -} -\def\pgf@circ@sseg@drawdots{% dots - \edef\what{empty} - \ifx\what\pgf@circ@sevenseg@dotstate - % do nothing - \else - \pgfmathsetlength{\pgf@circ@res@other}{0.5*\ctikzvalof{seven seg/thickness}} - \edef\what{off} - \ifx\what\pgf@circ@sevenseg@dotstate - % dot off - \pgfsetfillcolor{\ctikzvalof{seven seg/color off}} - \pgfsetcolor{\ctikzvalof{seven seg/color off}} - \else - % dot on - \pgfsetfillcolor{\ctikzvalof{seven seg/color on}} - \pgfsetcolor{\ctikzvalof{seven seg/color on}} - \fi - \pgfpathcircle{\pgfpoint{\width/2+2*\pgf@circ@res@other}{-\width}}{\pgf@circ@res@other} - \pgfusepath{draw,fill} - \fi -} - - -%%%%%% -%%%%%% Flip-flops -%%%%%% - -% Flip flops are a specialized kind of dipchip. -% they have a class by themselves - -%% flip flop definitions --- by default empty -%% pin texts -\ctikzset{multipoles/flipflop/t1/.initial={}} -\ctikzset{multipoles/flipflop/t2/.initial={}} -\ctikzset{multipoles/flipflop/t3/.initial={}} -\ctikzset{multipoles/flipflop/t4/.initial={}} -\ctikzset{multipoles/flipflop/t5/.initial={}} -\ctikzset{multipoles/flipflop/t6/.initial={}} -\ctikzset{multipoles/flipflop/tu/.initial={}} -\ctikzset{multipoles/flipflop/td/.initial={}} -% pin clock wedge flags -\ctikzset{multipoles/flipflop/c1/.initial={0}} -\ctikzset{multipoles/flipflop/c2/.initial={0}} -\ctikzset{multipoles/flipflop/c3/.initial={0}} -\ctikzset{multipoles/flipflop/c4/.initial={0}} -\ctikzset{multipoles/flipflop/c5/.initial={0}} -\ctikzset{multipoles/flipflop/c6/.initial={0}} -\ctikzset{multipoles/flipflop/cu/.initial={0}} -\ctikzset{multipoles/flipflop/cd/.initial={0}} -% pin negation circle flags -\ctikzset{multipoles/flipflop/n1/.initial={0}} -\ctikzset{multipoles/flipflop/n2/.initial={0}} -\ctikzset{multipoles/flipflop/n3/.initial={0}} -\ctikzset{multipoles/flipflop/n4/.initial={0}} -\ctikzset{multipoles/flipflop/n5/.initial={0}} -\ctikzset{multipoles/flipflop/n6/.initial={0}} -\ctikzset{multipoles/flipflop/nu/.initial={0}} -\ctikzset{multipoles/flipflop/nd/.initial={0}} - - -% Thanks to @marmot -\tikzset{flipflop def/.code=\pgfqkeys{\circuitikzbasekey/multipoles/flipflop}{#1}} - -% default set of flip flops -\tikzset{ - % async - latch/.style={flipflop, flipflop def={t1=D, t6=Q, t3=CLK, t4=\ctikztextnot{Q}}}, - flipflop SR/.style={flipflop, flipflop def={t1=S, t3=R, t6=Q, t4=\ctikztextnot{Q}}}, - % sync - flipflop D/.style={flipflop, flipflop def={t1=D, t6=Q, c3=1, t4=\ctikztextnot{Q}}}, - flipflop T/.style={flipflop, flipflop def={t1=T, t6=Q, c3=1, t4=\ctikztextnot{Q}}}, - flipflop JK/.style={flipflop, flipflop def={t1=J, t3=K, c2=1, t6=Q, t4=\ctikztextnot{Q}}}, - % additional features - add async SR/.style={flipflop def={tu={\ctikztextnot{SET}}, td={\ctikztextnot{RST}}}}, - dot on notQ/.style={flipflop def={t4={Q}, n4=1}}, -} - -% -% commodity macro to draw the clock wedges. They leave the size of the -% wedge in \pgf@circ@res@temp so that a possible label can be displaced. -% -\def\pgf@circ@do@wedge@left{ - \pgf@circ@res@temp=0pt\relax - \ifnum\ctikzvalof{multipoles/flipflop/c\the\pgf@circ@count@c}>0 - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step+\wedge}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\wedge}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step-\wedge}} - \pgfusepath{stroke} - \pgf@circ@res@temp=\wedge - \fi -} -\def\pgf@circ@do@wedge@right{ - \pgf@circ@res@temp=0pt\relax - \ifnum\ctikzvalof{multipoles/flipflop/c\the\pgf@circ@count@c}>0 - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step+\wedge}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\wedge}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step-\wedge}} - \pgfusepath{stroke} - \pgf@circ@res@temp=-\wedge - \fi -} -\def\pgf@circ@do@wedge@up{ - \pgf@circ@res@temp=0pt\relax - \ifnum\ctikzvalof{multipoles/flipflop/cu}>0 - \pgfpathmoveto{\pgfpoint{-\wedge}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up-\wedge}} - \pgfpathlineto{\pgfpoint{\wedge}{\pgf@circ@res@up}} - \pgfusepath{stroke} - \pgf@circ@res@temp=-\wedge - \fi -} -\def\pgf@circ@do@wedge@down{ - \pgf@circ@res@temp=0pt\relax - \ifnum\ctikzvalof{multipoles/flipflop/cd}>0 - \pgfpathmoveto{\pgfpoint{-\wedge}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down+\wedge}} - \pgfpathlineto{\pgfpoint{\wedge}{\pgf@circ@res@down}} - \pgfusepath{stroke} - \pgf@circ@res@temp=\wedge - \fi -} -% generic flip-flop shape -\pgfdeclareshape{flipflop}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{flipflops}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}} - \savedmacro\numpins{\def\numpins{6}} - \savedanchor\centerpoint{% - \pgf@x=-.5\wd\pgfnodeparttextbox% - \pgf@y=-.5\ht\pgfnodeparttextbox% - \advance\pgf@y by+.5\dp\pgfnodeparttextbox% - }% - \savedanchor\origin{\pgfpoint{0pt}{0pt}} - \anchor{center}{\origin} - \anchor{text}{\centerpoint}% to adjust text - \saveddimen\height{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{((\numpins) - *\ctikzvalof{multipoles/flipflop/pin spacing})*\pgf@circ@scaled@Rlen/2}% - }% - \saveddimen{\chipspacing}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/flipflop/pin spacing}}} - \saveddimen{\width}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/flipflop/width}}} - \saveddimen{\extshift}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/external pins width}}} - % standard anchors - \savedanchor\northwest{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@y{0.5*((\numpins) - *\ctikzvalof{multipoles/flipflop/pin spacing})*\pgf@circ@scaled@Rlen/2}% - \pgfmathsetlength\pgf@x{-0.5*\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/flipflop/width}} - } - \anchor{dot}{\northwest - \pgfmathsetlength\pgf@x{\pgf@x + 0.3*\chipspacing} - \pgfmathsetlength\pgf@y{\pgf@y - 0.3*\chipspacing} - } - \anchor{nw}{\northwest} - \anchor{ne}{\northwest\pgf@x=-\pgf@x} - \anchor{se}{\northwest\pgf@x=-\pgf@x\pgf@y=-\pgf@y} - \anchor{sw}{\northwest\pgf@y=-\pgf@y} - \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{n}{\northwest\pgf@x=0pt } - \anchor{e}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt } - \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{w}{\northwest\pgf@y=0pt } - \anchor{north}{\northwest\pgf@x=0pt } - \anchor{east}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt } - \anchor{south}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{west}{\northwest\pgf@y=0pt } - % upper and lower pin - \anchor{up}{\northwest\pgf@x=0pt\advance\pgf@y by\extshift } - \anchor{down}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y\advance\pgf@y by-\extshift} - \anchor{bup}{\northwest\pgf@x=0pt } - \anchor{bdown}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y} - % start drawing - \backgroundpath{% - \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 - \pgf@circ@res@step = \ctikzvalof{multipoles/flipflop/pin spacing}\pgf@circ@scaled@Rlen - \pgf@circ@res@other = \ctikzvalof{multipoles/external pins width}\pgf@circ@scaled@Rlen - \pgfsetcolor{\ctikzvalof{color}} - \pgfscope% (for the line width) - \pgf@circ@setlinewidth{multipoles}{\pgflinewidth} - \pgfpathrectanglecorners{\pgfpoint{-\width/2}{-\height/2}}{\pgfpoint{\width/2}{\height/2}}% - \pgf@circ@draworfill - \pgfusepath{stroke}% - \endpgfscope - % Adding the pin number - \pgf@circ@count@a=\numpins\relax - \divide\pgf@circ@count@a by 2 \pgf@circ@count@b=\pgf@circ@count@a - % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080 - \ifpgf@circuit@chip@straightnumbers - \pgfgettransformentries\a\b\temp\temp\temp\temp - \pgfmathsetmacro{\rot}{-atan2(\b,\a)} - \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)} - \else - \pgfmathsetmacro{\rot}{0} - \pgfmathsetmacro{\quadrant}{0} - \fi - \def\pgf@circ@strut{\vrule width 0pt height 1em depth 0.4em\relax} - % text - \def\mytext{\ctikzvalof{multipoles/flipflop/font}\space - \ctikzvalof{multipoles/flipflop/t\the\pgf@circ@count@c}% - \pgf@circ@strut\space} - % \typeout{TEXT\space\mytext} - \pgfmathloop% - \def\wedge{\ctikzvalof{multipoles/flipflop/clock wedge size}\pgf@circ@res@step} - \pgf@circ@res@temp=0pt\relax - \ifnum\pgf@circ@count@a>0 - \ifcase\quadrant % rotation 0 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgf@circ@do@wedge@left - % \typeout{TEXT Left Q1\space\mytext} - \pgftext[left, - at=\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@temp}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgf@circ@do@wedge@right - \pgftext[right, - at=\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@temp}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - \or % rotation -90 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgf@circ@do@wedge@left - \pgftext[top, - at=\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@temp}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgf@circ@do@wedge@right - \pgftext[bottom, - at=\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@temp}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - \or %rotation 180 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgf@circ@do@wedge@left - \pgftext[right, - at=\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@temp}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgf@circ@do@wedge@right - \pgftext[left, - at=\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@temp}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - \or % rotation +90 - % left - \pgf@circ@count@c=\pgf@circ@count@a - \pgf@circ@do@wedge@left - \pgftext[bottom, - at=\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@temp}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - % right - \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \pgf@circ@do@wedge@right - \pgftext[top, - at=\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@temp}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}, - rotate=\rot]{\mytext} - \fi - \advance\pgf@circ@count@a-1\relax% - \repeatpgfmathloop - % Now the up and down text - % up - \def\mytext{\ctikzvalof{multipoles/flipflop/fontud}\space\pgf@circ@strut\ctikzvalof{multipoles/flipflop/tu}\space} - \pgf@circ@do@wedge@up - \ifcase\quadrant % rotation 0 - \pgftext[top, - at=\pgfpoint{0pt}{\pgf@circ@res@up+\pgf@circ@res@temp}, - rotate=\rot]{\mytext} - \or % rotation -90 - \pgftext[right, - at=\pgfpoint{0pt}{\pgf@circ@res@up+\pgf@circ@res@temp}, - rotate=\rot]{\mytext} - \or %rotation 180 - \pgftext[bottom, - at=\pgfpoint{0pt}{\pgf@circ@res@up+\pgf@circ@res@temp}, - rotate=\rot]{\mytext} - \or % rotation +90 - \pgftext[left, - at=\pgfpoint{0pt}{\pgf@circ@res@up+\pgf@circ@res@temp}, - rotate=\rot]{\mytext} - \fi - % down - \def\mytext{\ctikzvalof{multipoles/flipflop/fontud}\space\pgf@circ@strut\ctikzvalof{multipoles/flipflop/td}\space} - \pgf@circ@do@wedge@down - \ifcase\quadrant % rotation 0 - \pgftext[bottom, - at=\pgfpoint{0pt}{\pgf@circ@res@down+\pgf@circ@res@temp}, - rotate=\rot]{\mytext} - \or % rotation -90 - \pgftext[left, - at=\pgfpoint{0pt}{\pgf@circ@res@down+\pgf@circ@res@temp}, - rotate=\rot]{\mytext} - \or %rotation 180 - \pgftext[top, - at=\pgfpoint{0pt}{\pgf@circ@res@down+\pgf@circ@res@temp}, - rotate=\rot]{\mytext} - \or % rotation +90 - \pgftext[right, - at=\pgfpoint{0pt}{\pgf@circ@res@down+\pgf@circ@res@temp}, - rotate=\rot]{\mytext} - \fi - % external pins - \ifdim\pgf@circ@res@other>0pt - \pgfscope - \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth} - \pgf@circ@count@a=\numpins\relax - \divide\pgf@circ@count@a by 2 \pgf@circ@count@b=\pgf@circ@count@a - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - % left side pins - \pgf@circ@count@c=\pgf@circ@count@a - %% we draw the pin only if it's defined either a text, a clock wedge or a not pin - %% Or'ing tests in core TeX is tough - \edef\@@or{0} - % Just expand the key the minimum needed - \edef\@@tmp{x\unexpandedvalueof{/tikz/circuitikz/multipoles/flipflop/t\the\pgf@circ@count@c}}\edef\@@x{x} - \ifx\@@tmp\@@x\else\edef\@@or{1}\fi - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/c\the\pgf@circ@count@c}} - \ifnum\@@tmp>0\edef\@@or{1}\fi - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/n\the\pgf@circ@count@c}} - \ifnum\@@tmp>0\edef\@@or{1}\fi - \ifnum\@@or>0 - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfusepath{stroke} - \fi - % right side pins - \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \edef\@@or{0} - \edef\@@tmp{x\unexpandedvalueof{/tikz/circuitikz/multipoles/flipflop/t\the\pgf@circ@count@c}}\edef\@@x{x} - \ifx\@@tmp\@@x\else\edef\@@or{1}\fi - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/c\the\pgf@circ@count@c}} - \ifnum\@@tmp>0\edef\@@or{1}\fi - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/n\the\pgf@circ@count@c}} - \ifnum\@@tmp>0\edef\@@or{1}\fi - % \typeout{TEST\space\@@tmp\space\@@x} - \ifnum\@@or>0 - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfusepath{stroke} - \fi - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop - % up side - \edef\@@or{0} - \edef\@@tmp{x\unexpandedvalueof{/tikz/circuitikz/multipoles/flipflop/tu}}\edef\@@x{x} - \ifx\@@tmp\@@x\else\edef\@@or{1}\fi - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/cu}} - \ifnum\@@tmp>0\edef\@@or{1}\fi - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/nu}} - \ifnum\@@tmp>0\edef\@@or{1}\fi - % \typeout{TEST\space\@@tmp\space\@@x} - \ifnum\@@or>0 - \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up+\pgf@circ@res@other}} - \pgfusepath{stroke} - \fi - % down side - \edef\@@or{0} - \edef\@@tmp{x\unexpandedvalueof{/tikz/circuitikz/multipoles/flipflop/td}}\edef\@@x{x} - \ifx\@@tmp\@@x\else\edef\@@or{1}\fi - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/cd}} - \ifnum\@@tmp>0\edef\@@or{1}\fi - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/nu}} - \ifnum\@@tmp>0\edef\@@or{1}\fi - % \typeout{TEST\space\@@tmp\space\@@x} - \ifnum\@@or>0 - \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down-\pgf@circ@res@other}} - \pgfusepath{stroke} - \fi - \endpgfscope - \fi % external pin width >0 - % - % draw "inverting" circles on outputs, they must be last - % - \pgfscope - \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth} - \pgf@circ@count@a=\numpins\relax - \divide\pgf@circ@count@a by 2 \pgf@circ@count@b=\pgf@circ@count@a - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - % left side pins - \pgf@circ@count@c=\pgf@circ@count@a - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/n\the\pgf@circ@count@c}} - \ifnum\@@tmp>0\pgfscope - \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfnode{ocirc}{east}{}{\thisshape-N\the\pgf@circ@count@c}{\pgfusepath{stroke}} - \endpgfscope\fi - % right side pins - \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/n\the\pgf@circ@count@c}} - \ifnum\@@tmp>0\pgfscope - \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfnode{ocirc}{west}{}{\thisshape-N\the\pgf@circ@count@c}{\pgfusepath{stroke}} - \endpgfscope\fi - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop - % up side - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/nu}} - \ifnum\@@tmp>0\pgfscope - \pgftransformshift{\pgfpoint{0pt}{\pgf@circ@res@up}} - \pgfnode{ocirc}{south}{}{\thisshape-Nu}{\pgfusepath{stroke}} - \endpgfscope\fi - % down side - \edef\@@tmp{\ctikzvalof{multipoles/flipflop/nd}} - \ifnum\@@tmp>0\pgfscope - \pgftransformshift{\pgfpoint{0pt}{\pgf@circ@res@down}} - \pgfnode{ocirc}{north}{}{\thisshape-Nd}{\pgfusepath{stroke}} - \endpgfscope\fi - \endpgfscope - }% - % \pgf@sh@s@ contains all the code for the shape - % and is executed just before a node is drawn. - \pgfutil@g@addto@macro\pgf@sh@s@flipflop{% - % Start with the maximum pin number and go backwards. - \pgf@circ@count@a=\numpins\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@flipflop@pin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@dippinanchor{\the\pgf@circ@count@a}{1}% - } - \expandafter\xdef\csname pgf@anchor@flipflop@bpin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@dippinanchor{\the\pgf@circ@count@a}{0}% - } - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop% - }% -} - -% -% MUX-DEMUXES -% -% Thanks to @marmot -\tikzset{muxdemux def/.code=\pgfqkeys{\circuitikzbasekey/multipoles/muxdemux}{#1}} -\tikzset{demux/.style={muxdemux, muxdemux def={Lh=4, Rh=8, NL=1, NB=3, NR=8}}} -\tikzset{one bit adder/.style={muxdemux, - muxdemux def={Lh=4, NL=2, Rh=2, NR=1, NB=1, w=1.5, - inset w=0.5, inset Lh=2, inset Rh=1.5}}} -\tikzset{ALU/.style={muxdemux, - muxdemux def={Lh=5, NL=2, Rh=2, NR=1, NB=2, NT=1, w=2, - inset w=1, inset Lh=2, inset Rh=0, square pins=1}}} -%generic mux-demux shape -\pgfdeclareshape{muxdemux}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{muxdemuxes}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}} - % pins on the four sides - % \savedmacro\NL{% - % \pgf@circ@count@a=\ctikzvalof{multipoles/muxdemux/NL}% - % \def\NL{\the\pgf@circ@count@a} - % } - \savedmacro\NL{\edef\NL{\ctikzvalof{multipoles/muxdemux/NL}}} - \savedmacro\NR{\edef\NR{\ctikzvalof{multipoles/muxdemux/NR}}} - \savedmacro\NT{\edef\NT{\ctikzvalof{multipoles/muxdemux/NT}}} - \savedmacro\NB{\edef\NB{\ctikzvalof{multipoles/muxdemux/NB}}} - \savedmacro\squarepins{\edef\squarepins{\ctikzvalof{multipoles/muxdemux/square pins}}} - % topleft and topright sizes - \savedanchor{\topleft}{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@y{\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/Lh}*\pgf@circ@scaled@Rlen/2} - \pgfmathsetlength\pgf@x{-\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/w}*\pgf@circ@scaled@Rlen/2} - } - \savedanchor{\topright}{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@y{\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/Rh}*\pgf@circ@scaled@Rlen/2} - \pgfmathsetlength\pgf@x{\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/w}*\pgf@circ@scaled@Rlen/2} - } - \savedanchor{\insetnortheast}{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@y{\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/inset Lh}*\pgf@circ@scaled@Rlen/2} - \pgfmathsetlength\pgf@x{-\ctikzvalof{multipoles/muxdemux/base len}* - (\ctikzvalof{multipoles/muxdemux/w}-2*\ctikzvalof{multipoles/muxdemux/inset w})*\pgf@circ@scaled@Rlen/2} - } - \saveddimen{\insethright}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/inset Rh}*\pgf@circ@scaled@Rlen/2}} - \saveddimen{\extshift}{ - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/external pins width}}} - \savedanchor{\northwest}{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@y{\ctikzvalof{multipoles/muxdemux/base len}*max(\ctikzvalof{multipoles/muxdemux/Rh},\ctikzvalof{multipoles/muxdemux/Lh})*\pgf@circ@scaled@Rlen/2} - \pgfmathsetlength\pgf@x{-\ctikzvalof{multipoles/muxdemux/base len}*\ctikzvalof{multipoles/muxdemux/w}*\pgf@circ@scaled@Rlen/2} - } - \anchor{nw}{\northwest} - \anchor{ne}{\northwest\pgf@x=-\pgf@x} - \anchor{se}{\northwest\pgf@x=-\pgf@x\pgf@y=-\pgf@y} - \anchor{sw}{\northwest\pgf@y=-\pgf@y} - \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{n}{\northwest\pgf@x=0pt } - \anchor{e}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt } - \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{w}{\northwest\pgf@y=0pt } - \anchor{north}{\northwest\pgf@x=0pt } - \anchor{east}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt } - \anchor{south}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{west}{\northwest\pgf@y=0pt } - \anchor{center}{\pgfpointorigin} - \anchor{top right}{\topright} - \anchor{bottom right}{\topright\pgf@y=-\pgf@y} - \anchor{right}{\topright\pgf@y=0pt\relax} - \anchor{top left}{\topleft} - \anchor{bottom left}{\topleft\pgf@y=-\pgf@y} - \anchor{left}{\topleft\pgf@y=0pt\relax} - \anchor{top}{\topright\pgf@ya=\pgf@y \topleft \advance\pgf@y by \pgf@ya - \divide\pgf@y by 2 \pgf@x=0pt\relax} - \anchor{bottom}{\topright\pgf@ya=\pgf@y \topleft \advance\pgf@y by \pgf@ya - \divide\pgf@y by 2 \pgf@y=-\pgf@y \pgf@x=0pt\relax} - \anchor{inset top right}{\pgf@ya=\insethright\insetnortheast\advance\pgf@y by -0.5\pgf@ya} - \anchor{inset bottom right}{\pgf@ya=\insethright\insetnortheast\advance\pgf@y by -0.5\pgf@ya\pgf@y=-\pgf@y} - \anchor{inset right}{\insetnortheast\pgf@y=0pt\relax} - \anchor{inset top left}{\insetnortheast\pgf@ya=\pgf@y\topleft\pgf@y=\pgf@ya} - \anchor{inset bottom left}{\insetnortheast\pgf@ya=\pgf@y\topleft\pgf@y=-\pgf@ya} - \anchor{inset left}{\topleft\pgf@y=0pt\relax} - \anchor{inset bottom}{\topleft\pgf@xa=\pgf@x\pgf@ya=\insethright - \insetnortheast\pgf@xb=\pgf@x\pgf@yb=\pgf@x - \pgfpoint{(\pgf@xa+\pgf@xb)/2}{-\pgf@ya+\pgf@yb/2}} - \anchor{inset top}{\topleft\pgf@xa=\pgf@x\pgf@ya=\insethright - \insetnortheast\pgf@xb=\pgf@x\pgf@yb=\pgf@x - \pgfpoint{(\pgf@xa+\pgf@xb)/2}{\pgf@ya-\pgf@yb/2}} - \anchor{inset center}{\topleft\pgf@xa=\pgf@x\insetnortheast - \advance\pgf@x by \pgf@xa \divide\pgf@x by 2 \pgf@y=0pt\relax} - \anchor{narrow center}{\insetnortheast\pgf@xa=\pgf@x\topright - \advance\pgf@x by \pgf@xa \divide\pgf@x by 2\pgf@y=0pt\relax} - \anchor{center up}{\topright\pgf@ya=\pgf@y \topleft \advance\pgf@y by \pgf@ya - \divide\pgf@y by 2 - \pgf@yb = \insethright \advance\pgf@y by \pgf@yb - \divide\pgf@y by 2 \pgf@x=0pt\relax} - \anchor{center down}{\topright\pgf@ya=\pgf@y \topleft \advance\pgf@y by \pgf@ya - \divide\pgf@y by 2 - \pgf@yb = \insethright \advance\pgf@y by \pgf@yb - \divide\pgf@y by 2 \pgf@y=-\pgf@y \pgf@x=0pt\relax} - \anchor{text}{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen} - \pgfmathsetlength\pgf@x{\ctikzvalof{multipoles/muxdemux/base len}* - \ctikzvalof{multipoles/muxdemux/inset w}*\pgf@circ@scaled@Rlen/2} - \advance\pgf@x by -.5\wd\pgfnodeparttextbox% - \pgf@y=-.5\ht\pgfnodeparttextbox% - \advance\pgf@y by+.5\dp\pgfnodeparttextbox% - }% - \backgroundpath{% - \topleft - \pgf@circ@res@up = \pgf@y - \pgf@circ@res@down = -\pgf@y - \pgf@circ@res@left = \pgf@x - \topright - \pgf@circ@res@other = \pgf@y - \pgf@circ@res@right = \pgf@x - \insetnortheast - \pgf@circ@res@step = \pgf@x - \pgf@circ@res@temp = \pgf@y - % - % external block - % - \pgfscope% (for the line width) - \pgf@circ@setlinewidth{multipoles}{\pgflinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@other}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - % inset, starting down - \ifdim\pgf@circ@res@temp>0pt % inset - % \typeout{INSETw\space\the\pgf@circ@res@right\space x\space\the\pgf@circ@res@step\space y\space\the\pgf@circ@res@temp} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\insethright}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\insethright}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}} - \fi - \pgfpathclose - \pgf@circ@draworfill - \endpgfscope - % now we have to draw the pins, if needed - \ifdim\extshift>0pt\ifpgfcirc@draw@leads\pgfscope % let's avoid too much indent - % Ok, we have to draw the leads (a.k.a. pins) - \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth} - % We mimic the anchors here --- probably there is a better way - % left pins - \ifnum\NL>0\relax % not indented, closed on \repeatpgfmathloop - \pgf@circ@count@a=\NL\relax - \pgf@circ@count@b=\NL \divide\pgf@circ@count@b by 2 % see https://tex.stackexchange.com/questions/146523/why-does-numexpr-integer-division-round-rather-than-truncate - \topleft\pgf@circ@res@left=\pgf@x \pgf@circ@res@up=\pgf@y - \insetnortheast\pgf@circ@res@right=\pgf@x \pgf@circ@res@down=\pgf@y - \ifdim\pgf@circ@res@down>0pt % check if we have an inset - % we have to check oddity - \ifodd\NL - \ifnum\NL=1 - % only centerpin, step should not be used, but anyway... - \pgfmathsetlength{\pgf@circ@res@step}{2*(\pgf@circ@res@up-\pgf@circ@res@down)/(\NL)} - \else - \pgfmathsetlength{\pgf@circ@res@step}{2*(\pgf@circ@res@up-\pgf@circ@res@down)/(\NL-1)} - \fi - \else - \pgfmathsetlength{\pgf@circ@res@step}{2*(\pgf@circ@res@up-\pgf@circ@res@down)/\NL} - \fi - \else % no inset - \pgfmathsetlength{\pgf@circ@res@step}{2*\pgf@circ@res@up/\NL} - \fi - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - %%%%% - \ifdim\pgf@circ@res@down>0pt % check if we have an inset - \ifnum\pgf@circ@count@a>\pgf@circ@count@b\relax - % for lower pins we have to shift them down - % \typeout{DEBUGTEST1\space #1\space entering\space \NL} - \ifodd\NL - % odd number of pins - \ifnum\pgf@circ@count@a=\numexpr\the\pgf@circ@count@b+1\relax - % centerpin! - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \ifnum\squarepins>0 - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\extshift}{0pt}} - \else - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\extshift}{0pt}} - \fi - \else - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(0.5-\pgf@circ@count@a+1)*\pgf@circ@res@step-2*\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\extshift}{\pgf@circ@res@up+(0.5-\pgf@circ@count@a+1)*\pgf@circ@res@step-2*\pgf@circ@res@down}} - \fi - \else - % even numer of pins: just go down - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(0.5-\pgf@circ@count@a)*\pgf@circ@res@step-2*\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\extshift}{\pgf@circ@res@up+(0.5-\pgf@circ@count@a)*\pgf@circ@res@step-2*\pgf@circ@res@down}} - \fi - \else - % nothing need for #1<=NL/2 - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(0.5-\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\extshift}{\pgf@circ@res@up+(0.5-\pgf@circ@count@a)*\pgf@circ@res@step}} - \fi - \else - % no inset - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(0.5-\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\extshift}{\pgf@circ@res@up+(0.5-\pgf@circ@count@a)*\pgf@circ@res@step}} - \fi - %%%%% - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop\fi% - % right pins - \ifnum\NR>0\pgf@circ@count@a=\NR\relax - \pgfmathloop% - \topright\pgf@circ@res@right=\pgf@x \pgf@circ@res@up=\pgf@y - \pgfmathsetlength{\pgf@circ@res@step}{2*\pgf@circ@res@up/\NR} - \ifnum\pgf@circ@count@a>0 - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(0.5-\pgf@circ@count@a)*\pgf@circ@res@step}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\extshift}{\pgf@circ@res@up+(0.5-\pgf@circ@count@a)*\pgf@circ@res@step}} - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop\fi% - % bottom pins - \ifnum\NB>0\pgf@circ@count@a=\NB\relax %%% - \pgfmathloop% - \topleft\pgf@circ@res@left=\pgf@x \pgf@circ@res@up=\pgf@y - \topright\pgf@circ@res@right=\pgf@x \pgf@circ@res@down=\pgf@y - \pgfmathsetlength{\pgf@circ@res@step}{2*\pgf@circ@res@right/\NB} - \pgfmathsetlength{\pgf@circ@res@other}{(\pgf@circ@res@down-\pgf@circ@res@up)/(\pgf@circ@res@right-\pgf@circ@res@left)*\pgf@circ@res@step} - \ifnum\pgf@circ@count@a>0 - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+(\pgf@circ@count@a-0.5)*\pgf@circ@res@step} - {-\pgf@circ@res@down+(\NB-\pgf@circ@count@a+0.5)*\pgf@circ@res@other}} - \ifnum\squarepins>0 - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+(\pgf@circ@count@a-0.5)*\pgf@circ@res@step} - {-max(\pgf@circ@res@down, \pgf@circ@res@up)-\extshift}} - \else - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+(\pgf@circ@count@a-0.5)*\pgf@circ@res@step} - {-\pgf@circ@res@down+(\NB-\pgf@circ@count@a+0.5)*\pgf@circ@res@other-\extshift}} - \fi - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop\fi% - % top pins - \ifnum\NT>0\pgf@circ@count@a=\NT\relax - \pgfmathloop% - \topleft\pgf@circ@res@left=\pgf@x \pgf@circ@res@up=\pgf@y - \topright\pgf@circ@res@right=\pgf@x \pgf@circ@res@down=\pgf@y - \pgfmathsetlength{\pgf@circ@res@step}{2*\pgf@circ@res@right/\NT} - \pgfmathsetlength{\pgf@circ@res@other}{(\pgf@circ@res@down-\pgf@circ@res@up)/(\pgf@circ@res@right-\pgf@circ@res@left)*\pgf@circ@res@step} - \ifnum\pgf@circ@count@a>0 - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+(\pgf@circ@count@a-0.5)*\pgf@circ@res@step} - {\pgf@circ@res@down-(\NT-\pgf@circ@count@a+0.5)*\pgf@circ@res@other}} - \ifnum\squarepins>0 - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+(\pgf@circ@count@a-0.5)*\pgf@circ@res@step} - {max(\pgf@circ@res@down, \pgf@circ@res@up)+\extshift}} - \else - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+(\pgf@circ@count@a-0.5)*\pgf@circ@res@step} - {\pgf@circ@res@down-(\NT-\pgf@circ@count@a+0.5)*\pgf@circ@res@other+\extshift}} - \fi - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop\fi% - % end drawing pins; stroke them - \pgfusepath{stroke} - \endpgfscope\fi\fi - } - % let's start adding anchors - \pgfutil@g@addto@macro\pgf@sh@s@muxdemux{% - % left side anchors - \pgf@circ@count@a=\NL\relax - % \typeout{STARTGENERATINGLEFT\space\the\pgf@circ@count@a\space FOR\space\thisshape\space\NL} - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - % \typeout{GENERATINGLEFT\space\the\pgf@circ@count@a\space FOR\space\thisshape\space\NL} - % we will create two anchors per pin: the "normal one" like `lpin 1` for the - % external leads, and the "border one" like `blpin 1` for internal ones. - % they will coincide if `external pins width` is set to 0. - \expandafter\xdef\csname pgf@anchor@muxdemux@lpin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@muxdemux@L@anchor{\the\pgf@circ@count@a}{1}% - } - \expandafter\xdef\csname pgf@anchor@muxdemux@blpin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@muxdemux@L@anchor{\the\pgf@circ@count@a}{0}% - } - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop% - % right anchors - \pgf@circ@count@a=\NR\relax - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - % we will create two anchors per pin: the "normal one" like `rpin 1` for the - % external leads, and the "border one" like `brpin 1` for internal ones. - % they will coincide if `external pins width` is set to 0. - \expandafter\xdef\csname pgf@anchor@muxdemux@rpin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@muxdemux@R@anchor{\the\pgf@circ@count@a}{1}% - } - \expandafter\xdef\csname pgf@anchor@muxdemux@brpin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@muxdemux@R@anchor{\the\pgf@circ@count@a}{0}% - } - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop% - % bottom anchors - \pgf@circ@count@a=\NB\relax - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - % we will create two anchors per pin: the "normal one" like `bpin 1` for the - % external leads, and the "border one" like `bbpin 1` for internal ones. - % they will coincide if `external pins width` is set to 0. - \expandafter\xdef\csname pgf@anchor@muxdemux@bpin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@muxdemux@B@anchor{\the\pgf@circ@count@a}{1}% - } - \expandafter\xdef\csname pgf@anchor@muxdemux@bbpin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@muxdemux@B@anchor{\the\pgf@circ@count@a}{0}% - } - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop% - % top anchors - \pgf@circ@count@a=\NT\relax - \pgfmathloop% - \ifnum\pgf@circ@count@a>0 - % we will create two anchors per pin: the "normal one" like `tpin 1` for the - % external leads, and the "border one" like `btpin 1` for internal ones. - % they will coincide if `external pins width` is set to 0. - \expandafter\xdef\csname pgf@anchor@muxdemux@tpin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@muxdemux@T@anchor{\the\pgf@circ@count@a}{1}% - } - \expandafter\xdef\csname pgf@anchor@muxdemux@btpin\space\the\pgf@circ@count@a\endcsname{% - \noexpand\pgf@circ@muxdemux@T@anchor{\the\pgf@circ@count@a}{0}% - } - \advance\pgf@circ@count@a by -1\relax% - \repeatpgfmathloop% - }% -} - -%% left anchors for muxdemux - -\def\pgf@circ@muxdemux@L@anchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin - \topleft - \pgf@xa=\pgf@x - \pgf@ya=\pgf@y - \insetnortheast - \pgf@xb=\pgf@x - \pgf@yb=\pgf@y - \ifnum#1>\NL - \PackageError{circuitikz}{% - You requested left pin #1 for mux/demux shape \thisshape\space \MessageBreak - which has been defined with \NL\space left pins% - }{Please check the manual about mux/demux shapes; if you press return I'll try to continue} - \fi - \pgf@circ@count@a=\NL \divide\pgf@circ@count@a by 2 % see https://tex.stackexchange.com/questions/146523/why-does-numexpr-integer-division-round-rather-than-truncate - % \typeout{LEFT \the\pgf@xa \space \the\pgf@ya \space \NL} - \ifnum\NL>1 - \ifdim\pgf@yb>0pt % check if we have an inset - % we have to check oddity - \ifodd\NL - \pgfmathsetlength{\pgf@circ@res@step}{2*(\pgf@ya-\pgf@yb)/(\NL-1)} - \else - \pgfmathsetlength{\pgf@circ@res@step}{2*(\pgf@ya-\pgf@yb)/\NL} - \fi - \else % no inset - \pgfmathsetlength{\pgf@circ@res@step}{2*\pgf@ya/\NL} - \fi - \ifdim\pgf@yb>0pt % check if we have an inset - \ifnum#1>\pgf@circ@count@a\relax - % for lower pins we have to shift them down - % \typeout{DEBUGTEST1\space #1\space entering\space \NL} - \ifodd\NL - % odd number of pins - \ifnum#1=\numexpr\the\pgf@circ@count@a+1\relax - % centerpin! - \ifnum#2=0\relax - \pgfpoint{\pgf@xb}{0pt} - \else - \ifnum\squarepins>0 - \pgfpoint{\pgf@xa-#2*\extshift}{0pt} - \else - \pgfpoint{\pgf@xb-#2*\extshift}{0pt} - \fi - \fi - \else - \pgfpoint{\pgf@xa-#2*\extshift}{\pgf@ya+(0.5-#1+1)*\pgf@circ@res@step-2*\pgf@yb} - \fi - \else - % even numer of pins: just go down - \pgfpoint{\pgf@xa-#2*\extshift}{\pgf@ya+(0.5-#1)*\pgf@circ@res@step-2*\pgf@yb} - \fi - \else - % nothing need for #1<=NL/2 - \pgfpoint{\pgf@xa-#2*\extshift}{\pgf@ya+(0.5-#1)*\pgf@circ@res@step} - \fi - \else - % no inset - \pgfpoint{\pgf@xa-#2*\extshift}{\pgf@ya+(0.5-#1)*\pgf@circ@res@step} - \fi - \else - \pgfpoint{\pgf@xa-#2*\extshift}{0pt} - \fi -} - -% right anchors -\def\pgf@circ@muxdemux@R@anchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin - \topright - \pgf@xa=\pgf@x - \pgf@ya=\pgf@y - \ifnum#1>\NR - \PackageError{circuitikz}{% - You requested right pin #1 for mux/demux shape \thisshape\space \MessageBreak - which has been defined with \NR\space right pins% - }{Please check the manual about mux/demux shapes; if you press return I'll try to continue} - \fi - \ifnum\NR>1 - \pgfmathsetlength{\pgf@circ@res@step}{2*\pgf@ya/\NR} - \pgfpoint{\pgf@xa+#2*\extshift}{\pgf@ya+(0.5-#1)*\pgf@circ@res@step} - \else - \pgfpoint{\pgf@xa+#2*\extshift}{0pt} - \fi -} - -% bottom anchors -\def\pgf@circ@muxdemux@B@anchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin - \topleft - \pgf@xa=\pgf@x - \pgf@ya=\pgf@y - \topright - \pgf@xb=\pgf@x - \pgf@yb=\pgf@y - \ifnum#1>\NB - \PackageError{circuitikz}{% - You requested bottom pin #1 for mux/demux shape \thisshape\space \MessageBreak - which has been defined with \NB\space bottom pins% - }{Please check the manual about mux/demux shapes; if you press return I'll try to continue} - \fi - \ifnum\NB>0 - % \typeout{DEBUGTESTtopleft\space\the\pgf@ya \space topright\space\the\pgf@yb \space\NB} - \pgfmathsetlength{\pgf@circ@res@step}{2*\pgf@xb/\NB} - \pgfmathsetlength{\pgf@circ@res@other}{(\pgf@yb-\pgf@ya)/(\pgf@xb-\pgf@xa)*\pgf@circ@res@step} - \pgfmathsetlength\pgf@x{\pgf@xa+(#1-0.5)*\pgf@circ@res@step} - \ifnum#2=0\relax - \pgfmathsetlength\pgf@y{-\pgf@yb+(\NB-#1+0.5)*\pgf@circ@res@other} - \else - \ifnum\squarepins>0\relax - \pgfmathsetlength\pgf@y{-max(\pgf@ya,\pgf@yb)-\extshift} - \else - \pgfmathsetlength\pgf@y{-\pgf@yb+(\NB-#1+0.5)*\pgf@circ@res@other-\extshift} - \fi - \fi - \else - % should not happen, give the same as pin 1 anyway - \ifnum#2=0\relax - \pgfpoint{0pt}{-\pgf@yb+(\pgf@yb-\pgf@ya)/2} - \else - \pgfpoint{0pt}{-max(\pgf@ya,\pgf@yb)-\extshift} - \fi - \fi -} - -% top anchors -\def\pgf@circ@muxdemux@T@anchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin - \topleft - \pgf@xa=\pgf@x - \pgf@ya=\pgf@y - \topright - \pgf@xb=\pgf@x - \pgf@yb=\pgf@y - \ifnum#1>\NT - \PackageError{circuitikz}{% - You requested top pin #1 for mux/demux shape \thisshape\space \MessageBreak - which has been defined with \NT\space top pins% - }{Please check the manual about mux/demux shapes; if you press return I'll try to continue} - \fi - \ifnum\NT>0 - \pgfmathsetlength{\pgf@circ@res@step}{2*\pgf@xb/\NT} - \pgfmathsetlength{\pgf@circ@res@other}{(\pgf@yb-\pgf@ya)/(\pgf@xb-\pgf@xa)*\pgf@circ@res@step} - \pgfmathsetlength\pgf@x{\pgf@xa+(#1-0.5)*\pgf@circ@res@step} - \ifnum#2=0\relax - \pgfmathsetlength\pgf@y{\pgf@yb-(\NT-#1+0.5)*\pgf@circ@res@other} - \else - \ifnum\squarepins>0 - \pgfmathsetlength\pgf@y{max(\pgf@ya,\pgf@yb)+\extshift} - \else - \pgfmathsetlength\pgf@y{\pgf@yb-(\NT-#1+0.5)*\pgf@circ@res@other+\extshift} - \fi - \fi - \else - % should not happen, give the same as pin 1 anyway - \ifnum#2=0\relax - \pgfpoint{0pt}{\pgf@yb-(\pgf@yb-\pgf@ya)/2} - \else - \pgfpoint{0pt}{max(\pgf@ya,\pgf@yb)+\extshift} - \fi - \fi -} - -%% IEEE standard logic ports module -%% -%% Original multi-input code from John Kormylo at tex.stackexchange.com -%% Help by TheTeXnician <38565529+TheTeXnician@users.noreply.github.com> -%% Suggested idea and example code by Jason Sachs -%% Please see https://github.com/circuitikz/circuitikz/issues/383 for a lot of details -%% Most of the code, all errors and bugs by Romano Giannetti -%% Everything is in the same place here --- more or less; first step to move towards -%% a module interface for circutikz -%% - -% base parameters for ieeestd ports. - -\ctikzset{ieeestd ports/.is family} -% baselen is relative to pgfcirc@Rlen as ever; scaled if the class says so. -% the value of 0.4 is the standard pin distance for a port with height=num pins -% and matches the chip distance -\ctikzset{ieeestd ports/baselen/.initial=0.4} -% these are in term of baselen; width depends on height (fixed proportions) -\ctikzset{ieeestd ports/height/.initial=2} -\ctikzset{ieeestd ports/pin length/.initial=0.7} -% the standard "not" circle should be 1/6.5 of height (diameter); -% so radius/baselen=1/3.25/2 --- using 0.1 and no scaling is as a pole -\ctikzset{ieeestd ports/not radius/.initial=0.154} -\ctikzset{ieeestd ports/not radius fill/.initial=1}% change ony if you know why -% the suggested xnor distance is is 1.24, so 1.25/3.25/2 -% xor/xnor leads go full in in IEEE; let this be optional -\ctikzset{ieeestd ports/xor bar distance/.initial=0.192}% -\ctikzset{ieeestd ports/xor leads in/.initial=1}% -% -% base size of a small external schmitt symbol -% -\ctikzset{ieeestd ports/schmitt symbol size/.initial=0.3}% -% -% input management -% we are using the same /tikz/number inputs than the legacy ports -% -\tikzset{/tikz/inner inputs/.initial=0} % using 0 means that all inputs are inner -% -% integrate with the other logic ports -% -\ctikzset{logic ports/ieee/.code= {\pgf@circuit@europeanlogicportfalse - \tikzset{and port/.style={shape=ieeestd and port}}% - \tikzset{or port/.style={shape=ieeestd or port}}% - \tikzset{xor port/.style={shape=ieeestd xor port}}% - \tikzset{buffer port/.style={shape=ieeestd buffer port}}% - \tikzset{not port/.style={shape=ieeestd not port}}% - \tikzset{nand port/.style={shape=ieeestd nand port}}% - \tikzset{nor port/.style={shape=ieeestd nor port}}% - \tikzset{xnor port/.style={shape=ieeestd xnor port}}% - \tikzset{schmitt port/.style={shape=ieeestd schmitt port}}% - \tikzset{inv schmitt port/.style={shape=ieeestd schmitt port}}% -}} -\tikzset{ieee ports/.style = {\circuitikzbasekey/logic ports = ieee}} -% -% the base angle for the or port. See the drawings. This will not change with height -% -\pgfmathsetmacro{\pgf@circ@orangle}{atan(3.25/6.5)} -% \typeout{ANGLE-IS\space\pgf@circ@orangle} -\def\pgf@circ@ieeeport@input#1% #1 = \pgfmathcounter -{% - \ifnum#1>\inputs - \PackageError{circuitikz}{% - You requested input pin #1 for logic port shape \thisshape\space \MessageBreak - which has been defined with \inputs\space pins% - }{Please check the manual about logic ports; if you press return I'll try to continue} - \fi - \pgfmathsetlength{\pgf@circ@res@up}{(\inputs/2)*\pind+0.5*\pind}% pin "0", above the rack/port - \pgfextractx{\pgf@circ@res@left}{\bodyleft} - \pgf@circ@res@step=\pind - \pgf@y=\pgf@circ@res@up\advance\pgf@y by -#1\pgf@circ@res@step\relax - \pgf@x=\pgf@circ@res@left\advance\pgf@x by -\pinlen -}% - -% #1 = \pgfmathcounter #2=type -% type is 1 for and,nand; 2 for or,nor; 3 for xor,xnor -\def\pgf@circ@ieeeport@baseinput#1#2% -{% - \ifnum#1>\inputs - \PackageError{circuitikz}{% - You requested border input pin #1 for logic port shape \thisshape\space \MessageBreak - which has been defined with \inputs\space pins% - }{Please check the manual about logic ports; if you press return I'll try to continue} - \fi - % Find the vertical position (this is the same for any port) - \pgfmathsetlength{\pgf@circ@res@up}{(\inputs/2)*\pind+0.5*\pind}% pin "0", above the rack/port - \pgf@circ@res@step=\pind\advance\pgf@circ@res@up by -#1\pgf@circ@res@step\relax - % rack (extended) pins; they are the same for all the ports - % call K = (inputs-inner)/2, rounded up; pins on the rack are: - % above: 1..K (included) - % below: inputs-K..inputs - % Find the pins on the rack; they are 1... - \pgf@circ@count@a=\numexpr (\inputs - \inners)/2\relax % =K; numexpr rounds up! - \pgf@circ@count@b=\numexpr \inputs - \pgf@circ@count@a +1 \relax % =inputs - K +1 - % border anchors for rack should be ok - \pgfextractx{\pgf@circ@res@left}{\topleft} - \pgfextractx{\pgf@circ@res@right}{\bodyleft} - \pgf@y=\pgf@circ@res@up\pgf@x=\pgf@circ@res@left - % we have finished if we are in the rack - \ifnum #1 > \pgf@circ@count@a \ifnum #1 < \pgf@circ@count@b - % we are on the inner ports; we have to do the hard work here - % and and nand - \ifnum #2=1 - \relax % It's an and/nand, all border ports are on the rack line - \fi - % or and nor - \ifnum #2=2 - \pgfmathsetlength{\pgf@x}{\pgf@circ@res@right-2*\stdH*(1-cos(atan(\pgf@circ@res@up/(2*\stdH))))} - \fi - % xor and xnor - \ifnum #2=3\relax - \pgfmathsetlength{\pgf@x}{\pgf@circ@res@right-\xorbar-2*\stdH*(1-cos(atan(\pgf@circ@res@up/(2*\stdH))))} - \fi - \fi\fi -}% -% inner base ports for xor types port -% #1 = \pgfmathcounter #2=type -% type is 1 for and,nand; 2 for or,nor; 3 for xor,xnor -\def\pgf@circ@ieeeport@innerbaseinput#1% -{% - \ifnum#1>\inputs - \PackageError{circuitikz}{% - You requested border input pin #1 for logic port shape \thisshape\space \MessageBreak - which has been defined with \inputs\space pins% - }{Please check the manual about logic ports; if you press return I'll try to continue} - \fi - % Find the vertical position (this is the same for any port) - \pgfmathsetlength{\pgf@circ@res@up}{(\inputs/2)*\pind+0.5*\pind}% pin "0", above the rack/port - \pgf@circ@res@step=\pind\advance\pgf@circ@res@up by -#1\pgf@circ@res@step\relax - % rack (extended) pins; they are the same for all the ports - % call K = (inputs-inner)/2, rounded up; pins on the rack are: - % above: 1..K (included) - % below: inputs-K..inputs - % Find the pins on the rack; they are 1... - \pgf@circ@count@a=\numexpr (\inputs - \inners)/2\relax % =K; numexpr rounds up! - \pgf@circ@count@b=\numexpr \inputs - \pgf@circ@count@a +1 \relax % =inputs - K +1 - % border anchors for rack should be ok - \pgfextractx{\pgf@circ@res@left}{\topleft} - \pgfextractx{\pgf@circ@res@right}{\bodyleft} - \pgf@y=\pgf@circ@res@up\pgf@x=\pgf@circ@res@left - % we have finished if we are in the rack - \ifnum #1 > \pgf@circ@count@a \ifnum #1 < \pgf@circ@count@b - % we are on the inner ports; we have to do the hard work here - \pgfmathsetlength{\pgf@x}{\pgf@circ@res@right-2*\stdH*(1-cos(atan(\pgf@circ@res@up/(2*\stdH))))} - \fi\fi -}% - -%%% macro to find basic lenghts --- they leave it in \pgf@circ@res@temp -\def\pgf@circ@ieeestd@baselen{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen} - \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{ieeestd ports/baselen}*\pgf@circ@scaled@Rlen} -} -\def\pgf@circ@ieeestd@stdH{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen} - \pgfmathsetlength{\pgf@circ@res@temp}{0.5*\ctikzvalof{ieeestd ports/baselen}* - \ctikzvalof{ieeestd ports/height}*\pgf@circ@scaled@Rlen} -} -\def\pgf@circ@ieeestd@pinlen{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen} - \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{ieeestd ports/baselen}* - \ctikzvalof{ieeestd ports/pin length}*\pgf@circ@scaled@Rlen} -} -\def\pgf@circ@ieeestd@xorbar{% - \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}*\pgf@circ@Rlen} - \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{ieeestd ports/baselen}* - \ctikzvalof{ieeestd ports/xor bar distance}*\pgf@circ@scaled@Rlen} -} -%% Not circle -\def\pgf@circ@notradius{ - \pgf@circ@ieeestd@stdH % got the standard length. Notice that his is 3.25H for IEEE - \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{ieeestd ports/not radius}*\pgf@circ@res@temp} - % \typeout{NOTRADIUS\space\the\pgf@circ@res@temp} -} -%% Find (in ...@other) the height of the rack -\def\pgf@circ@findrackH{% - \pgf@circ@count@a=\pgfkeysvalueof{/tikz/number inputs}\relax% - \pgf@circ@count@b=\pgfkeysvalueof{/tikz/inner inputs}\relax% - \ifnum\pgf@circ@count@a=0 \pgf@circ@count@a=2\fi % default pins - \ifnum\pgf@circ@count@a<2 \pgf@circ@count@a=2\fi % - \ifnum\pgf@circ@count@b=0 \pgf@circ@count@b=\pgf@circ@count@a\fi% - \pgf@circ@ieeestd@stdH - \multiply\pgf@circ@res@temp by 2\relax% full height - \divide\pgf@circ@res@temp by \pgf@circ@count@b % the pin spacing - \pgfmathsetlength{\pgf@circ@res@other}{(\pgf@circ@count@a/2)*\pgf@circ@res@temp} %top of the rack/port - % \typeout{RACK-\thisshape\space\the\pgf@circ@res@other} -} -%% -\def\pgf@circ@find@ieeeport@up{% leave it in up - % Normal port limits - \pgf@circ@ieeestd@stdH - \pgfmathsetlength{\pgf@circ@res@up}{\pgf@circ@res@temp} - % rack top size - \pgf@circ@findrackH - \ifdim\pgf@circ@res@other > \pgf@circ@res@up - \pgf@circ@res@up=\pgf@circ@res@other - \else - \fi -} -\def\pgf@circ@find@ieeeport@left#1{% leave it in left; #1 is type - % Normal port limits - \pgf@circ@ieeestd@stdH - \pgfmathsetlength{\pgf@circ@res@left}{8*\pgf@circ@res@temp/6.5} - \pgf@circ@res@right=\pgf@circ@res@left % save the border value - \pgf@circ@res@step=\pgf@circ@res@temp % save the stdH value - \pgf@circ@ieeestd@pinlen\advance\pgf@circ@res@left by \pgf@circ@res@temp - % \typeout{LEFT1-\thisshape\space L\space\the\pgf@circ@res@left\space R\space\the\pgf@circ@res@right} - % this is the normal left border - % For the or or xor port, the limit can be the pointy thing (in case the - % pinlen is zero or too small) - % add to the body margin the or/nor peak: - \ifnum #1 > 1\relax% "or", "nor", "xor", "xnor" gates. - \pgfmathsetlength{\pgf@circ@res@other}{2*\pgf@circ@res@step*(1-cos(\pgf@circ@orangle))} - \advance\pgf@circ@res@right by \pgf@circ@res@other - % \typeout{LEFT2-\thisshape\space L\space\the\pgf@circ@res@left\space R\space\the\pgf@circ@res@right} - \fi - % add to the body margin the xor/xnor distance - \ifnum #1 = 3\relax% "xor" or "xnor" gates. - \pgf@circ@ieeestd@xorbar - \advance\pgf@circ@res@right by \pgf@circ@res@temp - % \typeout{LEFT3-\thisshape\space L\space\the\pgf@circ@res@left\space R\space\the\pgf@circ@res@right} - \fi - % and if this exceeds the normal margin, this is it - % \typeout{LEFT4-\thisshape\space L\space\the\pgf@circ@res@left\space R\space\the\pgf@circ@res@right} - \ifdim \pgf@circ@res@right > \pgf@circ@res@left - \pgf@circ@res@left=\pgf@circ@res@right - \fi - % \typeout{LEFT5-\thisshape\space L\space\the\pgf@circ@res@left\space R\space\the\pgf@circ@res@right} - \pgf@circ@res@left=-\pgf@circ@res@left -} -\def\pgf@circ@find@ieeeport@right#1{% leave it in right; #1 is plain or negated - % Normal port limits - \pgf@circ@ieeestd@stdH - \pgfmathsetlength{\pgf@circ@res@right}{8*\pgf@circ@res@temp/6.5} - \pgf@circ@notradius - \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@res@right+2*#1*\pgf@circ@res@temp} - \pgf@circ@ieeestd@pinlen\advance\pgf@circ@res@right by \pgf@circ@res@temp - \ifdim\pgf@circ@res@other > \pgf@circ@res@right - \pgf@circ@res@right=\pgf@circ@res@other - \fi -} -\def\pgf@circ@find@ieeeport@not@right#1{% leave it in right; #1 is plain or negated - % Normal port limits - \pgf@circ@ieeestd@stdH - % notice 0.8660254 is cos(30) - \pgfmathsetlength{\pgf@circ@res@right}{0.8660254*\pgf@circ@res@temp} - \pgf@circ@notradius - \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@res@right+2*#1*\pgf@circ@res@temp} - \pgf@circ@ieeestd@pinlen\advance\pgf@circ@res@right by \pgf@circ@res@temp - \ifdim\pgf@circ@res@other > \pgf@circ@res@right - \pgf@circ@res@right=\pgf@circ@res@other - \fi -} - - -%%% ieeestd multi-input ports -%%% #1: name -%%% #2: type: 1 for and,nand; 2 for or,nor; 3 for xor,xnor -%%% #3: polarity: 0 for direct, 1 for inverted (not at the output) -%%% #4: drawing for the port -\long\def\pgfcircdeclareieeeport#1#2#3#4{% - \pgfdeclareshape{ieeestd #1 port}% - {% - \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}} - \saveddimen{\baselen}{% - \pgf@circ@ieeestd@baselen\pgf@x=\pgf@circ@res@temp - } - \saveddimen{\stdH}{% This is HALF the height of the inner port - \pgf@circ@ieeestd@stdH\pgf@x=\pgf@circ@res@temp - } - \saveddimen{\notdiameter}{ - \pgf@circ@notradius\pgf@x=2\pgf@circ@res@temp - } - \saveddimen{\pind}{% pin distance; - \pgf@circ@count@a=\pgfkeysvalueof{/tikz/number inputs}\relax% - \pgf@circ@count@b=\pgfkeysvalueof{/tikz/inner inputs}\relax% - \ifnum\pgf@circ@count@a=0 \pgf@circ@count@a=2\fi % default pins - \ifnum\pgf@circ@count@a<2 \pgf@circ@count@a=2\fi % - \ifnum\pgf@circ@count@b=0 \pgf@circ@count@b=\pgf@circ@count@a\fi% - \pgf@circ@ieeestd@stdH\pgf@x=2\pgf@circ@res@temp % full height - \divide\pgf@x by \pgf@circ@count@b - } - \saveddimen{\pinlen}{% - \pgf@circ@ieeestd@pinlen\pgf@x=\pgf@circ@res@temp - } - \saveddimen{\xorbar}{% - \pgf@circ@ieeestd@xorbar\pgf@x=\pgf@circ@res@temp - } - % anchors for the body (no pins included here) - \savedanchor{\bodyleft}{% This DOES NOT take into account the pointy or/xor thing - \pgf@circ@ieeestd@stdH - \pgfmathsetlength{\pgf@x}{-8*\pgf@circ@res@temp/6.5} - \pgfmathsetlength{\pgf@y}{\pgf@circ@res@temp} - } - \savedanchor{\topleft}{% - \pgf@circ@ieeestd@xorbar\pgf@circ@res@right=\pgf@circ@res@temp % save \xorbar - \pgf@circ@ieeestd@stdH - \pgf@circ@res@other=0pt\relax - \ifnum #2 = 2\relax% "or" or "nor" gates. - \pgfmathsetlength{\pgf@circ@res@other}{2*\pgf@circ@res@temp*(1-cos(\pgf@circ@orangle))} - \fi - \ifnum #2 = 3\relax% "xor" or "xnor" gates. - \pgfmathsetlength{\pgf@circ@res@other}{2*\pgf@circ@res@temp*(1-cos(\pgf@circ@orangle)) - +\pgf@circ@res@right} - \fi - \pgfmathsetlength{\pgf@x}{-8*\pgf@circ@res@temp/6.5-\pgf@circ@res@other} - \pgfmathsetlength{\pgf@y}{\pgf@circ@res@temp} - } - \savedanchor{\bodyright}{% This DOES NOT take into account the "NOT" circle - \pgf@circ@ieeestd@stdH - \pgfmathsetlength{\pgf@x}{8*\pgf@circ@res@temp/6.5} - \pgfmathsetlength{\pgf@y}{-\pgf@circ@res@temp} - } - \savedanchor{\bottomright}{% This DOES take into account the "NOT" circle - \pgf@circ@notradius\pgf@circ@res@other=\pgf@circ@res@temp - \pgf@circ@ieeestd@stdH - % #3 is =1 if the port is a negated output one - \pgfmathsetlength{\pgf@x}{8*\pgf@circ@res@temp/6.5+#3*2*\pgf@circ@res@other} - \pgfmathsetlength{\pgf@y}{-\pgf@circ@res@temp} - } - % geographical anchors --- must be rectangulars! - \savedanchor{\northwest}{% - \pgf@circ@find@ieeeport@up - \pgf@circ@find@ieeeport@left{#2} - % \typeout{ANCH5-\thisshape\space L\space\the\pgf@circ@res@left\space U\space\the\pgf@circ@res@up} - \pgf@x=\pgf@circ@res@left - \pgf@y=\pgf@circ@res@up - } - \savedanchor{\southwest}{% - \pgf@circ@find@ieeeport@up - \pgf@circ@find@ieeeport@left{#2} - \pgf@x=\pgf@circ@res@left - \pgf@y=-\pgf@circ@res@up - } - \savedanchor{\southeast}{% - \pgf@circ@find@ieeeport@up - \pgf@circ@find@ieeeport@right{#3} - \pgf@x=\pgf@circ@res@right - \pgf@y=-\pgf@circ@res@up - } - \savedanchor{\northeast}{% - \pgf@circ@find@ieeeport@up - \pgf@circ@find@ieeeport@right{#3} - \pgf@x=\pgf@circ@res@right - \pgf@y=\pgf@circ@res@up - } - \savedmacro\inputs{% get number of inputs - \pgf@circ@count@a=\pgfkeysvalueof{/tikz/number inputs}\relax - \ifnum\pgf@circ@count@a=0\pgf@circ@count@a=2\fi % default - \ifnum\pgf@circ@count@a<2 \pgf@circ@count@a=2\fi % minimum pins - % \ifnum\pgf@circ@count@a>16 \pgf@circ@count@a=16\fi - \def\inputs{\the\pgf@circ@count@a}% - }% - \savedmacro\inners{% get number of "inner" inputs (for racks) - \pgf@circ@count@a=\pgfkeysvalueof{/tikz/number inputs}\relax - \pgf@circ@count@b=\pgfkeysvalueof{/tikz/inner inputs}\relax - \ifnum\pgf@circ@count@a=0 \pgf@circ@count@a=2\fi % default pins - \ifnum\pgf@circ@count@a<2 \pgf@circ@count@a=2\fi % minimum pins - \ifnum\pgf@circ@count@b=0 \pgf@circ@count@b=\pgf@circ@count@a\fi - % \typeout{INNER is \the\pgf@circ@count@b}% - % \ifnum\pgf@circ@count@a>16 \pgf@circ@count@a=16\fi - \def\inners{\the\pgf@circ@count@b}% - }% - \anchor{center}{\pgfpointorigin} - \anchor{text}{ - \ifpgf@circ@center@text - \pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox} - \else - \pgf@circ@ieeestd@stdH - \pgfmathsetlength{\pgf@circ@res@left}{-8*\pgf@circ@res@temp/6.5} % left border - \pgfpoint{\pgf@circ@res@left + \ctikzvalof{left text distance}}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox} - \fi - } - % create input anchors - \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@ieeestd #1 port\endcsname{% - \pgf@circ@count@a=\inputs - \pgfmathloop% - \ifnum\pgfmathcounter>\pgf@circ@count@a% - \else% - %\pgfutil@ifundefined{pgf@anchor@american #1 port@in \pgfmathcounter}{% - \expandafter\xdef\csname pgf@anchor@ieeestd #1 port@in \pgfmathcounter\endcsname{% - \noexpand\pgf@circ@ieeeport@input{\pgfmathcounter}% defined above - }% - \expandafter\xdef\csname pgf@anchor@ieeestd #1 port@bin \pgfmathcounter\endcsname{% - \noexpand\pgf@circ@ieeeport@baseinput{\pgfmathcounter}{#2}% defined above - }% - \ifnum #2 = 3\relax % xor/xnor inner border pins - \expandafter\xdef\csname pgf@anchor@ieeestd #1 port@ibin \pgfmathcounter\endcsname{% - \noexpand\pgf@circ@ieeeport@innerbaseinput{\pgfmathcounter}% defined above - }% - \fi - %}{}% - \repeatpgfmathloop% - } - % output anchor - \anchor{out}{% - \pgfextractx{\pgf@circ@res@other}{\bodyright} %body border, without not ball - \advance\pgf@circ@res@other by\pinlen - \pgfextractx{\pgf@circ@res@temp}{\bottomright} %body + ball border - \ifdim \pgf@circ@res@temp > \pgf@circ@res@other - \pgf@circ@res@other = \pgf@circ@res@temp % do not enter in the ball... - \fi - \pgf@x=\pgf@circ@res@other\pgf@y=0pt - } - \anchor{bout}{\bottomright\pgf@y=0pt} - - \anchor{body right}{\bodyright\pgf@y=0pt} - \anchor{right}{\bottomright\pgf@y=0pt} - \anchor{body left}{\bodyleft\pgf@y=0pt}% central edge of the body - \anchor{left}{% central edge of the component - \bodyleft\pgf@y=0pt - \ifnum #2=3\relax - \advance\pgf@x by -\xorbar - \fi - } - \anchor{up}{% - \bodyleft - \ifnum #2 > 1 % pointy shapes - \pgf@circ@ieeestd@stdH - % horizontal coordinate where the right semicircle starts - \pgfmathsetlength{\pgf@circ@res@other}{-8*\pgf@circ@res@temp/6.5+2*\pgf@circ@res@temp*cos(\pgf@circ@orangle)} - % vertical drop of the circle at the above coordinate - \pgfmathsetlength{\pgf@circ@res@step}{2*\pgf@circ@res@temp*(1-cos(atan(\pgf@circ@res@other/(2*\pgf@circ@res@temp))))} - \advance \pgf@y by -\pgf@circ@res@step - \fi - \pgf@x=0pt - } - \anchor{down}{% - \bodyleft - \ifnum #2 > 1 % pointy shapes - \pgf@circ@ieeestd@stdH - % horizontal coordinate where the right semicircle starts - \pgfmathsetlength{\pgf@circ@res@other}{-8*\pgf@circ@res@temp/6.5+2*\pgf@circ@res@temp*cos(\pgf@circ@orangle)} - % vertical drop of the circle at the above coordinate - \pgfmathsetlength{\pgf@circ@res@step}{2*\pgf@circ@res@temp*(1-cos(atan(\pgf@circ@res@other/(2*\pgf@circ@res@temp))))} - \advance \pgf@y by -\pgf@circ@res@step - \fi - \pgf@y=-\pgf@y\pgf@x=0pt - } - - % geographical anchors - \anchor{nw}{\northwest} - \anchor{ne}{\northeast} - \anchor{se}{\southeast} - \anchor{sw}{\southwest} - \anchor{north west}{\northwest} - \anchor{north east}{\northeast} - \anchor{south east}{\southeast} - \anchor{south west}{\southwest} - % over 0,0 even if asymmetric - % will break if the geocoords are not rectangular - \anchor{n}{\northwest\pgf@x=0pt\relax} - \anchor{e}{\northeast\pgf@y=0pt\relax} - \anchor{s}{\southwest\pgf@x=0pt\relax} - \anchor{w}{\northwest\pgf@y=0pt\relax} - \anchor{north}{\northwest\pgf@x=0pt\relax} - \anchor{east}{\northeast\pgf@y=0pt\relax} - \anchor{south}{\southwest\pgf@x=0pt\relax} - \anchor{west}{\northwest\pgf@y=0pt\relax} - - \backgroundpath{ - \pgfscope - \pgfsetcolor{\ctikzvalof{color}} - #4 - \endpgfscope - % output lead: - \pgfextractx{\pgf@circ@res@right}{\bottomright} %body+ball border - \pgfextractx{\pgf@circ@res@other}{\bodyright} %body border, without "not" ball - \advance\pgf@circ@res@other by \pinlen\relax - \ifdim \pgf@circ@res@other > \pgf@circ@res@right - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfusepath{draw} - \fi - \ifnum #3=1\relax\pgfscope - \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfnode{notcirc}{east}{}{\thisshape-not}{\pgfusepath{stroke}} - \endpgfscope\fi - } - } -} - -%%% #1 direct name #2 negated name #3 type #4 drawing (without output) -\long\def\pgfcircdeclareieeeportpair#1#2#3#4{% - \pgfcircdeclareieeeport{#1}{#3}{0}{#4}% direct - \pgfcircdeclareieeeport{#2}{#3}{1}{#4}% negated -} -% -% ieeestd "and" and "nand" -% -\pgfcircdeclareieeeportpair{and}{nand}{1}{% - \pgf@circ@count@a = \inputs\relax - \pgfmathsetlength{\pgf@circ@res@up}{(\inputs/2)*\pind} %top of the rack/port - \pgfmathsetlength{\pgf@circ@res@temp}{\pgf@circ@res@up+0.5*\pind} - \pgfextractx{\pgf@circ@res@left}{\bodyleft} - \pgfextracty{\pgf@circ@res@down}{\bodyleft} - \ifpgfcirc@draw@leads - %input leads --- all the same for AND ports - \loop\ifnum\pgf@circ@count@a>0 - \advance\pgf@circ@res@temp by -\pind - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}% - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pinlen}{\pgf@circ@res@temp}}% - \advance\pgf@circ@count@a by -1 - \repeat - \fi - \pgfusepath{draw} - %% Body. let's start from the top left - \pgfscope - \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} - \pgfpathmoveto{\pgfpoint{-8*\stdH/6.5}{\stdH}} - \pgfpathlineto{\pgfpoint{1.5*\stdH/6.5}{\stdH}} - \pgfpatharc{90}{-90}{\stdH} - \pgfpathlineto{\pgfpoint{-8*\stdH/6.5}{-\stdH}} - \pgfpathclose - \pgf@circ@draworfill - % rack now; skip if not needed. - % \typeout{WHAT\space \inputs\space \inners} - \ifnum\inputs>\inners - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}} - \pgfusepath{draw} - \fi - \endpgfscope -} -% -% or/nor and xor/xnor are practically the same. Let factor out everything -% the argument #1 is put just before the drawing of the inner pins -% the argument #2 is put after the drawing of the body -% -\long\def\pgf@circ@ieeeport@orxor#1#2{% - \pgf@circ@count@a = \inputs\relax - \pgfmathsetlength{\pgf@circ@res@up}{(\inputs/2)*\pind} %top of the rack/port - \pgfmathsetlength{\pgf@circ@res@temp}{\pgf@circ@res@up+0.5*\pind} - \pgfextractx{\pgf@circ@res@left}{\bodyleft} - \pgfextracty{\pgf@circ@res@down}{\bodyleft} - % rack (extended) pins; they are the same for all the ports - % call K = (inputs-inner)/2, rounded up; pins on the rack are: - % above: 1..K (included) - % below: inputs-K..inputs - % Find the pins on the rack; they are 1... - \pgf@circ@count@b=\numexpr (\inputs - \inners)/2\relax % =K; numexpr rounds up! - \pgf@circ@count@c=\numexpr \inputs - \pgf@circ@count@b +1 \relax % =inputs - K +1 - \ifpgfcirc@draw@leads - %input leads --- for or ports - \loop\ifnum\pgf@circ@count@a>0 - \pgfextractx{\pgf@circ@res@right}{\topleft} - \advance\pgf@circ@res@temp by -\pind - % this is the height; let's find the "right" position - \ifnum \pgf@circ@count@a > \pgf@circ@count@b \ifnum \pgf@circ@count@a < \pgf@circ@count@c - % inner pins - % \typeout{INNER\space\pgf@circ@count@a} - \pgfmathsetlength{\pgf@circ@res@right}{\pgf@circ@res@left-2*\stdH*(1-cos(atan(\pgf@circ@res@temp/(2*\stdH))))} - % hook for xor/xnor - #1 - \fi\fi - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@temp}}% - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pinlen}{\pgf@circ@res@temp}}% - \pgfusepath{draw} - \advance\pgf@circ@count@a by -1 - \repeat - \fi - %% Body. let's start from the top left - \pgfscope - \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} - % it should start here, but with this trick the close comes out better. - % \pgfpathmoveto{\pgfpoint{-8*\stdH/6.5-2*\stdH*(1-cos(\pgf@circ@orangle))}{\stdH}} - \pgfpathmoveto{\pgfpoint{-8*\stdH/6.5}{\stdH}} - \pgfpathlineto{\pgfpoint{8*\stdH/6.5-2*\stdH*cos(\pgf@circ@orangle)}{\stdH}} % - \pgfpatharcto{2*\stdH}{2*\stdH}{0}{0}{0}{\pgfpoint{8*\stdH/6.5}{0pt}} - \pgfpatharcto{2*\stdH}{2*\stdH}{0}{0}{0}{\pgfpoint{8*\stdH/6.5-2*\stdH*cos(\pgf@circ@orangle)}{-\stdH}} - \pgfpathlineto{\pgfpoint{-8*\stdH/6.5-2*\stdH*(1-cos(\pgf@circ@orangle))}{-\stdH}} - %% this should be 2 and 2; but the round part is not a perfect circle that way - %% so the 2.15 is ajusted "by taste" to touch the anchors exactly. - \pgfpatharcto{2*\stdH}{2.2*\stdH}{0}{0}{1}{\pgfpoint{-8*\stdH/6.5-2*\stdH*(1-cos(\pgf@circ@orangle))}{\stdH}} - \pgfpathclose - \pgf@circ@draworfill - % hook for xor/xnor - #2 - % rack now; skip if not needed. - % \typeout{WHAT\space \inputs\space \inners} - \ifnum\inputs>\inners - \pgfextractx{\pgf@circ@res@left}{\topleft} - \pgfextracty{\pgf@circ@res@down}{\topleft} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@down}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}} - \pgfusepath{draw} - \fi - \endpgfscope -} -% -% ieeestd "or" and "nor" -% -\pgfcircdeclareieeeportpair{or}{nor}{2}{% - \pgf@circ@ieeeport@orxor{}{} -} -\pgfcircdeclareieeeportpair{xor}{xnor}{3}{% - \pgf@circ@ieeeport@orxor{ - \edef\@@tmp{\ctikzvalof{ieeestd ports/xor leads in}} - \ifnum\@@tmp=0\relax - % move pin start to the left to leave the xor gap free (not standard) - \advance\pgf@circ@res@right by -\xorbar - \fi - }{% - % add the xor/xnor bar - \pgfpathmoveto{\pgfpoint{-\xorbar-8*\stdH/6.5-2*\stdH*(1-cos(\pgf@circ@orangle))}{-\stdH}} - % see the comment on the main body about the 2.2 - \pgfpatharcto{2*\stdH}{2.2*\stdH}{0}{0}{1}{\pgfpoint{-\xorbar -8*\stdH/6.5-2*\stdH*(1-cos(\pgf@circ@orangle))}{\stdH}} - \pgfusepath{draw} - } -} -% -% Buffer and inverters -% -% #1: name -% #2: polarity -% #3: content -\long\def\pgfcircdeclareieeebufferport#1#2#3{% - \pgfdeclareshape{ieeestd #1 port}% - {% - \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}} - \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}} - \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}} - \saveddimen{\baselen}{% - \pgf@circ@ieeestd@baselen\pgf@x=\pgf@circ@res@temp - } - \saveddimen{\stdH}{% This is HALF the height of the inner port - \pgf@circ@ieeestd@stdH\pgf@x=\pgf@circ@res@temp - } - \saveddimen{\notdiameter}{ - \pgf@circ@notradius\pgf@x=2\pgf@circ@res@temp - } - \saveddimen{\pinlen}{% - \pgf@circ@ieeestd@pinlen\pgf@x=\pgf@circ@res@temp - } - % anchors for the body (no pins included here) - % Notice that 0.8660254 is cos(30) - \savedanchor{\bodyleft}{% This DOES NOT take into account the pointy or/xor thing - \pgf@circ@ieeestd@stdH - \pgfmathsetlength{\pgf@x}{-0.8660254*\pgf@circ@res@temp} - \pgfmathsetlength{\pgf@y}{\pgf@circ@res@temp} - } - \savedanchor{\topleft}{% - \pgf@circ@ieeestd@stdH - \pgfmathsetlength{\pgf@x}{-0.8660254*\pgf@circ@res@temp} - \pgfmathsetlength{\pgf@y}{\pgf@circ@res@temp} - } - \savedanchor{\bodyright}{% This DOES NOT take into account the "NOT" circle - \pgf@circ@ieeestd@stdH - \pgfmathsetlength{\pgf@x}{0.8660254*\pgf@circ@res@temp} - \pgfmathsetlength{\pgf@y}{\pgf@circ@res@temp} - } - \savedanchor{\bottomright}{% This DOES take into account the "NOT" circle - \pgf@circ@notradius\pgf@circ@res@other=\pgf@circ@res@temp - \pgf@circ@ieeestd@stdH - % #2 is =1 if the port is a negated output one - \pgfmathsetlength{\pgf@x}{0.8660254*\pgf@circ@res@temp+#2*2*\pgf@circ@res@other} - \pgfmathsetlength{\pgf@y}{-\pgf@circ@res@temp} - } - % geographical anchors --- must be rectangulars! - \savedanchor{\northwest}{% - \pgf@circ@ieeestd@stdH - \pgfmathsetlength{\pgf@x}{-0.8660254*\pgf@circ@res@temp} - \pgfmathsetlength{\pgf@y}{\pgf@circ@res@temp} - } - \savedanchor{\southwest}{% - \pgf@circ@ieeestd@stdH - \pgfmathsetlength{\pgf@x}{-0.8660254*\pgf@circ@res@temp} - \pgfmathsetlength{\pgf@y}{-\pgf@circ@res@temp} - } - \savedanchor{\southeast}{% - \pgf@circ@ieeestd@stdH - \pgf@circ@res@up=\pgf@circ@res@temp - \pgf@circ@find@ieeeport@not@right{#2} - \pgf@x=\pgf@circ@res@right - \pgf@y=-\pgf@circ@res@up - } - \savedanchor{\northeast}{% - \pgf@circ@ieeestd@stdH - \pgf@circ@res@up=\pgf@circ@res@temp - \pgf@circ@find@ieeeport@not@right{#2} - \pgf@x=\pgf@circ@res@right - \pgf@y=\pgf@circ@res@up - } - \anchor{center}{\pgfpointorigin} - \anchor{text}{ - \ifpgf@circ@center@text - \pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox} - \else - \pgf@circ@ieeestd@stdH - \pgfpoint{-0.8660254*\pgf@circ@res@temp + \ctikzvalof{left text distance}}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox} - \fi - } - % input anchors - \anchor{in}{\bodyleft\pgf@y=0pt\advance\pgf@x by-\pinlen} - \anchor{in 1}{\bodyleft\pgf@y=0pt\advance\pgf@x by-\pinlen} - \anchor{bin}{\bodyleft\pgf@y=0pt\relax} - \anchor{bin 1}{\bodyleft\pgf@y=0pt\relax} - % output anchors - \anchor{out}{% - \pgfextractx{\pgf@circ@res@other}{\bodyright} %body border, without not ball - \advance\pgf@circ@res@other by\pinlen - \pgfextractx{\pgf@circ@res@temp}{\bottomright} %body + ball border - \ifdim \pgf@circ@res@temp > \pgf@circ@res@other - \pgf@circ@res@other = \pgf@circ@res@temp % do not enter in the ball... - \fi - \pgf@x=\pgf@circ@res@other\pgf@y=0pt - } - \anchor{bout}{\bottomright\pgf@y=0pt} - - \anchor{body right}{\bodyright\pgf@y=0pt} - \anchor{right}{\bottomright\pgf@y=0pt} - \anchor{body left}{\bodyleft\pgf@y=0pt}% central edge of the body - \anchor{left}{% central edge of the component - \pgf@circ@ieeestd@xorbar% save \xorbar in temp - \bodyleft\pgf@y=0pt\advance\pgf@x by -\pgf@circ@res@temp - } - \anchor{up}{% - \bodyleft - \pgf@y=+0.5\pgf@y\pgf@x=0pt - } - \anchor{down}{% - \bodyleft - \pgf@y=-0.5\pgf@y\pgf@x=0pt - } - - % geographical anchors - \anchor{nw}{\northwest} - \anchor{ne}{\northeast} - \anchor{se}{\southeast} - \anchor{sw}{\southwest} - \anchor{north west}{\northwest} - \anchor{north east}{\northeast} - \anchor{south east}{\southeast} - \anchor{south west}{\southwest} - % over 0,0 even if asymmetric - % will break if the geocoords are not rectangular - \anchor{n}{\northwest\pgf@x=0pt\relax} - \anchor{e}{\northeast\pgf@y=0pt\relax} - \anchor{s}{\southwest\pgf@x=0pt\relax} - \anchor{w}{\northwest\pgf@y=0pt\relax} - \anchor{north}{\northwest\pgf@x=0pt\relax} - \anchor{east}{\northeast\pgf@y=0pt\relax} - \anchor{south}{\southwest\pgf@x=0pt\relax} - \anchor{west}{\northwest\pgf@y=0pt\relax} - - \backgroundpath{ - \pgfscope - \pgfsetcolor{\ctikzvalof{color}} - #3 - \endpgfscope - % output lead: - \pgfextractx{\pgf@circ@res@right}{\bottomright} %body+ball border - \pgfextractx{\pgf@circ@res@other}{\bodyright} %body border, without "not" ball - \advance\pgf@circ@res@other by \pinlen\relax - \ifdim \pgf@circ@res@other > \pgf@circ@res@right - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}} - \pgfusepath{draw} - \fi - \ifnum #2=1\relax\pgfscope - \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfnode{notcirc}{east}{}{\thisshape-not}{\pgfusepath{stroke}} - \endpgfscope\fi - } - } -} - -%%% #1 direct name #2 negated name #3 drawing (without output) -\long\def\pgfcircdeclareieeebufferportpair#1#2#3{% - \pgfcircdeclareieeebufferport{#1}{0}{#3}% direct - \pgfcircdeclareieeebufferport{#2}{1}{#3}% negated -} - -\pgfcircdeclareieeebufferportpair{buffer}{not}{% - \pgfextractx{\pgf@circ@res@left}{\bodyleft} - \pgfextracty{\pgf@circ@res@up}{\bodyleft} - \pgfextractx{\pgf@circ@res@right}{\bodyright} - % \draw input pin - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pinlen}{0pt}} - \pgfusepath{draw} - \pgfscope - \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}} - \pgfpathclose - \pgf@circ@draworfill - \endpgfscope -} - -\pgfcircdeclareieeebufferportpair{schmitt}{inv schmitt}{% - \pgfextractx{\pgf@circ@res@left}{\bodyleft} - \pgfextracty{\pgf@circ@res@up}{\bodyleft} - \pgfextractx{\pgf@circ@res@right}{\bodyright} - % \draw input pin - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pinlen}{0pt}} - \pgfusepath{draw} - \pgfscope - \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}} - \pgfpathclose - \pgf@circ@draworfill - \endpgfscope - % draw schmitt symbol in normal line thickness - \pgfpathmoveto{\pgfpoint{0.75*\pgf@circ@res@left}{-0.25*\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.50*\pgf@circ@res@left}{-0.25*\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.50*\pgf@circ@res@left}{0.25*\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.00*\pgf@circ@res@left}{0.25*\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{0.25*\pgf@circ@res@left}{0.25*\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.25*\pgf@circ@res@left}{-0.25*\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{0.5*\pgf@circ@res@left}{-0.25*\pgf@circ@res@up}} - \pgfusepath{draw} -} - - -\pgfdeclareshape{schmitt symbol}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}} - \anchor{center}{\pgfpointorigin} - \savedanchor\northwest{% - \pgf@circ@ieeestd@stdH - \pgf@y=\ctikzvalof{ieeestd ports/schmitt symbol size}\pgf@circ@res@temp - \pgf@x=-1.5\pgf@y - } - \anchor{center}{\pgf@y=0pt \pgf@x=0pt} - \anchor{east}{\northwest\pgf@y=0pt\pgf@x=-\pgf@x} - \anchor{e}{\northwest\pgf@y=0pt \pgf@x=-\pgf@x} - \anchor{west}{\northwest\pgf@y=0pt} - \anchor{w}{\northwest \pgf@y=0pt} - \anchor{south}{\northwest \pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{north}{\northwest\pgf@x=0pt} - \anchor{n}{\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{ - \pgfscope - \pgfsetcolor{\ctikzvalof{color}} - \pgfextractx{\pgf@circ@res@left}{\northwest} - \pgfextracty{\pgf@circ@res@up}{\northwest} - \pgf@circ@res@left=0.7\pgf@circ@res@left - \pgf@circ@res@up=0.7\pgf@circ@res@up - \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left/3}{-\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left/3}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}} - \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left/3}{\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{-\pgf@circ@res@left/3}{-\pgf@circ@res@up}} - \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}} - \pgfusepath{draw} - \endpgfscope - } -} - -\pgfdeclareshape{notcirc}{ - \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}} - \anchor{center}{\pgfpointorigin} - \savedanchor\northwest{% - \pgf@circ@notradius - \pgf@y=\pgf@circ@res@temp - \pgf@x=-\pgf@y - } - \anchor{center}{\pgf@y=0pt \pgf@x=0pt} - \anchor{right}{\northwest\pgf@y=0pt\pgf@x=-\pgf@x} - \anchor{east}{\northwest\pgf@y=0pt\pgf@x=-\pgf@x} - \anchor{e}{\northwest\pgf@y=0pt \pgf@x=-\pgf@x} - \anchor{left}{\northwest\pgf@y=0pt} - \anchor{west}{\northwest\pgf@y=0pt} - \anchor{w}{\northwest \pgf@y=0pt} - \anchor{south}{\northwest \pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y} - \anchor{north}{\northwest\pgf@x=0pt} - \anchor{n}{\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{ - \pgf@circ@res@left=\pgf@x - \pgf@circ@res@up=\pgf@y - \northwest\pgf@circ@res@temp=\pgf@y - \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}% - {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}} - } - \behindforegroundpath{ - \pgfscope - \northwest\pgf@circ@res@temp=\pgf@y - \pgfsetcolor{\ctikzvalof{color}} - \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} - \pgfpathcircle{\pgfpointorigin}{\pgf@circ@res@temp} - \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} - \fi - \pgfsetfillopacity{\ctikzvalof{ieeestd ports/not radius fill}}% normally 1.0 - \pgfusepath{draw,fill} - \endpgfscope - } -} - - -%%%---------- close: tex/pgfcircmultipoles - -%%%%%%%%%%% Springe nach tex/pgfcirclabel -%%%---------- open: tex/pgfcirclabel.tex -% 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. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Bipole label positioning - -%% bipole labels and annotation extra style - -\ctikzset{bipole label style/.style={}} -\tikzset{bipole label style/.code={ - \ctikzset{bipole label style/.style={#1}} -}} -\tikzset{bipole label append style/.code={ - \ctikzset{bipole label style/.append style={#1}} -}} -\ctikzset{bipole annotation style/.style={}} -\tikzset{bipole annotation style/.code={ - \ctikzset{bipole annotation style/.style={#1}} -}} -\tikzset{bipole annotation append style/.code={ - \ctikzset{bipole annotation style/.append style={#1}} -}} - -%% Options -\ctikzset{label/.style = { l=#1 } } -\ctikzset{l/.code = { - \pgfkeys{/tikz/circuitikz/bipole/label/name=#1} - \ctikzsetvalof{bipole/label/unit}{} - \ifpgf@circ@siunitx - \pgf@circ@handleSI{#1} - \ifpgf@circ@siunitx@res - \edef\pgf@temp{\pgf@circ@handleSI@val} - \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp} - \edef\pgf@temp{\pgf@circ@handleSI@unit} - \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp} - \else - \fi - \else - \fi -}} - -\ctikzset{label above/.code = { - l=#1, - \circuitikzbasekey/bipole/label/position=90 } -} - -\ctikzset{l^/.style = { - l=#1, - \circuitikzbasekey/bipole/label/position=90 } -} - -\ctikzset{label below/.code = { - l=#1, - \circuitikzbasekey/bipole/label/position=-90 } -} - -\ctikzset{l_/.style = { - l=#1, - \circuitikzbasekey/bipole/label/position=-90 } -} - -\ctikzset{annotation/.style = { a=#1 } } -\ctikzset{a/.code = { - \pgfkeys{/tikz/circuitikz/bipole/annotation/name=#1} - \ctikzsetvalof{bipole/annotation/unit}{} - \ifpgf@circ@siunitx - \pgf@circ@handleSI{#1} - \ifpgf@circ@siunitx@res - \edef\pgf@temp{\pgf@circ@handleSI@val} - \pgfkeyslet{/tikz/circuitikz/bipole/annotation/name}{\pgf@temp} - \edef\pgf@temp{\pgf@circ@handleSI@unit} - \pgfkeyslet{/tikz/circuitikz/bipole/annotation/unit}{\pgf@temp} - \else - \fi - \else - \fi -}} - -\ctikzset{annotation above/.code = { - a=#1, - \circuitikzbasekey/bipole/annotation/position=90 } -} - -\ctikzset{a^/.style = { - a=#1, - \circuitikzbasekey/bipole/annotation/position=90 } -} - -\ctikzset{annotation below/.code = { - a=#1, - \circuitikzbasekey/bipole/annotation/position=-90 } -} -\ctikzset{a_/.style = { - a=#1, - \circuitikzbasekey/bipole/annotation/position=-90 } -} - -% This is to adjust spacing for the labels so that they are not cramped on components -\def\pgf@circ@ls{.75ex} % labelspace to have just one point to change - -\def\pgf@circ@drawlabels#1{ - \pgfextra{ - % This function will be called with argument #1 equal - % to "label" or "annotation" form pgfcircpath.tex. - % pgf@circ@direction is the direction of the path, - % its value is set in pgfcircpath.tex - \pgfmathsubtract{\pgf@circ@direction}{90} - \pgfmathround{\pgfmathresult} % avoid precision loss errors - \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - - \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/position}} - \ifnum \pgf@circ@temp < 0 - \pgfmathadd{\pgf@circ@labanc}{180} - \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - \fi - % \typeout{INI: TEMP\space\pgf@circ@temp\space LABANC\space\pgf@circ@labanc} - % - % normalize the angle values - % - \pgfmathmod{\pgf@circ@labanc}{360} - \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - % - \ifpgf@circuit@bipole@inverted - \pgfmathadd{\pgf@circ@temp}{180} %If shape is inverted, use opposite anchor - \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - \fi - % - \ifnum \ctikzvalof{mirror value} = -1 - \pgfmathadd{\pgf@circ@temp}{180} %If shape is mirrored, use opposite anchor - \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - \fi - % \typeout{FIN: TEMP\space\pgf@circ@temp\space LABANC\space\pgf@circ@labanc} - } - %Firstly, place a coordinate directly at the edge of the shape - (\ctikzvalof{bipole/name}.\pgf@circ@temp) coordinate (labelcoor) - %now decide, which labels should be drawn - \pgfextra{ - \edef\pgf@temp{\ctikzvalof{label/align}} - \def\pgf@circ@temp{straight} - } - \ifx\pgf@temp\pgf@circ@temp %straight - \pgf@circ@drawreglabels{#1} - \else - \pgfextra{\def\pgf@circ@temp{rotate}} - \ifx\pgf@temp\pgf@circ@temp %rotate - \pgf@circ@drawrotlabels{#1} - \else% smart - \pgf@circ@drawsmartlabels{#1} - \fi - \fi -} - - -\def\pgf@circ@drawsmartlabels#1{ - \pgfextra{ - \pgfmathmod{\pgf@circ@direction}{90} - \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - } - \ifnum \pgfcircmathresult > 20 - \ifnum \pgfcircmathresult < 70 - \pgf@circ@drawrotlabels{#1} - \else - \pgf@circ@drawreglabels{#1} - \fi - \else - \pgf@circ@drawreglabels{#1} - \fi - } - - -\def\pgf@circ@drawrotlabels#1{ - \pgfextra{ - % scale the distances in function of zoom, so that they are not - % dependent on it but on font size. Thanks to @marmot - % https://tex.stackexchange.com/a/476018/38080 - % the coeffcient is adjusted so that the distance is more or less - % the same for rotated labels and straight ones (although it will - % depend on the font, so it's not exact). - \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}% - \pgfmathsetmacro{\myscale}{sqrt(abs(\tmpa*\tmpd-\tmpb*\tmpc))}% abs should not be needed - % \typeout{ROT\tmpa\space\tmpb\space\tmpc\space\tmpd\space\myscale} - \pgfmathsetlength\pgf@circ@res@temp{1.5*\pgf@circ@ls/\myscale} - \ifnum \ctikzvalof{bipole/#1/position}>0 - %we need some more space for placement below, due to mid-anchor - \else % we do not have <= in \ifnum... - \pgf@circ@res@temp=1.5\pgf@circ@res@temp - \fi - %Calculate rotation of the label from direction and strip decimals - \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil} - % rotate the label at second or third quadrant: - \ifnum \pgfcirclabrot > 90 \ifnum \pgfcirclabrot < 270 - \pgfmathsubtract{\pgf@circ@direction}{180} - \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - %invert the space relationships due to rotated strings - \ifnum \ctikzvalof{bipole/#1/position}>0 - \pgf@circ@res@temp=1.5\pgf@circ@res@temp - \fi - \fi\fi - \pgfmathparse{\ctikzvalof{bipole/#1/position}>0?\pgf@circ@direction+90:\pgf@circ@direction-90} - \edef\pgf@circ@labposangle{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - } - % reset cm is not working correctly here - (labelcoor)++(\pgf@circ@labposangle:\the\pgf@circ@res@temp) coordinate(labelcoor) - node[anchor=mid, rotate=\pgfcirclabrot, \circuitikzbasekey/bipole #1 style] - (\ctikzvalof{bipole/name}#1){\pgf@circ@finallabels{#1}} -} - -\def\pgf@circ@drawreglabels#1{ - %Now calculate all shape positions - %Use mid-anchor at x-axis and base-anchor at y-axis, respectively. - %All points between will be addressed by angled-anchors: - \pgfextra{ - % scale ex-distance to make it independent on scale - % thanks @marmot see https://tex.stackexchange.com/a/476018/38080 - \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}% - \pgfmathsetmacro{\myscale}{sqrt(abs(\tmpa*\tmpd-\tmpb*\tmpc))}% abs should not be needed - % \typeout{ROT\tmpa\space\tmpb\space\tmpc\space\tmpd\space\myscale} - \pgfmathsetlength\pgf@circ@res@temp{\pgf@circ@ls/\myscale} - \pgfmathadd{\pgf@circ@labanc}{90} - \pgfmathround{\pgfmathresult} - \def\pgf@circ@labanctext{\pgf@circ@labanc} - \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - \pgfmathparse{mod(\pgf@circ@temp,180)>135?mod(\pgf@circ@temp,180)-180:mod(\pgf@circ@temp,180)} - \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - } - %Values around 90 are at both y-axis - \ifnum \pgfcircmathresult > 84 \ifnum \pgfcircmathresult< 96 - \pgfextra{\edef\pgf@circ@labpos{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}} - \ifnum \pgf@circ@labpos > 180 - \ifnum \ctikzvalof{bipole/#1/position} > 0 - \pgfextra{\def\pgf@circ@labanctext{mid west}} - \else - \pgfextra{\def\pgf@circ@labanctext{mid east}} - \fi - \else - \ifnum \ctikzvalof{bipole/#1/position} > 0 - \pgfextra{\def\pgf@circ@labanctext{mid east}} - \else - \pgfextra{\def\pgf@circ@labanctext{mid west}} - \fi - \fi - \fi\fi - %Values between -5 and 5 are at pos /neg x-axis - \pgfextra{\def\uffa{}\newdimen\realshift\realshift=\dimexpr1pt\relax} - \ifnum \pgfcircmathresult <6 \ifnum \pgfcircmathresult > -6 - \ifnum \ctikzvalof{bipole/#1/position} < 0 - \ifnum \pgf@circ@labanc > 90 - % using base coordinate instead of south to naturally align - % symbols with descendants; but this invalidate the effect of - % the inner sep, so recover it by shifting the anchor - % reset cm is not working sometime, use @marmot solution - % see https://tex.stackexchange.com/a/476018/38080 - (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor) - \pgfextra{\def\pgf@circ@labanctext{base}}%base - \else - \pgfextra{\def\pgf@circ@labanctext{north}}%north - \fi - \else - \ifnum \pgf@circ@labanc < 90 - % shift, as above - (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor) - \pgfextra{\def\pgf@circ@labanctext{base}}%base - \else - \ifnum \pgf@circ@labanc > 180 - % this shouldn't happen, but somehow it does (270 degree anchors) - % shift, as above - (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor) - \pgfextra{\def\pgf@circ@labanctext{base}}%base - \else - \pgfextra{\def\pgf@circ@labanctext{north}}%north - \fi - \fi - \fi - \fi\fi - (labelcoor) node[anchor=\pgf@circ@labanctext, - inner sep=0.5\pgf@circ@res@temp, outer sep=0pt, \circuitikzbasekey/bipole #1 style, - ](\ctikzvalof{bipole/name}#1){\strut\pgf@circ@finallabels{#1}% - } -} - -\def\pgf@circ@finallabels#1{% - \edef\pgf@temp{}% - \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/unit}}% - \ifx\pgf@temp\pgf@circ@temp% - \ctikzvalof{bipole/#1/name}% - \else% - $\SI{\ctikzvalof{bipole/#1/name}}{\ctikzvalof{bipole/#1/unit}}$% - \fi% -} - -\ctikzset{text/.style={t=#1}} -\ctikzset{t/.code={% - \ctikzsetvalof{bipoles/twoport/text}{#1}% -}} - -%%%% Stacked labels -% -% stacked labels by Romano Giannetti romano@rgtti.com -% heavily based on Claudo Fiandrinos's https://tex.stackexchange.com/a/65792/38080 -% \expandafter trick inspired by Matthew Leingang's https://tex.stackexchange.com/a/12272/38080 -% -% labels are in a tabular, globally aligned: -% vertically with key l2 valign (default c) -% c: center t: top b: bottom -% horizontally with key l2 align (default l) -% l: left c: centered r: right -% you can switch sides using l2_=... and l2^=... -% syntax is l2_ = line1 and line2 (same for l2^) -% -\ctikzset{% - l2 valign/.store in=\ltwo@valign, l2 valign=c, - l2 halign/.store in=\ltwo@halign, l2 halign=l, -} -\ctikzset{l2base/.code n args={2}{ - \pgfkeys{/tikz/circuitikz/bipole/label/name=% - \bgroup - \setlength{\tabcolsep}{2pt}% - \def\ltwo@tabu{\tabular[\ltwo@valign]}% - \expandafter\ltwo@tabu\expandafter{\ltwo@halign}% - #1\\ #2% - \endtabular - \egroup - }% - \ctikzsetvalof{bipole/label/unit}{} - \ifpgf@circ@siunitx - \pgf@circ@handleSI{#2} - \ifpgf@circ@siunitx@res - \edef\pgf@temp{\pgf@circ@handleSI@val} - \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp} - \edef\pgf@temp{\pgf@circ@handleSI@unit} - \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp} - \else - \fi - \else - \fi -}} -\ctikzset{l2/.style args={#1 and #2}{ - l2base={#1}{#2}, - \circuitikzbasekey/bipole/label/position=90 } -} -\ctikzset{l2 above/.style args={#1 and #2}{ - l2base={#1}{#2}, - \circuitikzbasekey/bipole/label/position=90 } -} -\ctikzset{l2^/.style args={#1 and #2}{ - l2base={#1}{#2}, - \circuitikzbasekey/bipole/label/position=90 } -} -\ctikzset{l2 below/.style args={#1 and #2}{ - l2base={#1}{#2}, - \circuitikzbasekey/bipole/label/position=-90 } -} -\ctikzset{l2_/.style args={#1 and #2}{ - l2base={#1}{#2}, - \circuitikzbasekey/bipole/label/position=-90 } -} - -%%%---------- close: tex/pgfcirclabel -%%%%%%%%%%% Springe nach tex/pgfcircvoltage -%%%---------- open: tex/pgfcircvoltage.tex -% 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. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Voltage management - -%% styles -\ctikzset{bipole voltage style/.style={}} -\tikzset{bipole voltage style/.code={ - \ctikzset{bipole voltage style/.style={#1}} -}} -\tikzset{bipole voltage append style/.code={ - \ctikzset{bipole voltage style/.append style={#1}} -}} - -\ctikzset{v^>/.style = { - v = #1, - \circuitikzbasekey/bipole/voltage/direction = forward, - \circuitikzbasekey/bipole/voltage/position = above - } -} - -\ctikzset{v^/.style = { - v = #1, - \circuitikzbasekey/bipole/voltage/direction = forward, - \circuitikzbasekey/bipole/voltage/position = below - } -} - -\ctikzset{v_/.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = forward} } -\ctikzset{v4 \ifnum\pgfcircmathresult <86 - \ifpgf@circuit@bipole@voltage@below - \def\pgf@circ@bipole@voltage@label@anchor{north west} - \else - \def\pgf@circ@bipole@voltage@label@anchor{south east} - \fi - \fi\fi - \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95 - \ifpgf@circuit@bipole@voltage@below - \def\pgf@circ@bipole@voltage@label@anchor{west} - \else - \def\pgf@circ@bipole@voltage@label@anchor{east} - \fi - \fi\fi - \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176 - \ifpgf@circuit@bipole@voltage@below - \def\pgf@circ@bipole@voltage@label@anchor{south west} - \else \def\pgf@circ@bipole@voltage@label@anchor{north east} - \fi - \fi\fi - \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185 - \ifpgf@circuit@bipole@voltage@below - \def\pgf@circ@bipole@voltage@label@anchor{south} - \else\def\pgf@circ@bipole@voltage@label@anchor{north} - \fi - \fi\fi - \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266 - \ifpgf@circuit@bipole@voltage@below - \def\pgf@circ@bipole@voltage@label@anchor{south east} - \else\def\pgf@circ@bipole@voltage@label@anchor{north west} - \fi - \fi\fi - \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275 - \ifpgf@circuit@bipole@voltage@below - \def\pgf@circ@bipole@voltage@label@anchor{east} - \else \def\pgf@circ@bipole@voltage@label@anchor{west} - \fi - \fi\fi - \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356 - \ifpgf@circuit@bipole@voltage@below - \def\pgf@circ@bipole@voltage@label@anchor{north east} - \else\def\pgf@circ@bipole@voltage@label@anchor{south west} - \fi - \fi\fi - \ifnum\pgfcircmathresult >-1 \ifnum\pgfcircmathresult <5 - \ifpgf@circuit@bipole@voltage@below - \def\pgf@circ@bipole@voltage@label@anchor{north} - \else\def\pgf@circ@bipole@voltage@label@anchor{south} - \fi - \fi\fi - \ifnum\pgfcircmathresult >355 \ifnum\pgfcircmathresult <361 - \ifpgf@circuit@bipole@voltage@below - \def\pgf@circ@bipole@voltage@label@anchor{north} - \else\def\pgf@circ@bipole@voltage@label@anchor{south} - \fi - \fi\fi - - % this must be set *before* changing for mirroring and inverting; in that case - % the xscale/yscale parameters take it into account - \ifpgf@circuit@bipole@voltage@below - \def\pgf@circ@bipole@voltage@label@where{-90} - \else - \def\pgf@circ@bipole@voltage@label@where{90} - \fi - - % magic to counteract the scale and yscale effects (there should be a better way...) - \ifnum \ctikzvalof{mirror value}=-1 - \ifpgf@circuit@bipole@voltage@below - \pgf@circuit@bipole@voltage@belowfalse - \else - \pgf@circuit@bipole@voltage@belowtrue - \fi - \fi - - \ifpgf@circuit@bipole@inverted - \ifpgf@circuit@bipole@voltage@below - \pgf@circuit@bipole@voltage@belowfalse - \else - \pgf@circuit@bipole@voltage@belowtrue - \fi - \fi - - % take into account scaling - \setscaledRlenforclass - - \edef\pgf@temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/european label distance} - \pgfkeysifdefined{\pgf@temp} - { \edef\eudist{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/european label distance}} } - { \edef\eudist{\ctikzvalof{voltage/european label distance}} } - % find the height of the bipole or use a default value - \edef\pgf@temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/height} - \pgfkeysifdefined{\pgf@temp} - {\pgfmathsetmacro{\partheightf}{0.5*\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/height}} - \edef\partheight{\partheightf\pgf@circ@scaled@Rlen}} - {\edef\partheight{(.5\pgf@circ@scaled@Rlen)}} %fallback to fixed value - \newdimen{\alshift} - % this is more or less the same of the legacy code; we shift the american label a bit - % outside the (+) -- (-) line - \pgfmathsetlength{\alshift}{(\ctikzvalof{voltage/american label distance}-0.6)*\partheight} - \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners! - % set the macro for detecting open - \edef\@@kind{\ctikzvalof{bipole/kind}}\edef\@@open{open} - \ifpgf@adjust@open@voltage\else\edef\@@open{this-will-nEver-match}\fi - % \typeout{KIND\space\@@kind} - }%end pgfextra - - \ifpgf@circuit@bipole@isvoltage - \pgf@circ@drawvoltagegenerator - \else - \pgf@circ@drawvoltagegeneric - \fi - - % \pgfextra{\typeout{LABEL\space KIND:\@@kind\space OPEN:\@@open}} - - \ifpgf@circuit@bipole@voltage@straight - coordinate (Vlab) at ($(pgfcirc@Vto)!0.5!(pgfcirc@Vfrom) $) - node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt, - \circuitikzbasekey/bipole voltage style](\ctikzvalof{bipole/name}voltage) - at (Vlab) {\pgf@circ@finallabels{voltage/label}} - \else - \ifpgf@circuit@europeanvoltage - coordinate (Vlab) at ($(pgfcirc@Vcont1)!0.5!(pgfcirc@Vcont2)$) - \else - coordinate (Vlab) at ($(pgfcirc@Vfrom)!0.5!(pgfcirc@Vto)$) - \ifpgf@circuit@bipole@isvoltage\else - % add a bit of space for american labels above their symbols in the normal case. You can avoid that - % with voltage/american label distance=0.5 (it's measured from the center of the component, in heights) - coordinate (Vlab) at ($(Vlab) ! \alshift ! \pgf@circ@bipole@voltage@label@where :(pgfcirc@Vto)$) - \fi - \fi - - \ifpgf@circuit@europeanvoltage - node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt, - \circuitikzbasekey/bipole voltage style](\ctikzvalof{bipole/name}voltage) - at (Vlab) {\pgf@circ@finallabels{voltage/label}} - \else % american voltages - \ifx\@@kind\@@open - coordinate (Vlab) at ($(pgfcirc@Vfrom@flat)!0.5!(pgfcirc@Vto@flat)$) - node [anchor=center, inner sep=2pt, - \circuitikzbasekey/bipole voltage style](\ctikzvalof{bipole/name}voltage) - at (Vlab) {\pgf@circ@finallabels{voltage/label}} - \else - node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt, - \circuitikzbasekey/bipole voltage style](\ctikzvalof{bipole/name}voltage) - at (Vlab) {\pgf@circ@finallabels{voltage/label}} - \fi - \fi - \fi -}%end drawvoltages -%%%---------- close: tex/pgfcircvoltage -%%%%%%%%%%% Springe nach tex/pgfcirccurrent -%%%---------- open: tex/pgfcirccurrent.tex -% 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. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Current handling - -%% styles -\ctikzset{bipole current style/.style={}} -\tikzset{bipole current style/.code={ - \ctikzset{bipole current style/.style={#1}} -}} -\tikzset{bipole current append style/.code={ - \ctikzset{bipole current style/.append style={#1}} -}} - -%% Options -\ctikzset{i^>/.style = { - i = #1, - \circuitikzbasekey/bipole/current/direction = forward, - \circuitikzbasekey/bipole/current/x position = after, - \circuitikzbasekey/bipole/current/y position = above - } -} - -\ctikzset{i_>/.style = { - i = #1, - \circuitikzbasekey/bipole/current/direction = forward, - \circuitikzbasekey/bipole/current/x position = after, - \circuitikzbasekey/bipole/current/y position = below - } -} - -\ctikzset{i>^/.style = { - i = #1, - \circuitikzbasekey/bipole/current/direction = forward, - \circuitikzbasekey/bipole/current/x position = before, - \circuitikzbasekey/bipole/current/y position = above - } -} - -\ctikzset{i>_/.style = { - i = #1, - \circuitikzbasekey/bipole/current/direction = forward, - \circuitikzbasekey/bipole/current/x position = before, - \circuitikzbasekey/bipole/current/y position = below - } -} - -\ctikzset{i^/.style = {i = #1, \circuitikzbasekey/bipole/current/direction = forward } } -\ctikzset{i^/.style = { i= #1, \circuitikzbasekey/bipole/current/y position = above } } - -%% Output routine -\def\pgf@circ@drawcurrent{ - \pgfextra{ - \edef\pgf@circ@ffffff{\pgf@circ@direction} - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil} - - \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86 - \ifpgf@circuit@bipole@current@below - \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east} - \fi - \fi\fi - \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95 - \ifpgf@circuit@bipole@current@below - \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east} - \fi - \fi\fi - \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176 - \ifpgf@circuit@bipole@current@below - \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east} - \fi - \fi\fi - \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185 - \ifpgf@circuit@bipole@current@below - \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north} - \fi - \fi\fi - \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266 - \ifpgf@circuit@bipole@current@below - \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west} - \fi - \fi\fi - \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275 - \ifpgf@circuit@bipole@current@below - \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west} - \fi - \fi\fi - \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356 - \ifpgf@circuit@bipole@current@below - \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west} - \fi - \fi\fi - \ifnum\pgfcircmathresult <5 - \ifpgf@circuit@bipole@current@below - \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south} - \fi - \fi - \ifnum\pgfcircmathresult >355 - \ifpgf@circuit@bipole@current@below - \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south} - \fi - \fi - - \ifpgf@circuit@bipole@current@below - \def\pgf@circ@bipole@current@label@where{-90} - \else - \def\pgf@circ@bipole@current@label@where{+90} - \fi - } - - \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}} - \ifx\pgf@circ@temp\pgf@temp%draw current at a short at middle of the line - (\tikztostart)--(\tikztotarget) - \else% normal bipole or source - \ifpgf@circuit@bipole@current@before - (\tikztostart)--(anchorstartnode) - \else - (anchorendnode)--(\tikztotarget) - \fi - \fi - \ifpgf@circuit@bipole@current@backward - \pgfextra{ - \pgfmathsubtract{\pgf@circ@ffffff}{180} - \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - } - \fi - coordinate[currarrow,pos=\ctikzvalof{current/distance},rotate=\pgf@circ@ffffff, - anchor=center](Iarrow) - (Iarrow.\pgf@circ@bipole@current@label@where) - node[anchor=\pgf@circ@dir, \circuitikzbasekey/bipole current style] - (\ctikzvalof{bipole/name}current){\pgf@circ@finallabels{current/label}} -} - -%%%---------- close: tex/pgfcirccurrent -%%%%%%%%%%% Springe nach tex/pgfcircflow -%%%---------- open: tex/pgfcircflow.tex -% 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. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% flow handling - -%% styles -\ctikzset{bipole flow style/.style={}} -\tikzset{bipole flow style/.code={ - \ctikzset{bipole flow style/.style={#1}} -}} -\tikzset{bipole flow append style/.code={ - \ctikzset{bipole flow style/.append style={#1}} -}} - -%% Options -\ctikzset{f^>/.style = { - f = #1, - \circuitikzbasekey/bipole/flow/direction = forward, - \circuitikzbasekey/bipole/flow/x position = after, - \circuitikzbasekey/bipole/curflowrent/y position = above - } -} - -\ctikzset{f_>/.style = { - f = #1, - \circuitikzbasekey/bipole/flow/direction = forward, - \circuitikzbasekey/bipole/flow/x position = after, - \circuitikzbasekey/bipole/flow/y position = below - } -} - -\ctikzset{f>^/.style = { - f = #1, - \circuitikzbasekey/bipole/flow/direction = forward, - \circuitikzbasekey/bipole/flow/x position = before, - \circuitikzbasekey/bipole/flow/y position = above - } -} - -\ctikzset{f>_/.style = { - f = #1, - \circuitikzbasekey/bipole/flow/direction = forward, - \circuitikzbasekey/bipole/flow/x position = before, - \circuitikzbasekey/bipole/flow/y position = below - } -} - -\ctikzset{f^/.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = forward } } -\ctikzset{f^/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = above } } - -\ctikzset{f/.code = { - \pgfkeys{\circuitikzbasekey/bipole/flow/direction = forward, - \circuitikzbasekey/bipole/flow/x position = after, - \circuitikzbasekey/bipole/flow/y position = above } - \pgfkeys{/tikz/circuitikz/bipole/flow/label/name=#1} - \ctikzsetvalof{bipole/flow/label/unit}{} - \ifpgf@circ@siunitx - \pgf@circ@handleSI{#1} - \ifpgf@circ@siunitx@res - \edef\pgf@temp{\pgf@circ@handleSI@val} - \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/name}{\pgf@temp} - \edef\pgf@temp{\pgf@circ@handleSI@unit} - \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/unit}{\pgf@temp} - \else - \fi - \else - \fi -} -} - -%% Output routine -\def\pgf@circ@drawflow{ - \pgfextra{ - \edef\pgf@circ@ffffff{\pgf@circ@direction} - \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil} - - \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86 - \ifpgf@circuit@bipole@flow@below - \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east} - \fi - \fi\fi - \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95 - \ifpgf@circuit@bipole@flow@below - \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east} - \fi - \fi\fi - \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176 - \ifpgf@circuit@bipole@flow@below - \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east} - \fi - \fi\fi - \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185 - \ifpgf@circuit@bipole@flow@below - \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north} - \fi - \fi\fi - \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266 - \ifpgf@circuit@bipole@flow@below - \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west} - \fi - \fi\fi - \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275 - \ifpgf@circuit@bipole@flow@below - \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west} - \fi - \fi\fi - \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356 - \ifpgf@circuit@bipole@flow@below - \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west} - \fi - \fi\fi - \ifnum\pgfcircmathresult <5 - \ifpgf@circuit@bipole@flow@below - \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south} - \fi - \fi - \ifnum\pgfcircmathresult >355 - \ifpgf@circuit@bipole@flow@below - \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south} - \fi - \fi - - \ifpgf@circuit@bipole@flow@below - \def\pgf@circ@bipole@flow@label@where{-90} - \else - \def\pgf@circ@bipole@flow@label@where{+90} - \fi - } - - \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}} - \ifx\pgf@circ@temp\pgf@temp%draw flow at a short at middle of the line - (\tikztostart)--(\tikztotarget) - \else% normal bipole or source - \ifpgf@circuit@bipole@flow@before - (\tikztostart)--(anchorstartnode) - \else - (anchorendnode)--(\tikztotarget) - \fi - \fi - \pgfextra{ - \ifpgf@circuit@bipole@flow@backward - \ifpgf@circuit@bipole@flow@below - \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen} - \else - \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen} - \fi - \pgfmathsubtract{\pgf@circ@ffffff}{180} - \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} - \else - \ifpgf@circuit@bipole@flow@below - \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen} - \else - \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen} - \fi - \fi - } - coordinate[flowarrow,pos=\ctikzvalof{flow/distance},rotate=\pgf@circ@ffffff,yshift=\flow@offset, anchor=center](Farrowpos) - (Farrowpos.\pgf@circ@bipole@flow@label@where) node[anchor=\pgf@circ@dir, \circuitikzbasekey/bipole flow style] - (\ctikzvalof{bipole/name}flow){\pgf@circ@finallabels{flow/label}} -} - -%%%---------- close: tex/pgfcircflow - -% notice that the default is nooldvoltagedirection; it's not explicitly set to allow for the warning -\ExecuteOptions{nofetbodydiode, nofetsolderdot, europeancurrents, europeanvoltages,americanports, americanresistors, cuteinductors ,europeangfsurgearrester, nosiunitx, noarrowmos, smartlabels} - -\ProcessOptions\relax - -%%%%%%%%%%% Springe nach tex/pgfcircpath -%%%---------- open: tex/pgfcircpath.tex -% 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. - - -\def\pgf@circ@direction{0.0} - -% Names -\ctikzset{name/.style = { n=#1 } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@ -\ctikzset{n/.code = { - \pgfkeys{/tikz/circuitikz/bipole/name=#1} -}} - -% Reflect the node along -\ctikzset{mirrored/.is choice} -\ctikzset{mirror value/.initial=1} -\ctikzset{mirrored/true/.code = {\ctikzsetvalof{mirror value}{-1}} } -\ctikzset{mirrored/false/.code = {\ctikzsetvalof{mirror value}{1}} } -\ctikzset{mirror/.style = {/tikz/circuitikz/mirrored=true}} - -% Invert node along path -\ctikzset{inverted/.is choice} -\ctikzset{invert value/.initial=1} -\ctikzset{inverted/true/.code = {\ctikzsetvalof{invert value}{-1}\pgf@circuit@bipole@invertedtrue}} -\ctikzset{inverted/false/.code = {\ctikzsetvalof{invert value}{1}\pgf@circuit@bipole@invertedfalse}} -\ctikzset{invert/.style = {/tikz/circuitikz/inverted=true}} -\newif\ifpgf@circuit@bipole@inverted -\ctikzset{bipole/inverted/.is if=pgf@circuit@bipole@inverted} - -\newif\ifpgf@circuit@bipole@voltage@backward -\ctikzset{bipole/voltage/direction/.is choice} -\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}} -\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}} - -% Initialize paths -\def\pgfcircresetpath{ - \ctikzset{bipole/name=, bipole/label/name=, bipole/label/position=90, ,bipole/annotation/name=, bipole/annotation/position=-90, - bipole/inverted=false, bipole/kind=, - bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below, - bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,bipole/is voltageoutsideofsymbol=false,bipole/is strokedsymbol=false, - bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after, - bipole/current/y position=above, bipole/current/direction=forward, - mirrored=false - } -} - -%% Helper function for path-function to ensure using anchors between nodes -\def\set@explicit@center@anchor#1{ - \pgfutil@ifundefined{pgf@sh@ns@#1} - { - %This coordinate is no node(but a relative position or a coordinate), no further handling needed - }{ - \pgfutil@in@.{#1} - \ifpgfutil@in@ - % Anchor is used, do nothing! - \else% - \let\tikz@moveto@waiting=\relax - \pgfpathmoveto{\tikz@last@position}%force movement, because tikz@moveto@waiting - \edef#1{#1.center}%ensure using center anchor - \fi -} -} - - -%% Generic bipole path -%% I am not user what the second argument is needed for -\def\pgf@circ@bipole@path#1#2{ - - \pgfextra{ - \set@explicit@center@anchor{\tikztostart} - \set@explicit@center@anchor{\tikztotarget} - \pgfsyssoftpath@getcurrentpath{\myp@th}%% save current path to extend after calculation of correct start/end coordinates - \ctikzset{bipole/kind = #1} - \edef\pgf@temp{\ctikzvalof{bipole/name}} - \def\pgf@circ@temp{} - \ifx\pgf@temp\pgf@circ@temp % if it has not a name - \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999} - \ctikzset{bipole/name = #1\pgf@circ@rand} % create it (re-usage should not create problem, but...) - \fi - } - - (\tikztostart) coordinate (\ctikzvalof{bipole/name}start)%necessary to get correct coordinates in the case of relative start/end or constructions like ((node1)-|(node2)) - (\tikztotarget) coordinate (\ctikzvalof{bipole/name}end) - \pgfextra{ - \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}} - {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}} - % DO NOT ROUND HERE! pgfcirclabel.tex will do that when needed - % \pgfmathround{\pgfmathresult} - \edef\pgf@circ@direction{\pgfmathresult}%Calculate direction(angle) of path - % \typeout{DIRECTION:\pgf@circ@direction} - \pgfsyssoftpath@setcurrentpath{\myp@th} - } - \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}} - \ifx\pgf@temp\pgf@circ@temp % if it is an open - \else - --($(\ctikzvalof{bipole/name}start) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}end)$) %ugly workaround to get correct linejoins(node breaks path?) - \fi - ($(\tikztostart) ! .5 ! (\tikztotarget)$)%%positio of middle node - node[#1shape, rotate=\pgf@circ@direction, yscale=\ctikzvalof{mirror value}, xscale=\ctikzvalof{invert value}] - (\ctikzvalof{bipole/name}) {} - \ifpgf@circuit@bipole@inverted - \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them! - coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathend) - coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathstart) - \else - coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.right) - coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.left) - \fi - \else - \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them! - coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathstart) - coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathend) - \else - coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.left) - coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.right) - \fi - \fi - \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}} - \ifx\pgf@temp\pgf@circ@temp % if it is an open - \else - (\ctikzvalof{bipole/name}start.center) -- (anchorstartnode) - (anchorendnode) -- (\ctikzvalof{bipole/name}end.center) - \fi - - \drawpoles - \pgf@circ@ifkeyempty{bipole/label/name}\else\pgf@circ@drawlabels{label}\fi - \pgf@circ@ifkeyempty{bipole/annotation/name}\else\pgf@circ@drawlabels{annotation}\fi - \pgf@circ@ifkeyempty{bipole/voltage/label/name}\else\pgf@circ@drawvoltage\fi - \pgf@circ@ifkeyempty{bipole/current/label/name}\else\pgf@circ@drawcurrent\fi - \pgf@circ@ifkeyempty{bipole/flow/label/name}\else\pgf@circ@drawflow\fi - \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}} - \ifx\pgf@temp\pgf@circ@temp % if it is an open - (\ctikzvalof{bipole/name}end)%Move to end of path - \else - ($(\ctikzvalof{bipole/name}end) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}start)$) -- (\ctikzvalof{bipole/name}end)%ugly workaround to get correct linejoins(node breaks path?) - %tikztostart and tikztotarget could not be used, because it would break if target coordinate is something like (node1-|node2) - - \fi - % reset - \pgfextra{ - \pgfcircresetpath - } - \tikztonodes%draw pending nodes an path -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Handling of terminals - -\ctikzset{bipole/nodes/.is family} -\ctikzset{bipole/nodes/left/.initial=none} -\ctikzset{bipole/nodes/right/.initial=none} -\tikzset{bipole nodes/.style n args={2}{% - \circuitikzbasekey/bipole/nodes/left=#1, - \circuitikzbasekey/bipole/nodes/right=#2 - } -} - -%% Easily usable styles - -\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=ocirc}} -\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=ocirc}} -\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=none}} -\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=ocirc}} -\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=circ}} -\ctikzset{d-o/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=ocirc}} -\ctikzset{o-d/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=diamondpole}} -\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=none}} -\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=circ}} -\ctikzset{d-/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=none}} -\ctikzset{-d/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=diamondpole}} -\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=circ}} -\ctikzset{d-*/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=circ}} -\ctikzset{*-d/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=diamondpole}} -\ctikzset{d-d/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=diamondpole}} - -% rectjoinfill workarounds - -\ctikzset{.-/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=none}} -\ctikzset{.-*/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=circ}} -\ctikzset{.-o/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=ocirc}} -\ctikzset{.-d/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=diamondpole}} -\ctikzset{-./.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}} -\ctikzset{o-./.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}} -\ctikzset{*-./.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}} -\ctikzset{d-./.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}} -\ctikzset{.-./.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}} - -\tikzset{reversed/.style = {\circuitikzbasekey/bipole/inverted=true}} - -\def\drawpoles{ - \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf@temp{none}} - \ifx\pgf@temp\pgf@circ@temp\else(\tikztostart) node[\pgf@circ@temp] {}\fi - \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/right}} } - \ifx\pgf@temp\pgf@circ@temp\else(\tikztotarget) node[\pgf@circ@temp] {}\fi -} - -%% Path definitions -\def\pgf@circ@resistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}\else\pgf@circ@bipole@path{resistor}{#1}\fi} -\def\pgf@circ@vresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{tgeneric}{#1}\else\pgf@circ@bipole@path{vresistor}{#1}\fi} -\def\pgf@circ@sresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{thermistor}{#1}\else\pgf@circ@bipole@path{resistivesens}{#1}\fi} -\def\pgf@circ@potentiometer@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{genericpotentiometer}{#1}\else\pgf@circ@bipole@path{potentiometer}{#1}\fi} -\def\pgf@circ@thermistor@path#1{\pgf@circ@bipole@path{thermistor}{#1}} -\def\pgf@circ@thermistorptc@path#1{\pgf@circ@bipole@path{thermistorptc}{#1}} -\def\pgf@circ@thermistorntc@path#1{\pgf@circ@bipole@path{thermistorntc}{#1}} -\def\pgf@circ@varistor@path#1{\pgf@circ@bipole@path{varistor}{#1}} -\def\pgf@circ@capacitor@path#1{\pgf@circ@bipole@path{capacitor}{#1}} -\def\pgf@circ@capacitivesens@path#1{\pgf@circ@bipole@path{capacitivesens}{#1}} -\def\pgf@circ@ecapacitor@path#1{\pgf@circ@bipole@path{ecapacitor}{#1}} -%% polar capacitor is deprectaed, use curved capacitor instead -\def\pgf@circ@polarcapacitor@path#1{\pgf@circ@bipole@path{polarcapacitor}{#1}} -\def\pgf@circ@ccapacitor@path#1{\pgf@circ@bipole@path{ccapacitor}{#1}} -\def\pgf@circ@vcapacitor@path#1{\pgf@circ@bipole@path{vcapacitor}{#1}} -\def\pgf@circ@piezoelectric@path#1{\pgf@circ@bipole@path{piezoelectric}{#1}} -\def\pgf@circ@battery@path#1{\pgf@circ@bipole@path{battery}{#1}} -\def\pgf@circ@batteryone@path#1{\pgf@circ@bipole@path{battery1}{#1}} -\def\pgf@circ@batterytwo@path#1{\pgf@circ@bipole@path{battery2}{#1}} -\def\pgf@circ@europeaninductor@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}} -\def\pgf@circ@americaninductor@path#1{\pgf@circ@bipole@path{americaninductor}{#1}} -\def\pgf@circ@cuteinductor@path#1{\pgf@circ@bipole@path{cuteinductor}{#1}} -\def\pgf@circ@cutechoke@path#1{\pgf@circ@bipole@path{cutechoke}{#1}} -\def\pgf@circ@inductor@path#1{% - \pgfextra{ - \edef\pgf@circ@temp{\ctikzvalof{inductor}}% - \def\pgf@temp{european}% - } - \ifx\pgf@temp\pgf@circ@temp% - \pgf@circ@europeaninductor@path{#1}% - \else% - \pgfextra{ \def\pgf@temp{cute} }% - \ifx\pgf@temp\pgf@circ@temp% - \pgf@circ@cuteinductor@path{#1}% - \else% - \pgf@circ@americaninductor@path{#1}% - \fi% - \fi% -} -\def\pgf@circ@vinductor@path#1{ - \pgfextra{ - \edef\pgf@circ@temp{\ctikzvalof{inductor}}% - \def\pgf@temp{european}% - } - \ifx\pgf@temp\pgf@circ@temp% - \pgf@circ@veuropeaninductor@path{#1}% - \else% - \pgfextra{ \def\pgf@temp{cute} }% - \ifx\pgf@temp\pgf@circ@temp% - \pgf@circ@vcuteinductor@path{#1}% - \else% - \pgf@circ@vamericaninductor@path{#1}% - \fi% - \fi% -} -\def\pgf@circ@inductivesens@path#1{% - \pgfextra{ - \edef\pgf@circ@temp{\ctikzvalof{inductor}}% - \def\pgf@temp{european}% - } - \ifx\pgf@temp\pgf@circ@temp% - \pgf@circ@europeaninductivesens@path{#1}% - \else% - \pgfextra{ \def\pgf@temp{cute} }% - \ifx\pgf@temp\pgf@circ@temp% - \pgf@circ@cuteinductivesens@path{#1}% - \else% - \pgf@circ@americaninductivesens@path{#1}% - \fi% - \fi% -} -\def\pgf@circ@veuropeaninductor@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}} -\def\pgf@circ@vamericaninductor@path#1{\pgf@circ@bipole@path{vamericaninductor}{#1}} -\def\pgf@circ@vcuteinductor@path#1{\pgf@circ@bipole@path{vcuteinductor}{#1}} -\def\pgf@circ@europeaninductivesens@path#1{\pgf@circ@bipole@path{sfullgeneric}{#1}} -\def\pgf@circ@americaninductivesens@path#1{\pgf@circ@bipole@path{samericaninductor}{#1}} -\def\pgf@circ@cuteinductivesens@path#1{\pgf@circ@bipole@path{scuteinductor}{#1}} -\def\pgf@circ@lamp@path#1{\pgf@circ@bipole@path{lamp}{#1}} -\def\pgf@circ@bulb@path#1{\pgf@circ@bipole@path{bulb}{#1}} -\def\pgf@circ@esource@path#1{\pgf@circ@bipole@path{esource}{#1}} -\def\pgf@circ@pvsource@path#1{\pgf@circ@bipole@path{pvsource}{#1}} -\def\pgf@circ@vsource@path#1{\pgf@circ@bipole@path{vsource}{#1}} -\def\pgf@circ@dcvsource@path#1{\pgf@circ@bipole@path{dcvsource}{#1}} -\def\pgf@circ@vsourceam@path#1{\pgf@circ@bipole@path{vsourceAM}{#1}} -\def\pgf@circ@vsourcesin@path#1{\pgf@circ@bipole@path{vsourcesin}{#1}} -\def\pgf@circ@isource@path#1{\pgf@circ@bipole@path{isource}{#1}} -\def\pgf@circ@oosource@path#1{\pgf@circ@bipole@path{oosource}{#1}} -\def\pgf@circ@oosourcetrans@path#1{\pgf@circ@bipole@path{oosourcetrans}{#1}} -\def\pgf@circ@ooosource@path#1{\pgf@circ@bipole@path{ooosource}{#1}} -\def\pgf@circ@dcisource@path#1{\pgf@circ@bipole@path{dcisource}{#1}} -\def\pgf@circ@isourcesin@path#1{\pgf@circ@bipole@path{isourcesin}{#1}} -\def\pgf@circ@vsourcesquare@path#1{\pgf@circ@bipole@path{vsourcesquare}{#1}} -\def\pgf@circ@vsourcetri@path#1{\pgf@circ@bipole@path{vsourcetri}{#1}} -\def\pgf@circ@isourceam@path#1{\pgf@circ@bipole@path{isourceAM}{#1}} -\def\pgf@circ@ecsource@path#1{\pgf@circ@bipole@path{ecsource}{#1}} -\def\pgf@circ@cvsource@path#1{\pgf@circ@bipole@path{cvsource}{#1}} -\def\pgf@circ@cvsourceam@path#1{\pgf@circ@bipole@path{cvsourceAM}{#1}} -\def\pgf@circ@cvsourcesin@path#1{\pgf@circ@bipole@path{cvsourcesin}{#1}} -\def\pgf@circ@cisource@path#1{\pgf@circ@bipole@path{cisource}{#1}} -\def\pgf@circ@cisourceam@path#1{\pgf@circ@bipole@path{cisourceAM}{#1}} -\def\pgf@circ@cisourcesin@path#1{\pgf@circ@bipole@path{cisourcesin}{#1}} -\def\pgf@circ@short@path#1{\pgf@circ@bipole@path{short}{#1}} -\def\pgf@circ@cspst@path#1{\pgf@circ@bipole@path{cspst}{#1}} -\def\pgf@circ@ospst@path#1{\pgf@circ@bipole@path{ospst}{#1}} -\def\pgf@circ@nos@path#1{\pgf@circ@bipole@path{nos}{#1}} -\def\pgf@circ@ncs@path#1{\pgf@circ@bipole@path{ncs}{#1}} -\def\pgf@circ@pushbutton@path#1{\pgf@circ@bipole@path{pushbutton}{#1}} -\def\pgf@circ@ncpushbutton@path#1{\pgf@circ@bipole@path{ncpushbutton}{#1}} -\def\pgf@circ@open@path#1{\pgf@circ@bipole@path{open}{#1}} -\def\pgf@circ@generic@path#1{\pgf@circ@bipole@path{generic}{#1}} -\def\pgf@circ@ageneric@path#1{\pgf@circ@bipole@path{ageneric}{#1}} -\def\pgf@circ@tgeneric@path#1{\pgf@circ@bipole@path{tgeneric}{#1}} -\def\pgf@circ@xgeneric@path#1{\pgf@circ@bipole@path{xgeneric}{#1}} -\def\pgf@circ@fullgeneric@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}} -\def\pgf@circ@tfullgeneric@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}} -\def\pgf@circ@ammeter@path#1{\pgf@circ@bipole@path{ammeter}{#1}} -\def\pgf@circ@ohmmeter@path#1{\pgf@circ@bipole@path{ohmmeter}{#1}} -\def\pgf@circ@voltmeter@path#1{\pgf@circ@bipole@path{voltmeter}{#1}} -\def\pgf@circ@oscope@path#1{\pgf@circ@bipole@path{oscope}{#1}} -\def\pgf@circ@empty@path#1{} -\def\pgf@circ@photoresistor@path#1{\pgf@circ@bipole@path{photoresistor}{#1}} -\def\pgf@circ@emptythyristor@path#1{\pgf@circ@bipole@path{emptythyristor}{#1}} -\def\pgf@circ@fullthyristor@path#1{\pgf@circ@bipole@path{fullthyristor}{#1}} -\def\pgf@circ@toggleswitch@path#1{\pgf@circ@bipole@path{toggleswitch}{#1}} -\def\pgf@circ@memristor@path#1{\pgf@circ@bipole@path{memristor}{#1}} -\def\pgf@circ@emptytriac@path#1{\pgf@circ@bipole@path{emptytriac}{#1}} -\def\pgf@circ@fulltriac@path#1{\pgf@circ@bipole@path{fulltriac}{#1}} -\def\pgf@circ@tline@path#1{\pgf@circ@bipole@path{tline}{#1}} -\def\pgf@circ@mstline@path#1{\pgf@circ@bipole@path{mstline}{#1}} -\def\pgf@circ@squid@path#1{\pgf@circ@bipole@path{squid}{#1}} -\def\pgf@circ@barrier@path#1{\pgf@circ@bipole@path{barrier}{#1}} -\def\pgf@circ@openbarrier@path#1{\pgf@circ@bipole@path{openbarrier}{#1}} -\def\pgf@circ@thermocouple@path#1{\pgf@circ@bipole@path{thermocouple}{#1}} -\def\pgf@circ@fuse@path#1{\pgf@circ@bipole@path{fuse}{#1}} -\def\pgf@circ@afuse@path#1{\pgf@circ@bipole@path{afuse}{#1}} - -\def\pgf@circ@gfsurgearrester@path#1{\ifpgf@circuit@europeangfsurgearrester\pgf@circ@europeangfsurgearrester@path{#1}\else\pgf@circ@americangfsurgearrester@path{#1}\fi} -\def\pgf@circ@europeangfsurgearrester@path#1{\pgf@circ@bipole@path{european gas filled surge arrester}{#1}} -\def\pgf@circ@americangfsurgearrester@path#1{\pgf@circ@bipole@path{american gas filled surge arrester}{#1}} - -\def\pgf@circ@twoport@path#1{\pgf@circ@bipole@path{twoport}{#1}} -\def\pgf@circ@vco@path#1{\pgf@circ@bipole@path{vco}{#1}} -\def\pgf@circ@bandpass@path#1{\pgf@circ@bipole@path{bandpass}{#1}} -\def\pgf@circ@bandstop@path#1{\pgf@circ@bipole@path{bandstop}{#1}} -\def\pgf@circ@highpass@path#1{\pgf@circ@bipole@path{highpass}{#1}} -\def\pgf@circ@lowpass@path#1{\pgf@circ@bipole@path{lowpass}{#1}} -\def\pgf@circ@adc@path#1{\pgf@circ@bipole@path{adc}{#1}} -\def\pgf@circ@dac@path#1{\pgf@circ@bipole@path{dac}{#1}} -\def\pgf@circ@dsp@path#1{\pgf@circ@bipole@path{dsp}{#1}} -\def\pgf@circ@fft@path#1{\pgf@circ@bipole@path{fft}{#1}} -\def\pgf@circ@amp@path#1{\pgf@circ@bipole@path{amp}{#1}} -\def\pgf@circ@vamp@path#1{\pgf@circ@bipole@path{vamp}{#1}} -\def\pgf@circ@piattenuator@path#1{\pgf@circ@bipole@path{piattenuator}{#1}} -\def\pgf@circ@vpiattenuator@path#1{\pgf@circ@bipole@path{vpiattenuator}{#1}} -\def\pgf@circ@tattenuator@path#1{\pgf@circ@bipole@path{tattenuator}{#1}} -\def\pgf@circ@vtattenuator@path#1{\pgf@circ@bipole@path{vtattenuator}{#1}} -\def\pgf@circ@phaseshifter@path#1{\pgf@circ@bipole@path{phaseshifter}{#1}} -\def\pgf@circ@vphaseshifter@path#1{\pgf@circ@bipole@path{vphaseshifter}{#1}} -\def\pgf@circ@detector@path#1{\pgf@circ@bipole@path{detector}{#1}} -% -\def\pgf@circ@sacdc@path#1{\pgf@circ@bipole@path{sacdc}{#1}} -\def\pgf@circ@sdcac@path#1{\pgf@circ@bipole@path{sdcac}{#1}} -\def\pgf@circ@tacdc@path#1{\pgf@circ@bipole@path{tacdc}{#1}} -\def\pgf@circ@tdcac@path#1{\pgf@circ@bipole@path{tdcac}{#1}} - -%%Mechanical -\def\pgf@circ@spring@path#1{\pgf@circ@bipole@path{spring}{#1}} -\def\pgf@circ@inerter@path#1{\pgf@circ@bipole@path{inerter}{#1}} -\def\pgf@circ@mass@path#1{\pgf@circ@bipole@path{mass}{#1}} -\def\pgf@circ@damper@path#1{\pgf@circ@bipole@path{damper}{#1}} -\def\pgf@circ@viscoe@path#1{\pgf@circ@bipole@path{viscoe}{#1}} - -%% Styles - -\def\comnpatname{\ifpgf@circuit@compat *\else\fi} -\def\compattikzset#1{\tikzset{\comnpatname#1}} - -%\def\ctikzsetbipole#1#2{% -% \tikzset{#1/.style= {to path=#2, \circuitikzbasekey, l=##1}}% -%} - -\compattikzset{spring/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spring@path, l=#1}} -\compattikzset{inerter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@inerter@path, l=#1}} -\compattikzset{mass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mass@path, l=#1}} -\compattikzset{damper/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@damper@path, l=#1}} -\compattikzset{viscoe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@viscoe@path, l=#1}} -\compattikzset{resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistor@path, l=#1}} -\compattikzset{american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{resistor}{#1}, l=#1}} -\compattikzset{european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{generic}{#1}, l=#1}} -\compattikzset{potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@potentiometer@path, l=#1}} -\compattikzset{varistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@varistor@path, l=#1}} -\compattikzset{photoresistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@photoresistor@path, l=#1}} -\compattikzset{thermistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistor@path, l=#1}} -\compattikzset{thermistor ptc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorptc@path, l=#1}} -\compattikzset{thermistor ntc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}} -\compattikzset{american potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{potentiometer}{#1}, l=#1}} -\compattikzset{european potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{genericpotentiometer}{#1}, l=#1}} -\compattikzset{variable resistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vresistor@path, l=#1}} -\compattikzset{variable american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{vresistor}{#1}, l=#1}} -\compattikzset{variable european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{tgeneric}{#1}, l=#1}} -\compattikzset{capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitor@path, l=#1}} -\compattikzset{elko/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}} -\compattikzset{ecapacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}} -% polar capacitor is deprecated, use curved capacitor instead -\compattikzset{polar capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@polarcapacitor@path, l=#1}} -\compattikzset{curved capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ccapacitor@path, l=#1}} -\compattikzset{variable capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcapacitor@path, l=#1}} -\compattikzset{piezoelectric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piezoelectric@path, l=#1}} -\compattikzset{battery/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{battery1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batteryone@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{battery2/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batterytwo@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductor@path, l=#1}} -\compattikzset{gf surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}} -\compattikzset{american gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americangfsurgearrester@path, l=#1}} -\compattikzset{european gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeangfsurgearrester@path, l=#1}} -\compattikzset{gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}} -\compattikzset{american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductor@path, l=#1}} -\compattikzset{cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductor@path, l=#1}} -\compattikzset{cute choke/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cutechoke@path, l=#1}} -\compattikzset{european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductor@path, l=#1}} -\compattikzset{variable inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vinductor@path, l=#1}} -\compattikzset{variable european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@veuropeaninductor@path, l=#1}} -\compattikzset{variable american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamericaninductor@path, l=#1}} -\compattikzset{variable cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcuteinductor@path, l=#1}} -\compattikzset{tline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tline@path, l=#1}} -\compattikzset{transmission line/.style = {tline = #1}} -\compattikzset{TL/.style = {tline = #1}} -\compattikzset{mstline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mstline@path, l=#1}} -\compattikzset{european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{american voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}} -\compattikzset{european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isource@path, \circuitikzbasekey/bipole/is current=true, i=#1}} -\compattikzset{american current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}} -\compattikzset{empty controlled source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{american controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}} -\compattikzset{european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}} -\compattikzset{american controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}} -\compattikzset{sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }} -\compattikzset{square voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesquare@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }} -\compattikzset{triangle voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcetri@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }} -\compattikzset{sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}} -\compattikzset{controlled sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{controlled sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}} - -\compattikzset{voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}} -\compattikzset{current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi current source = #1, \circuitikzbasekey/bipole/is current=true}} -\compattikzset{controlled voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}} -\compattikzset{controlled current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi controlled current source = #1, \circuitikzbasekey/bipole/is current=true}} - - -\compattikzset{generic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@generic@path, l=#1}} -\compattikzset{xgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@xgeneric@path, l=#1}} -\compattikzset{ageneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ageneric@path, l=#1}} -\compattikzset{tgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tgeneric@path, l=#1}} -\compattikzset{fullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullgeneric@path, l=#1}} -\compattikzset{tfullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tfullgeneric@path, l=#1}} -\compattikzset{short/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@short@path}} -\compattikzset{open/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@open@path}} - -\compattikzset{lamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lamp@path}} -\compattikzset{bulb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bulb@path, l=#1}} - -\compattikzset{squid/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@squid@path}} -\compattikzset{barrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@barrier@path}} -\compattikzset{openbarrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@openbarrier@path}} -\compattikzset{thermocouple/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermocouple@path}} -\compattikzset{fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fuse@path}} -\compattikzset{asymmetric fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@afuse@path}} - -\compattikzset{twoport/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@twoport@path}} -\compattikzset{vco/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vco@path}} -\compattikzset{bandpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandpass@path}} -\compattikzset{bandstop/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandstop@path}} -\compattikzset{highpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@highpass@path}} -\compattikzset{lowpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lowpass@path}} -\compattikzset{adc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@adc@path}} -\compattikzset{dac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dac@path}} -\compattikzset{dsp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dsp@path}} -\compattikzset{fft/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fft@path}} -\compattikzset{amp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@amp@path}} -\compattikzset{vamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamp@path}} -\compattikzset{piattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piattenuator@path}} -\compattikzset{vpiattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vpiattenuator@path}} -\compattikzset{tattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tattenuator@path}} -\compattikzset{vtattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vtattenuator@path}} -\compattikzset{phaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@phaseshifter@path}} -\compattikzset{vphaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vphaseshifter@path}} -\compattikzset{detector/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@detector@path}} -% -\compattikzset{sacdc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@sacdc@path, l=#1}} -\compattikzset{sdcac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@sdcac@path, l=#1}} -\compattikzset{tacdc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tacdc@path, l=#1}} -\compattikzset{tdcac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tdcac@path, l=#1}} - -% % % % % % -% % Begin of Diodes -% % % % % % - -\def\pgf@circ@fulldiode@path#1{\pgf@circ@bipole@path{fulldiode}{#1}} -\def\pgf@circ@fullzdiode@path#1{\pgf@circ@bipole@path{fullzdiode}{#1}} -\def\pgf@circ@fullzzdiode@path#1{\pgf@circ@bipole@path{fullzzdiode}{#1}} -\def\pgf@circ@fullsdiode@path#1{\pgf@circ@bipole@path{fullsdiode}{#1}} -\def\pgf@circ@fulltdiode@path#1{\pgf@circ@bipole@path{fulltdiode}{#1}} -\def\pgf@circ@fulllediode@path#1{\pgf@circ@bipole@path{fulllediode}{#1}} -\def\pgf@circ@fullpdiode@path#1{\pgf@circ@bipole@path{fullpdiode}{#1}} -\def\pgf@circ@fullvarcap@path#1{\pgf@circ@bipole@path{fullvarcap}{#1}} -\def\pgf@circ@fullbidirectionaldiode@path#1{\pgf@circ@bipole@path{fullbidirectionaldiode}{#1}} -\def\pgf@circ@emptydiode@path#1{\pgf@circ@bipole@path{emptydiode}{#1}} -\def\pgf@circ@emptyzdiode@path#1{\pgf@circ@bipole@path{emptyzdiode}{#1}} -\def\pgf@circ@emptyzzdiode@path#1{\pgf@circ@bipole@path{emptyzzdiode}{#1}} -\def\pgf@circ@emptysdiode@path#1{\pgf@circ@bipole@path{emptysdiode}{#1}} -\def\pgf@circ@emptytdiode@path#1{\pgf@circ@bipole@path{emptytdiode}{#1}} -\def\pgf@circ@emptylediode@path#1{\pgf@circ@bipole@path{emptylediode}{#1}} -\def\pgf@circ@emptypdiode@path#1{\pgf@circ@bipole@path{emptypdiode}{#1}} -\def\pgf@circ@emptyvarcap@path#1{\pgf@circ@bipole@path{emptyvarcap}{#1}} -\def\pgf@circ@emptybidirectionaldiode@path#1{\pgf@circ@bipole@path{emptybidirectionaldiode}{#1}} - -\compattikzset{full diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulldiode@path}} -\compattikzset{full Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullsdiode@path}} -\compattikzset{full Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzdiode@path}} -\compattikzset{full ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzzdiode@path}} -\compattikzset{full tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltdiode@path}} -\compattikzset{full photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullpdiode@path}} -\compattikzset{full led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulllediode@path}} -\compattikzset{full varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullvarcap@path}} -\compattikzset{full bidirectionaldiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullbidirectionaldiode@path}} -\compattikzset{full thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullthyristor@path}} -\compattikzset{full triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltriac@path}} - -\compattikzset{empty diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptydiode@path}} -\compattikzset{empty Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptysdiode@path}} -\compattikzset{empty Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzdiode@path}} -\compattikzset{empty ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzzdiode@path}} -\compattikzset{empty tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytdiode@path}} -\compattikzset{empty photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptypdiode@path}} -\compattikzset{empty led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptylediode@path}} -\compattikzset{empty varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyvarcap@path}} -\compattikzset{empty bidirectionaldiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptybidirectionaldiode@path}} -\compattikzset{empty thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptythyristor@path}} -\compattikzset{empty triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytriac@path}} - -\compattikzset{stroke diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptydiode@path}} -\compattikzset{stroke Schottky diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptysdiode@path}} -\compattikzset{stroke Zener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzdiode@path}} -\compattikzset{stroke ZZener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzzdiode@path}} -\compattikzset{stroke tunnel diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytdiode@path}} -\compattikzset{stroke photodiode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptypdiode@path}} -\compattikzset{stroke led/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptylediode@path}} -\compattikzset{stroke varcap/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyvarcap@path}} -\compattikzset{stroke thyristor/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptythyristor@path}} -%\compattikzset{stroke triac/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytriac@path}} - -\def\pgfcircdiodestylemacro{\ifpgf@circuit@strokediode stroke \else\ifpgf@circuit@fulldiode full \else empty \fi\fi} - -\compattikzset{Schottky diode/.style = {\comnpatname \pgfcircdiodestylemacro Schottky diode}} -\compattikzset{Zener diode/.style = {\comnpatname \pgfcircdiodestylemacro Zener diode}} -\compattikzset{ZZener diode/.style = {\comnpatname \pgfcircdiodestylemacro ZZener diode}} -\compattikzset{tunnel diode/.style = {\comnpatname \pgfcircdiodestylemacro tunnel diode}} -\compattikzset{photodiode/.style = {\comnpatname \pgfcircdiodestylemacro photodiode}} -\compattikzset{led/.style = {\comnpatname \pgfcircdiodestylemacro led}} -\compattikzset{varcap/.style = {\comnpatname \pgfcircdiodestylemacro varcap}} -\compattikzset{diode/.style = {\comnpatname \pgfcircdiodestylemacro diode}} -\compattikzset{thyristor/.style = {\comnpatname \pgfcircdiodestylemacro thyristor}} -\compattikzset{triac/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi triac}}%no stroke triac! -\compattikzset{bidirectionaldiode/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi bidirectionaldiode}}%no stroke bidirectionaldiode! (based on triac) - -%% Define Shortcuts -\compattikzset{Do/.style = {\comnpatname empty diode}} -\compattikzset{tDo/.style = {\comnpatname empty tunnel diode}} -\compattikzset{zDo/.style = {\comnpatname empty Zener diode}} -\compattikzset{zzDo/.style = {\comnpatname empty ZZener diode}} -\compattikzset{sDo/.style = {\comnpatname empty Schottky diode}} -\compattikzset{pDo/.style = {\comnpatname empty photodiode}} -\compattikzset{leDo/.style = {\comnpatname empty led}} -\compattikzset{VCo/.style = {\comnpatname empty varcap}} -\compattikzset{biDo/.style = {\comnpatname empty bidirectionaldiode}} -\compattikzset{Tyo/.style = {\comnpatname empty thyristor}} -\compattikzset{Tro/.style = {\comnpatname empty triac}} - -\compattikzset{D*/.style = {\comnpatname full diode}} -\compattikzset{tD*/.style = {\comnpatname full tunnel diode}} -\compattikzset{zD*/.style = {\comnpatname full Zener diode}} -\compattikzset{zzD*/.style = {\comnpatname full ZZener diode}} -\compattikzset{sD*/.style = {\comnpatname full Schottky diode}} -\compattikzset{pD*/.style = {\comnpatname full photodiode}} -\compattikzset{leD*/.style = {\comnpatname full led}} -\compattikzset{VC*/.style = {\comnpatname full varcap}} -\compattikzset{biD*/.style = {\comnpatname full bidirectionaldiode}} -\compattikzset{Ty*/.style = {\comnpatname full thyristor}} -\compattikzset{Tr*/.style = {\comnpatname full triac}} - -\compattikzset{D/.style = {\comnpatname diode}} -\compattikzset{tD/.style = {\comnpatname tunnel diode}} -\compattikzset{zD/.style = {\comnpatname Zener diode}} -\compattikzset{zzD/.style = {\comnpatname ZZener diode}} -\compattikzset{sD/.style = {\comnpatname Schottky diode}} -\compattikzset{pD/.style = {\comnpatname photodiode}} -\compattikzset{leD/.style = {\comnpatname led}} -\compattikzset{VC/.style = {\comnpatname varcap}} -\compattikzset{biD/.style = {\comnpatname bidirectionaldiode}} -\compattikzset{Ty/.style = {\comnpatname thyristor}} -\compattikzset{Tr/.style = {\comnpatname triac}} - -\compattikzset{D-/.style = {\comnpatname stroke diode}} -\compattikzset{tD-/.style = {\comnpatname stroke tunnel diode}} -\compattikzset{zD-/.style = {\comnpatname stroke Zener diode}} -\compattikzset{zzD-/.style = {\comnpatname stroke ZZener diode}} -\compattikzset{sD-/.style = {\comnpatname stroke Schottky diode}} -\compattikzset{pD-/.style = {\comnpatname stroke photodiode}} -\compattikzset{leD-/.style = {\comnpatname stroke led}} -\compattikzset{VC-/.style = {\comnpatname stroke varcap}} -\compattikzset{Ty-/.style = {\comnpatname stroke thyristor}} -\compattikzset{Tr-/.style = {\comnpatname empty triac}}%no stroke triac! -\compattikzset{biD-/.style = {\comnpatname empty bidirectionaldiode}}%no stroke bidirectionaldiode! (based on triac) - -% % % % % % -% % End of Diodes -% % % % % % - - -\compattikzset{memristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@memristor@path}} -\compattikzset{closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}} -\compattikzset{opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ospst@path, l=#1}} -\compattikzset{ncs/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}} -\compattikzset{nos/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}} -\compattikzset{normal closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}} -\compattikzset{normal open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}} -\compattikzset{switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}} -\compattikzset{push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}} -\compattikzset{nopb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}} -\compattikzset{normally open push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}} -\compattikzset{ncpb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncpushbutton@path, l=#1}} -\compattikzset{normally closed push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncpushbutton@path, l=#1}} -\compattikzset{toggle switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@toggleswitch@path}} - -\compattikzset{ammeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ammeter@path}} -\compattikzset{voltmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@voltmeter@path}} -\compattikzset{ohmmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ohmmeter@path}} -\tikzset{oscope/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@oscope@path, l=#1}} - -% cute switches -%% closed cute switch -\def\pgf@circ@cuteclosedswitch@path#1{\pgf@circ@bipole@path{cuteclosedswitch}{#1}} -\compattikzset{cute closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteclosedswitch@path, l=#1}} -\compattikzset{ccsw/.style= {\comnpatname cute closed switch= #1}} - -%% open cute switch -\def\pgf@circ@cuteopenswitch@path#1{\pgf@circ@bipole@path{cuteopenswitch}{#1}} -\compattikzset{cute open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteopenswitch@path, l=#1}} -\compattikzset{cosw/.style= {\comnpatname cute open switch= #1}} - -%% closing cute switch -\def\pgf@circ@cuteclosingswitch@path#1{\pgf@circ@bipole@path{cuteclosingswitch}{#1}} -\compattikzset{cute closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteclosingswitch@path, l=#1}} -\compattikzset{ccgsw/.style= {\comnpatname cute closing switch= #1}} - -%% opening cute switch -\def\pgf@circ@cuteopeningswitch@path#1{\pgf@circ@bipole@path{cuteopeningswitch}{#1}} -\compattikzset{cute opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteopeningswitch@path, l=#1}} -\compattikzset{cogsw/.style= {\comnpatname cute opening switch= #1}} - - -% short forms -\compattikzset{esource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@esource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{pvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{dcvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{dcisource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcisource@path, \circuitikzbasekey/bipole/is current=true, l=#1}} - -\compattikzset{ioosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is current=true,/tikz/to path=\pgf@circ@oosource@path, i=#1}} -\compattikzset{voosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,/tikz/to path=\pgf@circ@oosource@path, v=#1}} -\compattikzset{oosourcetrans/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,/tikz/to path=\pgf@circ@oosourcetrans@path, v=#1}} -\compattikzset{ooosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,/tikz/to path=\pgf@circ@ooosource@path, v=#1}} - -\compattikzset{vsource/.style = {\comnpatname voltage source = #1}} -\compattikzset{isource/.style = {\comnpatname current source = #1}} -\compattikzset{cisource/.style = {\comnpatname controlled current source = #1}} -\compattikzset{ecsource/.style = {\comnpatname empty controlled source = #1}} -\compattikzset{cvsource/.style = {\comnpatname controlled voltage source = #1}} -\compattikzset{vsourcesin/.style = {\comnpatname sinusoidal voltage source = #1}} -\compattikzset{vsourcesquare/.style = {\comnpatname square voltage source = #1}} -\compattikzset{vsourcetri/.style = {triangle voltage source = #1}} -\compattikzset{isourcesin/.style = {\comnpatname sinusoidal current source = #1}} -\compattikzset{cisourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}} -\compattikzset{cvsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}} - -\compattikzset{controlled vsource/.style = {\comnpatname controlled voltage source = #1}} -\compattikzset{controlled isource/.style = {\comnpatname controlled current source = #1}} -\compattikzset{controlled vsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}} -\compattikzset{controlled isourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}} - -\compattikzset{R/.style= {\comnpatname resistor = #1}} -\compattikzset{vR/.style= {\comnpatname variable resistor = #1}} -\compattikzset{phR/.style= {\comnpatname photoresistor = #1}} -\compattikzset{thR/.style= {\comnpatname thermistor = #1}} -\compattikzset{thRp/.style= {\comnpatname thermistor ptc= #1}} -\compattikzset{thRn/.style= {\comnpatname thermistor ntc= #1}} -\compattikzset{pR/.style= {\comnpatname potentiometer = #1}} -\compattikzset{C/.style = {\comnpatname capacitor = #1}} -\compattikzset{eC/.style = {\comnpatname ecapacitor = #1}} -%% pC is deprecated, use cC instead -\compattikzset{pC/.style = {\comnpatname polar capacitor = #1}} -\compattikzset{cC/.style = {\comnpatname curved capacitor = #1}} -\compattikzset{vC/.style = {\comnpatname variable capacitor = #1}} -\compattikzset{PZ/.style = {\comnpatname piezoelectric = #1}} -\compattikzset{L/.style = {\comnpatname inductor = #1}} -\compattikzset{vL/.style = {\comnpatname variable inductor = #1}} -\compattikzset{V/.style = {\comnpatname voltage source = #1}} -\compattikzset{cV/.style = {\comnpatname controlled voltage source = #1}} -\compattikzset{sV/.style = {\comnpatname sinusoidal voltage source = #1}} -\compattikzset{sqV/.style = {\comnpatname square voltage source = #1}} -\compattikzset{tV/.style = {\comnpatname triangle voltage source = #1}} -\compattikzset{csV/.style = {\comnpatname controlled sinusoidal voltage source = #1}} -\def\pgf@temp#1{ - \compattikzset{V#1/.style = {\comnpatname voltage source, v#1=##1} } - \compattikzset{cV#1/.style = {\comnpatname controlled voltage source, v#1=##1} } - \compattikzset{sV#1/.style = {\comnpatname sinusoidal voltage source, v#1=##1} } - \compattikzset{csV#1/.style = {\comnpatname controlled sinusoidal voltage source, v#1=##1} } -} -\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<} -\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_} - -%current sources -\compattikzset{I/.style = {\comnpatname current source = #1}} -\compattikzset{cI/.style = {\comnpatname controlled current source = #1}} -\compattikzset{sI/.style = {\comnpatname sinusoidal current source = #1}} -\compattikzset{csI/.style = {\comnpatname controlled sinusoidal current source = #1}} -\def\pgf@temp#1{ - \compattikzset{I#1/.style = {\comnpatname current source, i#1=##1} } - \compattikzset{cI#1/.style = {\comnpatname controlled current source, i#1=##1} } - \compattikzset{sI#1/.style = {\comnpatname sinusoidal current source, i#1=##1} } - \compattikzset{csI#1/.style = {\comnpatname controlled sinusoidal current source, i#1=##1} } -} -\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<} -\pgf@temp{>_} \pgf@temp{<_} \pgf@temp{>^} \pgf@temp{<^} -\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_} - -% cute sources -\def\pgf@circ@vsourceC@path#1{\pgf@circ@bipole@path{vsourceC}{#1}} -\compattikzset{cute european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceC@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{vsourceC/.style= {\comnpatname cute european voltage source= #1}} -\compattikzset{ceV/.style= {\comnpatname cute european voltage source= #1}} - -\def\pgf@circ@isourceC@path#1{\pgf@circ@bipole@path{isourceC}{#1}} -\compattikzset{cute european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceC@path, \circuitikzbasekey/bipole/is current=true, i=#1}} -\compattikzset{isourceC/.style= {\comnpatname cute european current source= #1}} -\compattikzset{ceI/.style= {\comnpatname cute european current source= #1}} - -\def\pgf@circ@cvsourceC@path#1{\pgf@circ@bipole@path{cvsourceC}{#1}} -\compattikzset{cute european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceC@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{cvsourceC/.style= {\comnpatname cute european controlled voltage source= #1}} -\compattikzset{cceV/.style= {\comnpatname cute european controlled voltage source= #1}} - -\def\pgf@circ@cisourceC@path#1{\pgf@circ@bipole@path{cisourceC}{#1}} -\compattikzset{cute european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceC@path, \circuitikzbasekey/bipole/is current=true, i=#1}} -\compattikzset{cisourceC/.style= {\comnpatname cute european controlled current source= #1}} -\compattikzset{cceI/.style= {\comnpatname cute european controlled current source= #1}} - -% noise sources -\def\pgf@circ@vsourceN@path#1{\pgf@circ@bipole@path{vsourceN}{#1}} -\compattikzset{noise voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceN@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}} -\compattikzset{vsourceN/.style= {\comnpatname noise voltage source= #1}} -\compattikzset{nV/.style= {\comnpatname noise voltage source= #1}} - -\def\pgf@circ@isourceN@path#1{\pgf@circ@bipole@path{isourceN}{#1}} -\compattikzset{noise current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceN@path, \circuitikzbasekey/bipole/is current=true, i=#1}} -\compattikzset{isourceN/.style= {\comnpatname noise current source= #1}} -\compattikzset{nI/.style= {\comnpatname noise current source= #1}} - -% resistive sensor american style -\def\pgf@circ@resistivesens@path#1{\pgf@circ@bipole@path{resistivesens}{#1}} -\compattikzset{american resistive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistivesens@path, l=#1}} -\compattikzset{european resistive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}} -\compattikzset{resistive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@sresistor@path, l=#1}} -\compattikzset{sR/.style= {\comnpatname resistive sensor= #1}} - -\compattikzset{capacitive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitivesens@path, l=#1}} -\compattikzset{sC/.style= {\comnpatname capacitive sensor= #1}} - -\compattikzset{cute inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductivesens@path, l=#1}} -\compattikzset{european inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductivesens@path, l=#1}} -\compattikzset{american inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductivesens@path, l=#1}} -\compattikzset{inductive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductivesens@path, l=#1}} -\compattikzset{sL/.style= {\comnpatname inductive sensor= #1}} - -\compattikzset{Mr/.style = {\comnpatname memristor}} - -\compattikzset{cspst/.style = {\comnpatname closing switch = #1}} -\compattikzset{ospst/.style = {\comnpatname opening switch = #1}} -\compattikzset{spst/.style = {\comnpatname switch = #1}} - -\compattikzset{afuse/.style = {\comnpatname asymmetric fuse=#1}} - -\compattikzset{vdd/.style = {\comnpatname vcc = #1}} -\compattikzset{vss/.style = {\comnpatname vee = #1}} - -% activate the to-style crossing -\def\pgf@circ@crossing@path#1{\pgf@circ@bipole@path{crossing}{#1}} -\compattikzset{crossing/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@crossing@path, l=#1}} -\compattikzset{xing/.style= {\comnpatname crossing= #1}} - -%% loudspeaker and microphone - -\def\pgf@circ@loudspeaker@path#1{\pgf@circ@bipole@path{loudspeaker}{#1}} -\compattikzset{loudspeaker/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@loudspeaker@path, l=#1}} - -\def\pgf@circ@mic@path#1{\pgf@circ@bipole@path{mic}{#1}} -\compattikzset{mic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mic@path, l=#1}} - -% more instrument -\def\pgf@circ@rmeter@path#1{\pgf@circ@bipole@path{rmeter}{#1}} -\compattikzset{rmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@rmeter@path, l=#1}} -\def\pgf@circ@rmeterwa@path#1{\pgf@circ@bipole@path{rmeterwa}{#1}} -\compattikzset{rmeterwa/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@rmeterwa@path, l=#1}} -\def\pgf@circ@smeter@path#1{\pgf@circ@bipole@path{smeter}{#1}} -\compattikzset{smeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@smeter@path, l=#1}} -% current loop probes -\def\pgf@circ@iloop@path#1{\pgf@circ@bipole@path{iloop}{#1}} -\compattikzset{iloop/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@iloop@path, l=#1}} -\def\pgf@circ@iloop2@path#1{\pgf@circ@bipole@path{iloop2}{#1}} -\compattikzset{iloop2/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@iloop2@path, l=#1}} -% qucs-style probes -\def\pgf@circ@qiprobe@path#1{\pgf@circ@bipole@path{qiprobe}{#1}} -\compattikzset{qiprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qiprobe@path, l=#1}} -\def\pgf@circ@qvprobe@path#1{\pgf@circ@bipole@path{qvprobe}{#1}} -\compattikzset{qvprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qvprobe@path, l=#1}} -\def\pgf@circ@qpprobe@path#1{\pgf@circ@bipole@path{qpprobe}{#1}} -\compattikzset{qpprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qpprobe@path, l=#1}} -% multiwire(s) -\def\pgf@circ@bmultiwire@path#1{\pgf@circ@bipole@path{bmultiwire}{#1}} -\compattikzset{bmultiwire/.style = {\circuitikzbasekey, -/tikz/to path=\pgf@circ@bmultiwire@path, l=#1}} -\def\pgf@circ@multiwire@path#1{\pgf@circ@bipole@path{multiwire}{#1}} -\compattikzset{multiwire/.style = {\circuitikzbasekey, -/tikz/to path=\pgf@circ@multiwire@path, l=#1}} -\def\pgf@circ@tmultiwire@path#1{\pgf@circ@bipole@path{tmultiwire}{#1}} -\compattikzset{tmultiwire/.style = {\circuitikzbasekey, -/tikz/to path=\pgf@circ@tmultiwire@path, l=#1}} - -% reed switches -\def\pgf@circ@reed@path#1{\pgf@circ@bipole@path{reed}{#1}} -\compattikzset{reed/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@reed@path, l=#1}} - -% Transistor like bipoles - -\def\pgf@circ@trans@path#1#2{ - \pgfextra{ - \edef\pgf@temp{\ctikzvalof{bipole/name}} - \def\pgf@circ@temp{#2} - \ifx\pgf@temp\pgf@circ@temp % if it has not a name - \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999} - \ctikzset{bipole/name = trans\pgf@circ@rand} % create it - \fi - } - \ifpgf@circuit@bipole@inverted - (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {} - (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {} - \else - (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {} - (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {} - \fi - \pgfextra{ - \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}} - {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}} - \pgfmathadd{\pgfmathresult}{-90} - \pgfmathround{\pgfmathresult} - \edef\pgf@circ@direction{\pgfmathresult} - } - ($(\tikztostart) ! .5 ! (\tikztotarget)$) - node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}] - (\ctikzvalof{bipole/name}) {} - node {\ctikzvalof{bipole/label/name}} - \ifcsname pgf@anchor@#1@pathstart\endcsname%if special path-anchors are defined, use them! - (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.pathstart) - (\ctikzvalof{bipole/name}.pathend) -- (\ctikzvalof{bipole/name}end.center) - \else - (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.left) - (\ctikzvalof{bipole/name}.right) -- (\ctikzvalof{bipole/name}end.center) - \fi - \drawpoles - \pgfextra{ - \pgfcircresetpath - } - (\tikztotarget) \tikztonodes % e si continua -} - - -\def\pgf@circ@definetranspath#1{ - \compattikzset{T#1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@trans@path{#1}{}, l=##1}} -} - -\pgf@circ@definetranspath{elmech} -\pgf@circ@definetranspath{nmos} -\pgf@circ@definetranspath{pmos} -\pgf@circ@definetranspath{hemt} -\pgf@circ@definetranspath{npn} -\pgf@circ@definetranspath{pnp} -\pgf@circ@definetranspath{nfet} -\pgf@circ@definetranspath{nigfete} -\pgf@circ@definetranspath{nigfetd} -\pgf@circ@definetranspath{nigfetebulk} -\pgf@circ@definetranspath{pfet} -\pgf@circ@definetranspath{pigfete} -\pgf@circ@definetranspath{pigfetd} -\pgf@circ@definetranspath{pigfetebulk} -\pgf@circ@definetranspath{njfet} -\pgf@circ@definetranspath{pjfet} -\pgf@circ@definetranspath{pigbt} -\pgf@circ@definetranspath{nigbt} -\pgf@circ@definetranspath{Lpigbt} -\pgf@circ@definetranspath{Lnigbt} -%%%---------- close: tex/pgfcircpath - -\ifpgf@circ@siunitx - \RequirePackage{xstring}[2009/03/13] - %\expandafter\let\csname angstrom\endcsname\relax - \RequirePackage{siunitx} -\fi - -\ifpgf@circ@explicitvdir\else - \PackageWarningNoLine{circuitikz}{% - You did not specify one of the voltage directions:\MessageBreak - \space\space oldvoltagedirection, nooldvoltagedirection, \MessageBreak - \space\space RPvoltages or EFvoltages \MessageBreak - Default directions may have changed, \MessageBreak - please check the manual% - } -\fi - -\newenvironment{circuitikz}{\begin{tikzpicture}}{\end{tikzpicture}} -%override (unused) circuitikz environment for compability to externalization) -\let\circuitikz\tikzpicture -\let\endcircuitikz\endtikzpicture +\input{circuitikz-1.1.2-body.tex} -\endinput -- cgit v1.2.3