\catcode`@=11%
%
% trick to strip the pt
{%
  \let\VDDcacode\catcode
  \catcode`p=12%
  \catcode`t=12%
  \gdef\VDDfree#1pt{#1}%
  \VDDcacode`t=11%
  \VDDcacode`p=11%
}%
%
\def\VDDllinepart@#1&#2&:#3 {%
  \setbox0\hbox{#3}\VDDllinepartbox@#1&#2
}%
\def\VDDllength@#1&#2& {%
  {%
    \VDDcplength@\length:#1&#2&
    \FPround\length\length{1}%
    \FPclip\length\length
    \setbox0\hbox{$\length$}\VDDllinepartbox@#1&#2
  }%
}%
\def\VDDlpointautoangle@#1&#2&#3&#4 {%
  {%
    \VDDcanglebetween@\angle:#3&#2&#1
    \FPround\angle\angle{0}%
    \setbox0\hbox{$\angle^\circ$}\VDDlpointbox@#1&#2&#3
  }%
}%
\def\VDDllength#1 {%
  \VDDparse@\VDDdef@\VDDparsetmp@#1
  \expandafter\VDDllength@\VDDparsetmp@&
}%
\def\VDDlbalk@#1&#2&#3&#4&#5&#6&#7&#8& {%
  \VDDlpointletter@#7&#6&#5&:
  \VDDlpointletter@#8&#4&#1&:
  \VDDtwocircular\VDDlpointletter@#1&#2&#3&#7&#8&#5&:
}%
\def\VDDllinepart#1:#2 {%
  \VDDparse@\VDDdef@\VDDparsetmp@#1
  \expandafter\VDDllinepart@\VDDparsetmp@&:#2
}%
\def\VDDlpointautoangle#1 {%
  \VDDparse@\VDDdef@\VDDparsetmp@#1
  \expandafter\VDDlpointautoangle@\VDDparsetmp@&
}%
\def\VDDlpointletter@#1&#2&#3&#4:#5 {%
  \setbox0\hbox{$#2$}\VDDlpointbox@#1&#2&#3
  \ifx\end#4\end\else\VDDlpointletter@#2&#3&#4:#5 \fi
}%
\def\VDDlpointany@#1&#2&#3&#4:#5 {%
  \setbox0\hbox{#5}\VDDlpointbox@#1&#2&#3
}%
\def\VDDlrefpoint@@#1#2{%
  \ifFPpos{#2}\then
    \ifFPgt{#2}{90}\then
      \VDDdef@cartesian #1(\dx,\dy)(,)
    \else
      \VDDdef@cartesian #1(\dx,-\dy)(,)
    \fi
  \else
    \ifFPlt{#2}{-90}\then
      \VDDdef@cartesian #1(-\dx,\dy)(,)
    \else
      \VDDdef@cartesian #1(-\dx,-\dy)(,)
    \fi
  \fi
}%
\def\VDDlcalcrefpoint@#1:#2&#3&#4:#5 {%
  {%
    \edef\VDD@tmpi{#5}%
    \let\radius\VDD@tmpi
    \VDDcangleocenter@\angle:#2&#3&#4
    \VDDcdirvecangle@ dir:\angle:
    \VDDcanglebetween@\angle:#2&#3&#4
    \FPupn\factor{\angle{} 360 div FPpi mul sin}%
    \ifFPgt\factor{0.00001}\then
      \FPdiv\radius\radius\factor
    \fi
    \VDDclincomb@ D:\radius*dir+1*#3
    \VDDgcopy@ tmpi&:D&
  }%
  \VDDcopy@ #1&:tmpi&
}%
\def\VDDllinepartbox@#1&#2 {%
  {%
    \VDDcopy@ tmpi&tmpii&G&H&:#1&#2&tmpi&tmpii&
    \expandafter\expandafter\expandafter
    \FPset\VDDx{D}{\expandafter\VDDfree\the\wd0}%
    \expandafter\expandafter\expandafter
    \FPset\VDDy{D}{\expandafter\VDDfree\the\ht0}%
    \expandafter\expandafter\expandafter
    \FPadd\VDDy{D}{\VDDy{D}}{\expandafter\VDDfree\the\dp0}%
    \FPset\unit{\expandafter\VDDfree\the\psunit}%
    \VDDclength@\radius:D
    \FPupn\radius{\radius{} 2 div \unit{} div .05 add}%
    \VDDcpanglehatx@\angle:G&H
    \VDDaddangle@@{\angle}{\angle}{90}%
    \VDDcdirvecangle@ E:\angle:
    \VDDcadd@ gemAB:G&H
    \VDDclincomb@ E:.5*gemAB+\radius*E
    \rput(\VDDx{E},\VDDy{E}){\box0}%
  }%
}%
\def\VDDllinelinepointbox@#1&#2:#3&#4:#5:#6 {%
  {%
    \VDDcopy@ ti&tii&tiii&tiv&tv&tvi&A&kd&kp&ld&lp&M&:#3&#1d&#1p&#2d&#2p&#4&ti&tii&tiii&tiv&tv&tvi&
    \VDDclincomb@ B:1*A+1*kd
    \VDDclincomb@ C:1*A+-1*kd
    \VDDclincomb@ D:1*A+1*ld
    \VDDclincomb@ E:1*A+-1*ld
    \VDDcleadline@ m&:k&:A&
    \VDDcinnerproduct@\mdref:M&md
    \VDDcinnerproduct@\mdbase:kp&md
    \VDDcinnerproduct@\mdD:E&md
    \FPupn\dirl{\mdref{} \mdbase{} sub \mdD{} \mdbase{} sub mul #5 mul}%
    \VDDcleadline@ m&:l&:A&
    \VDDcinnerproduct@\mdref:M&md
    \VDDcinnerproduct@\mdbase:lp&md
    \VDDcinnerproduct@\mdD:C&md
    \FPupn\dirk{\mdref{} \mdbase{} sub \mdD{} \mdbase{} sub mul #6 mul}%
    \FPupn\cross{\VDD@ldx{} \VDD@kdy{} mul \VDD@ldy{} \VDD@kdx{} mul sub}%
    %\ifFPzero{\dirk}\then
    %  \message{dirkzero}%
    %  \ifFPpos{#5}\then
    %    \message{dirkadd}%
    %    \FPadd\dirk\dirk{0.1}%
    %  \fi
    %\fi
    %\ifFPzero{\dirl}\then
    %  \message{dirlzero}%
    %  \ifFPpos{#6}\then
    %    \FPadd\dirl\dirl{0.1}%
    %  \fi
    %\fi
    \ifFPpos\dirl\then
      \ifFPpos\dirk\then
	\ifFPpos\cross\then
	  \VDDlpointbox@ D&A&B
	\else
	  \VDDlpointbox@ B&A&D
	\fi
      \else
	\ifFPpos\cross\then
	  \VDDlpointbox@ C&A&D
	\else
	  \VDDlpointbox@ D&A&C
	\fi
      \fi
    \else
      \ifFPpos\dirk\then
	\ifFPpos\cross\then
	  \VDDlpointbox@ B&A&E
	\else
	  \VDDlpointbox@ E&A&B
	\fi
      \else
	\ifFPpos\cross\then
	  \VDDlpointbox@ E&A&C
	\else
	  \VDDlpointbox@ C&A&E
	\fi
      \fi
    \fi
  }%
}%
\def\VDDllineedgeany@#1:#2:#3:#4:#5 {%
  {%
    \VDDcopy@ ti&tii&tiii&kd&kp&E&:#1d&#1p&#2&ti&tii&tiii&
    %\message{\VDDdcanvas@minx \VDDdcanvas@miny \VDDdcanvas@maxx \VDDdcanvas@maxy}%
    \def\VDD@Ax{\VDDdcanvas@minx}%
    %\FPadd\VDD@Ax\VDD@Ax\VDDd@margin
    \def\VDD@Ay{\VDDdcanvas@miny}%
    %\FPadd\VDD@Ay\VDD@Ay\VDDd@margin
    \def\VDD@Bx{\VDDdcanvas@maxx}%
    %\FPsub\VDD@Bx\VDD@Bx\VDDd@margin
    \def\VDD@By{\VDDdcanvas@miny}%
    %\FPadd\VDD@By\VDD@By\VDDd@margin
    \def\VDD@Cx{\VDDdcanvas@maxx}%
    %\FPsub\VDD@Cx\VDD@Cx\VDDd@margin
    \def\VDD@Cy{\VDDdcanvas@maxy}%
    %\FPsub\VDD@Cy\VDD@Cy\VDDd@margin
    \def\VDD@Dx{\VDDdcanvas@minx}%
    %\FPadd\VDD@Dx\VDD@Dx\VDDd@margin
    \def\VDD@Dy{\VDDdcanvas@maxy}%
    %\FPsub\VDD@Dy\VDD@Dy\VDDd@margin
    %\VDDmessage@ A&B&C&D&
    \VDDdeflinepoint@ l:A&B&
    \VDDdeflinepoint@ m:B&C&
    \VDDdeflinepoint@ n:C&D&
    \VDDdeflinepoint@ o:A&D&
    \VDDcintersect@ L:k&l:
    \VDDcintersect@ M:k&m:
    \VDDcintersect@ N:k&n:
    \VDDcintersect@ O:k&o:
    \VDDcleadline@ p&:k&:E&
    \VDDcintersect@ P:p&k:
    \ifFPpos{#3}\then
      \VDDcsub@ P:E&P&
    \else
      \VDDcsub@ P:P&E&
    \fi
    \VDDcsub@ diffL:L&E&
    \VDDcsub@ diffM:M&E&
    \VDDcsub@ diffN:N&E&
    \VDDcsub@ diffO:O&E&
    \def\VDD@goodcross{-999999999999999999.999999999999999999}%
    \ifFPgt\VDD@Lx\VDDdcanvas@minx\then
      \ifFPlt\VDD@Lx\VDDdcanvas@maxx\then
	%\VDDmessage@ diffL&
	\VDDccrossproduct@\cross:diffL&P
	\ifFPgt{\cross}{\VDD@goodcross}\then
	  \FPset{\VDD@goodcross}{\cross}%
	  \edef\VDD@Qx{\VDDx{L}}%
	  \edef\VDD@Qy{\VDDy{L}}%
	  \edef\VDD@qpx{\VDDx{lp}}%
	  \edef\VDD@qpy{\VDDy{lp}}%
	  \edef\VDD@qdx{\VDDx{ld}}%
	  \edef\VDD@qdy{\VDDy{ld}}%
	\fi
	%\message{crossL \cross }
      \fi
    \fi
    \ifFPgt\VDD@Nx\VDDdcanvas@minx\then
      \ifFPlt\VDD@Nx\VDDdcanvas@maxx\then
	%\VDDmessage@ diffN&
	\VDDccrossproduct@\cross:diffN&P
	\ifFPgt{\cross}{\VDD@goodcross}\then
	  \FPset{\VDD@goodcross}{\cross}%
	  \edef\VDD@Qx{\VDDx{N}}%
	  \edef\VDD@Qy{\VDDy{N}}%
	  \edef\VDD@qpx{\VDDx{np}}%
	  \edef\VDD@qpy{\VDDy{np}}%
	  \edef\VDD@qdx{\VDDx{nd}}%
	  \edef\VDD@qdy{\VDDy{nd}}%
	\fi
	%\message{crossL \cross }
      \fi
    \fi
    \ifFPgt\VDD@My\VDDdcanvas@miny\then
      \ifFPlt\VDD@My\VDDdcanvas@maxy\then
	%\VDDmessage@ diffM&
	\VDDccrossproduct@\cross:diffM&P
	\ifFPgt{\cross}{\VDD@goodcross}\then
	  \FPset{\VDD@goodcross}{\cross}%
	  \edef\VDD@Qx{\VDDx{M}}%
	  \edef\VDD@Qy{\VDDy{M}}%
	  \edef\VDD@qpx{\VDDx{mp}}%
	  \edef\VDD@qpy{\VDDy{mp}}%
	  \edef\VDD@qdx{\VDDx{md}}%
	  \edef\VDD@qdy{\VDDy{md}}%
	\fi
	%\message{crossM \cross }
      \fi
    \fi
    \ifFPgt\VDD@Oy\VDDdcanvas@miny\then
      \ifFPlt\VDD@Oy\VDDdcanvas@maxy\then
	%\VDDmessage@ diffO&
	\VDDccrossproduct@\cross:diffO&P
	\ifFPgt{\cross}{\VDD@goodcross}\then
	  \FPset{\VDD@goodcross}{\cross}%
	  \edef\VDD@Qx{\VDDx{O}}%
	  \edef\VDD@Qy{\VDDy{O}}%
	  \edef\VDD@qpx{\VDDx{op}}%
	  \edef\VDD@qpy{\VDDy{op}}%
	  \edef\VDD@qdx{\VDDx{od}}%
	  \edef\VDD@qdy{\VDDy{od}}%
	\fi
	%\message{crossO \cross }
      \fi
    \fi
    \ifFPgt\cross{-999999999999999999.999999999999999999}\then
	\VDDllinelinepointany kq:QE:#4:-1:#5
    \fi
  }%
}%
\def\VDDllineedgeletter@#1:#2:#3:#4 {%
  {%
    \VDDcopy@ ti&tii&tiii&kd&kp&E&:#1d&#1p&#2&ti&tii&tiii&
    %\message{\VDDdcanvas@minx \VDDdcanvas@miny \VDDdcanvas@maxx \VDDdcanvas@maxy}%
    \def\VDD@Ax{\VDDdcanvas@minx}%
    %\FPadd\VDD@Ax\VDD@Ax\VDDd@margin
    \def\VDD@Ay{\VDDdcanvas@miny}%
    %\FPadd\VDD@Ay\VDD@Ay\VDDd@margin
    \def\VDD@Bx{\VDDdcanvas@maxx}%
    %\FPsub\VDD@Bx\VDD@Bx\VDDd@margin
    \def\VDD@By{\VDDdcanvas@miny}%
    %\FPadd\VDD@By\VDD@By\VDDd@margin
    \def\VDD@Cx{\VDDdcanvas@maxx}%
    %\FPsub\VDD@Cx\VDD@Cx\VDDd@margin
    \def\VDD@Cy{\VDDdcanvas@maxy}%
    %\FPsub\VDD@Cy\VDD@Cy\VDDd@margin
    \def\VDD@Dx{\VDDdcanvas@minx}%
    %\FPadd\VDD@Dx\VDD@Dx\VDDd@margin
    \def\VDD@Dy{\VDDdcanvas@maxy}%
    %\FPsub\VDD@Dy\VDD@Dy\VDDd@margin
    %\VDDmessage@ A&B&C&D&
    \VDDdeflinepoint@ l:A&B&
    \VDDdeflinepoint@ m:B&C&
    \VDDdeflinepoint@ n:C&D&
    \VDDdeflinepoint@ o:A&D&
    \VDDcintersect@ L:k&l:
    \VDDcintersect@ M:k&m:
    \VDDcintersect@ N:k&n:
    \VDDcintersect@ O:k&o:
    \VDDcleadline@ p&:k&:E&
    \VDDcintersect@ P:p&k:
    \ifFPpos{#3}\then
      \VDDcsub@ P:E&P&
    \else
      \VDDcsub@ P:P&E&
    \fi
    \VDDcsub@ diffL:L&E&
    \VDDcsub@ diffM:M&E&
    \VDDcsub@ diffN:N&E&
    \VDDcsub@ diffO:O&E&
    \def\VDD@goodcross{-999999999999999999.999999999999999999}%
    \ifFPgt\VDD@Lx\VDDdcanvas@minx\then
      \ifFPlt\VDD@Lx\VDDdcanvas@maxx\then
	%\VDDmessage@ diffL&
	\VDDccrossproduct@\cross:diffL&P
	\ifFPgt{\cross}{\VDD@goodcross}\then
	  \FPset{\VDD@goodcross}{\cross}%
	  \edef\VDD@Qx{\VDDx{L}}%
	  \edef\VDD@Qy{\VDDy{L}}%
	  \edef\VDD@qpx{\VDDx{lp}}%
	  \edef\VDD@qpy{\VDDy{lp}}%
	  \edef\VDD@qdx{\VDDx{ld}}%
	  \edef\VDD@qdy{\VDDy{ld}}%
	\fi
	%\message{crossL \cross }
      \fi
    \fi
    \ifFPgt\VDD@Nx\VDDdcanvas@minx\then
      \ifFPlt\VDD@Nx\VDDdcanvas@maxx\then
	%\VDDmessage@ diffN&
	\VDDccrossproduct@\cross:diffN&P
	\ifFPgt{\cross}{\VDD@goodcross}\then
	  \FPset{\VDD@goodcross}{\cross}%
	  \edef\VDD@Qx{\VDDx{N}}%
	  \edef\VDD@Qy{\VDDy{N}}%
	  \edef\VDD@qpx{\VDDx{np}}%
	  \edef\VDD@qpy{\VDDy{np}}%
	  \edef\VDD@qdx{\VDDx{nd}}%
	  \edef\VDD@qdy{\VDDy{nd}}%
	\fi
	%\message{crossL \cross }
      \fi
    \fi
    \ifFPgt\VDD@My\VDDdcanvas@miny\then
      \ifFPlt\VDD@My\VDDdcanvas@maxy\then
	%\VDDmessage@ diffM&
	\VDDccrossproduct@\cross:diffM&P
	\ifFPgt{\cross}{\VDD@goodcross}\then
	  \FPset{\VDD@goodcross}{\cross}%
	  \edef\VDD@Qx{\VDDx{M}}%
	  \edef\VDD@Qy{\VDDy{M}}%
	  \edef\VDD@qpx{\VDDx{mp}}%
	  \edef\VDD@qpy{\VDDy{mp}}%
	  \edef\VDD@qdx{\VDDx{md}}%
	  \edef\VDD@qdy{\VDDy{md}}%
	\fi
	%\message{crossM \cross }
      \fi
    \fi
    \ifFPgt\VDD@Oy\VDDdcanvas@miny\then
      \ifFPlt\VDD@Oy\VDDdcanvas@maxy\then
	%\VDDmessage@ diffO&
	\VDDccrossproduct@\cross:diffO&P
	\ifFPgt{\cross}{\VDD@goodcross}\then
	  \FPset{\VDD@goodcross}{\cross}%
	  \edef\VDD@Qx{\VDDx{O}}%
	  \edef\VDD@Qy{\VDDy{O}}%
	  \edef\VDD@qpx{\VDDx{op}}%
	  \edef\VDD@qpy{\VDDy{op}}%
	  \edef\VDD@qdx{\VDDx{od}}%
	  \edef\VDD@qdy{\VDDy{od}}%
	\fi
	%\message{crossO \cross }
      \fi
    \fi
    \ifFPgt\cross{-999999999999999999.999999999999999999}\then
	\VDDllinelinepointany kq:QE:#4:-1:$#1$
    \fi
  }%
}%
\def\VDDllineedgeletter#1:#2:#3 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@dontcare\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \expandafter\VDDllineedgeletter@\VDDparsetmp@:#3
}%
\def\VDDllineedgeany#1:#2:#3 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@dontcare\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \expandafter\VDDllineedgeany@\VDDparsetmp@:#3
}%
\def\VDDllinepointbox@#1:#2&#3:#4 {%
  {%
    \VDDcopy@ ti&tii&tiii&tiv&A&ld&lp&M&:#2&#1d&#1p&#3&ti&tii&tiii&tiv&
    \VDDclincomb@ B:1*A+1*#1d
    \VDDclincomb@ C:1*A+-1*#1d
    \VDDcleadline@ m&:l&:A&
    \VDDclincomb@ D:1*A+.5*md
    \VDDcinnerproduct@\mdref:M&md
    \VDDcinnerproduct@\mdbase:lp&md
    \VDDcinnerproduct@\mdD:D&md
    \FPupn\outputiv{\mdref{} \mdbase{} sub \mdD{} \mdbase{} sub mul #4 mul}%
    %\ifFPzero{\outputiv}\then
    %  \ifFPpos{#4}\then
    %    \FPadd\outputiv\outputiv{0.1}%
    %  \fi
    %\fi
    \ifFPpos\outputiv\then
      \VDDlpointbox@ C&A&B
    \else
      \VDDlpointbox@ B&A&C
    \fi
  }%
}%
\def\VDDlcirclepointbox@#1&#2:#3:#4 {%
  {%
    \VDDccircletangent@ l&:#1&:#3:
    \VDDllinepointbox@ l:#1&#3:#4
  }%
}%
\def\VDDlcirclecirclepointletter@ #1:#2&#3:#4:#5 {%
  {%
    \VDDccircletangent@ k&:#1&:#2:
    \VDDccircletangent@ l&:#1&:#3:
    \VDDllinelinepointletter@ k&l:#1&#2:#4:#5
  }%
}%
\def\VDDlcirclecirclepointany@ #1:#2&#3:#4:#5:#6 {%
  {%
    \VDDccircletangent@ k&:#1&:#2:
    \VDDccircletangent@ l&:#1&:#3:
    \VDDllinelinepointany@ k&l:#1&#2:#4:#5:#6
  }%
}%
\def\VDDlcirclelinepointany@ #1:#2&#3:#4:#5:#6 {%
  {%
    \VDDcopy@ ti&tii&ld&lp&:#1d&#1p&ti&tii&
    \VDDccircletangent@ k&:#3&:#2:
    \VDDllinelinepointany@ k&l:#3&#2:#4:#5:#6
  }%
}%
\def\VDDlcirclelinepointletter@ #1:#2&#3:#4:#5 {%
  {%
    \VDDcopy@ ti&tii&ld&lp&:#1d&#1p&ti&tii&
    \VDDccircletangent@ k&:#3&:#2:
    \VDDllinelinepointletter@ k&l:#3&#2:#4:#5
  }%
}%
\def\VDDllinelinepointany@ #1&#2:#3&#4:#5:#6:#7 {%
  \setbox0\hbox{#7}\VDDllinelinepointbox@ #1&#2:#3&#4:#5:#6
}%
\def\VDDllinelinepointletter@ #1&#2:#3&#4:#5:#6 {%
  \VDDllinelinepointany@ #1&#2:#3&#4:#5:#6:$#3$
}%
\def\VDDllinepointany@ #1&#2:#3&#4:#5:#6:#7 {%
  \setbox0\hbox{#7}\VDDllinepointbox@#1:#3&#5:#6
}%
\def\VDDllinepointletter@#1&#2:#3&#4:#5:#6 {%
  \VDDllinepointany@ #1&#2:#3&#4:#5:#6:$#3$
  \ifx\end#4\end\else\VDDllinepointletter@#2:#4:#5: \fi
}%
\def\VDDlcirclepointany@#1&#2:#3:#4:#5 {%
  \setbox0\hbox{#5}\VDDlcirclepointbox@#1&:#3:#4
}%
\def\VDDlcirclepointletter@#1&#2:#3:#4 {%
  \VDDlcirclepointany@#1&#2:#3:#4:$#1$
  %\setbox0\hbox{$#1$}\VDDlcirclepointbox@#1&:#3:#4
  \ifx\end#2\end\else\VDDlcirclepointletter@#2:#3:#4 \fi
}%
% center : radius : angle : dir : label
\def\VDDlcircleangleany@#1:#2:#3:#4:#5 {%
  {%
    \VDDcopy@ ti&M&:#1&ti&
    \VDDcabstransangle@ M'&:M&:#3:#2
    \VDDlcirclepointany@ M'&:M:#4:#5
  }%
}%
\def\VDDlcircleangleany #1:#2 {%
  \VDDparse@\VDDdef@\VDDparsetmp@#1
  \expandafter\VDDlcircleangleany@\VDDparsetmp@:#2
}%
\def\VDDlcoordinatesany@#1:#2:#3 {%
  {%
    \VDDround@ #1&
    \rput{#2}(\VDDx{#1},\VDDy{#1}){#3}%
  }%
}%
\def\VDDlcoordinatesany#1:#2 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#1
  \expandafter\VDDlcoordinatesany@\VDDparsetmp@:#2
}%
\def\VDDlpointbox@#1&#2&#3 {%
  {%
    \VDDcopy@ tmpi&tmpii&tmpiii&A&B&C&:#1&#2&#3&tmpi&tmpii&tmpiii&
    \expandafter\expandafter\expandafter
    \FPset\VDDx{D}{\expandafter\VDDfree\the\wd0}%
    \expandafter\expandafter\expandafter
    \FPset\VDDy{D}{\expandafter\VDDfree\the\ht0}%
    \expandafter\expandafter\expandafter
    \FPadd\VDDy{D}{\VDDy{D}}{\expandafter\VDDfree\the\dp0}%
    \FPset\unit{\expandafter\VDDfree\the\psunit}%
    \VDDclength@\radius:D
    \FPupn\radius{\radius{} 2 div \unit{} div .05 add}%
    \VDDlcalcrefpoint@ dir:C&B&A:\radius{}
    \VDDround@ dir&
    \rput(\VDDx{dir},\VDDy{dir}){\box0}%
  }%
}%
\def\VDDlpolygon#1 {%
  \VDDparse@\VDDdef@\VDDparsetmp@#1
  \expandafter\VDDtwocircular\expandafter\VDDlpointletter@\VDDparsetmp@&:
}%
\def\VDDlpointletter#1 {%
  \VDDparse@\VDDdef@\VDDparsetmp@#1
  \expandafter\VDDlpointletter@\VDDparsetmp@&:
}%
\def\VDDllinelinepointany#1:#2:#3:#4:#5 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@dontcare\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \expandafter\VDDllinelinepointany@\VDDparsetmp@:#3:#4:#5
}%
\def\VDDllinelinepointletter#1:#2:#3 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@dontcare\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \expandafter\VDDllinelinepointletter@\VDDparsetmp@:#3
}%
\def\VDDlcirclecirclepointletter#1:#2:#3 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \expandafter\VDDlcirclecirclepointletter@\VDDparsetmp@:#3
}%
\def\VDDlcirclecirclepointany#1:#2:#3 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \expandafter\VDDlcirclecirclepointany@\VDDparsetmp@:#3
}%
\def\VDDlcirclelinepointany#1:#2:#3 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@dontcare\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \expandafter\VDDlcirclelinepointany@\VDDparsetmp@:#3
}%
\def\VDDlcirclelinepointletter#1:#2:#3 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@dontcare\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \expandafter\VDDlcirclelinepointletter@\VDDparsetmp@:#3
}%
\def\VDDllinepointany#1:#2:#3:#4:#5 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@dontcare\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@&:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \edef\VDDparsetmp@{\VDDparsetmp@&:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#3
  \expandafter\VDDllinepointany@\VDDparsetmp@:#4:#5
}%
\def\VDDllinepointletter#1:#2:#3:#4 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@dontcare\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@&:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \edef\VDDparsetmp@{\VDDparsetmp@&:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#3
  \expandafter\VDDllinepointletter@\VDDparsetmp@:#4
}%
\def\VDDlcirclepointany#1:#2:#3:#4 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@&:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \expandafter\VDDlcirclepointany@\VDDparsetmp@:#3:#4
}%
\def\VDDlcirclepointletter#1:#2:#3 {%
  \def\VDDparsetmp@{}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@&:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \expandafter\VDDlcirclepointletter@\VDDparsetmp@:#3
}%
\def\VDDlpointany#1:#2 {%
  \VDDparse@\VDDdef@\VDDparsetmp@#1
    \expandafter\VDDlpointany@\VDDparsetmp@&:#2
}%
\def\VDDlangleequal@@#1&#2&#3&#4 {%
  \VDDlcalcrefpoint@ ref:#1&#2&#3:\VDDlangleequalradius{}
  \VDDround@ ref&
  \psdots(\VDDx{ref},\VDDy{ref})
  \ifx\end#4\end\else\VDDlangleequal@@#4 \fi
}%
\def\VDDlangleequal@#1 {%
  \ifcase\VDDlangleequalcount
    \psset{dotstyle=+,dotangle=45}%
  \or
    \psset{dotstyle=*,dotangle=0}%
  \or
    \psset{dotstyle=+,dotangle=0}%
  \or
    \psset{dotstyle=o,dotangle=0}%
  \or
    \psset{dotstyle=triangle,dotangle=0}%
  \or
    \psset{dotstyle=square,dotangle=0}%
  \or
    \errmessage{geen angleequalstyles meer}%
  \fi
  \advance\VDDlangleequalcount1
  \VDDlangleequal@@#1
}%
\def\VDDlangleequal#1 {%
  \VDDparse@\VDDdef@\VDDparse@tmp#1
  \expandafter\VDDlangleequal@\VDDparse@tmp&
}%
\def\VDDlnumberangles@@#1&#2&#3:#4& {%
  \advance\count255 1
  \setbox0=\hbox{$\scriptscriptstyle\the\count255$}%
  \VDDlpointbox@ #1&#4&#2
  \ifx\end#3\end\else\VDDlnumberangles@@#2&#3:#4& \fi
}%
\def\VDDlnumberangles@#1:#2 {%
  \count255 0
  \VDDlnumberangles@@#1:#2
}%
\def\VDDlnumberangles#1:#2 {%
  \VDDparse@\VDDdef@\VDDparsetmp@#1
  \edef\VDDparsetmp@{\VDDparsetmp@&:}%
  \VDDparse@letter\VDDdef@\VDDparsetmp@#2
  \expandafter\VDDlnumberangles@\VDDparsetmp@&
}%
\catcode`@=12%
