\section{Historique}
\subsection{Version 3.4}

\begin{itemize}
    \item Pour la méthode \cmd{g:Dfrustum()}, l'ancienne syntaxe \cmd{g:Dfrustum(C,R,r,V,options)} a été modifiée en \cmd{g:Dfrustum(C,R,r,A,options)}, la différence est que le centre de la deuxième base circulaire est le point \argu{A}, alors que dans l'ancienne syntaxe c'était le point $C+V$. De même pour la fonction \cmd{ld.frustum()}, l'ancienne syntaxe \cmd{ld.frustum(C,R,r,V,nb,open)} devient \cmd{ld.frustum(C,R,r,A,nb,open)} avec la même différence. Ceci afin d'avoir une syntaxe homogène pour les cylindres, les cônes et les cônes tronqués.

    \item Pour la méthode \cmd{g:Beginclip(chemin, inverse)}, le \argu{chemin} peut être un chemin 2D ou 3D.
    
    \item Dans le module \emph{luadraw\_spherical} : ajout de la méthode \cmd{g:DSregion()} qui permet de peindre une région de la sphère délimitée par une courbe sphérique fermée simple.

    \item Ajout d'arguments optionnels à la méthode \cmd{g:Endclip(\fac{draw\_path, draw\_options})}, \argu{draw\_path} est un booléen (\false par défaut), lorsqu'il a la valeur \true, le chemin qui a servi à clipper est dessiné après la fermeture du groupe, et dans ce cas, l'argument optionnel \argu{draw\_options}, qui est une chaîne de caractères vide par défaut, est transmise à l'instruction \drawcmd.

    \item Ajout de fonctions spécifiques aux chemins 2D ou 3D : \cmd{ld.path()}, \cmd{ld.path3d()}, \cmd{ld.convpath()}, \cmd{ld.polyline2path()}, \cmd{ld.polyline2path3d()}, et les méthodes \cmd{g:Convpath3d()}, \cmd{g:Path3d2path2d()}.
    
    \item Ajout des méthodes \cmd{g:Cylinder\_outline()}, \cmd{g:Cone\_outline()}, \cmd{g:Frustum\_outline()}, et \cmd{g:Sphere\_outline()} qui renvoient une table contenant les éléments caractéristiques (contour, arêtes visibles, arêtes cachées, \ldots).

    \item Ajout des méthodes \cmd{g:Cylinder\_tangency()}, \cmd{g:Cone\_tangency()}, \cmd{g:Frustum\_tangency()} et \cmd{g:Sphere\_tangency()} qui calculent et renvoient la liste des points de tangence pour les cylindres, les cônes, les cônes tronqués et les cercles tracés sur une sphère.

    \item Pour la fonction \cmd{ld.read\_table3d()}, ajout de l'option \opt{mode} permettant de choisir un type de table 3D (types \val{"xyz"}, ou \val{"y/x"} ou \val{"x/y"}.

    \item L'option \opt{usepalette()} (pour le  dessin de facettes) accepte désormais un troisième argument (facultatif) : \par
    \hfil\opt{usepalette(palette, mode, minmax)},\hfil\par
    où \argu{minmax} est une table de deux nombres, ces deux nombres sont utilisés comme valeur minimale et valeur maximale de l'argument \argu{mode}. En l'absence de \argu{minmax}, ces deux valeurs sont calculées automatiquement.
    
    \item Correction de bug...
\end{itemize}


\subsection{Version 3.3}

