% 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}
}
%% 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 <patrikradvanyi@gmail.com>
% 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}
}

%% 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

}

%%%%%%%%%%%%%%%%%%%%%%%
%% 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 <patrikradvanyi@gmail.com>
%
\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
