%%%
% Enigme Aire
%%%
\setKVdefault[EnigmeAire]{Modele=A,Couleur=LightSteelBlue,Echelle=7mm,Etape=1,Solution=false,Graines=false}
\defKV[EnigmeAire]{Graine=\setKV[EnigmeAire]{Graines}}

\def\MPEnigmeAireA{%
  \ifluatex
  \mplibforcehmode
  \begin{mplibcode}
    boolean Graines,Solution;
    Graines:=\useKV[EnigmeAire]{Graines};
    Solution:=\useKV[EnigmeAire]{Solution};
    
    if Graines:
    randomseed:=\useKV[EnigmeAire]{Graine};
    fi;
    
    u:=\useKV[EnigmeAire]{Echelle};
    
    pair A[],B[];
    numeric la[];
    la1=ceiling(3+uniformdeviate(7));
    la2=ceiling(3+uniformdeviate(7));
    la3=ceiling(3+uniformdeviate(7));
    la4=ceiling(4+uniformdeviate(6));
    A1=u*(1,1);
    A2-A1=u*(10,0);
    A3-A2=u*(0,5);
    A4-A3=A1-A2;
    B1=(la1/(la1+la2+la3))[A1,A2];
    B2=((la1+la2)/(la1+la2+la3))[A1,A2];
    B3-B2=A4-A1;
    B4-B1=B3-B2;
    fill polygone(B1,B2,B3,B4) withcolor \useKV[EnigmeAire]{Couleur};
    trace polygone(B1,B2,B3,B4);
    trace polygone(A1,A2,A3,A4);
    label(TEX("\Aire[m]{"&decimal(la1*la4)&"}"),iso(A1,B4));
    if Solution:
    label(TEX(decimal(la2*la4)&"\,\si{\square\meter}"),iso(B1,B3));
    else:
    label(TEX("?\,\si{\square\meter}"),iso(B1,B3));
    fi;
    
    label(TEX("\Aire[m]{"&decimal(la3*la4)&"}"),iso(B2,A3));
    trace cotation(A4,B3,3mm,3mm,TEX("\Lg[m]{"&decimal(la1+la2)&"}"));
    trace cotation(B1,A2,-3mm,-3mm,TEX("\Lg[m]{"&decimal(la3+la2)&"}"));
  \end{mplibcode}
  \fi
}

\def\MPEnigmeAireB{%
  \ifluatex
  \mplibforcehmode
  \begin{mplibcode}
    boolean Graines,Solution;
    Graines:=\useKV[EnigmeAire]{Graines};
    Solution:=\useKV[EnigmeAire]{Solution};
    
    if Graines:
    randomseed:=\useKV[EnigmeAire]{Graine};
    fi;
    
    u:=\useKV[EnigmeAire]{Echelle};
    pair A[],B[];
    numeric La[],la[],Ca[];
    la1=ceiling(3+uniformdeviate(7));
    la2=ceiling(3+uniformdeviate(7));
    La1=ceiling(8+uniformdeviate(7));
    La2=ceiling(uniformdeviate(5));
    Ca1=1+ceiling(uniformdeviate(La1-La2-2));
    Ca2=ceiling(uniformdeviate(la2-2));
    A1=u*(1,1);
    A2-A1=u*(10,0);
    A3-A2=u*(0,2);
    A4-A3=u*(-7,0);
    A5-A4=u*(0,4);
    A6-A5=(xpart(A1-A4),0);
    A7-A6=A4-A5;
    B1=(Ca1/(La1-La2))[A4,A3];
    B3=((Ca2+1)/la2)[A4,A5];
    B2-B1=B3-A4;
    fill polygone(A4,B1,B2,B3) withcolor \useKV[EnigmeAire]{Couleur};
    trace chemin(B1,B2,B3);
    trace polygone(A1,A2,A3,A4,A5,A6);
    trace chemin(A7,A4);
    label(TEX("\Aire[m]{"&decimal(la1*La1)&"}"),iso(A1,A3));
    if Solution:
    label(TEX(decimal(Ca1*Ca2)&"\,\si{\square\meter}"),iso(B1,B3));
    else:
    label(TEX("?\,\si{\square\meter}"),iso(B1,B3));
    fi;
    
    label(TEX("\Aire[m]{"&decimal(la2*La2)&"}"),iso(A7,A5));
    trace appelation(A6,A5,3mm,TEX("\Lg[m]{"&decimal(La2)&"}"));
    trace appelation(B1,A3,3mm,TEX("\Lg[m]{"&decimal(La1-La2-Ca1)&"}"));
    label.rt(TEX("\Lg[m]{"&decimal(la2-Ca2)&"}"),iso(A5,B3));
    label.rt(TEX("\Lg[m]{"&decimal(la1)&"}"),iso(A2,A3));
  \end{mplibcode}
  \fi
}

