C'est un bel exemple où l'utilisation des `pics` est intéressante.
Ici, je définis la `pic` `camera` en lui associant plusieurs paramètres:
* `size` pour indiquer la taille de base (`1cm` par défaut)
* `rotate` pour indiquer l'orientation (`0` par défaut)
* `fill` et `draw` pour indiquer les couleurs de remplissage (`white` par défaut) et de dessin (`black` par défaut).
Ces paramètres sont stockés dans des macros mais comme le code dessinant la caméra est dans un groupe (entre ``=\bgroup` `\bgroup` et `\egroup`), ce stockage est temporaire et ne pollue pas la suite du document.
Lors du dessin d'une `pic` `camera`, je définis quelques coordonnées (`-center` et d'autres) afin de pouvoir les réutiliser ensuite (le nom de la `pic` définit en fait le préfixe du nom de ces coordonnées).
\documentclass{standalone}
\usepackage{tikz}
\tikzset{
% on crée la famille 'camera' pour définir ses clés
camera/.is family,
% quelques paramètres,
camera/rotate/.store in=\cameraangle,
camera/size/.store in=\camerasize,
camera/fill/.store in=\camerafill,
camera/draw/.store in=\cameradraw,
% le style définissant les valeurs par défaut
camera/default/.style={
rotate=0,
size=1cm,
fill=white,
draw=black,
},
% la camera elle-même
camera/.pic={
\bgroup
% on récupère les paramètres (via la famille 'camera')
\tikzset{camera,default,#1}
\coordinate (-center) at (0,0);
\begin{scope}[rotate around={\cameraangle:(-center)}]
% lens
\path[draw=\cameradraw,fill=\camerafill,rounded corners=.5mm] (-center)
++(.3*\camerasize,0)
-- ++(.6*\camerasize,-.45*\camerasize)
-- ++(0,.9*\camerasize)
-- cycle;
% body
\path[draw=\cameradraw,fill=\camerafill,rounded corners=.5mm] (-center)
++(-.6*\camerasize,-.5*\camerasize) coordinate (-north west)
-- ++(1.2*\camerasize,0) coordinate (-north east)
-- ++(0,1*\camerasize) coordinate (-south east)
-- ++(-1.2*\camerasize,0) coordinate (-south west)
-- cycle;
\end{scope}
\egroup
},
}
\begin{document}
\begin{tikzpicture}
\path
(0,0) pic (c1) {camera}
(2,2) pic (c2) {camera={rotate=45,size=5mm,fill=pink,draw=red}};
\fill[blue]
(c1-center) circle(2pt)
(c2-center) circle(2pt);
\end{tikzpicture}
\end{document}
![résultat][1]
[1]: https://texnique.fr/osqa/upfiles/tikz-camera-p-1-r.png