Récupérer la valeur d'un booléen dans le package xkeyval pour affecter celle-ci à un booléen d'une autre famille
L'objectif du code ci-dessous est de pouvoir dessiner un compas avec un crayon.
Après avoir déjà obtenu de l'aide sur Texnique.fr, j'ai pu modifié l'orientation de la bague autour du crayon.
Et je cherche maintenant à modifier l'orientation de mon compas sur le même principe.
Pour cela, j'ai adapté la solution qui m'a été proposée pour le crayon (et qui fonctionne exactement comme je le souhaite) mais je reçois un message d'erreur m'indiquant qu'il n'y a pas de valeur pour mon booléen "DES@Compas@orientationCompas" `DES@Compas@orientationCompas` dont je souhaite affecter la valeur à l'autre booléen "DES@CrayonGris@orientation".
`DES@CrayonGris@orientation`.
Dans la documentation que je consulte (et que je ne comprends toujours pas), il est mentionné le recours aux actions "\savevalue" `\savevalue` et "\usevalue" `\usevalue` dans un "\setkeys" `\setkeys` mais lorsque je les place dans mon code (au niveau du second test conditionnel qui affecte la valeur du compteur \c, `\c`, cela ne fonctionne pas (le compas change bien d'orientation mais pas le crayon).
\documentclass[12pt,a4paper]{article}
\usepackage[latin1,utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{lmodern}
\usepackage{fourier}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usepackage{tkz-euclide}
\usetkzobj{all}
\usepackage{xkeyval}
\usepackage{ifthen}
\newcount\n
\newcount\c
\makeatletter
%----------> \CrayonGris <----------
\definecolor{wood}{cmyk}{0.00,0.12,0.35,0.05}
\define@cmdkey [DES] {CrayonGris} {inclinaison}{}
\define@cmdkey [DES] {CrayonGris} {mine}{}
\define@cmdkey [DES] {CrayonGris} {corps}{}
\define@cmdkey [DES] {CrayonGris} {couleur}{}
\define@cmdkey [DES] {CrayonGris} {xscale}{}
\define@cmdkey [DES] {CrayonGris} {yscale}{}
\define@boolkey [DES] {CrayonGris} {bague}[true]{}
\define@cmdkey [DES] {CrayonGris} {couleurBague}{}
\define@cmdkey [DES] {CrayonGris} {couleurVis}{}
\define@cmdkey [DES] {CrayonGris} {opacite}{}
\define@boolkey [DES] {CrayonGris} {orientation}[true]{}
\presetkeys [DES] {CrayonGris}
{
inclinaison = 0,
mine = red,
corps = blue,
couleur = wood,
xscale=1,
yscale=1,
couleurBague = gray!50,
couleurVis = gray!50,
opacite = 0.5
}{}
%
\newcommand{\CrayonGris}[2][]{%
\setkeys[DES]{CrayonGris}{#1}
\begin{scope}[shift={(#2)},rotate=\cmdDES@CrayonGris@inclinaison, xscale=\cmdDES@CrayonGris@xscale, yscale=\cmdDES@CrayonGris@yscale]
% Pointe ouverte
\draw[fill=\cmdDES@CrayonGris@couleur] (-0.3,0.6) -- (0,0) -- (0.3,0.6) arc(-90:-180:0.1) arc(0:-180:0.1) arc(0:-180:0.1) arc(0:-90:0.1);
% Mine
\draw[fill=\cmdDES@CrayonGris@mine] (-0.1,0.2) -- (0.1,0.2) -- (0,0) -- cycle;
% Corps du crayon
\draw[fill=\cmdDES@CrayonGris@corps] (0.3,0.6) arc(-90:-180:0.1) arc(0:-180:0.1) arc(0:-180:0.1) arc(0:-90:0.1) -- (-0.3,6) -- (0.3,6) -- cycle;
% Traits verticaux
\draw (-0.2,6) -- (-0.2,0.65) (0,6) -- (0,0.65) (0.2,6) -- (0.2,0.65);
% Bague
\ifDES@CrayonGris@bague
\draw[fill=\cmdDES@CrayonGris@couleurBague,opacity=\cmdDES@CrayonGris@opacite] (-0.4,1.5)rectangle(0.4,2.5);
% Vis
\ifDES@CrayonGris@orientation
\n = 1
\else
\n = -1
\fi
\draw[fill=\cmdDES@CrayonGris@couleurVis] (0.4*\n,1.9)--(0.6*\n,1.9)--(0.6*\n,1.8)--(0.8*\n,1.8)--(0.8*\n,2.2)--(0.6*\n,2.2)--(0.6*\n,2.1)--(0.4*\n,2.1)--cycle;
%\draw[fill=gray!20] (0.4,1.9)--(0.6,1.9)--(0.6,1.8)--(0.8,1.8)--(0.8,2.2)--(0.6,2.2)--(0.6,2.1)--(0.4,2.1)--cycle;
\fi
\end{scope}
}
\makeatother
\makeatletter
%----------> \Compas <----------
\definecolor{wood}{cmyk}{0.00,0.12,0.35,0.05}
\define@cmdkey [DES] {Compas} {inclinaisonCompas}{}
\define@cmdkey [DES] {Compas} {ecartementCompas}{}
\define@cmdkey [DES] {Compas} {couleurCompasBrancheCrayon}{}
\define@cmdkey [DES] {Compas} {couleurCompasCrayonMine}{}
\define@cmdkey [DES] {Compas} {couleurCompasCrayonCorps}{}
\define@cmdkey [DES] {Compas} {couleurCompasCrayonCouleur}{}
\define@cmdkey [DES] {Compas} {couleurCompasBague}{}
\define@cmdkey [DES] {Compas} {couleurCompasVis}{}
\define@cmdkey [DES] {Compas} {couleurCompasBranchePointe}{}
\define@cmdkey [DES] {Compas} {couleurCompasPointe}{}
\define@cmdkey [DES] {Compas} {couleurCompasTop}{}
\define@cmdkey [DES] {Compas} {couleurCompasTopVisSerrage}{}
\define@cmdkey [DES] {Compas} {couleurCompasTopTrouSerrage}{}
\define@cmdkey [DES] {Compas} {xscale}{}
\define@cmdkey [DES] {Compas} {yscale}{}
\define@boolkey [DES] {Compas} {bagueCompas}[true]{}
\define@boolkey [DES] {Compas} {orientationCompas}[true]{}
\presetkeys [DES] {Compas}
{
inclinaisonCompas = 0,
ecartementCompas = 0,
couleurCompasBrancheCrayon = black,
couleurCompasCrayonMine = black,
couleurCompasCrayonCorps = blue,
couleurCompasCrayonCouleur = wood,
couleurCompasBague = gray!50,
couleurCompasVis = yellow,
couleurCompasBranchePointe = black,
couleurCompasPointe = gray!50,
couleurCompasTop = yellow,
couleurCompasTopVisSerrage = gray!30,
couleurCompasTopTrouSerrage = gray!20,
xscale=1,
yscale=1
}{}
%
\newcommand{\Compas}[2][]{%
\setkeys[DES]{Compas}{#1}
\begin{scope}[shift={(#2)},rotate=\cmdDES@Compas@inclinaisonCompas, xscale=\cmdDES@Compas@xscale, yscale=\cmdDES@Compas@yscale]
\ifDES@Compas@orientationCompas
\c = 1
\setkeys[DES]{Compas}{\savevalue{orientationCompas}=true}
\else
\c = -1
\setkeys[DES]{Compas}{\savevalue{orientationCompas}=false}
\fi
\setkeys[DES]{CrayonGris}{\savevalue{orientation}=\usevalue{DES@Compas@orientationCompas}}
% Branche du compas avec la pointe
\begin{scope}[xshift=-(\cmdDES@Compas@ecartementCompas cm)/2,
rotate={-asin(\cmdDES@Compas@ecartementCompas/20)}]
% Pointe du compas
\draw[fill=\cmdDES@Compas@couleurCompasPointe] (0*\c,0)--(0*\c,0.4)--(-0.1*\c,0.2)--(-0.1*\c,0.1)--cycle;%gray!50
% Branche pointe
\draw[fill=\cmdDES@Compas@couleurCompasBranchePointe,smooth,rounded corners=3pt] (0*\c,0.2)--(0*\c,5)--(-0.1*\c,7.5)--(0*\c,10)--(-0.6*\c,9.8)--(-0.8*\c,9)--(-0.85*\c,8)--(-0.9*\c,7)--(-0.9*\c,6)--(-0.8*\c,5)-- (-0.75*\c,4)--(-0.65*\c,3)--(-0.7*\c,2)--(-0.6*\c,1)--(-0.5*\c,0.7)--(-0.3*\c,0.25)--cycle;
\end{scope}
% Branche du compas avec le crayon/la mine
\begin{scope}[xshift=(\cmdDES@Compas@ecartementCompas cm)/2,rotate={asin(\cmdDES@Compas@ecartementCompas/20)}]
% Branche crayon
\draw[fill=\cmdDES@Compas@couleurCompasBrancheCrayon,smooth,rounded corners=3pt] (0*\c,2)--(0*\c,5)--(0.1*\c,7.5)--(0*\c,10)--(0.6*\c,9.8)--(0.8*\c,9)--(0.85*\c,8)--(0.9*\c,7)--(0.9*\c,6)--(0.8*\c,5)-- (0.75*\c,4)--(0.65*\c,3)--(0.7*\c,2)--(0*\c,2)--cycle;
% Crayon fixé
\begin{scope}[rotate=-30]
\CrayonGris[bague=true,
orientation=true,
corps=\cmdDES@Compas@couleurCompasCrayonCorps,
mine=\cmdDES@Compas@couleurCompasCrayonMine,
couleur=\cmdDES@Compas@couleurCompasCrayonCouleur,
couleurBague=\cmdDES@Compas@couleurCompasBague,
couleurVis=\cmdDES@Compas@couleurCompasVis,
opacite=1,
%orientation=\cmdDES@Compas@orientationCompas,
couleurVis=\cmdDES@Compas@couleurCompasTop]{0,0}
% Fixation
\draw[fill=\cmdDES@Compas@couleurCompasBague](-0.4,2.5)--(-1.355,2.35)--(-0.86,1.5)--(-0.4,1.5)--cycle;
\end{scope}
\end{scope}
% Top du compas
\begin{scope}[yshift=-10cm+0.5cm*sqrt(400-\cmdDES@Compas@ecartementCompas*\cmdDES@Compas@ecartementCompas)]
% Top
\draw[fill=\cmdDES@Compas@couleurCompasTop,rounded corners=4pt] (0,8.6)--(0.3,9)--(0.6,9.8)--(0.7,10)--(0.5,11)--(0.3,12) arc(0:180:0.3)--(-0.5,11)--(-0.7,10)--(-0.6,9.8)--(-0.3,9)--cycle;
% Trou
\draw[fill=\cmdDES@Compas@couleurCompasTopTrouSerrage] (0,10) circle (0.3);
% Vis de serrage
\draw[fill=\cmdDES@Compas@couleurCompasTopVisSerrage] (0.125,9.785) -- ++(60:0.25) -- ++(120:0.25) -- ++(180:0.25) -- ++(240:0.25) -- ++(300:0.25) -- cycle;
\draw[red](0,10)node{$\times$}; %vérification visuelle du positionnement de la pièce Top
\end{scope}
\end{scope}
}
\makeatother
\begin{document}
\section*{Compas}
\subsection*{Crayon (avec ou sans bague/vis)}
\begin{tikzpicture}
\CrayonGris[bague=true,
orientation=false,
inclinaison=-90,
corps=red,
xscale=2,
yscale=1.5,
couleurBague=yellow,
couleurVis=brown,
opacite=1]{0,0}
\CrayonGris[bague=true,orientation=true,corps=green]{-1,1}
\CrayonGris[bague=false,orientation=true,corps=white,inclinaison=90]{-2,0}
\CrayonGris[bague=false,orientation=true,inclinaison=180]{-1,-1}
\end{tikzpicture}
\subsection*{Compas}
\begin{tikzpicture}
\Compas{0,0}
\end{tikzpicture}
\begin{tikzpicture}
\Compas[inclinaisonCompas=-30,
couleurCompasTop=orange,
couleurCompasTopVisSerrage=red,
couleurCompasTopTrouSerrage=blue,
couleurCompasBranchePointe=yellow,
couleurCompasPointe=red,
couleurCompasBrancheCrayon=green,
couleurCompasBague=black,
couleurCompasVis=yellow,
orientationCompas=false]{0,0}
\end{tikzpicture}
\begin{tikzpicture}
\Compas[couleurCompasTop=white,
couleurCompasTopVisSerrage=white,
couleurCompasTopTrouSerrage=white,
couleurCompasBranchePointe=white,
couleurCompasBrancheCrayon=white,
couleurCompasCrayonCouleur=white,
couleurCompasCrayonCorps=white,
couleurCompasVis=white,
couleurCompasBague=white]{0,0}
\end{tikzpicture}
\subsection*{Exemples}
\begin{tikzpicture}
\clip(-7,-2)rectangle(7,13);
\Compas[ecartementCompas=12,
couleurCompasTop=orange,
couleurCompasTopVisSerrage=blue,
couleurCompasTopTrouSerrage=gray,
couleurCompasBranchePointe=black,
couleurCompasBrancheCrayon=green,
couleurCompasBague=white]{0,0}
\draw[red](0,0)node{$\times$};
\draw[red](0,0)node[below]{O};
\draw[red](0,8)node{$\times$};
\draw[red](0,8)node[below]{C};
\draw[red](-6,0)node{$\times$};
\draw[red](-6,0)node[below]{A};
\draw[red](6,0)node{$\times$};
\draw[red](6,0)node[below]{B};
\draw[red](-6,10)node{$\times$};
\draw[red](-6,10)node[below]{D};
\draw[red](-6,0)circle(10);
\draw[red](6,10)node{$\times$};
\draw[red](6,10)node[below]{E};
\draw[red](6,0)circle(10);
\end{tikzpicture}
\begin{tikzpicture}
\clip(-7,-2)rectangle(7,13);
\Compas[ecartementCompas=6]{0,0}
\draw[red](0,0)node{$\times$};
\draw[red](0,0)node[below]{O};
\draw[red](0,8)node{$\times$};
\draw[red](0,8)node[below]{C};
\draw[red](-3,0)node{$\times$};
\draw[red](-3,0)node[below]{A};
\draw[red](3,0)node{$\times$};
\draw[red](3,0)node[below]{B};
\draw[red](-3,10)node{$\times$};
\draw[red](-3,10)node[below]{D};
\draw[red](-3,0)circle(10);
\draw[red](3,10)node{$\times$};
\draw[red](3,10)node[below]{E};
\draw[red](3,0)circle(10);
\end{tikzpicture}
\begin{tikzpicture}
\clip(-7,-2)rectangle(7,13);
\Compas[ecartementCompas=0.2,
couleurCompasTop=white,
couleurCompasTopVisSerrage=white,
couleurCompasTopTrouSerrage=white,
couleurCompasBranchePointe=white,
couleurCompasBrancheCrayon=white,
couleurCompasCrayonCouleur=white,
couleurCompasCrayonCorps=white,
couleurCompasVis=white,
couleurCompasBague=white,
orienationCompas=false]{0,0}
\draw[red](0,0)node{$\times$};
\draw[red](0,0)node[below]{O};
\draw[red](0,8)node{$\times$};
\draw[red](0,8)node[below]{C};
\draw[red](-0.2,0)node{$\times$};
\draw[red](-0.2,0)node[below]{A};
\draw[red](0.2,0)node{$\times$};
\draw[red](0.2,0)node[below]{B};
\draw[red](-0.2,10)node{$\times$};
\draw[red](-0.2,10)node[below]{D};
\draw[red](-0.2,0)circle(10);
\draw[red](0.2,10)node{$\times$};
\draw[red](0.2,10)node[below]{E};
\draw[red](0.2,0)circle(10);
\end{tikzpicture}
\end{document}