Retour

shadow-doc.tex

Télécharger le fichier Fichier PDF
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[garamond]{mathdesign}
\usepackage[tikz]{bclogo}
\usepackage[margin=2.5cm]{geometry}
\usepackage[frenchb]{babel}
\usepackage{mflogo}
\usepackage{graphicx}
\usepackage{xcolor}
 
\newenvironment{Code}[1][]{\begin{bclogo}[noborder=true,logo=\bccrayon]{Code : #1}}
{\end{bclogo}}
 
\newenvironment{Remarque}{\begin{bclogo}[noborder=true,logo=\bcinfo]{Remarque}}
{\end{bclogo}}
 
\parindent0pt
 
\usepackage[colorlinks]{hyperref}
\usepackage{listings}
 
\definecolor{vert}{RGB}{0,105,29}
\definecolor{bleu}{RGB}{78,88,169}
\lstset{% general command to set parameter(s)
    basicstyle=\small,          % print whole listing small
    keywordstyle=\color{bleu}\ttfamily,
                                % underlined bold black keywords
%   identifierstyle=, 
    basicstyle=\ttfamily\footnotesize,          % nothing happens
    commentstyle=\itshape\color{vert}, % white comments
    stringstyle=\ttfamily,      % typewriter type for strings
    showstringspaces=false,
    language=metapost,
    defaultdialect=metapost
}
\lstdefinestyle{numbers}
    {numbers=left, stepnumber=1, numberstyle=\tiny, numbersep=10pt}
 
 
\begin{document}
 
 
\begin{Huge}
Macros \texttt{shadow.mp}
\end{Huge}
\medskip
\hrule
\medskip
\textsc{Chupin} Maxime \url{mc@melusine.eu.org}
 
\begin{bclogo}[noborder=true,barre=snake,logo= {}]{}
\tableofcontents
\end{bclogo}
 
\section{Introduction}
 
Je me suis aperçu qu'il manquait la gestion de l'ombre dans \MP{}, et même dans Metafun. Alors, j'ai essayé de faire quelques macros permettant de réaliser plusieurs types d'ombres assez simplement. Ces fonctions sont, je pense, loins d'être optimales. Libre à ceux qui veulent les améliorer de le faire.
\section{Notes}
 
\begin{Remarque}
Attention, ces macros incluent Metafun, vous devez donc en disposer :
\url{www.pragma-ade.com/general/manuals/}. De plus, le format \texttt{.eps} ne permet pas la visualisation des dégradés. Dans ce document, j'ai donc été obligé d'utiliser pdf\LaTeX{}.
\end{Remarque}
 
 
Dans tous les exemples suivants, les codes sources \MP{} commenceront par :
 
\begin{Code}
\begin{lstlisting}
verbatimtex
%&latex
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[charter]{mathdesign}
\begin{document}
etex
\end{lstlisting}
\end{Code}
 
Je ne remettrai pas ce \og préambule \fg{} dans un soucis de lisibilité.
 
\section{Ombre \og classique \fg{}}
 
Le premier type d'ombre est l'ombre que je qualifie de \og classique \fg{}, c'est-à-dire la reproduction de l'image simplement décalée.
 
Ceci s'obtient simplement avec la commande \texttt{shadow(<path ou picture>,<pair>,<couleur>)}, où le path (ou picture) est ce à quoi on veut appliquer l'ombre, le pair représente le vecteur de décalage de l'ombre, et la couleur est la couleur de l'ombre.
 
Voici un exemple :
\begin{Code}
\begin{lstlisting}
input shadow;
 
beginfig(1);
  shadowrect(btex Essai etex scaled 16, (3,-3),black);
  draw btex Essai etex scaled 16 withcolor blue withpen pencircle scaled 10pt;
endfig;
\end{lstlisting}
\end{Code}
 
Ceci produit :
 
\begin{center}
\includegraphics{test-001}
\end{center}
 
Dans l'exemple suivant, on trace l'ombre d'une picture. 
 
\begin{Code}
\begin{lstlisting}
input shadow;
 
beginfig(0);
  picture im;
  im:=image(
    draw fullcircle scaled 4cm withpen pencircle scaled 3pt withcolor red;
    draw fullcircle scaled 2cm withpen pencircle scaled 3pt withcolor blue;
    );
  shadowrect(im, (3,-3), black);
  draw im;
endfig;
\end{lstlisting}
\end{Code}
Ce qui donne :
 
\begin{center}
\includegraphics{test-000}
\end{center}
 
\section{Ombre \og dégradée \fg{}}
 
Voici maintenant le deuxième style d'ombre, qui n'est en fait pas vraiment une ombre mais ceci produit un effet qui peut être intéressant. Le principe est de répéter l'image dont on veut produire l'ombre le long du vecteur donné en argument avec une couleur de plus en plus transparente.
 
La syntax est \texttt{shadowdeg(<picture ou path>,<pair>,<color>,<précision>)}, où comme précédemment, le path (ou picture) est ce à quoi on veut appliquer l'ombre, le pair est le vecteur qui indique le décalage de l'ombre, color est la couleur de l'ombre et la précision est le nombre d'images répétées le long du vecteur.
 
Voici deux exemples illustrant ce qui vient d'être expliqué :
\begin{Code}
\begin{lstlisting}
beginfig(2);
  shadowdeg(btex Essai etex scaled 16, (4,-4),black,200);
  draw btex Essai etex scaled 16 withcolor blue withpen pencircle scaled 10pt;
endfig;
\end{lstlisting}
\end{Code}
 
qui donne :
 \begin{center}
\includegraphics{test-002}
\end{center}
 
et,
\begin{Code}
\begin{lstlisting}
beginfig(3);
  shadowdeg(btex Essai etex scaled 16, (6,-6),black,4);
  draw btex Essai etex scaled 16 withcolor blue withpen pencircle scaled 10pt;
endfig;
\end{lstlisting}
\end{Code}
 
qui donne :
 \begin{center}
\includegraphics{test-003}
\end{center}
 
\section{Ombre \og blur \fg{}}
 
Voici le dernier type d'ombre, l'ombre \og blur \fg{}. Le principe est d'avoir une ombre du type de l'ombre \og classique \fg{} mais avec un effet de dispersion tout au tour.
 
La syntax est \texttt{shadowblur(<picture ou path>,<pair>,<précision>,<blur>)}. Là aussi, le path (ou picture) est ce à quoi on veut appliquer l'ombre et le pair est le vecteur de distance de l'ombre. La précision et le blur sont deux numeric, ils règlent la \og dispersion \fg{} et sont liés, blur est relié à la distance de dispersion autour de l'ombre \og classique \fg{} et précision est le nombre de passes pour réaliser cette dispersion. Attention ce procédé est \textbf{très} lourd car la macro génère beaucoup d'images.
 
Voici trois exemples :
 
\begin{Code}
\begin{lstlisting}
beginfig(4);
  shadowblur(btex Essai etex scaled 16, (3,-3),black,50,4);
  draw btex Essai etex scaled 16 withcolor blue withpen pencircle scaled 10pt;
endfig;
\end{lstlisting}
\end{Code}
 
qui donne :
 
\begin{center}
\includegraphics{test-004}
\end{center}
 
\begin{Code}
\begin{lstlisting}
beginfig(5);
  shadowblur(btex Essai etex scaled 16, (3,-3),black,50,12);
  draw btex Essai etex scaled 16 withcolor blue withpen pencircle scaled 10pt;
endfig;
\end{lstlisting}
\end{Code}
 
\begin{center}
\includegraphics{test-005}
\end{center}
 
\begin{Code}
\begin{lstlisting}
beginfig(6);
  shadowblur(btex Essai etex scaled 16, (3,-3),black,3,12);
  draw btex Essai etex scaled 16 withcolor blue withpen pencircle scaled 10pt;
endfig;
\end{lstlisting}
\end{Code}
 
\begin{center}
\includegraphics{test-006}
\end{center}
 
\section{Le code}
 
\begin{Code}
\begin{lstlisting}[style=numbers, breaklines=true,breakindent=30pt]
input metafun;
 
vardef shadowrect(expr dessin, vect,couleur) =
  save im,i;
  picture im;
  im := image(
    draw dessin;
    );
  draw im shifted vect withcolor couleur;
enddef;
 
vardef shadowblur(expr dessin, vect, couleur,pre,blur) =
  save im,i,t;
  picture im;
  im := image(
    draw dessin;
    );
  draw im shifted vect withcolor couleur;
  for i:=pre downto 0:
    for t:= 0 step 10 until 360:
      draw im shifted (vect+blur*i/pre*(sind(t),cosd(t))) withcolor transparent(1,0.5,((0.05,0.05,0.05)+couleur+(i)/pre*white));
    endfor;
  endfor;
enddef;
 
vardef shadowdeg(expr dessin, vect,couleur,pre) =
  save im,i;
  picture im;
  im := image(
    draw dessin;
    );
  for i:=pre downto 0:    
    draw im shifted ((i/pre)*vect) withcolor transparent(1,(10/(pre)*(pre-i)/pre),couleur);    
  endfor;
enddef;
\end{lstlisting}
\end{Code}
\end{document}