%Author : Thomas Mounier
%email : thomgo.mounier@gmail.com
%Licence : LaTeX Project Public License 


\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{proflabo}[2022/04/25 - Chemistry Lab stuff helper for teachers, V1.0]
\RequirePackage{pgf,tikz}
\RequirePackage{listofitems}
\RequirePackage{simplekv}
\RequirePackage{ifthen}


\setKVdefault[Dosage]{Titrant={Titrant},Titre={Titré},Echelle=1,CouleurTitrant={white},CouleurTitre={white}}
\setKVdefault[Chimie]{Couleurs={white},Echelle=0.5,Legende=false}
\defKV[Chimie]{Legendes=\setKV[Chimie]{Legende}}
\setKVdefault[Becher]{Couleurs={white},Echelle=0.5,Legende={}}
\setKVdefault[Tube]{Couleurs={white},Echelle=0.5,Legende={},Hauteur={29}}
\setKVdefault[Erlen]{Couleurs={white},Echelle=1.5,Legende={},LegendeDessous={},Hauteur={33}}
\setKVdefault[Fiole]{Couleurs={white},Echelle=1,Legende={},Hauteur={33}}


%%%%%%%%%% N TUBES pour échelle de teinte %%%%%%%%%%%%%%%
\newcommand\EchelleTube[2][]{%
\useKVdefault[Chimie]%
\setKV[Chimie]{#1}%
\xdef\ListeAvantCouleurs{\useKV[Chimie]{Couleurs}}%
\setsepchar{,}
\readlist*\ListeCouleurs{\ListeAvantCouleurs}%
\ifboolKV[Chimie]{Legende}{
\xdef\ListeAvantLegendes{\useKV[Chimie]{Legendes}}%
\setsepchar{,}
\readlist*\ListeLegendes{\ListeAvantLegendes}%
}{}%
\pgfmathsetmacro{\nombretube}{#2}
\xdef\EchelleActuelle{\useKV[Chimie]{Echelle}}
\scalebox{\EchelleActuelle}{
\begin{tikzpicture}
\foreach \pos in {1,...,\nombretube}{%
\xdef\CouleurActuelle{\ListeCouleurs[\pos]}
\node at (5*\pos,0) {
\tikz\draw[fill=\CouleurActuelle]
(0,0) arc (0:-180:1)-- ++(0,4) -- (0,4)
(-2,4) -- ++ (0,4)
(0,0) -- ++ (0,8)
%(-2,4) -- ++ (2,0)
;
};
\ifboolKV[Chimie]{Legende}{%
\xdef\LegendeActuelle{\ListeLegendes[\pos]}
\draw[<-] (5*\pos,-3)--(5*\pos,-9);
\node at (5*\pos,-10){\LegendeActuelle};
}{}
}
\draw[rounded corners = 2mm] (1,4)--(2,4)--(2,-5)--(5*\nombretube+2,-5)
-- (5*\nombretube+2,4)--(5*\nombretube+3,4)--(5*\nombretube+3,-7)--(1,-7)--cycle;
\draw[] (2,3)--(5*\nombretube+2,3)--(5*\nombretube+2,2.75)--(2,2.75)
--cycle;
\end{tikzpicture}
}
}

%%%%%%%%%%%%% Montage d'un dosage %%%%%%%%%%%%%

\newcommand{\Dosage}[2][]{%
\useKVdefault[Dosage]%
\setKV[Dosage]{#1}%
\xdef\EchelleActuelle{\useKV[Dosage]{Echelle}}
\scalebox{\EchelleActuelle}{
    \begin{tikzpicture}
    \xdef\CouleurTitrant{\useKV[Dosage]{CouleurTitrant}}
    \xdef\CouleurTitre{\useKV[Dosage]{CouleurTitre}}


        \fill[color=\CouleurTitre] %bécher
        (0.3,1.7)--++(1.4,0)--++(0,-0.7)--++(-1.4,0)
        ;
        \draw %bécher
        (1.7,3) -- ++ (0,-2)
        (0.3,3) -- ++ (0,-2)
        (0.3,1.7) -- ++ (1.4,0)
        
        ;
        \draw %pastille
        (1,1.11)ellipse (0.25 and 0.10)
        ;
        \draw %support
        (0,0) -- ++ (2,0) -- ++ (0,1) -- ++ (-2,0) -- ++ (0,-1)   
        (0.3,0.3) circle(0.1)
        
        ;
        \draw[fill=\CouleurTitrant] %burette
        (0.6,3.3) -- ++ (0.7,0)
        (1,6) -- ++ (0,-3) -- ++ (-0.2,0.1) -- ++ (0,2.9)
        ;
        \draw %haut burette sans couleur
        (1,6.5)--(1,6)--++(-0.2,0)--++(0,0.5)
        ;
        \draw
        [<-,>=stealth, thick] (1,4.4) -- ++ (2,0) node[right]  {
            \begin{minipage}{0.4\textwidth}
                {\useKV[Dosage]{Titrant}}
            \end{minipage}
        }
        ;
        \draw
        [<-,>=stealth, thick] (1,1.5) -- ++ (2,0) node[right] {
            \begin{minipage}{0.4\textwidth}
            {\useKV[Dosage]{Titre}}
            \end{minipage}
        }
        
        ;    
        \node at (1.5,-0.75){{\small \useKV[Dosage]{legendeschema}}};
		\node[color=white] at (-2,0){a}; %hack temporaire pour décaler la figure au centre ...
    \end{tikzpicture}
}
}

%%%%%%%%%%%%%% Bécher avec liquide et éventuellement légende %%%%%%%%%%
\newcommand\Becher[2][]{%
\useKVdefault[Becher]%
\setKV[Becher]{#1}%
\xdef\LegendeActuelleB{\useKV[Becher]{Legende}}
\newif\iflegende
\legendefalse
\ifthenelse{\equal{\LegendeActuelleB}{}}{\legendefalse}{\legendetrue}
\newif\iftraitnoirbecher
\xdef\CouleurBecherd{\useKV[Becher]{Couleurs}}
\ifthenelse{\equal{\CouleurBecherd}{white}}{\traitnoirbechertrue}{}
\xdef\EchelleActuelle{\useKV[Becher]{Echelle}}
\scalebox{\EchelleActuelle}{
\begin{tikzpicture}
\xdef\CouleurBecher{\useKV[Becher]{Couleurs}}
\fill[color=\CouleurBecher] (0,0)--(0,2)--(2,2)--(2,0)--cycle;
\draw (0,0)--++(0,3);
\draw (0,0)--++(2,0);
\draw (2,0)--++(0,3);
\iftraitnoirbecher
\draw (0,2)--(2,2);
\fi
\iflegende
\draw[<-] (1,1)--(3,2) node[at end, right]{\begin{minipage}{0.25\textwidth}\begin{center}
\useKV[Becher]{Legende}
\end{center} \end{minipage}};
\fi
\end{tikzpicture}%
}%
}%


%%%%%%%%%% TUBE A ESSAI SIMPLE avec legende %%%%%%%%%%%%%%%
\newcommand\TubeAEssai[2][]{%
\useKVdefault[Tube]%
\setKV[Tube]{#1}%
\xdef\LegendeActuelleT{\useKV[Tube]{Legende}}
\newif\iflegendetube
\legendetubefalse
\ifthenelse{\equal{\LegendeActuelleT}{}}{\legendetubefalse}{\legendetubetrue}
\newif\iftrait
\xdef\CouleurTube{\useKV[Tube]{Couleurs}}
\ifthenelse{\equal{\CouleurTube}{white}}{\traittrue}{}
\pgfmathsetmacro{\hauteurmaxtube}{\useKV[Tube]{Hauteur}}
\ifthenelse{\hauteurmaxtube>100}{\setKV[Tube]{Hauteur=100}}{}
\xdef\EchelleActuelle{\useKV[Tube]{Echelle}}
\scalebox{\EchelleActuelle}{
    \begin{tikzpicture}[scale=1]

    \xdef\HauteurTube{\useKV[Tube]{Hauteur}}
    \coordinate (H) at (-2,7*\HauteurTube/100);
    \coordinate (K) at (0,7*\HauteurTube/100);
    \fill[\CouleurTube] (H)--(K)--(0,0) arc (0:-180:1)--(-2,0)--(H) ;
    \draw (0,0) arc (0:-180:1);
    \draw (-2,0) -- ++ (0,8);
	\draw (0,0) -- ++ (0,8);
	\draw[color=\CouleurTube] (H) -- (K);
	\iftrait
	\draw(H) -- (K);
	\fi
	\iflegendetube    
    \draw (-1,-1.5) node[below]
        {
        \begin{minipage}{0.25\textwidth}
        \begin{center}
		\useKV[Tube]{Legende}
		\end{center}
        \end{minipage}
        }
    \fi
    ;    
    \end{tikzpicture}
}
}

%%%%% Erlenmeyer %%%%%
\newcommand\Erlen[2][]{%
\useKVdefault[Erlen]%
\setKV[Erlen]{#1}%
\xdef\LegendeActuelleT{\useKV[Erlen]{Legende}}
\xdef\LegendeActuelleD{\useKV[Erlen]{LegendeDessous}}
\newif\iflegendeerlen
\newif\iflegendesouserlen
\legendeerlenfalse
\newif\iferlenplein
\newif\iferlenpartiel
\newif\iferlenvide
\erlenvidetrue \erlenpleinfalse \erlenpartielfalse
\ifthenelse{\equal{\LegendeActuelleT}{}}{\legendeerlenfalse}{\legendeerlentrue}
\ifthenelse{\equal{\LegendeActuelleD}{}}{\legendesouserlenfalse}{\legendesouserlentrue}
\pgfmathsetmacro{\hauteurerlen}{\useKV[Erlen]{Hauteur}}
\ifthenelse{\hauteurerlen>100}{\erlenpleintrue\erlenvidefalse\erlenpartielfalse}{}
\ifthenelse{\equal{\hauteurerlen}{100}}{\erlenpleintrue\erlenvidefalse\erlenpartielfalse}{}
\ifthenelse{\equal{\hauteurerlen}{33}}{\erlenpleinfalse\erlenvidefalse\erlenpartieltrue}{}
\newif\iftraitnoirerlen
\xdef\CouleurErlen{\useKV[Erlen]{Couleurs}}
\ifthenelse{\equal{\CouleurErlen}{white}}{\traitnoirerlentrue}{}
\xdef\EchelleActuelle{\useKV[Erlen]{Echelle}}
\scalebox{\EchelleActuelle}{
\begin{tikzpicture}
\coordinate (A) at (-0.35,1.5);
\coordinate (B) at (0.35,1.5);
\coordinate (C) at (-1,0);
\coordinate (D) at (1,0);
\coordinate (E) at (-0.79,0.49);
\coordinate (F) at (0.79,0.49);
\iferlenplein
\fill[rounded corners,color=\CouleurErlen] (A) --(C)--(D)--(B);
\fill[color=\CouleurErlen] (A)--++(0,0.25)--++(0.7,0)--++(0,-0.25)--cycle;
\iftraitnoirerlen
\draw ($(A)+(0,0.25)$)--($(B)+(0,0.25)$);
\fi
\fi
\iferlenpartiel
\fill[rounded corners,color=\CouleurErlen] (E) --(C)--(D)--(F);
\iftraitnoirerlen
\draw (E)--(F);
\fi
\fi
\draw[rounded corners] (A) --(C)--(D)--(B);
\draw (A)--++(0,0.75);
\draw (B)--++(0,0.75);
\iflegendeerlen
\draw[<-] (1,1)--(2,2) node[at end, right]{\begin{minipage}{0.15\textwidth}\begin{center}
\useKV[Erlen]{Legende}
\end{center} \end{minipage}};
\fi
\iflegendesouserlen
\draw (0,-0.25) node[below]
        {
        \begin{minipage}{0.25\textwidth}
        \begin{center}
		\useKV[Erlen]{LegendeDessous}
		\end{center}
        \end{minipage}
        }
    \fi
    ;  
    ;  
\end{tikzpicture}
}}

%%%%%%%%FIOLE JAUGEE%%%%%%%%%%
\newcommand\FioleJaugee[2][]{%
\useKVdefault[Fiole]%
\setKV[Fiole]{#1}%
\xdef\LegendeActuelleF{\useKV[Fiole]{Legende}}
\newif\iflegendefiole
\legendefiolefalse
\newif\iffiolepleine
\newif\iffiolevide
\fiolevidetrue \fiolepleinefalse 
\ifthenelse{\equal{\LegendeActuelleF}{}}{\legendefiolefalse}{\legendefioletrue}
\pgfmathsetmacro{\hauteurfiole}{\useKV[Fiole]{Hauteur}}
\ifthenelse{\hauteurfiole>100}{\fiolepleinetrue\fiolevidefalse}{}
\ifthenelse{\equal{\hauteurfiole}{100}}{\fiolepleinetrue\fiolevidefalse}{}
\ifthenelse{\hauteurfiole<100}{\fiolevidetrue\fiolepleinefalse}{}
\xdef\EchelleActuelle{\useKV[Fiole]{Echelle}}
\scalebox{\EchelleActuelle}{
\begin{tikzpicture}
\xdef\CouleurFiole{\useKV[Fiole]{Couleurs}}
\coordinate (A) at (-0.05,1.75);
\coordinate (B) at (0.05,1.75);
\coordinate (C) at (-0.8,0);
\coordinate (D) at (0.8,0);
\coordinate (E) at (-0.05,2.5);
\coordinate (F) at (0.05,2.5);

\iffiolepleine
\fill[rounded corners,color=\CouleurFiole] (A) --(C)--(D)--(B);
\fill[color=\CouleurFiole] (A)--(E)--(F)--(B)--cycle;
\fi

\draw[rounded corners] (A) --(C)--(D)--(B);
\draw (A)--++(0,0.75*2);
\draw (B)--++(0,0.75*2);
\draw (E)--(F);
\iflegendefiole
\draw[<-] (1,1)--(2,2) node[at end, right]{\begin{minipage}{0.15\textwidth}\begin{center}
\useKV[Fiole]{Legende}
\end{center} \end{minipage}};
\fi
 \end{tikzpicture}
}
}