\def\MPEnigmeAireC{%
  \ifluatex
  \mplibforcehmode
  \begin{mplibcode}
    boolean Graines,Solution;
    Graines:=\useKV[EnigmeAire]{Graines};
    Solution:=\useKV[EnigmeAire]{Solution};
    
    if Graines:
    randomseed:=\useKV[EnigmeAire]{Graine};
    fi;
    
    u:=\useKV[EnigmeAire]{Echelle};
    pair A[];
    numeric la[],La[];
    La1=ceiling(3+uniformdeviate(7));
    La2=ceiling(3+uniformdeviate(7));
    La3=ceiling(3+uniformdeviate(7));
    la1=ceiling(3+uniformdeviate(7));
    la2=ceiling(3+uniformdeviate(7));
    la3=ceiling(3+uniformdeviate(7));
    A1=u*(1,1);
    A4-A1=if La1+La2+La3>la1+la2+la3:
    u*(10,0)
    else:
    u*(8,0);
    fi;
    A2=(La1/(La1+La2+La3))[A1,A4];
    A3=((La1+La2)/(La1+La2+La3))[A1,A4];
    A5-A4=if La1+La2+La3>la1+la2+la3:
    u*(0,7)
    else:
    u*(0,10);
    fi;
    A6-A5=A3-A4;
    A7-A3=((la1+la2)/(la1+la2+la3))[A4,A5]-A4;
    A8-A7=A2-A3;
    A9-A2=(la1/(la1+la2+la3))[A4,A5]-A4;
    A10-A9=A1-A2;
    trace polygone(A1,A4,A5,A6,A7,A8,A9,A10);
    trace segment(A2,A9);
    trace segment(A3,A7);
    label(TEX("\Aire[cm]{"&decimal(la1*La1)&"}"),iso(A1,A9));
    label(TEX("\Aire[cm]{"&decimal((la1+la2)*La2)&"}"),iso(A2,A7));
    label(TEX("\Aire[cm]{"&decimal((la1+la2+la3)*La3)&"}"),iso(A3,A5));
    trace cotation(A1,A4,-3mm,-3mm,TEX("\Lg[cm]{"&decimal(La1+La2+La3)&"}"));
    label.lft(TEX("\Lg{"&decimal(la1)&"}"),iso(A1,A10));
    label.lft(TEX("\Lg{"&decimal(la2)&"}"),iso(A9,A8));
    if Solution:
    label.lft(TEX(decimal(la3)&"\,\si{\centi\meter}"),iso(A7,A6));
    else:
    label.lft(TEX("?\,\si{\centi\meter}"),iso(A7,A6));
    fi;
  \end{mplibcode}
  \fi
}

