summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pst-geometrictools/pst-geometrictools.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-07-02 21:15:25 +0000
committerKarl Berry <karl@freefriends.org>2017-07-02 21:15:25 +0000
commitaa1ec265529a565a37cc4b8bdd7e8c7090afc38c (patch)
tree0dd261de6aa01ff92cc6d8e70a24c65ee50c8335 /Master/texmf-dist/tex/generic/pst-geometrictools/pst-geometrictools.tex
parentefc6324a9b0ff04182c5a6683d271c43f33b28d5 (diff)
pst-geometrictools (2jul17)
git-svn-id: svn://tug.org/texlive/trunk@44742 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-geometrictools/pst-geometrictools.tex')
-rw-r--r--Master/texmf-dist/tex/generic/pst-geometrictools/pst-geometrictools.tex1231
1 files changed, 1231 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-geometrictools/pst-geometrictools.tex b/Master/texmf-dist/tex/generic/pst-geometrictools/pst-geometrictools.tex
new file mode 100644
index 00000000000..004719f05a8
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pst-geometrictools/pst-geometrictools.tex
@@ -0,0 +1,1231 @@
+%% This is file `pst-geometrictools.tex',
+%%
+%% Thomas S\"{o}ll
+%%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1.3c of %%
+%% the License, or (at your option) any later version. %%
+%%
+%% DESCRIPTION:
+%% `pst-geometrictools' is a PSTricks package to draw a protractor, a ruler, a compass and pencils
+%%
+%%
+\csname PSTgeometrictoolsLoaded\endcsname
+\let\PSTgeometrictoolsLoaded\endinput
+% Requires PSTricks, pst-xkey, pst-node packages
+\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex\fi
+\ifx\PSTnodeLoaded\endinput\else\input pst-node.tex\fi
+\def\fileversion{1.0}
+\def\filedate{2017/06/29}
+\message{`PST' v\fileversion, \filedate}
+
+\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
+
+
+\pst@addfams{pst-geometrictools}
+
+\define@boolkey[psset]{pst-geometrictools}[Pst@]{Ghost}[true]{}
+\define@key[psset]{pst-geometrictools}{ProLineCol}[cyan]{\pst@getcolor{#1}\ProLineCol}
+\define@key[psset]{pst-geometrictools}{ProFillCol}[gray!60]{\pst@getcolor{#1}\ProFillCol}
+\define@key[psset]{pst-geometrictools}{ProScale}[1]{\def\pst@ProScale{#1 }}%
+\define@key[psset]{pst-geometrictools}{OwnerTxt}[Euklid]{\def\pst@OwnerTxt{#1}}%
+\define@key[psset]{pst-geometrictools}{MadeTxt}[made in NES]{\def\pst@MadeTxt{#1}}%
+\define@key[psset]{pst-geometrictools}{PSfontO}[Symbol]{\def\pst@PSfontO{/#1 }}
+\define@key[psset]{pst-geometrictools}{fontsizeO}[10]{\def\pst@fontsizeO{#1 }}
+\define@key[psset]{pst-geometrictools}{PSfontM}[Times-Roman]{\def\pst@PSfontM{/#1 }}
+\define@key[psset]{pst-geometrictools}{fontsizeM}[6]{\def\pst@fontsizeM{#1 }}
+\define@key[psset]{pst-geometrictools}{country}[Germany]{\def\pst@country{#1}}
+\psset[pst-geometrictools]{ProScale=1,OwnerTxt={Euklid},MadeTxt={made in NES},country=Germany,PSfontO=Symbol,PSfontM=Times-Roman,fontsizeO=10,fontsizeM=6,ProFillCol=gray!60,ProLineCol=cyan,Ghost=false}
+
+
+\def\psProtractor{\def\pst@par{}\pst@object{psProtractor}}
+\def\psProtractor@i#1(#2){\@ifnextchar(%
+{\psProtractor@ii{#1}(#2)}%
+{\psProtractor@ii{#1}(#2)(#2)}}%
+\def\psProtractor@ii#1(#2)(#3){%------------------------------- #1 Winkel, #2 Ursprung P, zweiter Punkt Q f\"{u}r Winkel
+\begin@SpecialObj
+\pst@killglue
+\begingroup%
+\pnode(#2){@PGD}%
+\pnode(#3){@QGD}%
+\use@par%
+\pst@getcoor{@QGD}\pst@tempB % -------------------------- Hohle die Koordinaten und speichere sie in \pst@tempB
+\pst@getcoor{@PGD}\pst@tempA % -------------------------- Hohle die Koordinaten und speichere sie in \pst@tempA
+\addto@pscode{%
+/sysfill {systemdict /fill get exec} def
+/Country (\pst@country) def
+ /cm {28.45274 mul} def % ---------------------------------------- Definiere cm als L\"{a}ngeneinheit mit der multipliziert wird
+ \pst@tempA \tx@UserCoor /@y1 ED /@x1 ED % ---------- Definiere die Koordinaten des Ursprungs (zur Winkelberechnung ben\"{o}tigt)
+ \pst@tempB \tx@UserCoor /@y2 ED /@x2 ED % ---------- Definiere die Koordinaten des zweiten Punktes (zur Winkelberechnung ben\"{o}tigt)
+ @y1 @y2 sub @x1 @x2 sub Atan /@delta ED %------------ Winkelberechnung
+ \pst@tempA \pst@coor T % ------------------------------------ Tranformiere den Koordinatenursprung in P
+ @delta #1 add 180 add rotate % ------------------------------ Drehe das gesamte Geodreieck
+ \pst@ProScale dup scale % -------- Skaliere das ganze Geodreieck
+%-------------------------------------------------------------------------------------------------------------
+\ifPst@Ghost\else
+gsave
+%-------------------------------------------------------------------------------------------------------------
+%-------------- \"{A}u{\ss}ere Begrenzung des Geodreiecks -----------------------------------------------
+gsave
+ newpath
+ -8 cm 0 moveto
+ 16 cm 0 rlineto
+ -8 cm 8 cm rlineto
+ closepath
+ gsave
+ 0.7 setlinewidth
+ 0.1 setgray
+ stroke
+ grestore
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%-------------- Gef\"{u}llter innerer Teil des Geodreiecks -----------------------------------------------
+gsave
+ newpath
+ -7.5 cm 0.5 22.5 tan mul cm moveto
+ 15 cm 0 rlineto
+ -7.5 cm 7.5 cm rlineto
+ closepath
+ gsave
+ \pst@usecolor\ProFillCol
+ [ /ca .1 /SetTransparency pdfmark % set transparency
+ 0.1 .setopacityalpha sysfill
+ grestore
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%-------------- Millimetereinteilung auf der Grundseite -------------------------------------------
+ /mmBlinie { newpath
+ -7 cm 0 cm moveto
+ 0 cm 0.17 cm rlineto
+% closepath
+ gsave
+ 0.5 setlinewidth
+ 0 setgray
+ stroke
+ grestore
+ 0.1 cm 0 cm translate
+ } def
+gsave
+140 {mmBlinie} repeat
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%-------------- 0,5- cm-Einteilung auf der Grundseite ----------------------------------------------
+ /cmBlinie { newpath
+ -7 cm 0 cm moveto
+ 0 cm 0.27 cm rlineto
+% closepath
+ gsave
+ 0.55 setlinewidth
+ 0 setgray
+ stroke
+ grestore
+ 0.5 cm 0 cm translate
+ } def
+gsave
+ 29 {cmBlinie} repeat
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%-------------- mm-Einteilung von der Grundseite nach oben ------------------------------------
+/mmlinie { newpath
+ -2.3 cm 0.3 cm moveto
+ 0.2 cm 0 rlineto
+ 2.2 cm 0.3 cm moveto
+ 0.2 cm 0 rlineto
+% closepath
+ gsave
+ 0.5 setlinewidth
+ 0 setgray
+ stroke
+ grestore
+ 0 cm 0.1 cm translate
+ } def
+gsave
+33 {mmlinie} repeat
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%-------------- 0,5 cm-Einteilung von der Grundseite nach oben --------------------------------
+/cmlinie { newpath
+ -4.5 cm 0.5 cm moveto
+ 2 cm 0 rlineto
+ 0.75 cm 0 rmoveto
+ 1.5 cm 0 rlineto
+ 0.5 cm 0 rmoveto
+ 1.5 cm 0 rlineto
+ 0.75 cm 0 rmoveto
+ 2 cm 0 rlineto
+% closepath
+ gsave
+ 0.6 setlinewidth
+ 0 setgray
+ stroke
+ grestore
+ 0 cm 0.5 cm translate
+ } def
+%------------------------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- Clippen entlang eines Kreises der 0,5 cm-Einteilung von der Grundseite nach oben ------------------------------------
+/kreisring { newpath
+ 0 0 translate
+ 0 0 4.2 cm 0 180 arc
+ closepath
+ } def
+ gsave
+ kreisring clip
+ 7 {cmlinie} repeat
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- farbiger und transparenter Halb-Ring -----------------------------------------------------------------------------
+ gsave
+ newpath
+ 0 0 translate
+ 0 0 5.1 cm 6 174 arc
+ 0 0 4.8 cm 174 6 arcn
+ closepath
+ gsave
+ \pst@usecolor\ProLineCol
+ [ /ca .4 /SetTransparency pdfmark % set transparency
+ 0.4 .setopacityalpha
+ sysfill
+ grestore
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- 1-Grad-Winkeleinteilung an der linken Kathete -----------------------------------------------------------------
+ gsave
+ 91 1 179 { /Wk exch def % ---------------------------------------------------- Schleifenvariable festlegen, die von 91° bis 179° geht
+ {8 Wk sin Wk cos div 1 sub div} /xWS1 exch def %---------- xWS1=8/(tan(alpha)-1) --> SP der Geraden linke Kathete mit Ursprungsgeraden im Winkel alpha
+ {7.8 Wk sin Wk cos div 1 sub div} /xWS2 exch def % ------- xWS2=7,8/(tan(alpha)-1) --> SP einer Parallelen zur Geraden linke Kathete mit Ursprungsgeraden im Winkel alpha
+ newpath
+ xWS1 cm xWS1 8 add cm moveto % --------------------------- zu xWS1 geh\"{o}riger y-Wert ist xWS1 + 8
+ xWS2 cm xWS2 7.8 add cm % ----------------------------------- zu xWS2 geh\"{o}riger y-Wert ist xWS1 + 7,8
+ lineto
+% closepath
+ 0.5 setlinewidth
+ 0 setgray
+ stroke
+ } for
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- 5-Grad-Winkeleinteilung an der linken Kathete -----------------------------------------------------------------
+ gsave
+ 95 5 175 { /Wk exch def
+ {8 Wk sin Wk cos div 1 sub div} /xWS1 exch def
+ {7.6 Wk sin Wk cos div 1 sub div} /xWS2 exch def
+ newpath
+ xWS1 cm xWS1 8 add cm moveto
+ xWS2 cm xWS2 7.6 add cm
+ lineto
+% closepath
+ 0.5 setlinewidth
+ 0 setgray
+ stroke
+ } for
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- 10-Grad-Winkeleinteilung an der linken Kathete -----------------------------------------------------------------
+ gsave
+ 100 10 170 { /Wk exch def
+ {8 Wk sin Wk cos div 1 sub div} /xWS1 exch def
+ {5.1 Wk cos mul Wk cos div 1 sub div} /xWS2 exch def
+ newpath
+ xWS1 cm xWS1 8 add cm moveto
+ 5.1 Wk cos mul cm 5.1 Wk sin mul cm
+ lineto
+% closepath
+ 0.5 setlinewidth
+ 0 setgray
+ stroke
+ } for
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- 1-Grad-Winkeleinteilung an der rechten Kathete ---------------------------------------------------------------
+ gsave
+ 1 1 89 { /Wk exch def
+ {8 Wk sin Wk cos div 1 add div} /xWS1 exch def
+ {7.8 Wk sin Wk cos div 1 add div} /xWS2 exch def
+ newpath
+ xWS1 cm xWS1 neg 8 add cm moveto
+ xWS2 cm xWS2 neg 7.8 add cm
+ lineto
+% closepath
+ 0.5 setlinewidth
+ 0 setgray
+ stroke
+ } for
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- 5-Grad-Winkeleinteilung an der rechten Kathete ---------------------------------------------------------------
+ gsave
+ 5 5 85 { /Wk exch def
+ {8 Wk sin Wk cos div 1 add div} /xWS1 exch def
+ {7.6 Wk sin Wk cos div 1 add div} /xWS2 exch def
+ newpath
+ xWS1 cm xWS1 neg 8 add cm moveto
+ xWS2 cm xWS2 neg 7.6 add cm
+ lineto
+% closepath
+ 0.5 setlinewidth
+ 0 setgray
+ stroke
+ } for
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- 10-Grad-Winkeleinteilung an der rechten Kathete --------------------------------------------------------------
+ gsave
+ 10 10 80 { /Wk exch def
+ {8 Wk sin Wk cos div 1 add div} /xWS1 exch def
+ {5.1 Wk cos mul Wk cos div 1 add div} /xWS2 exch def
+ newpath
+ xWS1 cm xWS1 neg 8 add cm moveto
+ 5.1 Wk cos mul cm 5.1 Wk sin mul cm
+ lineto
+% closepath
+ 0.5 setlinewidth
+ 0 setgray
+ stroke
+ } for
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- 1-Grad-Winkeleinteilung auf Halbkreis ------------ ---------------------------------------------------------------
+ gsave
+ 5 1 175 { /Wk exch def
+ newpath
+ 4.3 Wk cos mul cm 4.3 Wk sin mul cm moveto
+ 4.45 Wk cos mul cm 4.45 Wk sin mul cm
+ lineto
+% closepath
+ 0.5 setlinewidth
+ 0 setgray
+ stroke
+ } for
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- 5-Grad-Winkeleinteilung auf Halbkreis ------------ ---------------------------------------------------------------
+ gsave
+ 5 5 175 { /Wk exch def
+ newpath
+ 4.3 Wk cos mul cm 4.3 Wk sin mul cm moveto
+ 4.5 Wk cos mul cm 4.5 Wk sin mul cm
+ lineto
+% closepath
+ 0.5 setlinewidth
+ 0 setgray
+ stroke
+ } for
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%-------------------------- Linke Diagonallinie-dashed -------------------------------------------------------------------------------
+ gsave
+ newpath /Wk 135 def
+ {8 Wk sin Wk cos div 1 sub div} /xWS1 exch def
+ 0 0 moveto
+ 4.3 Wk cos mul cm 4.3 Wk sin mul cm lineto
+% closepath
+ gsave
+ [2 sqrt 2 div 0.24 sub cm 0.24 cm] -0.12 cm setdash
+ 0.5 setlinewidth
+ 0 setgray stroke
+ grestore
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%-------------------------- Rechte Diagonallinie-dashed -----------------------------------------------------------------------------
+ gsave
+ newpath /Wk 45 def
+ {8 Wk sin Wk cos div 1 add div} /xWS1 exch def
+ 0 0 moveto
+ 4.3 Wk cos mul cm 4.3 Wk sin mul cm lineto
+% closepath
+ gsave
+ [2 sqrt 2 div 0.24 sub cm 0.24 cm] -0.12 cm setdash
+ 0.5 setlinewidth
+ 0 setgray stroke
+ grestore
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------
+%---------------------------------------- Mittel-Linie -------------------------------------------------------------------------------------
+ gsave
+ newpath
+ 0 0.5 cm moveto
+ 0 3.5 cm lineto
+ 0 5.1 cm moveto
+ 0 6.0 cm lineto
+ 0 6.4 cm moveto
+ 0 8.0 cm lineto
+% closepath
+ gsave
+ 0.5 setlinewidth
+ 0 setgray stroke
+ grestore
+ grestore
+%--------------------------------------------------------------------------------------------------------------------------------------------------
+%------------------------- Definition f\"{u}r horizontal-zentriertes - Setzen der cm- Zahlen (180° gedreht) ------------------------
+ /cmshow {% (string) x y
+ gsave
+ moveto 180 rotate % s
+ /Helvetica findfont 7 scalefont setfont
+ dup % s s
+ stringwidth pop 2 div neg 0 % s -dx/2
+ rmoveto 0.2 setgray show
+ grestore
+ } bind def
+%------------------------- Setzen der Zahlen f\"{u}r die cm-Einteilungen -----------------------------------------------------------------
+ 0 1 7 { /MZ exch def MZ 2 string cvs MZ cm 0.47 cm cmshow } for %---------------- Zahlen 0 bis 7 (nach rechts)
+ 1 1 7 { /MZ exch def MZ 2 string cvs MZ neg cm 0.47 cm cmshow } for %----------- Zahlen 1 bis 7 (nach links)
+ 1 1 3 { /MZ exch def MZ 2 string cvs 2 cm MZ 0.1 add cm cmshow } for %---------- Zahlen 1 bis 3 (nach oben, rechte Seite)
+ 1 1 3 { /MZ exch def MZ 2 string cvs -2 cm MZ 0.1 add cm cmshow } for %--------- Zahlen 1 bis 3 (nach oben, linke Seite)
+%--------------------------------------------------------------------------------------------------------------------------------------------------
+%------------------------- Definition f\"{u}r horizontal-zentriertes - Setzen der Winkel- Zahlen (mitgedreht) ----------------------
+ /cmRotshow {% ---------------------------------- (string), Winkel, x y
+ gsave
+ moveto 90 add rotate % s
+ /Helvetica findfont 7 scalefont setfont
+ dup % s s
+ stringwidth pop 2 div neg 0 % s -dx/2
+ rmoveto 0.2 setgray show
+ grestore
+ } bind def
+ gsave
+%------------------------- Setzen der Zahlen f\"{u}r die Winkel-Einteilungen -------------------------------------------------------------------------------------------------
+ 10 10 170 { /MZ exch def MZ 3 string cvs MZ 5.03 cm MZ cos mul 5.03 cm MZ sin mul cmRotshow } for % ------------------ \"{a}u{\ss}erer Kreisbogen
+ 10 10 170 { /MZ exch def 180 MZ sub 3 string cvs MZ 4.75 cm MZ cos mul 4.75 cm MZ sin mul cmRotshow } for % ------- innerer Kreisbogen
+ grestore
+%---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ /TSshow {% (string) x y
+ gsave
+ moveto 180 rotate % s
+ \pst@PSfontO findfont \pst@fontsizeO scalefont setfont
+ dup % s s
+ stringwidth pop 2 div neg 0 % s -dx/2
+ rmoveto 0.4 setgray show
+ grestore
+ } bind def
+ gsave
+ (\pst@OwnerTxt) 0 cm 4 cm TSshow
+ grestore
+%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ /MadeShow {% (string) x y
+ gsave
+ moveto 180 rotate % s
+ \pst@PSfontM findfont \pst@fontsizeM scalefont setfont
+ dup % s s
+ stringwidth pop 2 div neg 0 % s -dx/2
+ rmoveto 0.7 setgray show
+ grestore
+ } bind def
+ gsave
+ (\pst@MadeTxt) 0 cm 6.25 cm MadeShow
+ grestore
+%---------------------------------------- Fahne -------------------------------------------------------------------------------------
+ gsave
+ /Fahne {
+ newpath
+ 0 0 moveto
+ 0 1 rlineto
+ 1 0 rlineto
+ 0 -1 rlineto
+ closepath
+ setrgbcolor
+ [ /ca .5 /SetTransparency pdfmark % set transparency
+ 0.5 .setopacityalpha sysfill
+ } def
+Country (France) eq {
+ 0.73 cm 6.1 cm translate
+ 3 6 scale
+ 1 0 0 Fahne
+ 1 0 translate
+ 1 1 1 Fahne
+ 1 0 translate
+ 0 0 1 Fahne
+ } if
+Country (Germany) eq {
+ 0.775 cm 6.22 cm translate
+ 7.5 1.5 scale
+ 1 0.588 0 Fahne
+ 0 -1 translate
+ 0.75 0.07 0.11 Fahne
+ 0 -1 translate
+ 0 0 0 Fahne
+ } if
+ grestore
+%--------------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- Ende nur grestore von gsave ganz am Anfang ------------------
+grestore
+\fi
+}%
+\pnode(!
+ /cm {28.45274 mul} def % ---------------------------------------- Definiere cm als L\"{a}ngeneinheit mit der multipliziert wird
+ \pst@tempA \tx@UserCoor /@y1 ED /@x1 ED % ---------- Definiere die Koordinaten des Ursprungs (zur Winkelberechnung ben\"{o}tigt)
+ \pst@tempB \tx@UserCoor /@y2 ED /@x2 ED % ---------- Definiere die Koordinaten des zweiten Punktes (zur Winkelberechnung ben\"{o}tigt)
+ @y1 @y2 sub @x1 @x2 sub Atan /@delta ED %------------ Winkelberechnung
+ @x1 cm @y1 cm T % ------------------------------------ Tranformiere den Koordinatenursprung in P
+ @delta #1 add 180 add rotate % ------------------------------ Drehe den oberen Punkt des Geodreiecks
+ \pst@ProScale\space \pst@ProScale\space scale % -------- Skalieren!
+ 0 8){GeodrC}%
+\pnode(!
+ @x1 cm @y1 cm T % ------------------------------------ Tranformiere den Koordinatenursprung in P
+ @delta #1 add 180 add rotate % ------------------------------ Drehe die linke untere Ecke des Geodreiecks
+ \pst@ProScale\space \pst@ProScale\space scale % -------- Skalieren!
+ -8 0){GeodrA}%
+\pnode(!
+ @x1 cm @y1 cm T % ------------------------------------ Tranformiere den Koordinatenursprung in P
+ @delta #1 add 180 add rotate % ------------------------------ Drehe die rechte untere Ecke des Geodreiecks
+ \pst@ProScale\space \pst@ProScale\space scale % -------- Skalieren!
+ 8 0){GeodrB}%
+\endgroup%
+\end@SpecialObj\ignorespaces
+}%
+
+
+\definecolor{HolzCol}{rgb}{1,0.937,0.835}%
+\define@key[psset]{pst-geometrictools}{PenScale}[1]{\def\pst@PenScale{#1 }}%
+\define@key[psset]{pst-geometrictools}{PenLength}[5]{\def\pst@PenLength{#1 }}%
+\define@key[psset]{pst-geometrictools}{pencilColA}[red]{\pst@getcolor{#1}\pencilColA}
+\define@key[psset]{pst-geometrictools}{pencilColB}[HolzCol]{\pst@getcolor{#1}\pencilColB}
+\psset[pst-geometrictools]{PenLength=5,pencilColA=red,pencilColB=HolzCol,PenScale=1}
+\def\psPencil{\def\pst@par{}\pst@object{psPencil}}
+\def\psPencil@i#1(#2){%------------------------------- #1 Winkel, #2 Ursprung P
+\begin@SpecialObj
+\pst@killglue
+\begingroup%
+\pnode(#2){@PGD}%
+\use@par%
+\pst@getcoor{@PGD}\pst@tempA % -------------------------- Hohle die Koordinaten und speichere sie in \pst@tempA
+\addto@pscode{%
+/sysfill {systemdict /fill get exec} def
+%/Country (\pst@country) def
+ /cm {28.45274 mul} def % ---------------------------------------- Definiere cm als L\"{a}ngeneinheit mit der multipliziert wird
+ /Plength \pst@PenLength def
+% \pst@tempA \tx@UserCoor /@y1 ED /@x1 ED % ---------- Definiere die Koordinaten des Ursprungs (zur Winkelberechnung ben\"{o}tigt)
+ \pst@tempA \pst@coor T % ------------------------------------ Tranformiere den Koordinatenursprung in P
+ #1 rotate % ------------------------------ Drehe das gesamte Geodreieck
+ \pst@PenScale dup scale % -------- Skaliere das ganze Geodreieck
+%-------------------------------------------------------------------------------------------------------------
+gsave
+%-------------------------------------------------------------------------------------------------------------
+%-------------- Unterer Holzteil des Stifts -------------------------------------------------------------
+gsave
+ newpath
+ 0 cm 0 moveto
+ -0.3 cm 1 cm rlineto
+ 0 cm 0.2 cm rlineto
+ 0.6 cm 0 cm rlineto
+ 0 cm -0.2 cm rlineto
+ closepath
+ gsave
+ \pst@usecolor\pencilColB
+ fill
+ grestore
+ gsave
+ 0.4 setlinewidth
+ 0.5 setgray
+ 1 setlinejoin
+ stroke
+ grestore
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%-------------- langer farbiger Teil des Stifts ----------------------------------------------------------
+gsave
+ newpath
+ -0.3 cm 1 cm moveto
+ 0 cm Plength cm rlineto
+ 0.6 cm 0 cm rlineto
+ 0 cm Plength neg cm rlineto
+ 0.3 cm 1.13 cm 0.13 cm 270 180 arcn
+ 0 cm 1.13 cm 0.17 cm 0 180 arcn
+ -0.3 cm 1.13 cm 0.13 cm 0 270 arcn
+ closepath
+ gsave
+ \pst@usecolor\pencilColA
+ fill
+ grestore
+ gsave
+ 0.5 setlinewidth
+ 0.1 setgray
+ stroke
+ grestore
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%--------------------------- Spitze in Farbe --------------------------------------------------------------
+gsave
+ newpath
+ 0 cm 0 moveto
+ -0.1 cm 1 3 div cm rlineto
+ 0.2 cm 0 cm rlineto
+ closepath
+ gsave
+ \pst@usecolor\pencilColA
+ fill
+ grestore
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%--------------------------- Striche im Stift --------------------------------------------------------------
+gsave
+ newpath
+ -0.17 cm 1.13 cm moveto
+ 0 cm Plength 0.13 sub cm rlineto
+ 0.17 cm 1.13 cm moveto
+ 0 cm Plength 0.13 sub cm rlineto
+ closepath
+ gsave
+ 0.5 setlinewidth
+ 0.1 setgray
+ stroke
+ grestore
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%--------------------------- Elliptisches Stift-Ende in Holz --------------------------------------------
+gsave
+ newpath
+ 0 cm Plength 1 add cm T
+ 1 0.2 scale
+ 0 cm 0 cm 0.3 cm 0 360 arc
+ closepath
+ gsave
+ \pst@usecolor\pencilColB
+ fill
+ grestore
+ gsave
+ 0.5 setlinewidth
+ 0.3 setgray
+ stroke
+ grestore
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%--------------------------- Elliptisches Stift-Ende in Farbe -------------------------------------------
+gsave
+ newpath
+ 0 cm Plength 1 add cm T
+ 1 0.2 scale
+ 0 cm 0 cm 0.1 cm 0 360 arc
+ closepath
+ gsave
+ \pst@usecolor\pencilColA
+ fill
+ grestore
+ gsave
+ 0.3 setlinewidth
+ 0.3 setgray
+ stroke
+ grestore
+grestore
+%--------------------------------------------------------------------------------------------------------
+%--------------------------------------------------------------------------------------------------------
+grestore
+}%
+\endgroup%
+\end@SpecialObj\ignorespaces
+}%
+
+
+\define@key[psset]{pst-geometrictools}{RulerFillCol}[cyan!60]{\pst@getcolor{#1}\RulerFillCol}
+\define@key[psset]{pst-geometrictools}{RulerScale}[1]{\def\pst@RulerScale{#1 }}%
+\psset[pst-geometrictools]{RulerFillCol=gray,RulerScale=1}
+
+\def\psRuler{\def\pst@par{}\pst@object{psRuler}}
+\def\psRuler@i#1(#2){\@ifnextchar(%
+{\psRuler@ii{#1}(#2)}%
+{\psRuler@ii{#1}(#2)(#2)}}%
+\def\psRuler@ii#1(#2)(#3){%------------------------------- #1 Winkel, #2 Ursprung P, zweiter Punkt Q f\"{u}r Winkel
+\begin@SpecialObj
+\pst@killglue
+\begingroup%
+\pnode(#2){@PGD}%
+\pnode(#3){@QGD}%
+\use@par%
+\pst@getcoor{@QGD}\pst@tempB % -------------------------- Hohle die Koordinaten und speichere sie in \pst@tempB
+\pst@getcoor{@PGD}\pst@tempA % -------------------------- Hohle die Koordinaten und speichere sie in \pst@tempA
+\addto@pscode{%
+/sysfill {systemdict /fill get exec} def
+ /cm {28.45274 mul} def % --------------------------------------- Definiere cm als L\"{a}ngeneinheit mit der multipliziert wird
+ \pst@tempA \tx@UserCoor /@y1 ED /@x1 ED % ---------- Definiere die Koordinaten des Ursprungs (zur Winkelberechnung ben\"{o}tigt)
+ \pst@tempB \tx@UserCoor /@y2 ED /@x2 ED % ---------- Definiere die Koordinaten des zweiten Punktes (zur Winkelberechnung ben\"{o}tigt)
+ @y1 @y2 sub @x1 @x2 sub Atan /@delta ED %------------ Winkelberechnung
+ \pst@tempA \pst@coor T % ------------------------------------ Tranformiere den Koordinatenursprung in P
+ @delta #1 add 180 add rotate % ------------------------------ Drehe das gesamte Geodreieck
+ \pst@RulerScale dup scale % ----------------------------------- Skaliere das ganze Geodreieck
+%-------------------------------------------------------------------------------------------------------------
+gsave
+%-------------------------------------------------------------------------------------------------------------
+%-------------- F\"{u}llung der beiden inneren Bereiche und \"{a}u{\ss}ere Begrenzung des Lineals -----------------------------------------------
+gsave
+ newpath
+ -0.2 cm 0 moveto
+ 30.4 cm 0 rlineto
+ 0 cm -0.9 cm rlineto
+ -30.4 cm 0 cm rlineto
+ closepath
+ gsave
+ \pst@usecolor\RulerFillCol
+ [ /ca .25 /SetTransparency pdfmark % set transparency
+ 0.25 .setopacityalpha sysfill
+ grestore
+grestore
+%-------------------------------------------------------------------------------------------------------------
+gsave
+ newpath
+ -0.2 cm 0 moveto
+ 30.2 cm 0 lineto
+ 0 cm -3 cm rlineto
+ -30.4 cm 0 cm rlineto
+ closepath
+ 3.75 cm -1.5 cm moveto
+ 3.5 cm -1.5 cm 0.25 cm 0 360 arc
+ closepath
+ gsave
+ \pst@usecolor\RulerFillCol
+ [ /ca .15 /SetTransparency pdfmark % set transparency
+ 0.15 .setopacityalpha sysfill
+ grestore
+ gsave
+% 2 setlinejoin
+ 0.7 setlinewidth
+ 0.1 setgray
+ stroke
+ grestore
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%-------------- Millimetereinteilung auf der Grundseite -------------------------------------------
+ /mmBlinie { newpath
+ 0 cm 0 cm moveto
+ 0 cm -0.25 cm rlineto
+ gsave
+ 0.5 setlinewidth
+ 0 setgray
+ stroke
+ grestore
+ 0.1 cm 0 cm translate
+ } def
+gsave
+300 {mmBlinie} repeat
+grestore
+%-------------------------------------------------------------------------------------------------------------
+%-------------- 0,5- cm-Einteilung auf der Grundseite ----------------------------------------------
+ /cmBlinie { newpath
+ 0.5 cm 0 cm moveto
+ 0 cm -0.375 cm rlineto
+% closepath
+ gsave
+ 0.55 setlinewidth
+ 0 setgray
+ stroke
+ grestore
+ 1 cm 0 cm translate
+ } def
+gsave
+ 30 {cmBlinie} repeat
+grestore
+%-------------- 1- cm-Einteilung auf der Grundseite ----------------------------------------------
+ /cmBlinie { newpath
+ 0 cm 0 cm moveto
+ 0 cm -0.5 cm rlineto
+% closepath
+ gsave
+ 0.6 setlinewidth
+ 0 setgray
+ stroke
+ grestore
+ 1 cm 0 cm translate
+ } def
+gsave
+ 31 {cmBlinie} repeat
+grestore
+%--------------------------------------------------------------------------------------------------------------------------------------------------
+%------------------------- Definition f\"{u}r horizontal-zentriertes - Setzen der cm- Zahlen (180° gedreht) ------------------------
+ /cmshow {% (string) x y
+ gsave
+ moveto % s
+ /Helvetica findfont 8 scalefont setfont
+ dup % s s
+ stringwidth pop 2 div neg 0 % s -dx/2
+ rmoveto 0.2 setgray show
+ grestore
+ } bind def
+%------------------------- Setzen der Zahlen f\"{u}r die cm-Einteilungen -----------------------------------------------------------------
+ 0 1 30 { /MZ exch def MZ 2 string cvs MZ cm -0.78 cm cmshow } for %---------------- Zahlen 0 bis 30 (nach rechts)
+%-------------------------------------------------------------------------------------------------------------
+%--------------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- Ende nur grestore von gsave ganz am Anfang ------------------
+grestore
+}%
+\endgroup%
+\end@SpecialObj\ignorespaces
+}%
+
+\definecolor{PoCRed}{rgb}{0.7,0.134,0.134}
+\define@boolkey[psset]{pst-geometrictools}[Pst@]{MCAngle}[true]{}
+\define@key[psset]{pst-geometrictools}{PoCLength}[5]{\def\pst@PoCLength{#1 }}
+\define@key[psset]{pst-geometrictools}{PoCAngle}[0]{\def\pst@PoCAngle{#1 }}
+\define@key[psset]{pst-geometrictools}{PoCFillCol}[PoCRed]{\pst@getcolor{#1}\PoCFillCol}
+\define@key[psset]{pst-geometrictools}{PoCMineCol}[black!80]{\pst@getcolor{#1}\PoCMineCol}
+\define@key[psset]{pst-geometrictools}{PoCScale}[1]{\def\pst@PoCScale{#1 }}%
+\define@key[psset]{pst-geometrictools}{RadVS}[RVS]{\def\pst@RadVS{#1}}%
+\define@key[psset]{pst-geometrictools}{AngleVS}[AVS]{\def\pst@AngleVS{#1}}%
+\define@key[psset]{pst-geometrictools}{RadMul}[1]{\def\pst@RadMul{#1 }}%
+\psset[pst-geometrictools]{PoCScale=1,PoCFillCol=PoCRed,PoCAngle=0,PoCMineCol=black!80,PoCLength=5,MCAngle=true,RadVS=RVS,AngleVS=AVS,RadMul=1}
+
+\def\psCompass{\def\pst@par{}\pst@object{psCompass}}% Pair of Compasses
+\def\psCompass@i#1(#2){\@ifnextchar(%
+{\psCompass@ii{0}(#2)}%
+{\psCompass@ii{#1}(#2)(#2)}}%
+\def\psCompass@ii#1(#2)(#3){%------------------------------- #1 Winkel, #2 Ursprung P, zweiter Punkt Q f\"{u}r Winkel
+\begin@SpecialObj
+\pst@killglue
+\begingroup%
+\pnode(#2){@PGD}%
+\pnode(#3){@QGD}%
+\use@par%
+\pst@getcoor{@QGD}\pst@tempB % -------------------------- Hohle die Koordinaten und speichere sie in \pst@tempB
+\pst@getcoor{@PGD}\pst@tempA % -------------------------- Hohle die Koordinaten und speichere sie in \pst@tempA
+\addto@pscode{%
+ \pst@RadMul /faktor ED
+ \pst@PoCScale /skal ED
+ #1 skal div 2 div /Radius ED
+ skal dup scale % -------- Skaliere das ganze Geodreieck
+ /sysfill {systemdict /fill get exec} def
+ /SLg \pst@PoCLength def
+ /cm {28.45274 mul} def % ---------------------------------------- Definiere cm als L\"{a}ngeneinheit mit der multipliziert wird
+ \pst@tempA\tx@UserCoor /@y1 ED /@x1 ED % ---------- Definiere die Koordinaten des Ursprungs (zur Winkelberechnung ben\"{o}tigt)
+ \pst@tempB\tx@UserCoor /@y2 ED /@x2 ED % ---------- Definiere die Koordinaten des zweiten Punktes (zur Winkelberechnung ben\"{o}tigt)
+ \pst@tempA\pst@coor /@y3 ED /@x3 ED
+ @y1 @y2 sub dup mul @x1 @x2 sub dup mul add faktor dup mul mul /quadlg ED
+ quadlg 0 eq { 180 } { @y1 @y2 sub @x1 @x2 sub atan } ifelse /@delta ED %------------ Winkelberechnung
+ quadlg sqrt 2 div /RadiusPktB ED %------------ Radiusberechnung mit zweitem Punkt
+ SLg RadiusPktB Radius add gt { RadiusPktB Radius add } { SLg } ifelse /RadPoC ED
+ /hoehe SLg dup mul RadPoC dup mul sub sqrt def
+ /phiS RadPoC hoehe atan def
+ @x3 @y3 T % ------------------------------------------------------------------------------- Transformiere den Koordinatenursprung in P
+ \pst@PoCAngle\space \ifPst@MCAngle\space @delta add 180 add \fi rotate % ------------------------------ Drehe das gesamte Geodreieck
+%-------------------------------------------------------------------------------------------------------------
+gsave
+%-------------------------------------------------------------------------------------------------------------
+%-------------- Linke Zirkelspitze----------------------------------------------- 0 cm 0 cm 0.15 cm 0 360 arc
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm 0 cm moveto
+ -0.1 cm 0.33 cm lineto
+ 0.07 cm 0 cm rlineto
+ closepath
+ gsave
+ 0.5 setgray
+ fill
+ grestore
+grestore
+%---------------------------------------- rechte Zirkel-Mine --------------------------------------
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm T
+ phiS 2 mul rotate
+ 0 cm SLg neg cm moveto
+ 0.06 cm 0.1 cm rlineto
+ 0.013 cm 0.2 cm rlineto
+ -0.06 cm 0 cm rlineto
+ closepath
+ gsave
+ \pst@usecolor\PoCMineCol
+ fill
+ grestore
+grestore
+%---------------------------------------- Spindel --------------------------------------
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm moveto
+ 0 cm SLg cm T
+ phiS rotate
+ -2 cm -1 phiS cos mul cm rmoveto
+ 4 cm 0 cm rlineto
+ gsave
+ 0.5 setgray
+ 1.6 setlinewidth
+ stroke
+ grestore
+grestore
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm moveto
+ 0 cm SLg cm T
+ phiS rotate
+ -2 cm -1 phiS cos mul cm rmoveto
+ 0.2 -0.75 rmoveto
+ 189 { 0.5 1.5 rlineto
+ 0.1 -1.5 rmoveto } repeat
+ gsave
+ 0.2 setgray
+ 0.2 setlinewidth
+ stroke
+ grestore
+grestore
+%---------------------------------------- Drehrad an der Spindel --------------------------------------
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm moveto
+ 0 cm SLg cm T
+ phiS rotate
+ 0 cm -1.3 phiS cos mul cm rmoveto
+ 0 cm 0.6 cm rlineto
+ gsave
+ 0.5 setgray
+ 0.08 cm setlinewidth
+ stroke
+ grestore
+grestore
+gsave
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm moveto
+ 0 cm SLg cm T
+ phiS rotate
+ -0.04 cm -1.28 phiS cos mul cm rmoveto
+ 20 { 0.08 cm 0 cm rlineto
+ -0.08 cm 0.03 cm rmoveto } repeat
+ gsave
+ 0.3 setgray
+ 0.2 setlinewidth
+ stroke
+ grestore
+grestore
+gsave
+%---------------------------------------- Halterung zum Anfassen --------------------------------------
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm moveto
+ 0 cm SLg cm T
+ phiS rotate
+ 0 cm 0.75 0.54 phiS sin mul add cm moveto
+ 0 cm 0.2 cm rlineto
+ gsave
+ 0.5 setgray
+ 3 setlinewidth
+ stroke
+ grestore
+grestore
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm moveto
+ 0 cm SLg cm T
+ phiS rotate
+ 0 cm 0.95 0.54 phiS sin mul add cm moveto
+ 0 cm 0.05 cm rlineto
+ gsave
+ \pst@usecolor\PoCFillCol
+ 5 setlinewidth
+ stroke
+ grestore
+grestore
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm moveto
+ 0 cm SLg cm T
+ phiS rotate
+ 0 cm 1.0 0.54 phiS sin mul add cm moveto
+ 0 cm 0.5 cm rlineto
+ gsave
+ 0.5 setgray
+ 5 setlinewidth
+ stroke
+ grestore
+grestore
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm moveto
+ 0 cm SLg cm T
+ phiS rotate
+ -0.08 cm 1.0 0.6 phiS sin mul add cm moveto
+ 0 cm 0.48 cm rlineto
+ 6 { 0.025 cm -0.48 cm rmoveto
+ 0 cm 0.48 cm rlineto } repeat
+ gsave
+ 0.65 setgray
+ 0.15 setlinewidth
+ stroke
+ grestore
+grestore
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm moveto
+ 0 cm SLg cm T
+ phiS rotate
+ -0.075 cm 1.0 0.6 phiS sin mul add cm moveto
+ 0 cm 0.48 cm rlineto
+ 6 { 0.025 cm -0.48 cm rmoveto
+ 0 cm 0.48 cm rlineto } repeat
+ gsave
+ 0.25 setgray
+ 0.2 setlinewidth
+ stroke
+ grestore
+grestore
+%---------------------------------------- Kreis um oberen Teil --------------------------------------
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm moveto
+ 0 cm SLg cm T
+ phiS rotate
+ 0 cm 0.1 0.54 phiS sin mul add cm moveto
+ 0.65 -50 PtoC exch cm exch cm rmoveto
+ 0 cm 0.1 0.54 phiS sin mul add cm 0.65 cm -50 230 arc
+ gsave
+ 0.1 setgray
+ 1.3 setlinewidth
+ stroke
+ grestore
+grestore
+%---------------------------------------- Kreis zwischen den Schenkeln --------------------------------------
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm moveto
+ 0 cm SLg cm 0.15 cm 0 360 arc
+ closepath
+ gsave
+ 0.1 setgray
+ fill
+ grestore
+grestore
+%---------------------------------------- Schenkel des Zirkels ----------------------------------------------------
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm 0.3 cm moveto
+ -0.3 cm SLg 0.1 add cm lineto
+ 0 cm SLg cm T
+ phiS 2 mul rotate
+ 0.3 cm 0.1 cm moveto
+ 0 cm SLg 0.3 sub neg cm lineto
+% closepath
+ gsave
+ 0.285 cm setlinewidth
+ 2 setlinejoin
+ \pst@usecolor\PoCFillCol
+ stroke
+ grestore
+grestore
+gsave
+ newpath
+ phiS neg rotate
+ -0.17 cm SLg 0.6 mul cm moveto
+ -0.25 cm SLg 0.85 mul cm lineto
+ 0 cm SLg cm T
+ phiS 2 mul rotate
+ 0.17 cm SLg -0.4 mul cm moveto
+ 0.25 cm SLg -0.15 mul cm lineto
+% closepath
+ gsave
+ 0.17 cm setlinewidth
+ 2 setlinejoin
+ 0.4 setgray
+ stroke
+ grestore
+grestore
+%---------------------------------------- Kreis an der linken Spitze --------------------------------------
+gsave
+ newpath
+ phiS neg rotate
+ -0.03 cm 0.8 cm moveto
+ -0.03 cm 0.8 cm 0.175 cm 0 360 arc
+ closepath
+ gsave
+ 0.25 setgray
+ fill
+ grestore
+grestore
+gsave
+ newpath
+ phiS neg rotate
+ -0.03 cm 0.8 cm moveto
+ -0.03 cm 0.8 cm 0.025 cm 0 360 arc
+ closepath
+ gsave
+ 0.8 setgray
+ fill
+ grestore
+grestore
+%---------------------------------------- Kreis an der rechten Spitze --------------------------------------
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm T
+ phiS 2 mul rotate
+ 0.03 cm 0 cm T
+ 0 cm SLg 0.8 sub neg cm moveto
+ 0 cm SLg 0.8 sub cm neg 0.175 cm 0 360 arc
+ closepath
+ gsave
+ 0.25 setgray
+ fill
+ grestore
+grestore
+gsave
+ newpath
+ phiS neg rotate
+ 0 cm SLg cm T
+ phiS 2 mul rotate
+ 0.03 cm 0 cm T
+ 0 cm SLg 0.8 sub neg cm moveto
+ 0 cm SLg 0.8 sub cm neg 0.025 cm 0 360 arc
+ closepath
+ gsave
+ 0.8 setgray
+ fill
+ grestore
+grestore
+%--------------------------------------------------------------------------------------------------------------------------------------------------
+%--------------- Ende nur grestore von gsave ganz am Anfang ------------------
+grestore
+}%
+\pnode(!
+ \pst@tempA \tx@UserCoor /@@y1 ED /@@x1 ED
+ \pst@tempB \tx@UserCoor /@@y2 ED /@@x2 ED
+ @@x1 @@x2 sub @@y1 @@y2 sub Pyth \pst@RadMul\space mul /\pst@RadVS\space exch def
+ @@y1 @@y2 sub dup mul @@x1 @@x2 sub dup mul add \pst@RadMul dup mul mul /quadlg ED
+ quadlg 0 eq { 180 } { @@y1 @@y2 sub @@x1 @@x2 sub atan } ifelse /\pst@AngleVS\space exch def %------------ Winkelberechnung /\pst@AngleVS\space exch def
+ 0 0){MoneyforNothing}%
+\endgroup%
+\end@SpecialObj\ignorespaces%
+}%
+
+%\define@boolkey[psset]{pst-geometrictools}[Pst@]{Ruler}[true]{}
+%\define@boolkey[psset]{pst-geometrictools}[Pst@]{Ppoint}[false]{}
+%\define@boolkey[psset]{pst-geometrictools}[Pst@]{LineOffset}[false]{}
+%\define@key[psset]{pst-geometrictools}{AddAngle}[0]{\def\pst@AddAngle{#1 }}%
+%\psset[pst-geometrictools]{Ruler=true,Ppoint=false,AddAngle=0,LineOffset=false}
+
+%% Distance between two points => #3
+\def\psDistAB(#1)(#2)#3{%
+ \pst@getcoor{#1}\pst@tempA
+ \pst@getcoor{#2}\pst@tempB
+\pnode(!
+ \pst@tempA \tx@UserCoor
+ \pst@tempB \tx@UserCoor
+ 3 -1 roll sub dup mul 3 1 roll sub dup mul add sqrt
+ /#3 ED
+ 0 0
+ ){XX}
+}
+%% calcule l'angle entre Ox et AB et le place en #3
+\def\psAngleAB(#1)(#2)#3{%
+ \pst@getcoor{#1}\pst@tempA
+ \pst@getcoor{#2}\pst@tempB
+\pnode(!
+ \pst@tempA \tx@UserCoor
+ \pst@tempB \tx@UserCoor
+ 3 -1 roll sub 3 1 roll exch sub Atan
+ /#3 ED
+ 0 0
+ ){YY}
+}%
+%% angle defined by three points
+\def\psAngleAOB(#1)(#2)(#3)#4{%
+ \pst@getcoor{#1}\pst@tempA
+ \pst@getcoor{#2}\pst@tempB
+ \pst@getcoor{#2}\pst@tempC
+\pnode(!
+ \pst@tempA \tx@UserCoor
+ \pst@tempB \tx@UserCoor
+ \pst@tempC \tx@UserCoor
+ 4 copy exch 4 -1 roll mul
+ 3 -2 roll mul add
+ 4 -2 roll mul 4 -2 roll mul sub exch Atan
+ /#4 ED
+ 0 0
+ ){ZZ}
+}
+
+% la nouvelle version de \psParallels
+\define@key[psset]{pst-geometrictools}{DistCoeff}[1]{\def\pst@DistCoeff{#1 }}%
+\psset[pst-geometrictools]{DistCoeff=1}
+%
+\def\psParallels{\def\pst@par{}\pst@object{psParallels}}
+\def\psParallels@i(#1)(#2)(#3){%
+\begin@SpecialObj %
+\pnode(#1){pointA}%
+\pnode(#2){pointB}%
+\pnode(#3){pointC}%
+\pcline[nodesep=-3](pointA)(pointB)
+\psdots(pointA)(pointB)(pointC)
+\uput[l](pointA){A}
+\uput[l](pointB){B}
+\uput[r](pointC){C}
+%
+\psProtractor[Ghost]{0}(pointA)%
+\psAngleAB(pointA)(pointB){alpha1}
+\psAngleAB(pointA)(GeodrA){alpha2}
+\psProtractor[Ghost]{alpha1 alpha2 sub}(pointA)%
+\psRuler{0}(GeodrB)(GeodrC)
+%
+\pstProjection[PointName={},PointSymbol=none]{pointA}{pointB}{pointC}[pointI]%
+\pstRotation[RotAngle=45,PointSymbol=none,PointName={}]{pointC}{pointI}[pointJ]%
+\pstInterLL[PointSymbol=none,PointName={}]{pointA}{pointB}{pointC}{pointJ}{pointK}%
+\pstTranslation[PointSymbol=none,PointName={},DistCoef=\pst@DistCoeff]{pointK}{pointC}{pointA}[pointA*]
+\psProtractor{alpha1 alpha2 sub}(pointA*)%
+\end@SpecialObj\ignorespaces%
+}%
+
+%\define@boolkey[psset]{pst-geometrictools}[Pst@]{Ruler}[true]{}
+%\define@boolkey[psset]{pst-geometrictools}[Pst@]{Ppoint}[false]{}
+%\define@boolkey[psset]{pst-geometrictools}[Pst@]{LineOffset}[false]{}
+%\define@key[psset]{pst-geometrictools}{AddAngle}[1]{\def\pst@AddAngle{#1 }}%
+%\psset[pst-geometrictools]{Ruler=true,Ppoint=false,AddAngle=0,LineOffset=false}
+%\def\psParallels{\def\pst@par{}\pst@object{psParallels}}
+%\def\psParallels@i(#1)(#2)(#3){%
+%\psset{saveNodeCoors,NodeCoorPrefix=n}%
+%\@ifundefined{rCounter}{\def\rCounter{1}}{}%
+%\begin@SpecialObj %
+%\pnode(#1){pointA}%
+%\pnode(#2){pointB}%
+%\pnode(#3){pointC}%
+%\pstProjection[PointName={},PointSymbol=none]{pointA}{pointB}{pointC}[pointI]%
+%\midAB(pointA)(pointB){pointM}%
+%\pstRotation[RotAngle=45,PointSymbol=none,PointName={}]{pointC}{pointI}[pointJ]%
+%\pstInterLL[PointSymbol=none,PointName={}]{pointA}{pointB}{pointC}{pointJ}{pointK}%
+%\AtoB(pointI)(pointC){IC}%
+%\AtoB(pointK)(pointC){KC}%
+%\AplusB(pointM)(KC){MT}%
+%\AplusB(pointB)(KC){BT}%
+%\psProtractor[Ghost]{0}(pointM)(pointB)%
+%\pnode(GeodrB){ProB}%
+%\pnode(GeodrC){ProC}%
+%\psLDNode(ProB)(ProC){-1cm}{pointE}%
+%\ifPst@Ruler\psRuler{0}(pointE)(GeodrC)\fi%
+%\AplusB(ProB)(KC){ProB*}%
+%\pst@Verb{ nKCx nKCy Pyth /laenge exch def %
+%nKCx laenge div \pst@number\pslinewidth\space 2 div 0.35 \pst@ProScale mul add mul 28.45274 div 2 sqrt mul /delX exch def %
+%nKCy laenge div \pst@number\pslinewidth\space 2 div 0.35 \pst@ProScale mul add mul 28.45274 div 2 sqrt mul /delY exch def
+%}%
+%\pnode(!nProB*x delX add nProB*y delY add ){GProB*}%
+%\pnode(!/AddA \pst@AddAngle def nProB*x AddA 0 eq { delX add } { AddA 180 eq { delX sub } { 0 add } ifelse } ifelse nProB*y AddA 0 eq { delY add } { AddA 180 eq { delY sub } { 0 add } ifelse } ifelse ){GProBC*}%
+%\pnode(!nMTx delX add nMTy delY add){GMT*}%
+%\pnode(!/AddA \pst@AddAngle def npointCx AddA 0 eq { delX add } { AddA 180 eq { delX sub } { 0 add } ifelse } ifelse npointCy AddA 0 eq { delY add } { AddA 180 eq { delY sub } { 0 add } ifelse } ifelse ){pointC*}%
+%\psLNode(pointM)(GMT*){\rCounter}{MPro}%
+%\psLNode(ProB)(GProB*){\rCounter}{BPro}%
+%\ifPst@Ppoint
+%\ifPst@LineOffset
+%\pst@Verb{ nICx nICy Pyth /laenge exch def %
+%nICx laenge div \pst@number\pslinewidth\space 2 div 0.35 \pst@ProScale mul add mul 28.45274 div 2 sqrt mul /delX exch def %
+%nICy laenge div \pst@number\pslinewidth\space 2 div 0.35 \pst@ProScale mul add mul 28.45274 div 2 sqrt mul /delY exch def %
+%}%
+%\pnode(!/AddA \pst@AddAngle def nProB*x AddA 0 eq { delX add } { AddA 180 eq { delX sub } { 0 add } ifelse } ifelse nProB*y AddA 0 eq { delY add } { AddA 180 eq { delY sub } { 0 add } ifelse } ifelse ){GProBC*}%
+%\pnode(!/AddA \pst@AddAngle def npointCx AddA 0 eq { delX add } { AddA 180 eq { delX sub } { 0 add } ifelse } ifelse npointCy AddA 0 eq { delY add } { AddA 180 eq { delY sub } { 0 add } ifelse } ifelse ){pointC*}%
+%\psProtractor{\pst@AddAngle}(pointC*)(GProBC*)\else%
+%\psProtractor{\pst@AddAngle}(pointC)(ProB*)\fi%
+%\else
+%\psProtractor{\pst@AddAngle}(MPro)(BPro)\fi % Um die Liniendicke 0.8pt nach rechts versetzt
+%\psLNode(pointC)(ProB*){0.98}{ProB**}%
+%\psLNode(pointC)(ProB**){2}{C*}%
+%\end@SpecialObj\ignorespaces%
+%}%
+
+\catcode`\@=\PstAtCode\relax
+\endinput \ No newline at end of file