\begin{itemize}
    \item Ajout de la fonction \cmd{ld.read\_table3d()} permettant de lire et exploiter un tableau (liste de listes) contenant les valeurs d'une (ou plusieurs) fonction(s) de deux variables sur un pavé $[x_1;x_2]\times [y_1;y_2]$.

    \item Ajout de l'option \opt{reverse=true/false} dans les méthodes de dessins de facettes (\cmd{g:Dfacet()}, \cmd{g:Dmixfacet()}, \cmd{g:Dpoly()}, \cmd{g:addFacet()}, \ldots), avec la valeur \true, l'orientation des facettes est inversée.

    \item Ajout du module \emph{luadraw\_pdfliteral}, celui-ci permet de dessiner directement dans le flux PDF : des chemins 2D, des lignes polygonales 2D, des ensembles de points 2D (circulaires) ou des facettes 3D, sans utiliser la commande \drawcmd, ce qui réduit notablement le temps de compilation lorsque les données sont en grand nombre, ceci sous certaines réserves : pas de changement d'opacité, et seulement deux styles de remplissage : aucun ou solide.
    
    \item Dans le module \emph{luadraw\_spherical}, ajout de trois nouvelles méthodes : \cmd{g:DSaddback()}, \cmd{g:DSaddinside()} et \cmd{g:DSaddfront()} qui permettent d'ajouter des éléments graphiques (chemins ou lignes polygonales), sur la face arrière de la sphère, à l'intérieur, ou sur la face avant.

    \item Dans les méthodes \cmd{g:Dfacet()} et \cmd{g:Dmixfacet()}, en mode \emph{ld.mWireframe} (dessin des arêtes uniquement), si l'option \opt{usepalette} est différente de \nil, alors la couleur de chaque arête et calculée dans la palette suivant le même mode que les facettes lorsque celles-ci sont peintes.
    
    \item Ajout de l'option \opt{out=<variable>} à la méthode \cmd{g:BeginOnPlane()},  elle permet de récupérer une matrice 2D correspondant aux nouveaux axes.
    
    \item Ajout de l'option \opt{graphics\_options} pour la méthode \cmd{g:Dmapimage()}. Ajout de l'option \opt{node\_options} pour les méthodes \cmd{g:Dmapimage()} et \cmd{g:Dimage()}.
    
    \item Pour la méthode \cmd{g:addPolyline()}, il y a une nouvelle option (expérimentale) qui s'appelle \opt{double=\{border color, border width\}}, celle-ci permet d'ajouter une bordure de chaque côté de la ligne polygonale. Avec la valeur par défaut (\nil) il n'y a pas de bordure. 
    
    \item La syntaxe des fonctions \cmd{ld.lineEq()} et \cmd{ld.planeEq()} a été étendue pour prendre en compte une éventuelle inégalité.
    
    \item Correction de bug...
\end{itemize}

\subsection{Version 3.2}