\def\MPEnigmeAireD{%
  \ifluatex
  \mplibforcehmode
  \begin{mplibcode}
    boolean Graines,Solution;
    Graines:=\useKV[EnigmeAire]{Graines};
    Solution:=\useKV[EnigmeAire]{Solution};
    
    if Graines:
    randomseed:=\useKV[EnigmeAire]{Graine};
    fi;
    
    u:=\useKV[EnigmeAire]{Echelle};
    Etape:=\useKV[EnigmeAire]{Etape};
    pair A[];
    numeric la[],La[];
    la[1]=ceiling(3+uniformdeviate(7));
    la[2]=ceiling(3+uniformdeviate(7));
    k=1;
    La[k]=ceiling(3+uniformdeviate(7));
    A[1]=u*(9,-9);
    A[6*(k-1)+2]-A[6*(k-1)+1]=u*(0,3);
    A[6*(k-1)+3]-A[6*(k-1)+2]=u*(-6,0);
    A[6*(k-1)+4]-A[6*(k-1)+3]=A[6*(k-1)+1]-A[6*(k-1)+2];
    A[6*(k-1)+5]=(la[k]/(la[k]+la[k+1]))[A[6*(k-1)+1],A[6*(k-1)+4]];
    A[6*(k-1)+6]-A[6*(k-1)+5]=A[6*(k-1)+2]-A[6*(k-1)+1];
    trace polygone(A[6*(k-1)+1],A[6*(k-1)+2],A[6*(k-1)+3],A[6*(k-1)+4]);
    trace segment(A[6*(k-1)+5],A[6*(k-1)+6]);
    if Solution:
    trace cotation(A[6*(k-1)+5],A[6*(k-1)+1],-3mm,-3mm,TEX("\Lg{"&decimal(la[k])&"}"));
    else:
    trace cotation(A[6*(k-1)+5],A[6*(k-1)+1],-3mm,-3mm,TEX("?\,\si{\centi\meter}"));
    fi;
    label(TEX("\Aire{"&decimal(la[k]*La[k])&"}"),iso(A[6*(k-1)+5],A[6*(k-1)+2]));
    label(TEX("\Aire{"&decimal(la[k+1]*La[k])&"}"),iso(A[6*(k-1)+4],A[6*(k-1)+6]));
    if Etape<2:
    trace cotation(A[6*(k-1)+3],A[6*(k-1)+6],3mm,3mm,TEX("\Lg{"&decimal(la[k+1])&"}"));
    fi;
    for k=2 upto Etape:
    La[k]=ceiling(3+uniformdeviate(7));
    la[k+1]=ceiling(3+uniformdeviate(7));
    A[6*(k-1)+1]=A[6*(k-1)];
    A[6*(k-1)+2]-A[6*(k-1)+1]=u*(0,3);
    A[6*(k-1)+3]-A[6*(k-1)+2]=u*(-6,0);
    A[6*(k-1)+4]-A[6*(k-1)+3]=A[6*(k-1)+1]-A[6*(k-1)+2];
    A[6*(k-1)+5]=A[6*(k-1)-3];%(la[k]/(la[k]+la[k+1]))[A[6*(k-1)+1],A[6*(k-1)+4]];
    A[6*(k-1)+6]-A[6*(k-1)+5]=A[6*(k-1)+2]-A[6*(k-1)+1];
    trace polygone(A[6*(k-1)+1],A[6*(k-1)+2],A[6*(k-1)+3],A[6*(k-1)+4]);
    trace segment(A[6*(k-1)+5],A[6*(k-1)+6]);
    if k=Etape:
    trace cotation(A[6*(k-1)+3],A[6*(k-1)+6],3mm,3mm,TEX("\Lg{"&decimal(la[k+1])&"}"));
    fi;
    label(TEX("\Aire[cm]{"&decimal(la[k]*La[k])&"}"),iso(A[6*(k-1)+6],A[6*(k-1)]));
    label(TEX("\Aire[cm]{"&decimal(la[k+1]*La[k])&"}"),iso(A[6*(k-1)+4],A[6*(k-1)+6]));
    endfor;
  \end{mplibcode}
  \fi
}

\def\MPEnigmeAireE{%
  \ifluatex
  \mplibforcehmode
  \begin{mplibcode}
    boolean Graines,Solution;
    Graines:=\useKV[EnigmeAire]{Graines};
    Solution:=\useKV[EnigmeAire]{Solution};
    
    if Graines:
    randomseed:=\useKV[EnigmeAire]{Graine};
    fi;
    
    u:=\useKV[EnigmeAire]{Echelle};
    pair A[];
    numeric la[],La[];
    La1=ceiling(3+uniformdeviate(7));
    La2=ceiling(3+uniformdeviate(7));
    La3=ceiling(3+uniformdeviate(7));
    la1=ceiling(4+uniformdeviate(5));
    la2=ceiling(4+uniformdeviate(5));
    la3=la1+la2+2;
    A1=u*(7,1);
    A11-A1=if la3>(La1+La2+La3):u*(0,10) else:u*(0,7) fi;
    A2=(La1/(La1+La2+La3))[A1,A11];
    A3=((La1+La2)/(La1+La2+La3))[A1,A11];
    A8-A2=if la3>(La1+La2+La3):u*(-7,0) else:u*(-10,0) fi;
    A6-A8=A11-A2;
    A7-A8=A3-A2;
    A4=(la2/la3)[A7,A3];
    A5-A4=A6-A7;
    A9=(la1/la3)[A2,A8];
    A10-A9=A1-A2;
    trace polygone(A1,A3,A4,A5,A6,A8,A9,A10);
    trace segment(A7,A4);
    trace segment(A2,A9);
    label(TEX("\Aire[cm]{"&decimal(la1*La1)&"}"),iso(A1,A9));
    label(TEX("\Aire[cm]{"&decimal(la3*La2)&"}"),iso(A2,A7));
    label(TEX("\Aire[cm]{"&decimal(la2*La3)&"}"),iso(A4,A6));
    trace cotationarc(A5,A4,5mm,4,1,TEX("\Lg[cm]{"&decimal(La3)&"}") rotated 90);
    trace cotationarc(A9,A8,3mm,4,1,TEX("\Lg[cm]{"&decimal(la3-la1)&"}") rotated 180);
    trace cotationarc(A4,A3,3mm,4,1,TEX("\Lg[cm]{"&decimal(la3-la2)&"}"));
    if Solution:
    trace cotationarc(A3,A1,5mm,3,1,TEX("\Lg{"&decimal(La1+La2)&"}") rotated 90);
    else:
    trace cotationarc(A3,A1,5mm,3,1,TEX("?") rotated 90);
    fi;
  \end{mplibcode}
  \fi
}

