Rectification des fichiers et de la version pour le CTAN
[delaunay.git] / luamesh-tex.lua
1 -- trace Voronoi with MP
2 function traceVoronoiMP(listPoints, triangulation,listVoronoi, points, tri,styleD,styleV)
3    if(styleD == "dashed") then
4       sDelaunay = "dashed evenly"
5    else
6       sDelaunay = ""
7    end
8    if(styleV == "dashed") then
9       sVoronoi = "dashed evenly"
10    else
11       sVoronoi = ""
12    end
13    listCircumC = listCircumCenter(listPoints,triangulation)
14    output = "";
15    output = output .. " pair MeshPoints[];"
16    for i=1,#listPoints do
17       output = output .. "MeshPoints[".. i .. "] = (" .. listPoints[i].x .. "," .. listPoints[i].y .. ")*u;"
18    end
19    output = output .. " pair CircumCenters[];"
20    for i=1,#listCircumC do
21       output = output .. "CircumCenters[".. i .. "] = (" .. listCircumC[i].x .. "," .. listCircumC[i].y .. ")*u;"
22    end
23    if(tri=="show") then
24       for i=1,#triangulation do
25          PointI = listPoints[triangulation[i][1]]
26          PointJ = listPoints[triangulation[i][2]]
27          PointK = listPoints[triangulation[i][3]]
28          if(triangulation[i].type == "bbox") then
29             output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle "..sDelaunay.." withcolor \\luameshmpcolorBbox;"
30          else
31             output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle "..sDelaunay.." withcolor \\luameshmpcolor;"
32          end
33       end
34    end
35    for i=1,#listVoronoi do
36       PointI = listCircumC[listVoronoi[i][1]]
37       PointJ = listCircumC[listVoronoi[i][2]]
38       output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u "..sVoronoi.." withcolor \\luameshmpcolorVoronoi;"
39    end
40    if(points=="points") then
41       j=1
42       for i=1,#listPoints do
43          if(listPoints[i].type == "bbox") then
44             output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{"..j.."}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;"
45             j=j+1
46          else
47             output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;"
48          end
49       end
50       for i=1,#listCircumC do
51          output = output .. "dotlabel.llft (btex $\\CircumPoint_{" .. i .. "}$ etex, (" .. listCircumC[i].x ..",".. listCircumC[i].y .. ")*u ) withcolor \\luameshmpcolorVoronoi ;"
52       end
53    else
54       j=1
55       for i=1,#listPoints do
56          if(listPoints[i].type == "bbox") then
57             output = output .. "drawdot  (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u  withcolor \\luameshmpcolorBbox withpen pencircle scaled 3;"
58             j=j+1
59          else
60             output = output .. "drawdot  (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u  withcolor \\luameshmpcolor withpen pencircle scaled 3;"
61          end
62       end
63       for i=1,#listCircumC do
64          output = output .. "drawdot  (" .. listCircumC[i].x ..",".. listCircumC[i].y .. ")*u  withcolor \\luameshmpcolorVoronoi withpen pencircle scaled 3;"
65       end
66    end
67
68    return output
69 end
70
71
72 -- trace Voronoi with TikZ
73 function traceVoronoiTikZ(listPoints, triangulation,listVoronoi, points, tri,color,colorBbox,colorVoronoi,styleD,styleV)
74    if(styleD == "dashed") then
75       sDelaunay = ",dashed"
76    else
77       sDelaunay = ""
78    end
79    if(styleV == "dashed") then
80       sVoronoi = ",dashed"
81    else
82       sVoronoi = ""
83    end
84    listCircumC = listCircumCenter(listPoints,triangulation)
85     output = ""
86    for i=1,#listPoints do
87       output = output .. "\\coordinate (MeshPoints".. i .. ") at  (" .. listPoints[i].x .. "," .. listPoints[i].y .. ");"
88    end
89    for i=1,#listCircumC do
90       output = output .. "\\coordinate (CircumPoints".. i .. ") at  (" .. listCircumC[i].x .. "," .. listCircumC[i].y .. ");"
91    end
92    if(tri=="show") then
93       for i=1,#triangulation do
94          PointI = listPoints[triangulation[i][1]]
95          PointJ = listPoints[triangulation[i][2]]
96          PointK = listPoints[triangulation[i][3]]
97          if(triangulation[i].type == "bbox") then
98             output = output .. "\\draw[color="..colorBbox..sDelaunay.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;"
99          else
100             output = output .. "\\draw[color="..color..sDelaunay.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;"
101          end
102       end
103    end
104    for i=1,#listVoronoi do
105       PointI = listCircumC[listVoronoi[i][1]]
106       PointJ = listCircumC[listVoronoi[i][2]]
107       output = output .. "\\draw[color="..colorVoronoi..sVoronoi.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..");"
108    end
109    if(points=="points") then
110       j=1
111       for i=1,#listPoints do
112          if(listPoints[i].type == "bbox") then
113             output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};"
114             j=j+1
115          else
116             output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};"
117          end
118       end
119       for i=1,#listCircumC do
120          output = output .. "\\draw[color="..colorVoronoi.."] (" .. listCircumC[i].x ..",".. listCircumC[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\CircumPoint_{" .. i .. "}$};"
121       end
122    else
123       j=1
124       for i=1,#listPoints do
125          if(listPoints[i].type == "bbox") then
126             output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} ;"
127             j=j+1
128          else
129             output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} ;"
130          end
131       end
132       for i=1,#listCircumC do
133          output = output .. "\\draw[color="..colorVoronoi.."] (" .. listCircumC[i].x ..",".. listCircumC[i].y .. ") node {$\\bullet$};"
134       end
135    end
136    return output
137 end
138
139
140
141 -- buildVoronoi with MP
142 function buildVoronoiMPBW(chaine,mode,points,bbox,scale,tri,styleD,styleV)
143    local listPoints = buildList(chaine, mode)
144    local triangulation = BowyerWatson(listPoints,bbox)
145    local listVoronoi = buildVoronoi(listPoints, triangulation)
146    output = traceVoronoiMP(listPoints,triangulation,listVoronoi,points,tri,styleD,styleV)
147    output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}"
148    tex.sprint(output)
149 end
150
151
152 -- buildVoronoi with TikZ
153 function buildVoronoiTikZBW(chaine,mode,points,bbox,scale,tri,color,colorBbox,colorVoronoi,styleD,styleV)
154    local listPoints = buildList(chaine, mode)
155    local triangulation = BowyerWatson(listPoints,bbox)
156    local listVoronoi = buildVoronoi(listPoints, triangulation)
157    output = traceVoronoiTikZ(listPoints,triangulation,listVoronoi,points,tri,color,colorBbox,colorVoronoi,styleD,styleV)
158    output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}"   tex.sprint(output)
159 end
160
161
162 -- buildVoronoi with MP
163 function buildVoronoiMPBWinc(chaine,beginning, ending,mode,points,bbox,scale,tri,styleD,styleV)
164    local listPoints = buildList(chaine, mode)
165    local triangulation = BowyerWatson(listPoints,bbox)
166    local listVoronoi = buildVoronoi(listPoints, triangulation)
167    output = traceVoronoiMP(listPoints,triangulation,listVoronoi,points,tri,styleD,styleV)
168    output = "\\leavevmode\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}"
169    tex.sprint(output)
170 end
171
172
173 -- buildVoronoi with TikZ
174 function buildVoronoiTikZBWinc(chaine,beginning, ending,mode,points,bbox,scale,tri,color,colorBbox,colorVoronoi)
175    local listPoints = buildList(chaine, mode,styleD,styleV)
176    local triangulation = BowyerWatson(listPoints,bbox)
177    local listVoronoi = buildVoronoi(listPoints, triangulation)
178    output = traceVoronoiTikZ(listPoints,triangulation,listVoronoi,points,tri,color,colorBbox,colorVoronoi,styleD,styleV)
179    output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" ..beginning.. output..ending .."\\end{tikzpicture}"
180    tex.sprint(output)
181 end
182
183
184
185 -- trace a triangulation with TikZ
186 function traceMeshTikZ(listPoints, triangulation,points,color,colorBbox)
187    output = ""
188    for i=1,#listPoints do
189       output = output .. "\\coordinate (MeshPoints".. i .. ") at  (" .. listPoints[i].x .. "," .. listPoints[i].y .. ");"
190    end
191    for i=1,#triangulation do
192       PointI = listPoints[triangulation[i][1]]
193       PointJ = listPoints[triangulation[i][2]]
194       PointK = listPoints[triangulation[i][3]]
195       if(triangulation[i].type == "bbox") then
196          output = output .. "\\draw[color="..colorBbox.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;"
197       else
198          output = output .. "\\draw[color="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;"
199       end
200    end
201    if(points=="points") then
202       j=1
203       for i=1,#listPoints do
204          if(listPoints[i].type == "bbox") then
205             output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};"
206             j=j+1
207          else
208             output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};"
209          end
210       end
211    end
212    if(points=="dotpoints") then
213       j=1
214       for i=1,#listPoints do
215          if(listPoints[i].type == "bbox") then
216             output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$};"
217             j=j+1
218          else
219             output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$};"
220          end
221       end
222    end
223    return output
224 end
225
226
227 -- trace a triangulation with MP
228 function traceMeshMP(listPoints, triangulation,points)
229    output = "";
230    output = output .. " pair MeshPoints[];"
231    for i=1,#listPoints do
232       output = output .. "MeshPoints[".. i .. "] = (" .. listPoints[i].x .. "," .. listPoints[i].y .. ")*u;"
233    end
234    for i=1,#triangulation do
235       PointI = listPoints[triangulation[i][1]]
236       PointJ = listPoints[triangulation[i][2]]
237       PointK = listPoints[triangulation[i][3]]
238       if(triangulation[i].type == "bbox") then
239          output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolorBbox;"
240       else
241          output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolor;"
242       end
243    end
244    if(points=="points") then
245       j=1
246       for i=1,#listPoints do
247          if(listPoints[i].type == "bbox") then
248             output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{"..j.."}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;"
249             j=j+1
250          else
251             output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;"
252          end
253       end
254    end
255    if(points=="dotpoints") then
256       j=1
257       for i=1,#listPoints do
258          if(listPoints[i].type == "bbox") then
259             output = output .. "drawdot (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u withcolor \\luameshmpcolorBbox withpen pencircle scaled 3;"
260             j=j+1
261          else
262             output = output .. "drawdot (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u withcolor \\luameshmpcolor withpen pencircle scaled 3;"
263          end
264       end
265    end
266    return output
267 end
268
269
270 -- buildMesh with MP
271 function buildMeshMPBW(chaine,mode,points,bbox,scale)
272    local listPoints = buildList(chaine, mode)
273    local triangulation = BowyerWatson(listPoints,bbox)
274    output = traceMeshMP(listPoints, triangulation,points)
275    output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}"
276    tex.sprint(output)
277 end
278
279 -- buildMesh with MP include code
280 function buildMeshMPBWinc(chaine,beginning, ending,mode,points,bbox,scale)
281    local listPoints = buildList(chaine, mode)
282    local triangulation = BowyerWatson(listPoints,bbox)
283    output = traceMeshMP(listPoints, triangulation,points)
284    output = "\\leavevmode\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}"
285    tex.sprint(output)
286 end
287
288 -- buildMesh with TikZ
289 function buildMeshTikZBW(chaine,mode,points,bbox,scale,color,colorBbox)
290    local listPoints = buildList(chaine, mode)
291    local triangulation = BowyerWatson(listPoints,bbox)
292    output = traceMeshTikZ(listPoints, triangulation,points,color,colorBbox)
293    output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}"
294    tex.sprint(output)
295 end
296
297 -- buildMesh with TikZ
298 function buildMeshTikZBWinc(chaine,beginning, ending,mode,points,bbox,scale,color,colorBbox)
299    local listPoints = buildList(chaine, mode)
300    local triangulation = BowyerWatson(listPoints,bbox)
301    output = traceMeshTikZ(listPoints, triangulation,points,color,colorBbox)
302    output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" ..beginning.. output..ending .."\\end{tikzpicture}"
303    tex.sprint(output)
304 end
305
306
307 -- print points of the mesh
308 function tracePointsMP(listPoints,points)
309    output = "";
310    output = output .. " pair MeshPoints[];"
311    for i=1,#listPoints do
312       output = output .. "MeshPoints[".. i .. "] = (" .. listPoints[i].x .. "," .. listPoints[i].y .. ")*u;"
313    end
314    if(points=="points") then
315       j=1
316       for i=1,#listPoints do
317          if(listPoints[i].type == "bbox") then
318             output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{" .. j .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;"
319             j=j+1
320          else
321             output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;"
322          end
323       end
324    else
325       for i=1,#listPoints do
326          if(listPoints[i].type == "bbox") then
327             output = output .. "drawdot  (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u  withcolor \\luameshmpcolorBbox withpen pencircle scaled 3;"
328          else
329             output = output .. "drawdot (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u  withcolor \\luameshmpcolor withpen pencircle scaled 3;"
330          end
331       end
332    end
333    return output
334 end
335
336 -- print points of the mesh
337 function tracePointsTikZ(listPoints,points,color,colorBbox)
338    output = "";
339    for i=1,#listPoints do
340       output = output .. "\\coordinate (MeshPoints".. i .. ") at  (" .. listPoints[i].x .. "," .. listPoints[i].y .. ");"
341    end
342    if(points=="points") then
343       j=1
344       for i=1,#listPoints do
345          if(listPoints[i].type == "bbox") then
346             output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};"
347             j = j+1
348          else
349             output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};"
350          end
351       end
352    else
353       for i=1,#listPoints do
354          if(listPoints[i].type == "bbox") then
355             output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} ;"
356          else
357             output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} ;"
358          end
359       end
360    end
361    return output
362 end
363
364 -- print points to mesh
365 function printPointsMP(chaine,mode,points,bbox,scale)
366    local listPoints = buildList(chaine, mode)
367    if(bbox == "bbox" ) then
368       listPoints = buildBoundingBox(listPoints)
369    end
370    output = tracePointsMP(listPoints,points)
371    output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}"
372    tex.sprint(output)
373 end
374
375
376 -- print points to mesh
377 function printPointsMPinc(chaine,beginning, ending, mode,points,bbox,scale)
378    local listPoints = buildList(chaine, mode)
379    if(bbox == "bbox" ) then
380       listPoints = buildBoundingBox(listPoints)
381    end
382    output = tracePointsMP(listPoints,points)
383    output = "\\leavevmode\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}"
384    tex.sprint(output)
385 end
386
387 -- print points to mesh
388 function printPointsTikZ(chaine,mode,points,bbox,scale,color,colorBbox)
389    local listPoints = buildList(chaine, mode)
390    if(bbox == "bbox" ) then
391       listPoints = buildBoundingBox(listPoints)
392    end
393    output = tracePointsTikZ(listPoints,points,color,colorBbox)
394    output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}"
395    tex.sprint(output)
396 end
397
398
399 -- print points to mesh
400 function printPointsTikZinc(chaine,beginning, ending, mode,points,bbox,scale,color,colorBbox)
401    local listPoints = buildList(chaine, mode)
402    if(bbox == "bbox" ) then
403       listPoints = buildBoundingBox(listPoints)
404    end
405    output = tracePointsTikZ(listPoints,points,color,colorBbox)
406    output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" ..beginning.. output..ending .."\\end{tikzpicture}"
407    tex.sprint(output)
408 end
409
410
411 -- buildMesh
412 function buildRect(largeur,a,b,nbrA, nbrB)
413    local listPoints = rectangleList(a,b,nbrA,nbrB)
414    local triangulation = BowyerWatson(listPoints,"none")
415    traceTikZ(listPoints, triangulation,largeur,"none")
416 end
417
418
419 --
420 function TeXaddOnePointTikZ(listPoints,P,step,bbox,color,colorBack, colorNew, colorCircle,colorBbox)
421    output = ""
422    -- build the triangulation
423    local triangulation = BowyerWatson(listPoints,bbox)
424    local badTriangles = buildBadTriangles(P,triangulation,listPoints)
425    for i=1,#listPoints do
426       output = output .. "\\coordinate (MeshPoints".. i .. ") at  (" .. listPoints[i].x .. "," .. listPoints[i].y .. ");"
427    end
428    if(step == "badT") then
429       -- draw all triangle
430       for i=1,#triangulation do
431          PointI = listPoints[triangulation[i][1]]
432          PointJ = listPoints[triangulation[i][2]]
433          PointK = listPoints[triangulation[i][3]]
434          if(triangulation[i].type == "bbox") then
435             output = output .. "\\draw[color="..colorBbox.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;"
436          else
437             output = output .. "\\draw[color="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;"
438          end
439       end
440       -- draw and fill the bad triangle
441       for i=1,#badTriangles do
442          PointI = listPoints[triangulation[badTriangles[i]][1]]
443          PointJ = listPoints[triangulation[badTriangles[i]][2]]
444          PointK = listPoints[triangulation[badTriangles[i]][3]]
445          output = output .. "\\draw[fill="..colorBack.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;"
446       end
447       -- draw the circoncircle
448       for i=1,#badTriangles do
449          PointI = listPoints[triangulation[badTriangles[i]][1]]
450          PointJ = listPoints[triangulation[badTriangles[i]][2]]
451          PointK = listPoints[triangulation[badTriangles[i]][3]]
452          center, radius = circoncircle(PointI, PointJ, PointK)
453          output = output .. "\\draw[dashed, color="..colorCircle.."] ("..center.x .. "," .. center.y .. ") circle ("..radius ..");"
454       end
455       -- mark the points
456       j=1
457       for i=1,#listPoints do
458          if(listPoints[i].type == "bbox") then
459             output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};"
460             j = j+1
461          else
462             output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};"
463          end
464       end
465       -- mark the point to add
466       output = output .. "\\draw[color="..colorNew.."] (" .. P.x ..",".. P.y .. ") node {$\\bullet$} node[anchor=north east] {$\\NewPoint$};"
467    elseif(step == "cavity") then
468       polygon = buildCavity(badTriangles, triangulation)
469       polyNew = cleanPoly(polygon)
470       -- remove the bad triangles
471       for j=1,#badTriangles do
472          table.remove(triangulation,badTriangles[j]-(j-1))
473       end
474       -- draw the triangles
475       for i=1,#triangulation do
476          PointI = listPoints[triangulation[i][1]]
477          PointJ = listPoints[triangulation[i][2]]
478          PointK = listPoints[triangulation[i][3]]
479          if(triangulation[i].type == "bbox") then
480             output = output .. "\\draw[color="..colorBbox.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;"
481          else
482             output = output .. "\\draw[color="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;"
483          end
484       end
485       -- fill and draw the cavity
486       path = ""
487       for i=1,#polyNew do
488          PointI = listPoints[polyNew[i]]
489          path = path .. "(".. PointI.x ..",".. PointI.y ..")--"
490       end
491       output = output .. "\\draw[color="..colorNew..",fill ="..colorBack..", thick] " .. path .. "cycle;"
492       -- mark the points of the mesh
493       j=1
494       for i=1,#listPoints do
495          if(listPoints[i].type == "bbox") then
496             output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};"
497             j=j+1
498          else
499             output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};"
500          end
501       end
502       -- mark the adding point
503       output = output .. "\\draw[color="..colorNew.."] (" .. P.x ..",".. P.y .. ") node {$\\bullet$} node[anchor=north east] {$\\NewPoint$};"
504    elseif(step == "newT") then
505       polygon = buildCavity(badTriangles, triangulation)
506       polyNew = cleanPoly(polygon)
507       -- remove the bad triangles
508       for j=1,#badTriangles do
509          table.remove(triangulation,badTriangles[j]-(j-1))
510       end
511       -- draw the triangle of the triangulation
512       for i=1,#triangulation do
513          PointI = listPoints[triangulation[i][1]]
514          PointJ = listPoints[triangulation[i][2]]
515          PointK = listPoints[triangulation[i][3]]
516          if(triangulation[i].type == "bbox") then
517             output = output .. "\\draw[color="..colorBbox.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;"
518          else
519             output = output .. "\\draw[color="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;"
520          end
521       end
522       -- fill and draw the cavity
523       path = ""
524       for i=1,#polyNew do
525          PointI = listPoints[polyNew[i]]
526          path = path .. "(".. PointI.x ..",".. PointI.y ..")--"
527       end
528       output = output .. "\\draw[color="..colorNew..",fill ="..colorBack..", thick] " .. path .. "cycle;"
529       -- draw the new triangles composed by the edges of the polygon and the added point
530       for i=1,#polygon do
531          output = output .. "\\draw[color=TeXCluaMeshNewTikZ, thick]".."(".. listPoints[polygon[i][1]].x .. "," .. listPoints[polygon[i][1]].y .. ") -- (" .. listPoints[polygon[i][2]].x .. "," .. listPoints[polygon[i][2]].y ..");"
532          output = output .. "\\draw[color="..colorNew..", thick]".."(".. listPoints[polygon[i][1]].x .. "," .. listPoints[polygon[i][1]].y .. ") -- (" .. P.x .. "," .. P.y ..");"
533          output = output .. "\\draw[color="..colorNew..", thick]".."(".. listPoints[polygon[i][2]].x .. "," .. listPoints[polygon[i][2]].y .. ") -- (" .. P.x .. "," .. P.y ..");"
534       end
535       -- mark points
536       j=1
537       for i=1,#listPoints do
538          if(listPoints[i].type == "bbox") then
539             output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};"
540             j=j+1
541          else
542             output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};"
543          end
544       end
545       -- mark the added point
546       output = output .. "\\draw[color="..colorNew.."] (" .. P.x ..",".. P.y .. ") node {$\\bullet$} node[anchor=north east] {$\\NewPoint$};"
547    end
548    return output
549 end
550
551 function TeXaddOnePointMPBW(listPoints,P,step,bbox)
552    output = "";
553    output = output .. "pair MeshPoints[];"
554    -- build the triangulation
555    local triangulation = {}
556    local badTriangles = {}
557    triangulation = BowyerWatson(listPoints,bbox)
558    badTriangles = buildBadTriangles(P,triangulation,listPoints)
559    for i=1,#listPoints do
560       output = output .. "MeshPoints[".. i .. "] = (" .. listPoints[i].x .. "," .. listPoints[i].y .. ")*u;"
561    end
562    if(step == "badT") then
563       -- draw all triangle
564       for i=1,#triangulation do
565          PointI = listPoints[triangulation[i][1]]
566          PointJ = listPoints[triangulation[i][2]]
567          PointK = listPoints[triangulation[i][3]]
568          if(triangulation[i].type == "bbox") then
569             output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolorBbox;"
570          else
571             output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolor;"
572          end
573       end
574       -- draw and fill the bad triangle
575       for i=1,#badTriangles do
576          PointI = listPoints[triangulation[badTriangles[i]][1]]
577          PointJ = listPoints[triangulation[badTriangles[i]][2]]
578          PointK = listPoints[triangulation[badTriangles[i]][3]]
579          output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolor;"
580          output = output .. "fill (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolorBack;"
581       end
582       -- draw the circoncircle
583       for i=1,#badTriangles do
584          PointI = listPoints[triangulation[badTriangles[i]][1]]
585          PointJ = listPoints[triangulation[badTriangles[i]][2]]
586          PointK = listPoints[triangulation[badTriangles[i]][3]]
587          center, radius = circoncircle(PointI, PointJ, PointK)
588          output = output .. "draw fullcircle scaled ("..radius .."*2u) shifted ("..center.x .. "*u," .. center.y .. "*u) dashed evenly withcolor \\luameshmpcolorCircle;"
589       end
590       -- mark the points
591       j=1
592       for i=1,#listPoints do
593          if(listPoints[i].type == "bbox") then
594             output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{" .. j .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;"
595             j=j+1
596          else
597             output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;"
598          end
599       end
600       -- mark the point to add
601       output = output .. "dotlabel.llft (btex $\\NewPoint$ etex,(" .. P.x ..",".. P.y .. ")*u) withcolor \\luameshmpcolorNew;"
602    elseif(step == "cavity") then
603       polygon = buildCavity(badTriangles, triangulation)
604       polyNew = cleanPoly(polygon)
605       -- remove the bad triangles
606       for j=1,#badTriangles do
607          table.remove(triangulation,badTriangles[j]-(j-1))
608       end
609       -- draw the triangles
610       for i=1,#triangulation do
611          PointI = listPoints[triangulation[i][1]]
612          PointJ = listPoints[triangulation[i][2]]
613          PointK = listPoints[triangulation[i][3]]
614          if(triangulation[i].type == "bbox") then
615             output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolorBbox;"
616          else
617             output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolor;"
618          end
619       end
620       -- fill and draw the cavity
621       path = ""
622       for i=1,#polyNew do
623          PointI = listPoints[polyNew[i]]
624          path = path .. "(".. PointI.x ..",".. PointI.y ..")*u--"
625       end
626       output = output .. "fill " .. path .. "cycle withcolor \\luameshmpcolorBack;"
627       output = output .. "draw " .. path .. "cycle withcolor \\luameshmpcolorNew  withpen pencircle scaled 1pt;"
628       -- mark the points of the mesh
629       j=1
630       for i=1,#listPoints do
631          if(listPoints[i].type == "bbox") then
632             output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{" .. j .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;"
633             j=j+1
634          else
635             output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;"
636          end
637       end
638       -- mark the adding point
639       output = output .. "dotlabel.llft (btex $\\NewPoint$ etex,(" .. P.x ..",".. P.y .. ")*u) withcolor \\luameshmpcolorNew ;"
640    elseif(step == "newT") then
641       polygon = buildCavity(badTriangles, triangulation)
642       polyNew = cleanPoly(polygon)
643       -- remove the bad triangles
644       for j=1,#badTriangles do
645          table.remove(triangulation,badTriangles[j]-(j-1))
646       end
647       -- draw the triangle of the triangulation
648       for i=1,#triangulation do
649          PointI = listPoints[triangulation[i][1]]
650          PointJ = listPoints[triangulation[i][2]]
651          PointK = listPoints[triangulation[i][3]]
652          if(triangulation[i].type == "bbox") then
653             output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolorBbox;"
654          else
655             output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolor;"
656          end
657       end
658       -- fill  the cavity
659       path = ""
660       for i=1,#polyNew do
661          PointI = listPoints[polyNew[i]]
662          path = path .. "(".. PointI.x ..",".. PointI.y ..")*u--"
663       end
664       output = output .. "fill " .. path .. "cycle withcolor \\luameshmpcolorBack;"
665       -- draw the new triangles composed by the edges of the polygon and the added point
666       for i=1,#polygon do
667          output = output .. "draw".."(".. listPoints[polygon[i][1]].x .. "," .. listPoints[polygon[i][1]].y .. ")*u -- (" .. listPoints[polygon[i][2]].x .. "," .. listPoints[polygon[i][2]].y ..")*u withcolor \\luameshmpcolorNew  withpen pencircle scaled 1pt;"
668          output = output .. "draw".."(".. listPoints[polygon[i][1]].x .. "," .. listPoints[polygon[i][1]].y .. ")*u -- (" .. P.x .. "," .. P.y ..")*u withcolor \\luameshmpcolorNew withpen pencircle scaled 1pt;"
669          output = output .. "draw".."(".. listPoints[polygon[i][2]].x .. "," .. listPoints[polygon[i][2]].y .. ")*u -- (" .. P.x .. "," .. P.y ..")*u withcolor \\luameshmpcolorNew withpen pencircle scaled 1pt;"
670       end
671       -- mark points
672       j=1
673       for i=1,#listPoints do
674          if(listPoints[i].type == "bbox") then
675             output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{" .. j .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;"
676             j=j+1
677          else
678             output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;"
679          end
680       end
681       -- mark the added point
682       output = output .. "dotlabel.llft (btex $\\NewPoint$ etex,(" .. P.x ..",".. P.y .. ")*u) withcolor \\luameshmpcolorNew ;"
683    end
684    return output
685 end
686
687
688 function TeXOnePointTikZBW(chaine,point,step,scale,mode,bbox,color,colorBack,colorNew,colorCircle,colorBbox)
689    local listPoints = {}
690    if(mode=="int") then
691       Sx,Sy=string.match(point,"%((.+),(.+)%)")
692       P = {x=Sx, y=Sy}
693       listPoints = buildList(chaine, mode)
694    else
695       -- point is a number
696       P, listPoints = buildListExt(chaine,tonumber(point))
697    end
698    output = TeXaddOnePointTikZ(listPoints,P,step,bbox,color,colorBack,colorNew,colorCircle,colorBbox)
699    output = "\\noindent\\begin{tikzpicture}[x="..scale..",y="..scale.."]".. output .. "\\end{tikzpicture}"
700    tex.sprint(output)
701 end
702
703 function TeXOnePointTikZBWinc(chaine,point,beginning, ending,step,scale,mode,bbox,color,colorBack,colorNew,colorCircle,colorBbox)
704    local listPoints = {}
705    if(mode=="int") then
706       Sx,Sy=string.match(point,"%((.+),(.+)%)")
707       P = {x=Sx, y=Sy}
708       listPoints = buildList(chaine, mode)
709    else
710       -- point is a number
711       P, listPoints = buildListExt(chaine,tonumber(point))
712    end
713    output = TeXaddOnePointTikZ(listPoints,P,step,bbox,color,colorBack,colorNew,colorCircle,colorBbox)
714    output = "\\noindent\\begin{tikzpicture}[x="..scale..",y="..scale.."]".. beginning..output ..ending.. "\\end{tikzpicture}"
715    tex.sprint(output)
716 end
717
718 function TeXOnePointMPBW(chaine,point,step,scale,mode,bbox)
719    local listPoints = {}
720    if(mode=="int") then
721       Sx,Sy=string.match(point,"%((.+),(.+)%)")
722       P = {x=Sx, y=Sy}
723       listPoints = buildList(chaine, mode)
724    else
725       -- point is a number
726       P, listPoints = buildListExt(chaine,tonumber(point))
727    end
728    output = TeXaddOnePointMPBW(listPoints,P,step,bbox)
729    output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale..";".. output .. "endfig;\\end{mplibcode}"
730    tex.sprint(output)
731 end
732
733 function TeXOnePointMPBWinc(chaine,point,beginning,ending,step,scale,mode,bbox)
734    local listPoints = {}
735    if(mode=="int") then
736       Sx,Sy=string.match(point,"%((.+),(.+)%)")
737       P = {x=Sx, y=Sy}
738       listPoints = buildList(chaine, mode)
739    else
740       -- point is a number
741       P, listPoints = buildListExt(chaine,tonumber(point))
742    end
743    output = TeXaddOnePointMPBW(listPoints,P,step,bbox)
744    output = "\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}"
745    tex.sprint(output)
746 end
747
748
749 function drawGmshMP(file,points,scale)
750    local listPoints,triangulation = readGmsh(file)
751    output = traceMeshMP(listPoints,triangulation,points)
752    output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}"
753    tex.sprint(output)
754 end
755
756 function drawGmshMPinc(file,beginning,ending,points,scale)
757    local listPoints,triangulation = readGmsh(file)
758    output = traceMeshMP(listPoints,triangulation,points)
759    output = "\\leavevmode\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}"
760    tex.sprint(output)
761 end
762
763
764
765 --
766 function drawGmshTikZ(file,points,scale,color)
767    local listPoints,triangulation = readGmsh(file)
768    output = traceMeshTikZ(listPoints, triangulation,points,color,colorBbox)
769    output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}"
770    tex.sprint(output)
771 end
772
773 --
774 function drawGmshTikZinc(file,beginning, ending,points,scale,color)
775    local listPoints,triangulation = readGmsh(file)
776    output = traceMeshTikZ(listPoints, triangulation,points,color,colorBbox)
777    output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" ..beginning.. output..ending .."\\end{tikzpicture}"
778    tex.sprint(output)
779 end
780
781
782 -- buildVoronoi with MP
783 function gmshVoronoiMP(file,points,scale,tri,styleD,styleV)
784    local listPoints,triangulation = readGmsh(file)
785    local listVoronoi = buildVoronoi(listPoints, triangulation)
786    output = traceVoronoiMP(listPoints,triangulation,listVoronoi,points,tri,styleD,styleV)
787    output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}"
788    tex.sprint(output)
789 end
790
791
792 -- buildVoronoi with TikZ
793 function gmshVoronoiTikZ(file,points,scale,tri,color,colorVoronoi,styleD,styleV)
794    local listPoints,triangulation = readGmsh(file)
795    local listVoronoi = buildVoronoi(listPoints, triangulation)
796    output = traceVoronoiTikZ(listPoints,triangulation,listVoronoi,points,tri,color,colorBbox,colorVoronoi,styleD,styleV)
797    output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}"   tex.sprint(output)
798 end
799
800
801 -- buildVoronoi with MP
802 function gmshVoronoiMPinc(file,beginning, ending,points,scale,tri,styleD,styleV)
803    local listPoints,triangulation = readGmsh(file)
804    local listVoronoi = buildVoronoi(listPoints, triangulation)
805    output = traceVoronoiMP(listPoints,triangulation,listVoronoi,points,tri,styleD,styleV)
806    output = "\\leavevmode\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}"
807    tex.sprint(output)
808 end
809
810
811 -- buildVoronoi with TikZ
812 function gmshVoronoiTikZinc(file,beginning, ending,points,scale,tri,color,colorVoronoi,styleD,styleV)
813    local listPoints,triangulation = readGmsh(file)
814    local listVoronoi = buildVoronoi(listPoints, triangulation)
815    output = traceVoronoiTikZ(listPoints,triangulation,listVoronoi,points,tri,color,colorBbox,colorVoronoi,styleD,styleV)
816    output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" ..beginning.. output..ending .."\\end{tikzpicture}"
817    tex.sprint(output)
818 end
819
820
821 --------------------------------------------------
822 --         Meshing of a polygon                 --
823 --------------------------------------------------
824
825 function  tracePolygonMP(polygon,points)
826    output = "";
827    output = output .. "pair polygon[];"
828    for i=1,#polygon do
829       output = output .. "polygon[".. i .. "] = (" .. polygon[i].x .. "," .. polygon[i].y .. ")*u;"
830    end
831    output = output .. "draw "
832    for i=1,#polygon do
833       output = output .. "(" .. polygon[i].x .. "," .. polygon[i].y .. ")*u -- "
834    end
835    output = output .. "cycle withcolor \\luameshmpcolorPoly withpen pencircle scaled 1pt;"
836    if(points=="points") then
837       for i=1,#polygon do
838          output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. polygon[i].x ..",".. polygon[i].y .. ")*u ) withcolor \\luameshmpcolorPoly ;"
839       end
840    end
841    if(points=="dotpoints") then
842          for i=1,#polygon do
843          output = output .. "drawdot  (" .. polygon[i].x ..",".. polygon[i].y .. ")*u  withcolor \\luameshmpcolorPoly withpen pencircle scaled 3;"
844       end
845    end
846    return output
847 end
848
849
850 function  tracePolygonTikZ(polygon,points, colorPoly)
851    output = "";
852    for i=1,#polygon do
853       output = output .. "\\coordinate (polygon".. i .. ") at  (" .. polygon[i].x .. "," .. polygon[i].y .. ");"
854    end
855    output = output .. "\\draw[color=".. colorPoly .. ", thick]"
856    for i=1,#polygon do
857       output = output .. "(" .. polygon[i].x .. "," .. polygon[i].y .. ") -- "
858    end
859    output = output .. "cycle;"
860    if(points=="points") then
861       for i=1,#polygon do
862          output = output .. "\\draw[color="..colorPoly.."] (" .. polygon[i].x ..",".. polygon[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};"
863       end
864    end
865    if(points=="dotpoints") then
866       for i=1,#polygon do
867          output = output .. "\\draw[color="..colorPoly.."] (" .. polygon[i].x ..",".. polygon[i].y .. ") node {$\\bullet$};"
868       end
869    end
870    return output
871 end
872
873
874
875 function drawMeshPolygonMP(chaine,mode,h,step,
876                              points,scale,random)
877    local polygon = buildList(chaine, mode)
878    polygon = addPointsPolygon(polygon,h)
879    local grid = buildGrid(polygon,h,random)
880    local listPoints = addGridPoints(polygon,grid,h)
881    if(step=="polygon") then
882       -- the polygon
883       output = tracePolygonMP(polygon,points)
884    end
885    if(step=="grid") then
886       -- polygon + grid
887       output = tracePointsMP(grid,points)
888       output = output .. tracePolygonMP(polygon,points)
889    end
890    if(step=="points") then
891       -- polygon + only grid points inside the polygon
892       output = tracePointsMP(listPoints,points)
893       output = output .. tracePolygonMP(polygon,points)
894    end
895    if(step=="mesh") then
896       -- polygon + mesh
897       triangulation = BowyerWatson(listPoints,"none") -- no bbox
898       output = traceMeshMP(listPoints,triangulation,points)
899       output = output .. tracePolygonMP(polygon,points)
900    end
901
902    output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}"
903    tex.sprint(output)
904 end
905
906
907
908 function drawMeshPolygonTikZ(chaine,mode,h,step,
909                              points,scale,color,colorPoly,random)
910    local polygon = buildList(chaine, mode)
911    polygon = addPointsPolygon(polygon,h)
912    local grid = buildGrid(polygon,h,random)
913    local listPoints = addGridPoints(polygon,grid,h)
914    if(step=="polygon") then
915       -- the polygon
916       output = tracePolygonTikZ(polygon,points,colorPoly)
917    end
918    if(step=="grid") then
919       -- polygon + grid
920       output = tracePointsTikZ(grid,points,color,"none") -- none for colorBbox
921       output = output .. tracePolygonTikZ(polygon,points,colorPoly)
922    end
923    if(step=="points") then
924       -- polygon + only grid points inside the polygon
925       output = tracePointsTikZ(listPoints,points,color,"none")
926       output = output .. tracePolygonTikZ(polygon,points,colorPoly)
927    end
928    if(step=="mesh") then
929       -- polygon + mesh
930       triangulation = BowyerWatson(listPoints,"none") -- no bbox
931       output = traceMeshTikZ(listPoints,triangulation,points,color,"none")
932       output = output .. tracePolygonTikZ(polygon,points,colorPoly)
933    end
934    output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}"
935    tex.sprint(output)
936 end
937
938 function drawMeshPolygonMPinc(chaine,beginning,ending,mode,h,step,
939                              points,scale,random)
940    local polygon = buildList(chaine, mode)
941    polygon = addPointsPolygon(polygon,h)
942    local grid = buildGrid(polygon,h,random)
943    local listPoints = addGridPoints(polygon,grid,h)
944    if(step=="polygon") then
945       -- the polygon
946       output = tracePolygonMP(polygon,points)
947    end
948    if(step=="grid") then
949       -- polygon + grid
950       output = tracePointsMP(grid,points)
951       output = output .. tracePolygonMP(polygon,points)
952    end
953    if(step=="points") then
954       -- polygon + only grid points inside the polygon
955       output = tracePointsMP(listPoints,points)
956       output = output .. tracePolygonMP(polygon,points)
957    end
958    if(step=="mesh") then
959       -- polygon + mesh
960       triangulation = BowyerWatson(listPoints,"none") -- no bbox
961       output = traceMeshMP(listPoints,triangulation,points)
962       output = output .. tracePolygonMP(polygon,points)
963    end
964    output = "\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}"
965    tex.sprint(output)
966 end
967
968
969
970 function drawMeshPolygonTikZinc(chaine,beginning,ending,mode,h,step,
971                              points,scale,color,colorPoly,random)
972    local polygon = buildList(chaine, mode)
973    polygon = addPointsPolygon(polygon,h)
974    local grid = buildGrid(polygon,h,random)
975    local listPoints = addGridPoints(polygon,grid,h)
976    if(step=="polygon") then
977       -- the polygon
978       output = tracePolygonTikZ(polygon,points,colorPoly)
979    end
980    if(step=="grid") then
981       -- polygon + grid
982       output = tracePointsTikZ(grid,points,color,"none") -- none for colorBbox
983       output = output .. tracePolygonTikZ(polygon,points,colorPoly)
984    end
985    if(step=="points") then
986       -- polygon + only grid points inside the polygon
987       output = tracePointsTikZ(listPoints,points,color,"none")
988       output = output .. tracePolygonTikZ(polygon,points,colorPoly)
989    end
990    if(step=="mesh") then
991       -- polygon + mesh
992       triangulation = BowyerWatson(listPoints,"none") -- no bbox
993       output = traceMeshTikZ(listPoints,triangulation,points,color,"none")
994       output = output .. tracePolygonTikZ(polygon,points,colorPoly)
995    end
996    output = "\\noindent\\begin{tikzpicture}[x="..scale..",y="..scale.."]".. beginning..output ..ending.. "\\end{tikzpicture}"
997    tex.sprint(output)
998 end

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.