%% $Id: pst-spinner.pro 466 2017-05-23 05:41:09Z herbert $
%% Package `pst-spinner.pro'
%%
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%%
/tx@spinnerDict 20 dict def tx@spinnerDict begin
%
/arctan { dup 0 ge { 1 atan }{ neg 1 atan neg } ifelse } def

/BallBearing {
 /point exch def
 /couleur exch def
 newpath
 point ri 0 360 arc
 point ri 0.15 cm add 360 0 arcn
 closepath
 0.25 setgray
 fill
 newpath
 point r1 0 360 arc
 point r1 0.15 cm sub 360 0 arcn
 closepath
 0.25 setgray
 fill
 newpath
 point r1 0.15 cm sub 0 360 arc
 point ri 0.15 cm add 360 0 arcn
 closepath
 couleur
 fill
} def
%
% le contour du triple fidget spinner
/TripleSpinner {
 1 setlinejoin
 newpath
 O1 /yO1 exch def /xO1 exch def
 xO1 r1 a1 add alpha1 neg cos mul add
 yO1 r1 a1 add alpha1 neg sin mul add
 moveto
 O1 r1 a1 add alpha1 neg alpha1 180 add arc
 A' r2 alpha1 beta1 arcn
 O2 r1 a1 add 180 beta1 add alpha2 arc
 C' r2 alpha2 180 sub alpha2 neg arcn
 O3 r1 a1 add alpha2 neg 180 add 360 beta1 sub arc
 B' r2 beta1 180 sub neg alpha1 180 sub neg arcn
 r1 rho moveto
 O1 r1 360 0 arcn
 r1 0 moveto
 0 0 r1 360 0 arcn
 O2 moveto r1 0 rmoveto
 O2 r1 360 0 arcn
 O3 moveto r1 0 rmoveto
 O3 r1 360 0 arcn
} def
%
/makeSpinner {
 1 setlinecap
 /r1 1.1 cm def
 /ri 0.4 cm def
 /a1 R1 3 div r1 sub def
 /rho R1 r1 sub a1 sub def
 /r2 2 r1 mul a1 mul 3 a1 dup mul mul add rho dup mul add rho r1 a1 2 mul add mul sub
  rho 2 a1 mul sub div  def
 /rho2 r2 r1 add 2 a1 mul add def
 /alpha1 rho rho2 2 div sub rho2 3 sqrt mul 2 div div arctan def
 /beta1 rho rho2 add neg 3 sqrt rho2 rho sub mul div arctan def
 /alpha2 rho 2 div neg rho2 add 3 sqrt 2 div rho mul neg div arctan def
 /A {0 R1} def
 /B {R1 3 sqrt mul -2 div R1 -2 div} def
 /C {R1 3 sqrt mul 2 div R1 -2 div} def
 /O1 {0 rho} def
 /O2 {rho 3 sqrt mul -2 div rho -2 div} def
 /O3 {rho 3 sqrt mul 2 div rho -2 div} def
 /A' {rho2 3 sqrt mul 2 div neg  rho2 2 div} def
 /B' {rho2 3 sqrt mul 2 div    rho2 2 div} def
 /C' {0 rho2 neg} def
 gsave
 spinnerROT rotate
 gsave
 TripleSpinner
 clip
 ifPst@customize { spinnerImage }{ spinnerFillColor fill } ifelse
 grestore
 TripleSpinner
 spinnerLineColor
 spinnerLW SLW
 stroke
 {color1} {O1} BallBearing
 {color2} {O2} BallBearing
 {color3} {O3} BallBearing
 {color0} {0 0} BallBearing
 grestore
 ifPst@mask {
   ifPst@customizeMask {
     gsave
     newpath
     r1 0 moveto
     0 0 r1 0 360 arc
     closepath
     clip
     spinnerImage
     grestore
   }{
     newpath
     0 0 r1 0 360 arc
     colorMask
     fill
   } ifelse
   0 0 r1 0 360 arc
   0.5 setlinewidth
   0 setgray
   stroke
 } if
} def  % makeSpinner
%
end
%%
%% end