summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/pgf-spectra/pgf-spectra.library.rainbow.tex
blob: 1ecf0554f5361be272e4eadbedb7ddf9aa4e196e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
% --------------------------------------------------------------------------------------------------
% subfile of pgf-spectra package -----------------------------------------------------------------
% --------------------------------------------------------------------------------------------------
\def\pgfspectra@library@rainbow@loaded{}%
\message{pgf-spectra rainbow library loaded!}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% provide the macro
%       \pgfspectrarainbow<[tikz options]><(rainbow options)>{radius}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \pgfspectrarainbow[<tikz options>](<rainbow fade>,<rainbow start>,<rainbow knock out>,<rainbow background>,<rainbow transparency>){radius}
% tikz options -> color, opacity,scope fading
% rainbow clip -> applies a scope fading in clipped region
% ...
\pgfkeys{/pgfspectra/.cd,%
rainbow fade/.get=\pgfspectra@rainbowfade,%
rainbow fade/.store in=\pgfspectra@rainbowfade,%
rainbow fade/.default={},%
rainbow start/.get=\pgfspectra@rainbow@start,%
rainbow start/.store in=\pgfspectra@rainbow@start,%
rainbow start/.default=.6,% -> 60%
rainbow knock out/.get=\pgfspectra@rainbow@KO,%
rainbow knock out/.store in=\pgfspectra@rainbow@KO,%
rainbow knock out/.default=.4,% -> 40%
rainbow background/.get=\pgfspectra@rainbowback,%
rainbow background/.store in=\pgfspectra@rainbowback,%
rainbow background/.default=white,%
rainbow transparency/.get=\pgfspectra@rainbowtransp,%
rainbow transparency/.store in=\pgfspectra@rainbowtransp,%
rainbow transparency/.default=0}% -> 0%
%
\def\pgfspectrarainbow{\ignorespaces\@ifnextchar[\pgf@spectrarainbow{\pgf@spectrarainbow[]}}%
\def\pgf@spectrarainbow[#1]{\ignorespaces\@ifnextchar({\pgf@spectra@rainbow{#1}}{\pgf@spectra@rainbow{#1}()}}%
%
\def\pgf@spectra@rainbow#1(#2)#3{\ignorespaces%
\pgfkeys{/pgfspectra/.cd,rainbow fade,rainbow start,rainbow knock out,rainbow background,rainbow transparency}%
\pgfkeys{/pgfspectra/.cd,#2}%
\pgfmathparse{100-\pgfspectra@rainbowtransp*100}\edef\pgfspectra@rainbow@transp{\pgfmathresult}%
\pgfmathparse{\pgfspectra@rainbowtransp*100}\edef\pgfspectra@rainbow@transp@w{\pgfmathresult}%
\edef\pgfspectra@rainbowend{.8875cm}\pgfmathparse{\pgfspectra@rainbow@start*\pgfspectra@rainbowend/1cm}\edef\pgfspectra@rainbowstart{\pgfmathresult cm}%
\pgfmathparse{\pgfspectra@rainbow@KO*#3/1cm}\edef\pgfspectra@rainbowKO{\pgfmathresult cm}%%\edef\pgfspectra@rainbowKO{\pgfspectra@rainbow@KO cm}%
\ifdim\pgfspectra@rainbowstart<\pgfspectra@rainbowend\relax%
\ifdim\pgfspectra@rainbowstart<.0175cm\relax\edef\pgfspectra@rainbowstart{.0175cm}\fi% ensuring there is no error in radial shading
\pgfkeys{/pgf/number format/.cd,fixed,precision=3,set thousands separator={},assume math mode=true}%
\pgfmathparse{\pgfspectra@rainbowstart-1/50*(\pgfspectra@rainbowend-\pgfspectra@rainbowstart)}%
\pgfmathprintnumberto{\pgfmathresult}{\pgfspectra@rainbowresult}%
\edef\rO{\pgfspectra@rainbowresult pt}%
\@for\n:={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,%
21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,%
38,39,40,41,42,43,44,45,46,47,48,49,50,51}\do{%
%\pgfmathparse{380+(\n-1)*8}\edef\pgfspectra@currentwl{\pgfmathresult}%
\pgfmathparse{372+8*\n}\edef\pgfspectra@currentwl{\pgfmathresult}%
\wlcolor{\pgfspectra@currentwl}%
\edef\pgfspectra@colorname{wlshcol\@Roman\n}\relax\colorlet{\pgfspectra@colorname}{wlcolor!100!transparent!\pgfspectra@rainbow@transp}%
\pgfmathparse{\pgfspectra@rainbowstart+1/50*(\n-1)*(\pgfspectra@rainbowend-\pgfspectra@rainbowstart)}%
\pgfmathprintnumberto{\pgfmathresult}{\pgfspectra@rainbowresult}%
\expandafter\edef\csname r\@Roman\n\endcsname{\pgfspectra@rainbowresult pt}%
}%
\pgfdeclareradialshading{pgfspectrarainbow}{\pgfpoint{0pt}{0pt}}{%
color(0cm)=(\pgfspectra@rainbowback!\pgfspectra@rainbow@transp@w!white);color(4/5*\rO)=(\pgfspectra@rainbowback!\pgfspectra@rainbow@transp@w!white!50);color(\rO)=(white);%
color(\rI)=(wlshcolI);color(\rII)=(wlshcolII);color(\rIII)=(wlshcolIII);color(\rIV)=(wlshcolIV);color(\rV)=(wlshcolV);color(\rVI)=(wlshcolVI);color(\rVII)=(wlshcolVII);color(\rVIII)=(wlshcolVIII);color(\rIX)=(wlshcolIX);color(\rX)=(wlshcolX);%
color(\rXI)=(wlshcolXI);color(\rXII)=(wlshcolXII);color(\rXIII)=(wlshcolXIII);color(\rXIV)=(wlshcolXIV);color(\rXV)=(wlshcolXV);color(\rXVI)=(wlshcolXVI);color(\rXVII)=(wlshcolXVII);color(\rXVIII)=(wlshcolXVIII);color(\rXIX)=(wlshcolXIX);color(\rXX)=(wlshcolXX);%
color(\rXXI)=(wlshcolXXI);color(\rXXII)=(wlshcolXXII);color(\rXXIII)=(wlshcolXXIII);color(\rXXIV)=(wlshcolXXIV);color(\rXXV)=(wlshcolXXV);color(\rXXVI)=(wlshcolXXVI);color(\rXXVII)=(wlshcolXXVII);color(\rXXVIII)=(wlshcolXXVIII);color(\rXXIX)=(wlshcolXXIX);color(\rXXX)=(wlshcolXXX);%
color(\rXXXI)=(wlshcolXXXI);color(\rXXXII)=(wlshcolXXXII);color(\rXXXIII)=(wlshcolXXXIII);color(\rXXXIV)=(wlshcolXXXIV);color(\rXXXV)=(wlshcolXXXV);color(\rXXXVI)=(wlshcolXXXVI);color(\rXXXVII)=(wlshcolXXXVII);color(\rXXXVIII)=(wlshcolXXXVIII);color(\rXXXIX)=(wlshcolXXXIX);color(\rXL)=(wlshcolXL);%
color(\rXLI)=(wlshcolXLI);color(\rXLII)=(wlshcolXLII);color(\rXLIII)=(wlshcolXLIII);color(\rXLIV)=(wlshcolXLIV);color(\rXLV)=(wlshcolXLV);color(\rXLVI)=(wlshcolXLVI);color(\rXLVII)=(wlshcolXLVII);color(\rXLVIII)=(wlshcolXLVIII);color(\rXLIX)=(wlshcolXLIX);color(\rL)=(wlshcolL);color(\rLI)=(wlshcolLI);%
color(.95cm)=(wlshcolLI)%
}%
\ifx\pgfspectra@rainbowfade\@empty\relax%
\tikz{\clip(-#3,\pgfspectra@rainbowKO) rectangle ++(2*#3,#3-\pgfspectra@rainbowKO);%
\fill[#1,shading=pgfspectrarainbow] (0,0) circle(#3);}%
\else%
\tikz{\clip[scope fading=\pgfspectra@rainbowfade] (-#3,\pgfspectra@rainbowKO) rectangle ++(2*#3,#3-\pgfspectra@rainbowKO);%
\fill[shading=pgfspectrarainbow,\pgfspectra@rainbowback,#1] (0,0) circle(#3);}%
\fi%
\else\PackageError{pgf-spectra}{invalid 'rainbow start' value (rainbow start=\pgfspectra@rainbow@start). The rainbow start should be greater or equal then 0 and lower then 1.}{Don't forget that 'rainbow start' value is the fraction from witch the  colors begin, relative to the center of a circle with radius 1...}%
\fi
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatother%
\endinput