Bug avec la fonction TeXaddOnePoint Tikz côté lua
[delaunay.git] / doc / luamesh-doc.tex
index 1e0167e..9a6e6ad 100644 (file)
 % without any invariant section or cover text.
 
 \documentclass{lltxdoc}
-
+\usepackage{tcolorbox}
+\usepackage{xargs}
+\usepackage{enumitem}
+\usepackage[tikz]{bclogo}
+\usepackage{wrapfig}
 \title{\Verb+luamesh+: compute and draw meshes with \lualatex}
 \author{Maxime Chupin \email{mc@melusine.eu.org}}
 \date{\today}
 
+\newcommand*\commande{\noindent\hspace{-30pt}%
+  \SaveVerb[aftersave={%
+   \UseVerb{Vitem}
+  }%
+  ]{Vitem}}
+
+\newcommand*\textme[1]{\textcolor{black}{\rmfamily\textit{#1}}}
+\newcommand*\meta[1]{% % meta
+  \textme{\ensuremath{\langle}#1\ensuremath{\rangle}}}
+\newcommand*\optstar{% % optional star
+  \meta{\ensuremath{*}}\xspace}
+\DefineShortVerb{\|}
+
+\setlength{\fboxsep}{2pt}
+\fvset{%
+  codes={\catcode`\«\active \catcode`\×\active },
+  defineactive={\makefancyog\makefancytimes},
+  formatcom=\color{red},
+  frame=single
+}
+% rendre «...» équivalent à \meta{...}
+{\catcode`\«\active
+  \newcommandx\makefancyog[0][addprefix=\global]{%
+    \def«##1»{\meta{##1}}}}
+% rendre × équivalent à \optstar
+{\catcode`\×\active
+  \newcommandx\makefancytimes[0][addprefix=\global]{%
+    \def×{\optstar{}}}}
+
+
+\tcbuselibrary{listings,breakable}
+
+\definecolor{vert}{rgb}{0.1,0.4,0.1}
+\definecolor{bleu}{rgb}{0.1,0.1,0.4}
+\lstset{
+  numberstyle=\footnotesize\color{vert},
+  keywordstyle=\ttfamily\bfseries\color{blue},
+  basicstyle=\ttfamily\footnotesize,
+  commentstyle=\itshape\color{vert},
+  stringstyle=\ttfamily,
+  showstringspaces=false,
+  language=[LaTeX]TeX,
+  breaklines=true,
+  breakindent=30pt,
+  defaultdialect=[LaTeX]TeX,
+  morekeywords={buildMeshBW,buildMeshBWinc,drawPointsMesh,
+    drawPointsMeshinc, meshAddPointBW, meshAddPointBWinc}% frame=tb
+}
+
+\lstdefinelanguage{lua}
+{morekeywords={for,end,function,do,if,else,elseif,then,
+    tex.print,tex.sprint,io.read,io.open,string.find,string.explode,require},
+  morecomment=[l]{--},
+  morecomment=[s]{--[[}{]]},
+  morestring=[b]''
+}
+
+\newtcblisting{Exemple}{%
+  arc=0pt,outer arc=0pt,
+  colback=red!2!white,
+  colframe=red!75!black,
+  breakable,
+  boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle =
+  3pt, toptitle=3pt,
+  boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
+  0pt, bottomrule at break = 0pt,
+  listing options={breaklines},
+}
+
+\newtcblisting{commandshell}{colback=black,colupper=white,colframe=black,
+  arc=0pt,
+  listing only,boxsep=0pt,listing
+  options={style=tcblatex,language=sh},
+  every listing line={\textcolor{red}{\small\ttfamily\bfseries user \$> }}}
+
+\newtcblisting{latexcode}{
+  arc=0pt,outer arc=0pt,
+  colback=red!2!white,
+  colframe=red!75!black,
+  breakable,
+  boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle =
+  3pt, toptitle=3pt,
+  boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, toprule at break =
+  0pt, bottomrule at break = 0pt,
+  listing only,boxsep=0pt,listing
+  options={breaklines}
+}
+
+
+\newcommand\luamesh{\Verb+luamesh+\xspace}
+
+\newenvironment{optionsenum}[1][]
+{\begin{description}[font=\color{red}\ttfamily]}
+  {\end{description}}
+
+\newenvironment{warning}{%
+  \setlength{\logowidth}{24pt}
+  \tcbset{%
+    arc=0pt,outer arc=0pt,colback=gray!10!white,colframe=gray!60!white,
+    boxsep=0pt,left=5pt,right=5pt,top=5pt,bottom=5pt, bottomtitle = 3pt, toptitle=3pt,
+    boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt}
+  \medskip
+  \begin{tcolorbox}%
+    \begin{wrapfigure}[2]{L}{17pt}%
+      % \raisebox{-5pt}{
+      \vspace*{-0.55cm}
+      \bcinfo
+      % }%
+    \end{wrapfigure}
+  }%
+  {\end{tcolorbox}\medskip}
+
+
+
 \begin{document}
+%% === Page de garde ===================================================
+\thispagestyle{empty}
+\begin{tikzpicture}[remember picture, overlay]
+  \node[below right, shift={(-4pt,4pt)}] at (current page.north west) {%
+    \includegraphics{fond.pdf}%
+  };
+\end{tikzpicture}%
+
+\noindent
+\includegraphics{luamesh}\\
+{\large compute and draw meshes with \lualatex}\\[1cm]
+\parbox{0.6\textwidth}{
+  \meshAddPointBW[
+  mode=ext,step=badtriangles,
+  colorNew =green!20!red,
+  colorBack=red!10,
+  colorCircle = blue,
+  bbox = show,
+  colorBbox = black!30
+  ]
+  {meshgarde.txt}{7}
+}\hfill
+\parbox{0.4\textwidth}{\Large\raggedleft
+  \textbf{Contributor}\\
+  Maxime \textsc{Chupin}
+}
+\vfill
+\begin{center}
+  Version 0.1, 25 novembre 2016\\
+  \url{http://melusine.eu.org/syracuse/G/delaunay/}
+\end{center}
+%% == Page de garde ====================================================
+\newpage
 
 \maketitle
 
 \begin{abstract}
-  The package \Verb|luamesh| allows to compute and draw triangulation
+  The package \Verb|luamesh| allows to compute and draw 2D triangulation
   of Delaunay. The algorithm is written with lua, and depending of the
   choice of the ``engine'', the draw is done by MetaPost (with
   \Verb|luamplib|) or by \Verb|tikz|.
   set of points, a particular step of the algorithm.
 \end{abstract}
 
+I would like to thank Jean-Michel Sarlat, who hosts the development
+with a git project on the \Verb+melusine+ machine:
+\begin{center}
+  \url{https://melusine.eu.org/syracuse/G/delaunay/}
+\end{center}
+Then, I would like to thank the first user, and an intensive
+\emph{test} user: Nicole Spillane.
+
 \section{Installation}
 
-\section{The Macros}
 
-\subsection{Draw a Complete Mesh}
+Of course, you can just put the two files \Verb+luamesh.lua+ and
+\Verb+luamesh.sty+ in the working directory, but it is not
+recommended.
+
+
+\subsection{With \TeX live and Linux or Mac OSX}
+
+To install \luamesh with \TeX live, you have to create the local
+\Verb+texmf+ directory in your \Verb+home+.
+
+\begin{commandshell}
+mkdir ~/texmf
+\end{commandshell}
+
+Then we have to files to place in the correct directories. First, the
+\Verb+luamesh.sty+ file must be in the directory:
+\begin{center}
+  \Verb+~/texmf/tex/latex/luamesh/+
+\end{center}
+and secondly, the \Verb+luamesh.lua+ must be in the directory:
+\begin{center}
+  \Verb+~/texmf/scripts/luamesh/+
+\end{center}
+
+Once you have done this, \luamesh can be included in your document
+with
+\begin{latexcode}
+\usepackage{luamesh}
+\end{latexcode}
+
+\subsection{With Mik\TeX{} and Windows}
+
+We do not know these two systems, so we refer to the
+documentation for integrating local additions to Mik\TeX:
+\begin{center}
+  \url{http://docs.miktex.org/manual/localadditions.html}
+\end{center}
+
+
+\subsection{A \lualatex package}
+
+If you want to use this package, you must compile your document with
+\Verb+lualatex+:
+
+\begin{commandshell}
+  lualatex mylatexfile.tex
+\end{commandshell}
+
+
+\subsection{Dependencies}
+
+This package is built upon two main packages to draw the
+triangulations :
+\begin{enumerate}
+\item \Verb+luamplib+ to use MetaPost via the \luatex library
+  \Verb+mplib+;
+\item and \Verb+tikz+.
+\end{enumerate}
+We will see how to choose between these two \emph{drawing engines}.
+
+Moreover, the following packages are necessary:
+\begin{enumerate}
+\item \Verb+xkeyval+ to manage the optional arguments;
+\item \Verb+xcolor+ to use colors (needed by \Verb+luamplib+);
+\item \Verb+ifthen+ to help the programming with \TeX.
+\end{enumerate}
+
+
+\section{The Basic Macros}
+
+Let us recall that this package provides macros to draw two
+dimensional triangulations (or meshes).
+
+\subsection{Draw a Complete Mesh}\label{sec:buildMesh}
+
+\commande|\buildMeshBW[«options»]{«list of points» or «file name»}|\medskip
+
+This macro produce the Delaunay triangulation (using the Bowyer and
+Watson algorithm) of the given \meta{list of points}. The list of
+points must be given in the following way :
+\begin{center}
+  \verb+(x1,y1);(x2,y2);(x3,y3);...;(xn,yn)+
+\end{center}
+
+\begin{Exemple}
+  \buildMeshBW{(0.3,0.3);(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}
+\end{Exemple}
+
+\subsubsection{The Options}
+
+There are several options to customize the drawing.
+\begin{optionsenum}
+\item[mode = int (default) \textme{or} ext:] this option allows to
+  use either the previously described set of point in the argument, or
+  a file, containing, line by line (2 columns), the points. Such a
+  file looks like :
+\begin{verbatim}
+x1  y1
+x2  y2
+x3  y3
+...
+xn yn
+\end{verbatim}
+\item[bbox = none (default) \textme{or} show:] this option allows to draw the
+  added points to form a \emph{bounding box}\footnote{The bounding
+    box is defined by four points place at 15\% around the box
+    defined by $(x_{\min},y_{\min})$, $(x_{\min},y_{\max})$,
+    $(x_{\max},y_{\max})$, and $(x_{\min},y_{\max})$.} and the corresponding
+  triangulation. By default, these triangles are removed at the end of
+  the algorithm.
+\item[color = \meta{value} (default: black):] The color of the
+  drawing.
+\item[colorBbox = \meta{value} (default: black):] The color of the
+  drawing for the elements (points and triangles) belonging to the
+  bounding box.
+\item[print = none (default) \textme{or} points:] To label the vertices of the
+  triangulations with an adding dot.
+\item[meshpoint = \meta{value} (default: P):] The letter(s) used to
+  label the vertices of the triangulation. It is include in the math
+  mode delimiters \Verb+$...$+. The bounding box points are labeled
+  with a star exponent, and numbered from 1 to 4.
+\item[tikz (boolean, default:false):] By default, this boolean is set
+  to \Verb+false+, and MetaPost (with \Verb+luamplib+) is used to draw
+  the picture. With this option, it is \Verb+tikz+ the \textit{drawing
+    engine}.
+\item[scale = \meta{value} (default: 1cm):] The scale option defines
+  the scale at which the picture is draw (the same for the two
+  axis). It must contain the unit of length (cm,
+  pt, etc.).
+\end{optionsenum}
+
+To illustrate the options, let us show you an example. We consider a
+file \Verb+mesh.txt+:
+\begin{verbatim}
+0.3    0.3
+1.5    1
+4      0
+4.5    2.5
+1.81   2.14
+2.5    0.5
+2.8    1.5
+\end{verbatim}
+\begin{Exemple}
+  \buildMeshBW[%
+  tikz,
+  mode = ext,
+  bbox = show,
+  color = red,
+  colorBbox = blue!30,
+  print = points,
+  meshpoint = x,
+  scale = 1.3cm,
+  ]{mesh.txt}
+\end{Exemple}
+
+\begin{warning}
+The drawing engine is not here very relevant. But it is useful to
+understand how the drawing is made. However, the engine will make sens
+for the so called \emph{inc} macros (section~\ref{sec:inc}), where we
+will be allowed to add code before and after the generated one by
+\luamesh.
+\end{warning}
 
 \subsection{Draw the Set of Points}
 
+\commande|\drawPointsMesh[«options»]{«list of points» or «file name»}|\medskip
+
+With the \Verb+\drawPointsMesh+, we plot the set of the points from
+which the Browyer and Watson algorithm compute the triangulation.
+
+The use of this macro is quite similar to the
+\Verb+\buildMeshBW+. Here is an example of the basic uses.
+\begin{Exemple}
+  \drawPointsMesh{(0.3,0.3);(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}
+\end{Exemple}
+
+
+\subsubsection{The Options}
+
+There are several options (exactly the same that for the
+\Verb+\buildMeshBW+)to customize the drawing.
+\begin{optionsenum}
+\item[mode = int (default) \textme{or} ext:] this option allows to
+  use either the previously described set of point in the argument, or
+  a file, containing, line by line (2 columns), the points. Such a
+  file looks like :
+\begin{verbatim}
+x1  y1
+x2  y2
+x3  y3
+...
+xn yn
+\end{verbatim}
+\item[bbox = none (default) \textme{or} show:] this option allows to draw the
+  added points to form a \emph{bounding box} and the corresponding
+  triangulation. By default, these triangles are removed at the end of
+  the algorithm. \emph{Here, because we plot only the vertices of the
+    mesh, there is no triangles, but only dots.}
+\item[color = \meta{value} (default: black):] The color of the
+  drawing.
+\item[colorBbox = \meta{value} (default: black):] The color of the
+  drawing for the elements (points and triangles) belonging to the
+  bounding box.
+\item[print = none (default) \textme{or} points:] To label the vertices of the
+  triangulations with an adding dot. Without label, there is a dot.
+\item[meshpoint = \meta{value} (default: P):] The letter(s) used to
+  label the vertices of the triangulation. It is include in the math
+  mode delimiters \Verb+$...$+. The bounding box points are labeled
+  with a star exponent, and numbered from 1 to 4.
+\item[tikz (boolean, default:false):] By default, this boolean is set
+  to \Verb+false+, and MetaPost (with \Verb+luamplib+) is used to draw
+  the picture. With this option, it is \Verb+tikz+ the \textit{drawing
+    engine}.
+\item[scale = \meta{value} (default: 1cm):] The scale option defines
+  the scale at which the picture is draw (the same for the two
+  axis). It must contain the unit of length (cm,
+  pt, etc.).
+\end{optionsenum}
+With the same external mesh point file presented in
+section~\ref{sec:buildMesh}, we illustrate the different options.
+
+\begin{Exemple}
+  \drawPointsMesh[%
+  tikz,
+  mode = ext,
+  bbox = show,
+  color = blue,
+  colorBbox = red,
+  print = points,
+  meshpoint = y,
+  scale = 1.3cm,
+  ]{mesh.txt}
+\end{Exemple}
+
+
 \subsection{Draw a Step of the Bowyer and Watson Algorithm}
 
+\commande|\meshAddPointBW[«options»]{«list of points» or «file name»}{«point» or «number of line»}|\medskip
+
+This command allows to plot the different step of the addition of a
+point in a Delaunay triangulation, using the Bowyer and Watson
+algorithm.
+
+This macro produce the Delaunay triangulation (using the Bowyer and
+Watson algorithm) of the given \meta{list of points} and shows a step
+of the algorithm when the \meta{point} is added. The list of
+points must be given in the following way:
+\begin{center}
+  \verb+(x1,y1);(x2,y2);(x3,y3);...;(xn,yn)+
+\end{center}
+and the point is of the form \verb+(x,y)+. The \meta{file name}
+and \meta{number of line}  will be explained in the option
+description.
+
+One can use the macro as fallow:
+\begin{Exemple}
+  \meshAddPointBW[step=badtriangles]{(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}{(2.2,1.8)}
+  \meshAddPointBW[step=cavity]{(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}{(2.2,1.8)}
+  \meshAddPointBW[step=newtriangles]{(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}{(2.2,1.8)}
+\end{Exemple}
+The default value for \Verb+step+ is \Verb+badtriangles+. The first
+line is then equivalent to
+\begin{latexcode}
+\meshAddPointBW{(1.5,1);(4,0);(4.5,2.5);(1.81,2.14);(2.5,0.5);(2.8,1.5)}{(2.2,1.8)}
+\end{latexcode}
+
+\subsubsection{The Options}
+
+There are several options (some of them are the same as for
+\Verb+\buildMeshBW+) to customize the drawing.
+\begin{optionsenum}
+\item[mode = int (default) \textme{or} ext:] this option allows to
+  use either the previously described set of point in the argument
+  number one, or
+  a file, containing, line by line (2 columns), the points. Such a
+  file looks like :
+\begin{verbatim}
+x1  y1
+x2  y2
+x3  y3
+...
+xn yn
+\end{verbatim}
+For the second argument of the macro, if we are in the
+\Verb+mode = ext+, the argument must be the \emph{line number} of the file
+corresponding to the point we want to add. The algorithm will stop the
+line before to build the initial triangulation for which it will add
+the point corresponding to the line. The other lines of the file are
+ignored.
+\item[bbox = none (default) \textme{or} show:] this option allows to draw the
+  added points to form a \emph{bounding box} and the corresponding
+  triangulation. By default, these triangles are removed at the end of
+  the algorithm.
+\item[color = \meta{value} (default: black):] The color of the
+  drawing.
+\item[colorBbox = \meta{value} (default: black):] The color of the
+  drawing for the elements (points and triangles) belonging to the
+  bounding box.
+\item[colorNew = \meta{value} (default: red):] The color of the
+  drawing of the ``new'' elements which are the point to add, the
+  polygon of the cavity, and the new triangles.
+\item[colorBack = \meta{value} (default: black!20):] The color for the
+  filling of the region concerned by the addition of the new point.
+\item[colorCircle = \meta{value} (default: green):] The color for
+  circoncircle of the triangles containing the point to add.
+\item[meshpoint = \meta{value} (default: P):] The letter(s) used to
+  label the vertices of the triangulation. It is include in the math
+  mode delimiters \Verb+$...$+. The bounding box points are labeled
+  with a star exponent, and numbered from 1 to 4.
+\item[step = badtriangles (default) \textme{or} cavity \textme{or}
+  newtriangles:] To choose the step we want to draw, corresponding to
+  the steps of the Bowyer and Watson algorithm.
+\item[newpoint = \meta{value} (default: P):] The letter(s) used to
+  label the new point of the triangulation. It is include in the math
+  mode delimiters \Verb+$...$+.
+\item[tikz (boolean, default:false):] By default, this boolean is set
+  to \Verb+false+, and MetaPost (with \Verb+luamplib+) is used to draw
+  the picture. With this option, it is \Verb+tikz+ the \textit{drawing
+    engine}.
+\item[scale = \meta{value} (default: 1cm):] The scale option defines
+  the scale at which the picture is draw (the same for the two
+  axis). It must contain the unit of length (cm,
+  pt, etc.).
+\end{optionsenum}
+
+Here is an example of customization of the drawing. First, recall that
+the external file \Verb+mesh.txt+ is:
+\begin{verbatim}
+0.3    0.3
+1.5    1
+4      0
+4.5    2.5
+1.81   2.14
+2.5    0.5
+2.8    1.5
+\end{verbatim}
+We draw the addition of the 6th point. The 7th line will be ignored.
+\begin{Exemple}
+  \meshAddPointBW[
+  tikz,
+  mode = ext,
+  color = blue!70,
+  meshpoint = x,
+  newpoint = y,
+  colorBack=red!10,
+  colorNew = green!20!red,
+  colorCircle = blue,
+  colorBbox = black!20,
+  bbox = show,
+  scale=1.4cm,
+  step=cavity]
+  {mesh.txt}{6}
+\end{Exemple}
+
+\section{The \emph{inc} Macros}\label{sec:inc}
+
+\subsection{With MetaPost}
+
+%\subsection{With \Verb+tikz+}
+
 \section{Gallery of Examples}
 
 \end{document}

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la
Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.