\begin{itemize}
    \item Ajout des méthodes \cmd{g:BeginOnplane()} et \cmd{g:EndOnPlane()}, celles-ci permettent de dessiner sur un plan de l'espace en utilisant les méthodes graphiques 2D.

    \item Dans le module \emph{luadraw\_fields} ont été ajoutés les champs de vecteurs tangents à une surface\footnote{Sur une initiative d'\href{https://tex.stackexchange.com/users/322482/explorer}{Explorer}.}. La fonction \cmd{ld.surfacefield()} calcule et renvoie le champ de vecteurs, la méthode \cmd{g:Dsurfacefield()} permet le dessin du champ de vecteurs avec (ou sans) la surface.
    
    \item La fonction \cmd{ld.linspace()} a une deuxième syntaxe possible : \cmd{ld.linspace(a1, b1, n1, b2, n2, \ldots, bp, np)} qui renvoie une liste de \argu{n1} nombres équirépartis de \argu{a1} jusqu'à \argu{b1}, suivis de \argu{n2} nombres équirépartis de \argu{b1} jusqu'à \argu{b2} (mais \argu{b1} n'est pas répété), etc.

    \item Dans le module \emph{luadraw\_spherical}, ajout des fonctions : 
        \begin{itemize}
            \item \cmd{ld.interGreatC(C1,C2)} qui renvoie sous forme d'une séquence, les deux points d'intersection des deux grands cercles \argu{C1} et \argu{C2} appartenant à la sphère.
            
            \item \cmd{ld.interSphericalC(P1, P2)} qui renvoie sous forme d'une séquence, les points d'intersection (s'ils existent) entre deux cercles appartenant à la sphère (pas nécessairement des grands cercles).
            
            \item \cmd{ld.projstereo\_Scircle(P, N, h)} qui renvoie sous forme de chemin la projection stéréographique d'un cercle tracé sur la sphère.
            
            \item \cmd{ld.projstereo\_Sfacet(L, N, h \fac{, close})} qui renvoie sous forme de chemin la projection stéréographique d'une facette sphérique.
        \end{itemize}
    
    \item Ajout des trois options dans la méthode \cmd{g:Dboxaxes3d()} : \opt{xlabels=\{x1,\ldots,xn\}}, \opt{ylabels=\{y1,\ldots,yn\}}, \opt{zlabels=\{z1,\ldots,zn\}}. Ces options permettent d'imposer les labels sur les axes. Par défaut ces options ont la valeur \nil, dans cas ce sont les labels par défaut (un par graduation) qui sont affichés.

    \item Dans le module \emph{luadraw\_povray}, il y a une nouvelle option dans les réglages par défaut : \opt{arrowscale=\{1,1\}}, qui est une table de deux nombres, le premier est un facteur d'échelle pour le rayon de la base des flèches (celles-ci sont des cônes), le second est un facteur d'échelle pour la hauteur des flèches.
    
    Dans les méthodes \cmd{g:Pov\_polyline()} et \cmd{g:addPolyline()}, l'option du même nom peut désormais être soit une table de deux nombres, soit un seul nombre (dans ce cas les deux nombres sont considérés comme égaux).
    
    \item Pour la 3D, il y a une nouvelle variable globale \varglob{ld.Hiddenlinescale} qui vaut \val{2/3} par défaut, cela signifie que l'épaisseur des lignes cachées sera égale à celle des lignes visibles, multipliée par ce nombre, lorsqu'on utilise la méthode \cmd{g:Dscene3d()}.
    
    \item Correction de bug...
\end{itemize}

\subsection{Version 3.1}

\begin{itemize}
    \item Ajout de la fonction \cmd{ld.implicit\_inequality()} qui renvoie un \textbf{chemin} représentant le contour de la partie du plan située dans un certain pavé et vérifiant une condition du type $f(x,y)>=0$ ou $f(x,y)<=0$.
    
    \item Ajout de la méthode \cmd{g:Dimplicit\_inequalities()} qui peut peindre l'ensemble des points vérifiant un système de contraintes du type $f_i(x,y)>0$ ou $f_i(x,y)<0$.
    
    \item Ajout de la fonction \cmd{plane2rectangle(P, V, L1, L2)} qui renvoie un rectangle (liste de points 3D) qui permet de représenter ce plan, c'est ce même rectangle que dessine la méthode \cmd{g:Dplane(P, V, L1, L2)}. Il peut être dessiné avec la méthode \cmd{g:Dpolyline3d()} ou bien être dessiné en tant que facette.
    
    \item Pour les méthodes \cmd{g:addPlane()} et \cmd{g:addPlaneEq()} (qui s'utilisent dans \cmd{g:Dscene3d()}), ajout de l'option \opt{rectangle}. Lorsque \opt{rectangle=\nil} (valeur par défaut) le plan est coupé par la fenêtre 3D et la facette qui en résulte est dessinée. Lorsque \opt{rectangle=\{V,L1,L2\}}, le plan est dessiné sous la forme d'une facette rectangulaire, c'est le même rectangle que dessine la méthode \cmd{g:Dplane(P, V, L1, L2)} (où $P$ désigne le plan).
    
    \item Lors de la création d'un graphe 3D, l'option \opt{window3d} prend maintenant en compte les échelles sur les trois axes: \par
    \hfil\opt{window3d=\{x1,x2,y1,y2,z1,z2 \fac{,xscale,yscale,zscale}\}}.\hfil\par
    Ces trois échelles sont facultatives et valent $1$ par défaut, elles déterminent la matrice 3D initiale du graphe (qui n'est donc plus l'identité si une des échelles est différente de $1$).
    
    \item Lors de la création d'un graphe, l'option \opt{margin} peut maintenant être réduite à un seul nombre lorsque les quatre marges sont égales, par exemple \opt{margin=0}.
    
    \item Ajout de l'option \opt{useclip=<booléen>} pour la méthode \cmd{g:Dinequalities()} qui permet de choisir la technique à utiliser, soit le calcul du contour (avec la valeur \false, valeur par défaut), soit avec une série de clips (avec la valeur \true).
    
    \item La fonction \cmd{rectangle()} a désormais une deuxième syntaxe possible : \cmd{rectangle(a, b)}, dans ce cas le rectangle a ses côtés parallèles aux axes et admet comme sommets opposés \argu{a} et \argu{b}. Il en va de même pour la méthode graphique correspondante \cmd{g:Drectangle()}.
    
    \item Pour la fonction \cmd{line2strip()}, l'argument \argu{ends} qui était jusque là un booléen, peut prendre maintenant les valeurs \val{"none"} (équivalent à \false), \val{"butt"} (équivalent à \true), ou bien \val{"round"}. Les valeurs booléennes restent néanmoins acceptées.
    
    \item La fonction \cmd{line2strip()} a maintenant argument en plus appelé \opt{mode}, celui-ci peut valoir \val{"center"} (valeur par défaut), ou bien \val{"left"}, ou bien \val{"right"}, dans le premier cas la bande est centrée sur la ligne polygonale, dans le second cas elle est sur la gauche de la ligne, et dans le troisième cas elle est sur la droite de la ligne.
    
    \item Dans la fonction \cmd{read\_csv\_file()}, ajout de l'option \opt{comment=<char>}, celle-ci indique les caractères qui commencent une ligne de commentaires.
    
    \item Toutes les méthodes de dessin de droites ou demi-droites (\cmd{g:Dline()}, \cmd{g:Dperp()},\ldots) ont maintenant une option \opt{scale} comme la méthode \cmd{g:Dseg()}. Cette option (qui veut $1$ par défaut) peut être un nombre (pourcentage), soit une table de deux nombres (pourcentages), le second cas permet de faire varier séparément les deux extrémités.
    
    \item Correction de bug...
\end{itemize}

\subsection{Version 3.0}
Cette version amène un changement majeur : toutes les données relatives au paquet \emph{luadraw} sont désormais dans l'espace de noms (table) nommé \emph{luadraw}, ce qui oblige à utiliser la notation pointée, par exemple \code{luadraw.graph} à la place de \code{graph}, mais il est possible de créer des raccourcis, par exemple l'instruction \code{local ld = luadraw} vous permettra d'utiliser \emph{ld} à la place de \emph{luadraw} dans la notation pointée. Reportez vous au tout début de ce document pour avoir plus de détails.
Ce changement a pour conséquence une incompatibilité avec les versions antérieures, cependant les changements à effectuer pour adapter les anciens codes sont minimes, d'autant plus qu'il n'y a aucun changement en ce qui concerne les méthodes graphiques (elles étaient déjà encapsulées dans deux classes).
Ce changement amène également quelques modifications (mineures) pour les extensions, reportez-vous à la documentation pour plus de détails.

\begin{itemize}
    \item Ajout d'une deuxième syntaxe possible pour les fonctions \cmd{ld.surface()} et \cmd{ld.obj\_surface()} : \cmd{ld.surface(f, mesh)} et \cmd{ld.obj\_surface(f, mesh)} où \argu{mesh}$=\{\{u_1,\ldots,u_n\}, \{v_1,\ldots,v_m\}\}$ (liste croissante des valeurs du paramètre $u$ et liste croissante des valeurs du paramètre $v$).

    \item Dans le module \emph{luadraw\_decorations} : les méthodes graphiques de dessin de lignes 2D et 3D ont été surchargées de manière à ce que l'argument \argu{draw\_options}, qui est normalement une chaîne de caractères transmise à l'instruction \drawcmd, puisse être remplacé par une table dont les champs représentent des options possibles (comme par exemple ajouter un label). Les noms des méthodes sont inchangés et l'ancienne syntaxe reste toujours valable.
    
    \item Dans les fonctions \cmd{ld.curve2cone()}, \cmd{ld.curve2cylinder()}, \cmd{ld.line2tube()}, \cmd{ld.section2tube()}, \cmd{ld.rotcurve()} et \cmd{ld.rotline()}, ajout de l'option \opt{obj=\true/\false}; avec la valeur par \false (par défaut) les fonctions renvoient une liste de facettes, avec la valeur \true elles renvoient une table \code{\{vertices=\{3D points\}, facets=\{\{index1,\ldots\},\ldots\}, normals=\{3D vectors\}\}}. Si la méthode \cmd{g:Dpoly()} ne prend pas en compte le champ \emph{normals}, la méthode \cmd{g:Pov\_facet()} du module \emph{luadraw\_povray} par contre, utilise ce champ lorsqu'il est présent.
    
    \item Ajout de la fonction \cmd{ld.cutpolyline2(P,f,sg,close)} où \argu{P} est un polygone (liste de nombres complexes), \argu{f} une fonction ($x\mapsto f(x)\in \mathbf R$) et \argu{sg} une chaîne qui vaut \val{">"} ou \val{"<"}. Cette fonction renvoie le contour de la partie du polygone vérifiant la contrainte $y>f(x)$ ou bien $y<f(x)$ en fonction de la valeur de \argu{sg}.
    
    \item Ajout de la méthode \cmd{g:Dinequalities(constraints, options)} qui dessine l'ensemble des points vérifiant un système de contraintes du type $y>f_i(x)$ ou $y<f_i(x)$ .
    
    \item Dans le module \emph{luadraw\_povray} : ajout de l'option \opt{usepalette=\{palette, mode, minmax\}}.
    
    \item Correction de bug...
\end{itemize}

\subsection{Version 2.8}
Liste non exhaustive :
\begin{itemize}
    \item Ajout des fonctions : \cmd{nth\_root(n,x)} (racine énième d'un réel $x$, définie sur $\mathbb R$ lorsque $n$ est impair); \cmd{cpx.cosh()}, \cmd{cpx.sinh()} (cosinus et sinus hyperboliques complexes) et \cmd{cpx.pow(z,a)} (pour le calcul de $z^a$ avec $z$ nombre complexe et $a$ un réel).
    
    \item Ajout de l'extension \emph{luadraw\_coils\_chains} qui permet de dessiner des ressorts et des chaînes.

    \item Ajout de l'extension \emph{luadraw\_log\_axes} qui permet de créer et de dessiner sur grille logarithmique en $x$, ou en $y$ ou en $x$ et $y$.

    \item Ajout de l'option \opt{use\_siunitx} pour les méthodes \cmd{g:Daxes()}, \cmd{g:DaxeX()}, \cmd{g:DaxeY()}, \cmd{g:Dgradbox()}, \cmd{g:Dgradline()}. Elle permet localement d'utiliser ou non le formatage des valeurs numériques par le paquet \emph{siunitx}.
    
    \item Ajout de l'option \opt{showlines} pour la méthode \cmd{g:Dgrid()} qui permet d'afficher ou non les traits horizontaux et/ou les traits verticaux.
    
    \item Ajout de l'extension \emph{luadraw\_decorations} qui permet d'enrichir certaines méthodes de dessin en leur ajoutant des options. Pour le moment il y a \cmd{g:Ddecoratedarc()} pour les arcs 2D, et \cmd{g:Ddecoratedarc3d()} pour les arcs 3D.
    
    \item Pour les méthodes \cmd{g:Dpoly()}, \cmd{g:Dfacet()}, \cmd{g:Dmixfacet()} et \cmd{g:addFacet()}, dans l'option \opt{usepalette=\{palette, mode\}} le deuxième argument peut maintenant être une fonction \argu{mode}$\colon f \mapsto \mathrm{mode}(f)\in\mathbb R$, où $f$ désigne une facette (liste de points 3D). Les facettes ayant la valeur minimale ont la première couleur de la palette, celles ayant la valeur minimale ont la dernière couleur de la palette, pur les autres la couleur est calculée par interpolation linéaire. Jusque là l'argument \argu{mode} ne pouvait valoir que \val{"x"}, \val{"y"} ou \val{"z"}.
    
    \item Ajout de la fonction \cmd{obj\_surface(f,u1,u2,v1,v2 \fac{, grid})} qui renvoie la surface paramétrée par \argu{f}$\colon(u,v)\mapsto f(u,v)\in\mathbf R^3$ au format \emph{obj}, c'est à dire une table avec trois champs \{vertices=\{\ldots\}, facets=\{\{\ldots\},\ldots\}, normals=\{\ldots\}\}, les deux premiers champs sont identiques au cas des polyèdres, le troisième champ contient les vecteurs unitaires normaux à la surface à chaque sommet. Les facettes sont triangulaires.

    \item Dans le module \emph{luadraw\_povray} : ajout d'une deuxième syntaxe pour dessiner des surfaces paramétriques lisses:
    \cmdln{g:Pov\_surface(f,u1,u2,v1,v2,options)}
    où \argu{f}$\colon(u,v)\mapsto f(u,v)\in\mathbf R^3$ est le paramétrage. Cette méthode est plus rapide que la précédente.
    
    \item Dans le module \emph{luadraw\_spherical} : ajout de la variable globale \varglob{Hiddendelayed} = \false. Avec la valeur \false les lignes cachées sont dessinées à la fin de l'instruction \cmd{g:Dspherical()}, avec la valeur \true elles sont dessinées à la toute fin du graphique en cours ce qui peut être utile si vous avez ajouté après la sphère des éléments qui cachent une partie de celle-ci.

    \item Pour la méthode \cmd{g:Daxes()} : l'option \opt{originloc} est toujours le point servant d'origine pour les graduations, mais il n'est plus automatiquement le point d'intersection des deux axes.

    \item Pour la méthode \cmd{g:Daxes()} : ajout des options \opt{xynode\_options = ""}, \opt{xnode\_options = xynode\_options} et \opt{ynode\_options = xynode\_options} qui permettent de passer des options l'instruction \verb|\node{}| pour tous les labels (sauf les légendes).
    
    \item Pour la méthode \cmd{g:addAxes()}, ajout de l'option \opt{labels=}\verb|{"$x$","$y$","$z$"}| pour gérer les labels affichés à l'extrémité de chaque axe.
    
    \item Correction de bug...
\end{itemize}

\subsection{Version 2.7}
Liste non exhaustive :
\begin{itemize}
    \item Les méthodes de dessin des solides de base : \cmd{g:Dcylinder()}, \cmd{g:Dcone()} et \cmd{g:Dfrustum()} ont désormais deux options supplémentaires : \opt{edgestyle} et \opt{edgewidth} (comme pour la méthode \cmd{g:Dsphere()}).
    
    \item Dans le module \emph{luadraw\_compile\_tex}, pour les méthodes : \par
    \hfil \cmd{g:Dcompiled\_tex(L, anchor, options)} et \cmd{g:Compiled\_tex2path3d(L, options)},\hfil\par
     ajout de l'option \opt{pos} identique aux labels.
     
    \item Dans le module \emph{luadraw\_compile\_tex}, ajout de trois variables globales pour gérer l'accès aux programmes \emph{pdflatex}, \emph{pdf2ps} et emph{pstoedit}. Ces variables sont \varglob{pdflatexcmd}, \varglob{pdf2pscmd} et \varglob{pstoeditcmd}, elles permettent d'ajouter éventuellement un chemin d'accès au programme, par exemple : \code{pstoeditcmd = "/usr/bin/pstoedit"}.
    
    \item Nouvelle syntaxe pour la fonction \cmd{circle(data, nbdots)}, où \argu{data} est une liste (centre et rayon, ou bien trois points du cercle) et \argu{nbdots} le nombre de points souhaité. Les anciennes syntaxes restent valables.
    \item Nouvelle syntaxe pour la fonction \cmd{ellipse(data, nbdots)}, où \argu{data} est une liste : \{centre, rx, ry, inclinaison\}, et \argu{nbdots} le nombre de points souhaité. Les anciennes syntaxes restent valables.
    
    \item Ajout de la fonction \cmd{mixpalette(pal, percent, color)} qui renvoie une nouvelle palette après avoir mixer chaque couleur de la palette \argu{pal} avec \argu{color}.
    
    \item Correction de nombreuses coquilles dans la documentation.
    
    \item Correction de bug...
\end{itemize}

\subsection{Version 2.6}
Liste non exhaustive :
\begin{itemize}
    \item Ajout de l'extension \emph{luadraw\_povray} qui permet de créer une image avec Pov-Ray et de l'inclure dans le graphique en cours pour dessiner par dessus.
    
    \item Ajout de l'extension \emph{luadraw\_fields} qui permet le dessin de champs de vecteurs ou de champs de gradient.
    \item Ajout de l'extension \emph{luadraw\_shadedforms} qui  permet de dessiner des lignes polygonales 2D ou de remplir une forme, avec un dégradé de couleurs en fonction de la méthode de calcul et de la palette choisies.
    \item La méthode \cmd{g:Dshadedpolyline()} fait désormais partie de l'extension \emph{luadraw\_shadedforms}.    
    \item Ajout des méthodes \cmd{g:Dimage()} et \cmd{g:Dmapimage()}, la première permet l'inclusion d'une image dans le graphique, la deuxième permet de mapper une image sur un parallélogramme.
    \item Ajout de la fonction \cmd{parallelogram()} qui renvoie les sommets d'un parallélogramme construit à partir d'un sommet et de deux vecteurs. Ajout également de la méthode de dessin \cmd{g:Dparallelogram()} correspondante.
    \item Ajout des options \opt{gradside} et \opt{gradsection} qui permettent de modifier les paramètres du gradient dans le dessin des cylindres, des cônes et des cônes tronqués (méthodes \cmd{g:Dcylinder()}, \cmd{g:Dcone()} et \cmd{g:Dfrustum()}.
    \item Extension de la méthode \cmd{g:Newcolor(name, color)}, le second argument peut maintenant être soit une table de trois composantes RGB, soit une chaîne de caractères représentant une couleur.
    \item Correction de bug...
\end{itemize}


\subsection{Version 2.5}
Liste non exhaustive :
\begin{itemize}
    \item Ajout de la fonction \cmd{read\_csv\_file()}\footnote{Sur une idée de Christophe BAL.} qui permet de lire un fichier \emph{csv} avec différentes options.
    \item L'extension \emph{luadraw\_palettes} est passée à la version 1.3.0 du projet \verb|@prism| de \href{https://github.com/projetmbc/for-writing/tree/main/@prism}{Christophe BAL}.
    \item Ajout de la méthode \cmd{g:Dshadedpolyline()} qui permet de dessiner une ligne polygonale 2D avec un dégradé de couleurs en fonction de la méthode de calcul et de la palette choisies.
    \item Ajout de la méthode \cmd{g:Dpolynames()} qui permet d'afficher un polyèdre avec le numéro des faces et/ou ceux des sommets.
    \item Ajout de l'extension \emph{luadraw\_cvx\_polyhedra\_nets} qui permet de déterminer un patron des polyèdres convexes.
    \item Correction de bug...
\end{itemize}

\subsection{Version 2.4}
Liste non exhaustive :
\begin{itemize}
    \item Ajout de la projection centrale.
    \item Ajout de l'option \opt{legendstyle} pour les axes, pour imposer un style de label ("auto", "N", "E", ...) pour les légendes lorsqu'il y en a (jusque là, le style était forcément "auto"). 
    \item Ajout de la méthode \cmd{g:Labeldir()} qui permet de gérer globalement le sens de l'écriture.
    \item Ajout des fonctions \cmd{interCS()} (intersection entre un cercle dans l'espace et une sphère), et de la fonction \cmd{interSSS()} (intersection entre 3 sphères).
    \item Ajout de la fonction \cmd{voronoi()} en complément de la triangulation de Delaunay, elle permet de faire des diagrammes de Voronoï.
    \item Ajout de la fonction \cmd{parallel\_polyline()} qui renvoie une ligne polygonale parallèle.
    \item Ajout de la fonction \cmd{tangent\_from()} et de la méthode \cmd{g:Dtangent\_from()} qui permet de tracer les tangentes à une courbe donnée issues d'un point donné.
    \item Correction de bug...
\end{itemize}

\subsection{Version 2.3}
Liste non exhaustive :
\begin{itemize}
\item Ajout des projections en perspective cavalière: sur $yz$, sur $xz$ ou sur $xy$, ainsi que de la projection isométrique.
\item Ajout de la fonction \cmd{section2tube()}.
\item Ajout du module \emph{luadraw\_compile\_tex}.
\item Ajout de la méthode \cmd{g:Proj3dV()} pour le calcul de la projection des vecteurs de l'espace sur le plan de l'écran.
\item Ajout des fonctions \cmd{circumcircle()} et \cmd{incircle()} en 2D, elles renvoient une séquence: centre et rayon.
\item Ajout de la fonction \cmd{line2strip()} qui renvoie un chemin représentant une "bande" centrée sur une ligne polygonale donnée.
\item Ajout de la fonction \cmd{delaunay()} qui fait une triangulation de Delaunay sur une liste de points et renvoie la liste des triangles obtenus.
\item Ajout de la fonction \cmd{cpx.normalize(z)} qui renvoie le complexe $z$ divisé par son module (ou \nil s'il est nul).
\item Ajout de l'instruction \cmd{whatis(variable, msg)} qui affiche dans le terminal le statut d'une \argu{variable} (accompagné du message \argu{msg}) et son contenu.
\item Correction de bug...    
\end{itemize}


\subsection{Version 2.2}
Liste non exhaustive :
\begin{itemize}
    \item Ajout de l'option \opt{clip} pour les méthodes : \cmd{g:Dfacet()}, \cmd{g:Dmixfacet()}, \cmd{g:addFacet()}, \cmd{g:addPoly()} et \cmd{g:addPolyline()}, ainsi que pour les méthodes de dessin de nuages de points, et les méthodes de dessin "au trait" comme \cmd{g:Dpolyline3d()}, \cmd{g:Dparametric3d()}, \cmd{g:Dpath3d()}, etc.
    \item Ajout de l'option \opt{xyzstep} pour la méthode \cmd{g:Dboxaxes3d()}, cette option définit un pas commun aux trois axes ($1$ par défaut).
    \item Ajout des méthodes \cmd{g:DSdots()}, \cmd{g:DSstars()}, \cmd{g:DSinvstereo\_curve()} et \cmd{g:DSinvstereo\_polyline()} dans le module \emph{luadraw\_spherical}.
    \item Ajout du module \emph{luadraw\_palettes}.
    \item Ajout de la fonction \cmd{interDC()} (intersection entre une droite et un cercle en 2D) et de la fonction \cmd{interCC()} (intersection entre 2 cercles en 2D).
    \item Ajout des fonctions \cmd{curvilinear\_param()} et \cmd{curvilinear\_param3d()} qui permettent d'obtenir une paramétrisation d'une liste de points (2D pour l'une, et 3D pour l'autre) avec une fonction d'une variable $t$ entre $0$ et $1$.
    \item Ajout de la fonction \cmd{cvx\_hull2d()} qui renvoie l'enveloppe convexe (ligne polygonale) d'une liste de points en 2D, et de la fonction \cmd{cvx\_hull3d()} qui renvoie l'enveloppe convexe (liste de facettes) d'une liste de points en 3D.
    \item Ajout des méthodes \cmd{g:Beginclip(chemin)} et \cmd{g:Endclip()} qui facilitent la mise en place d'un clipping par TikZ.
    \item Ajout des fonctions \cmd{normal()}, \cmd{normalC()}, \cmd{normalI()} qui renvoient la normale à une courbe 2D en un point donné. Les méthodes graphiques correspondantes ont également été ajoutées.
    \item Ajout de la fonction \cmd{isobar()} qui renvoie l'isobarycentre d'une liste de complexes.
    \item Ajout de l'option \opt{usepalette=\{palette, mode\}} pour les méthodes \cmd{g:Dpoly()}, \cmd{g:Dfacet()}, \cmd{g:Dmixfacet()}, \cmd{g:addFacet()}.
    \item Ajout de la fonction \cmd{clipplane()} qui permet de clipper un plan avec un polyèdre convexe, la fonction renvoie la section, si elle existe, sous forme d'une facette.
    \item Ajout des fonctions \cmd{cartesian3d()} et \cmd{cylindrical\_surface()} qui calculent et renvoient des surfaces avec la possibilité d'ajouter ou non des cloisons séparatrices pour la méthode \cmd{g:Dscene3d()}.
    \item Ajout de la fonction \cmd{evalf(f, \ldots)} qui permet une évaluation protégée de $f(\ldots)$, elle renvoie le résultat de l'évaluation s'il n'y a pas d'erreur d'exécution de la part de Lua, sinon, elle renvoie \nil mais sans provoquer la fin de l'exécution du script.
    \item Ajout de la fonction \cmd{split\_points\_by\_visibility()} (3D) pour séparer une courbe en deux parties : partie visible, partie cachée.
    \item Dans les méthodes \cmd{g:Dfacet()}, \cmd{g:Dmixfacet()}, \cmd{g:Dpoly()}, \cmd{g:Dedges()}, \cmd{g:addFacet()}, \cmd{g:addPolyline()}, \cmd{g:addPoly()}, les valeurs par défaut des options de tracé de lignes (épaisseur, couleur et style), sont les valeurs courantes en cours.
    \item Correction de bug...    
\end{itemize}

\subsection{Version 2.1}
Liste non exhaustive :
\begin{itemize}
    \item Par défaut, les fichiers TikZ sont sauvegardés dans un sous-dossier appelé \emph{\_luadraw}. La nouvelle option de package \opt{cachedir} permet d'en changer.
    \item L'option \opt{line join=round} est automatiquement ajoutée à l'environnement \emph{tikzpicture}.
    \item Deux options supplémentaires pour l'environnement \luadrawenv : \opt{bbox} et \opt{pictureoptions}.
    \item Un certain nombre de fonctions de constructions géométriques supplémentaires en 2D et 3D.
    \item Les axes gradués (2D, 3D) utilisent le package \emph{siunitx}  pour formater les labels lorsque la variable globale \varglob{siunitx} a la valeur \true.
    \item Ajout des cônes tronqués droits ou penchés (\cmd{frustum()} et \cmd{g:Dfrustum()}).
    \item Ajout des pyramides régulières (\cmd{regular\_pyramid()} et pyramides tronquées \cmd{truncated\_pyramid()}).
    \item Les cylindres et les cônes ne sont plus forcément droits, ils peuvent désormais être penchés.
    \item Ajout de la fonction \cmd{cutpolyline(L, D, close)}.    
    \item Dessin (élémentaire) d'ensembles (fonction \cmd{set()}) et opérations sur les ensembles (\cmd{cap()}, \cmd{cup()}, \cmd{setminus()}).
    \item Modification de l'option \opt{mode} de la méthode \cmd{g:Dplane()}.
    \item Ajout de l'option \opt{close} pour la méthode \cmd{g:addPolyline()}.
    \item Correction de bug...
\end{itemize}

\subsection{Version 2.0}

\begin{itemize}
    \item Introduction du module \emph{luadraw\_graph3d.lua} pour les dessins en 3D.
    \item Introduction de l'option \opt{dir} pour la méthode \cmd{g:Dlabel()}.
    \item Menus changements dans la gestion des couleurs.
\end{itemize}

\subsection{Version 1.0}
Première version.
