X-Git-Url: https://melusine.eu.org/syracuse/G/git/?a=blobdiff_plain;f=doc%2Fluamesh-doc.tex;h=2202694e4045ff8a285ba777cad40536bcbe625a;hb=1bf72352b6675afbd15109aa7491c4f0d3e1b8d4;hp=d2477b804453ef38cc1131719fe6eec2e982400d;hpb=727795d8de3f933aee3189314a99644afbf7a370;p=delaunay.git diff --git a/doc/luamesh-doc.tex b/doc/luamesh-doc.tex index d2477b8..2202694 100644 --- a/doc/luamesh-doc.tex +++ b/doc/luamesh-doc.tex @@ -11,8 +11,8 @@ \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} @@ -23,7 +23,7 @@ }% ]{Vitem}} -\newcommand*\textme[1]{\color{black}{\rmfamily\textit{#1}}} +\newcommand*\textme[1]{\textcolor{black}{\rmfamily\textit{#1}}} \newcommand*\meta[1]{% % meta \textme{\ensuremath{\langle}#1\ensuremath{\rangle}}} \newcommand*\optstar{% % optional star @@ -62,7 +62,8 @@ breaklines=true, breakindent=30pt, defaultdialect=[LaTeX]TeX, - % frame=tb + morekeywords={buildMeshBW,buildMeshBWinc,drawPointsMesh, + drawPointsMeshinc, meshAddPointBW, meshAddPointBWinc}% frame=tb } \lstdefinelanguage{lua} @@ -92,18 +93,78 @@ every listing line={\textcolor{red}{\small\ttfamily\bfseries user \$> }}} \newtcblisting{latexcode}{ - arc=0pt, + 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={style=tcblatex}} + options={breaklines} +} \newcommand\luamesh{\Verb+luamesh+\xspace} \newenvironment{optionsenum}[1][] - {\begin{description}[font=\color{red}\ttfamily]} - {\end{description}} +{\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 @@ -118,9 +179,23 @@ 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, an intensive +\emph{test} user, and a very kind English corrector: Nicole Spillane. + \section{Installation} -\subsection{With Linux} + +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+. @@ -145,6 +220,25 @@ with \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 @@ -152,7 +246,7 @@ triangulations : \begin{enumerate} \item \Verb+luamplib+ to use MetaPost via the \luatex library \Verb+mplib+; -\item or \Verb+tikz+. +\item and \Verb+tikz+. \end{enumerate} We will see how to choose between these two \emph{drawing engines}. @@ -166,17 +260,10 @@ Moreover, the following packages are necessary: \section{The Basic Macros} -If you want to use this package, you must compile your document with -\Verb+lualatex+: - -\begin{commandshell} - lualatex mylatexfile.tex -\end{commandshell} - Let us recall that this package provides macros to draw two dimensional triangulations (or meshes). -\subsection{Draw a Complete Mesh} +\subsection{Draw a Complete Mesh}\label{sec:buildMesh} \commande|\buildMeshBW[«options»]{«list of points» or «file name»}|\medskip @@ -195,7 +282,7 @@ points must be given in the following way : There are several options to customize the drawing. \begin{optionsenum} -\item[\color{red}\texttt{mode = int (default) or ext}:] the mode option allow to +\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 : @@ -206,19 +293,282 @@ 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|\tracePointsMesh[«options»]{«list of points» or «file name»}| +\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»}| +\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 = \alpha, + newpoint = y, + colorBack=red!10, + colorNew = green!50!red, + colorCircle = blue, + colorBbox = black!20, + bbox = show, + scale=1.4cm, + step=badtriangles] + {mesh.txt}{6} +\end{Exemple} + +\section{The \emph{inc} Macros}\label{sec:inc} + +The three macros presented in the above sections have complementary +macros, with the suffix \Verb+inc+ that allow the user to add code +(MetaPost or \Verb+tikz+, depending of the drawing engine) before and +after the code generated by \luamesh. + +The three macros are: + +\commande|\buildMeshBWinc[«options»]{«list of points» or «file name»}{«code before»}{«code after»}|\medskip + +\commande|\drawPointsMeshinc[«options»]{«list of points» or «file name»}{«code before»}{«code after»}|\medskip + +\commande|\meshAddPointBWinc[«options»]{«list of points» or «file name»}%| + +\commande| {«point» or «number of line»}{«code before»}{«code after»}|\medskip + +\subsection{With MetaPost} + +We consider the case where the drawing engine is MetaPost (through the +\Verb+luamplib+ package). + -\section{The \emph{inc} Macros} +\subsection{With TikZ} \section{Gallery of Examples}