1 % luamesh: compute and draw meshes with lua, luamplib and tikz
3 % Originally written by Maxime Chupin <mc@melusine.eu.org>,
6 % Distributed under the terms of the GNU free documentation licence:
7 % http://www.gnu.org/licenses/fdl.html
8 % without any invariant section or cover text.
10 \documentclass{lltxdoc
}
11 \usepackage{tcolorbox
}
14 \usepackage[tikz
]{bclogo
}
16 \title{\Verb+luamesh+: compute and draw meshes with
\lualatex}
17 \author{Maxime Chupin
\email{mc@melusine.eu.org
}}
21 \definecolor{darkred
}{rgb
}{0.8,
0.1,
0.1}
24 \newcommand*
\commande{\noindent\hspace{-
30pt
}%
25 \SaveVerb[aftersave=
{%
30 \newcommand*
\textme[1]{\textcolor{black
}{\rmfamily\textit{#1}}}
31 \newcommand*
\meta[1]{% % meta
32 \textme{\ensuremath{\langle}#1\ensuremath{\rangle}}}
33 \newcommand*
\optstar{% % optional star
34 \meta{\ensuremath{*
}}\xspace}
37 \setlength{\fboxsep}{2pt
}
39 codes=
{\catcode`\«
\active \catcode`\×
\active },
40 defineactive=
{\makefancyog\makefancytimes},
41 formatcom=
\color{darkred
},
44 % rendre «...» équivalent à \meta{...}
46 \newcommandx\makefancyog[0][addprefix=
\global]{%
47 \def«#
#1»
{\meta{#
#1}}}}
48 % rendre × équivalent à \optstar
50 \newcommandx\makefancytimes[0][addprefix=
\global]{%
54 \tcbuselibrary{listings,breakable
}
56 \definecolor{vert
}{rgb
}{0.1,
0.4,
0.1}
57 \definecolor{bleu
}{rgb
}{0.1,
0.1,
0.4}
59 numberstyle=
\footnotesize\color{vert
},
60 keywordstyle=
\ttfamily\bfseries\color{blue
},
61 basicstyle=
\ttfamily\footnotesize,
62 commentstyle=
\itshape\color{vert
},
63 stringstyle=
\ttfamily,
64 showstringspaces=false,
68 defaultdialect=
[LaTeX
]TeX,
69 morekeywords=
{buildMeshBW,buildMeshBWinc,drawPointsMesh,
70 drawPointsMeshinc, meshAddPointBW, meshAddPointBWinc
}% frame=tb
73 \lstdefinelanguage{lua
}
74 {morekeywords=
{for,end,function,do,if,else,elseif,then,
75 tex.print,tex.sprint,io.read,io.open,string.find,string.explode,require
},
77 morecomment=
[s
]{--
[[}{]]},
81 \newtcblisting{Exemple
}{%
82 arc=
0pt,outer arc=
0pt,
84 colframe=red!
75!black,
86 boxsep=
0pt,left=
5pt,right=
5pt,top=
5pt,bottom=
5pt, bottomtitle =
88 boxrule=
0pt,bottomrule=
0.5pt,toprule=
0.5pt, toprule at break =
89 0pt, bottomrule at break =
0pt,
90 listing options=
{breaklines
},
93 \newtcblisting{commandshell
}{colback=black,colupper=white,colframe=black,
95 listing only,boxsep=
0pt,listing
96 options=
{style=tcblatex,language=sh
},
97 every listing line=
{\textcolor{red
}{\small\ttfamily\bfseries user \$>
}}}
99 \newtcblisting{latexcode
}{
100 arc=
0pt,outer arc=
0pt,
102 colframe=red!
75!black,
104 boxsep=
0pt,left=
5pt,right=
5pt,top=
5pt,bottom=
5pt, bottomtitle =
106 boxrule=
0pt,bottomrule=
0.5pt,toprule=
0.5pt, toprule at break =
107 0pt, bottomrule at break =
0pt,
108 listing only,boxsep=
0pt,listing
113 \newcommand\luamesh{\Verb+luamesh+
\xspace}
115 \newenvironment{optionsenum
}[1][]
116 {\begin{description
}[font=
\color{darkred
}\ttfamily]}
119 \newenvironment{warning
}{%
120 \setlength{\logowidth}{24pt
}
122 arc=
0pt,outer arc=
0pt,colback=gray!
10!white,colframe=gray!
60!white,
123 boxsep=
0pt,left=
5pt,right=
5pt,top=
5pt,bottom=
5pt, bottomtitle =
3pt, toptitle=
3pt,
124 boxrule=
0pt,bottomrule=
0.5pt,toprule=
0.5pt
}
127 \begin{wrapfigure
}[2]{L
}{17pt
}%
134 {\end{tcolorbox
}\medskip}
138 %% === Page de garde ===================================================
139 \thispagestyle{empty
}
140 \begin{tikzpicture
}[remember picture, overlay
]
141 \node[below right, shift=
{(-
4pt,
4pt)
}] at (current page.north west)
{%
142 \includegraphics{fond.pdf
}%
147 \includegraphics{luamesh-title
}\\
148 {\large compute and draw meshes with
\lualatex}\\
[1cm
]
149 \parbox{0.6\textwidth}{
151 mode=ext,step=badtriangles,
152 colorNew =green!
20!red,
160 \parbox{0.4\textwidth}{\Large\raggedleft
161 \textbf{Contributor
}\\
162 Maxime
\textsc{Chupin
}
166 Version
0.1,
25 novembre
2016\\
167 \url{http://melusine.eu.org/syracuse/G/delaunay/
}
169 %% == Page de garde ====================================================
175 The package
\Verb|luamesh| allows to compute and draw
2D Delaunay
176 triangulation. The algorithm is written with lua, and depending on the
177 choice of the ``engine'', the drawing is done by MetaPost (with
178 \Verb|luamplib|) or by
\Verb|tikz|.
180 The Delaunay triangulation algorithm is the Bowyer and Watson
181 algorithm. Several macros are provided to draw the global mesh, the
182 set of points, or a particular step of the algorithm.
185 I would like to thank Jean-Michel Sarlat, who hosts the development
186 with a git project on the
\Verb+melusine+ machine:
188 \url{https://melusine.eu.org/syracuse/G/delaunay/
}
190 I would also like to thank the first user, an intensive
191 \emph{test
} user, and a very kind English corrector: Nicole Spillane.
193 \section{Installation
}
196 Of course, you can just put the two files
\Verb+luamesh.lua+ and
197 \Verb+luamesh.sty+ in the working directory, but this is not
201 \subsection{With
\TeX live and Linux or Mac OSX
}
203 To install
\luamesh with
\TeX live, you have to create the local
204 \Verb+texmf+ directory in your
\Verb+home+.
210 Then place the files in the correct directories. First, the
211 \Verb+luamesh.sty+ file must be in the directory:
213 \Verb+~/texmf/tex/latex/luamesh/+
215 and secondly, the
\Verb+luamesh.lua+ must be in the directory:
217 \Verb+~/texmf/scripts/luamesh/+
220 Once you have done this,
\luamesh can be included in your
document
226 \subsection{With Mik
\TeX{} and Windows
}
228 We do not know these two systems, so we refer to the
229 documentation for integrating local additions to Mik
\TeX:
231 \url{http://docs.miktex.org/manual/localadditions.html
}
235 \subsection{A
\lualatex package
}
237 If you want to use this package, you must compile your
document with
241 lualatex mylatexfile.tex
245 \subsection{Dependencies
}
247 This package is built upon two main existing packages to draw the
250 \item \Verb+luamplib+ to use MetaPost via the
\luatex library
252 \item and
\Verb+tikz+.
254 We will see how to choose between these two
\emph{drawing engines
}.
256 Moreover, the following packages are necessary:
258 \item \Verb+xkeyval+ to manage the optional arguments;
259 \item \Verb+xcolor+ to use colors (needed by
\Verb+luamplib+);
260 \item \Verb+ifthen+ to help the programming with
\TeX.
264 \section{The Basic Macros
}
266 Let us recall that this package provides macros to draw two
267 dimensional triangulations (or meshes).
269 \subsection{Draw a Complete Mesh
}\label{sec:buildMesh
}
271 \commande|
\buildMeshBW[«options»
]{«list of points» or «file name»
}|
\medskip
273 This macro produces the Delaunay triangulation (using the Bowyer and
274 Watson algorithm) of the given
\meta{list of points
}. The list of
275 points must be given in the following way :
277 \verb+(x1,y1);(x2,y2);(x3,y3);...;(xn,yn)+
281 \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)
}
284 \subsubsection{The Options
}
286 There are several options to customize the drawing.
288 \item[mode = int (default)
\textme{or
} ext:
] this option allows to
289 use either the previously described set of points in the argument, or
290 a file, containing, line by line (
2 columns), the points. Such a
299 \item[bbox = none (default)
\textme{or
} show:
] this option allows to draw the
300 added points to form a
\emph{bounding box
}\footnote{The bounding
301 box is defined by four points place at
15\% around the box
302 defined by $(x_
{\min},y_
{\min})$, $(x_
{\min},y_
{\max})$,
303 $(x_
{\max},y_
{\max})$, and $(x_
{\min},y_
{\max})$. It is used by
304 the algorithm and will be computed in any case.
} and the corresponding
305 triangulation. By default, these triangles are removed at the end of
307 \item[color =
\meta{value
} (default: black):
] The
color of the
309 \item[colorBbox =
\meta{value
} (default: black):
] The
color of the
310 drawing for the elements (points and triangles) belonging to the
312 \item[print = none (default)
\textme{or
} points:
] To label the vertices of the
313 triangulation. This also adds a
\emph{dot
} at each vertex.
314 \item[meshpoint =
\meta{value
} (default: P):
] The letter(s) used to
315 label the vertices of the triangulation. It is included in the math
316 mode delimiters
\Verb+$...$+. The bounding box points are labeled
317 with numbers
1 to
4 and with a star exponent.
318 \item[tikz (boolean, default:false):
] By default, this boolean is set
319 to
\Verb+false+, and MetaPost (with
\Verb+luamplib+) is used to draw
320 the picture. With this option,
\Verb+tikz+ becomes the
\textit{drawing
322 \item[scale =
\meta{value
} (default:
1cm):
] The scale option defines
323 the scale at which the picture is drawn (the same for both
324 axes). It must contain the unit of length (cm,
328 To illustrate the options, let us show you an example. We consider a
329 file
\Verb+mesh.txt+:
353 The drawing engine is not very relevant here, but it is useful to
354 understand how the drawing is made. However, the engine will be
356 the so called
\emph{inc
} macros (section~
\ref{sec:inc
}), for adding
357 code before and after the one generated by
361 \subsection{Draw the Set of Points
}
363 \commande|
\drawPointsMesh[«options»
]{«list of points» or «file name»
}|
\medskip
365 With the
\Verb+
\drawPointsMesh+, we plot the set of (user chosen) points from
366 which the Bowyer and Watson algorithm computes the triangulation.
368 The use of this macro is quite similar to
369 \Verb+
\buildMeshBW+. Here is an example of the basic uses.
371 \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)
}
375 \subsubsection{The Options
}
377 There are several options (exactly the same as for the
378 \Verb+
\buildMeshBW+) to customize the drawing.
380 \item[mode = int (default)
\textme{or
} ext:
] this option allows to
381 use either the previously described set of points as the argument, or
382 a file, containing, line by line (
2 columns), the points. Such a
391 \item[bbox = none (default)
\textme{or
} show:
] this option allows to draw the
392 added points to form a
\emph{bounding box
} and the corresponding
393 triangulation. By default, these triangles are removed at the end of
394 the algorithm.
\emph{Here, because we plot only the vertices of the
395 mesh, there are no triangles, only dots.
}
396 \item[color =
\meta{value
} (default: black):
] The
color of the
398 \item[colorBbox =
\meta{value
} (default: black):
] The
color of the
399 drawing for the elements (points and triangles) belonging to the
401 \item[print = none (default)
\textme{or
} points:
] To label the vertices of the
402 triangulation. This also adds a
\emph{dot
} at each vertex. Without
403 label, there is still the dot.
404 \item[meshpoint =
\meta{value
} (default: P):
] The letter(s) used to
405 label the vertices of the triangulation. It is included in the math
406 mode delimiters
\Verb+$...$+. The bounding box points are labeled
407 with numbers
1 to
4 and with a star exponent.
408 \item[tikz (boolean, default:false):
] By default, this boolean is set
409 to
\Verb+false+, and MetaPost (with
\Verb+luamplib+) is used to draw
410 the picture. With this option,
\Verb+tikz+ becomes the
\textit{drawing
412 \item[scale =
\meta{value
} (default:
1cm):
] The scale option defines
413 the scale at which the picture is drawn (the same for both
414 axes). It must contain the unit of length (cm,
417 With the same external mesh point file presented in
418 section~
\ref{sec:buildMesh
}, we illustrate the different options.
434 \subsection{Draw a Step of the Bowyer and Watson Algorithm
}
436 \commande|
\meshAddPointBW[«options»
]{«list of points» or «file name»
}{«point» or «number of line»
}|
\medskip
438 This command allows to plot the steps within the addition of a
439 point in a Delaunay triangulation, by the Bowyer and Watson
442 This macro produces the Delaunay triangulation (using the Bowyer and
443 Watson algorithm) of the given
\meta{list of points
} and shows a step
444 of the algorithm when the
\meta{point
} is added. The list of
445 points must be given in the following way:
447 \verb+(x1,y1);(x2,y2);(x3,y3);...;(xn,yn)+
449 and the point is of the form
\verb+(x,y)+. The
\meta{file name
}
450 and
\meta{number of line
} will be explained in the option
453 One can use the macro as fallows:
455 \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)
}
456 \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)
}
457 \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)
}
459 The default value for
\Verb+step+ is
460 \Verb+badtriangles+. Consequently, the first
461 line is equivalent to
463 \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)
}
466 \subsubsection{The Options
}
468 There are several options (some of them are the same as for
469 \Verb+
\buildMeshBW+) to customize the drawing.
471 \item[mode = int (default)
\textme{or
} ext:
] this option allows to
472 use either the previously described set of point in the first
474 a file containing, line by line (
2 columns), the points. Such a
483 For the second argument of the macro, if we are in the
484 \Verb+mode = ext+, the argument must be the
\emph{line number
} of the file
485 corresponding to the point we want to add. The algorithm will stop the
486 line before to build the initial triangulation for which it will add
487 the point corresponding to the line. The subsequent lines in the file are
489 \item[bbox = none (default)
\textme{or
} show:
] this option allows to draw the
490 added points to form a
\emph{bounding box
} and the corresponding
491 triangulation. By default, these triangles are removed at the end of
493 \item[color =
\meta{value
} (default: black):
] The
color of the
495 \item[colorBbox =
\meta{value
} (default: black):
] The
color of the
496 drawing for the elements (points and triangles) belonging to the
498 \item[colorNew =
\meta{value
} (default: red):
] The
color of the
499 drawing of the ``new'' elements which are the point to add, the
500 polygon of the cavity, and the new triangles.
501 \item[colorBack =
\meta{value
} (default: black!
20):
] The
color for the
502 filling of the region concerned by the addition of the new point.
503 \item[colorCircle =
\meta{value
} (default: green):
] The
color for
504 the circumcircle of the triangles containing the point to add.
505 \item[meshpoint =
\meta{value
} (default: P):
] The letter(s) used to
506 label the vertices of the triangulation. It is included in the math
507 mode delimiters
\Verb+$...$+. The bounding box points are labeled
508 with numbers
1 to
4 and with a star exponent.
509 \item[step = badtriangles (default)
\textme{or
} cavity
\textme{or
}
510 newtriangles:
] To choose the step we want to draw, corresponding to
511 the steps of the Bowyer and Watson algorithm.
512 \item[newpoint =
\meta{value
} (default: P):
] The letter(s) used to
513 label the new point of the triangulation. It is include in the math
514 mode delimiters
\Verb+$...$+.
515 \item[tikz (boolean, default:false):
] By default, this boolean is set
516 to
\Verb+false+, and MetaPost (with
\Verb+luamplib+) is used to draw
517 the picture. With this option,
\Verb+tikz+ is the
\textit{drawing
519 \item[scale =
\meta{value
} (default:
1cm):
] The scale option defines
520 the scale at which the picture is draw (the same for the two
521 axis). It must contain the unit of length (cm,
525 Here is an example of customizing the drawing. First, recall that
526 the external file
\Verb+mesh.txt+ is:
536 We draw the addition of the
6th point. The
7th line will be ignored.
545 colorNew = green!
50!red,
547 colorBbox = black!
20,
554 \section{The
\emph{inc
} Macros
}\label{sec:inc
}
556 The three macros presented in the above sections have complementary
557 macros, with the suffix
\Verb+inc+ that allow the user to add code
558 (MetaPost or
\Verb+tikz+, depending of the drawing engine) before and
559 after the code generated by
\luamesh.
561 The three macros are:
563 \commande|
\buildMeshBWinc[«options»
]{«list of points» or «file name»
}{«code before»
}{«code after»
}|
\medskip
565 \commande|
\drawPointsMeshinc[«options»
]{«list of points» or «file name»
}{«code before»
}{«code after»
}|
\medskip
567 \commande|
\meshAddPointBWinc[«options»
]{«list of points» or «file name»
}%|
569 \commande|
{«point» or «number of line»
}{«code before»
}{«code after»
}|
\medskip
571 \subsection{With MetaPost
}
573 We consider the case where the drawing engine is MetaPost (through the
574 \Verb+luamplib+ package).
576 We describe the feature taking one macro in example but the mechanism
577 and the possibilities are exactly the same for all the macros.
579 When we use the MetaPost drawing engine, the macros previously
580 described produced a code of the form
589 \subsection{With TikZ
}
591 \section{Gallery of Examples
}
599 %%% ispell-local-dictionary: "american"