\def\MPEnigmeAireF{%
  \ifluatex
  \mplibforcehmode
  \begin{mplibcode}
    boolean Graines,Solution;
    Graines:=\useKV[EnigmeAire]{Graines};
    Solution:=\useKV[EnigmeAire]{Solution};
    
    if Graines:
    randomseed:=\useKV[EnigmeAire]{Graine};
    fi;
    
    u:=\useKV[EnigmeAire]{Echelle};
    pair A[];
    numeric la[],La[];
    la1=ceiling(2+uniformdeviate(4));
    la2=ceiling(2+uniformdeviate(4));
    la3=ceiling(2+uniformdeviate(4));
    la4=ceiling(2+uniformdeviate(4));
    La1=ceiling(8+uniformdeviate(4));
    La2=ceiling(8+uniformdeviate(4));
    La3=ceiling(8+uniformdeviate(4));
    La4=ceiling(8+uniformdeviate(4));
    A1=(0,0);
    A2-A1=u*(0,-3.5);
    A3-A2=u*(2.25,0);
    A4-A1=A3-A2;
    A5-A1=u*(6,0);
    A6-A5=u*(0,2.5);
    A7-A6=A1-A5;
    A8-A7=u*(0,2);
    A9-A8=u*(-2,0);
    A10-A9=A1-A8;
    A11-A1=u*(-4.5,0);
    A12-A11=u*(0,-1.5);
    A13-A12=A1-A11;
    fill polygone(A1,A5,A6,A7) withcolor \useKV[EnigmeAire]{Couleur};
    trace polygone(A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13);
    trace segment(A7,A13);
    trace segment(A10,A4);
    if Solution:
    label(TEX("\Aire{"&decimal(la2*La2)&"}"),iso(A1,A6));
    else:
    label(TEX("?\,\si{\square\centi\meter}"),iso(A1,A6));
    fi;
    label(TEX("\Aire[cm]{"&decimal(la1*La1)&"}"),iso(A2,A4));
    label(TEX("\Aire[cm]{"&decimal(la3*La3)&"}"),iso(A10,A8));
    label(TEX("\Aire[cm]{"&decimal(la4*La4)&"}"),iso(A12,A1));
    trace cotationarc(A12,A11,5mm,4,1,TEX("\Lg[cm]{"&decimal(la4)&"}") rotated -90);
    trace cotationarc(A5,A4,5mm,4,1,TEX("\Lg[cm]{"&decimal(La2-la1)&"}") rotated 180);
    trace cotationarc(A8,A7,5mm,4,1,TEX("\Lg[cm]{"&decimal(La3-la2)&"}") rotated 90);
    trace cotationarc(A11,A10,3mm,4,1,TEX("\Lg[cm]{"&decimal(La4-la3)&"}"));
    trace cotationarc(A2,A13,5mm,3,1,TEX("\Lg[cm]{"&decimal(La1-la4)&"}") rotated -90);
  \end{mplibcode}
  \fi
}

\NewDocumentCommand\EnigmeAire{o}{%
  \useKVdefault[EnigmeAire]%
  \setKV[EnigmeAire]{#1}%
  \IfStrEqCase{\useKV[EnigmeAire]{Modele}}{%
    {A}{\MPEnigmeAireA}
    {B}{\MPEnigmeAireB}
    {C}{\MPEnigmeAireC}
    {D}{\MPEnigmeAireD}
    {E}{\MPEnigmeAireE}
    {F}{\MPEnigmeAireF}
  }%
}%