Historique des modifications [retour]
cliquez ici pour masquer/afficher la révision 3

09 Jul '23, 07:43

Paul%20Gaborit's gravatar image

Paul Gaborit
2.0k16

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
cliquez ici pour masquer/afficher la révision 2

09 Jul '23, 07:43

Paul%20Gaborit's gravatar image

Paul Gaborit
2.0k16

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
cliquez ici pour masquer/afficher la révision 1

09 Jul '23, 07:42

Paul%20Gaborit's gravatar image

Paul Gaborit
2.0k16