X-Git-Url: https://melusine.eu.org/syracuse/G/git/?p=delaunay.git;a=blobdiff_plain;f=luamesh.lua;h=a1023aace9cb57f68b90d8fc0e32d05adfd5a7ce;hp=3ff737bcab6475117b605748cc47ef5cc693fbd7;hb=HEAD;hpb=e6cdb2e004ddba7c63705df4835de516ce0f297c diff --git a/luamesh.lua b/luamesh.lua index 3ff737b..a1023aa 100644 --- a/luamesh.lua +++ b/luamesh.lua @@ -1,8 +1,19 @@ +require "luamesh-polygon" +require "luamesh-tex" + +local function shallowCopy(original) + local copy = {} + for key, value in pairs(original) do + copy[key] = value + end + return copy +end + -- Bowyer and Watson algorithm -- Delaunay meshing function BowyerWatson (listPoints,bbox) local triangulation = {} - local lgth = #listPoints + lgth = #listPoints -- add four points to listPoints to have a bounding box listPoints = buildBoundingBox(listPoints) -- the first triangle @@ -12,7 +23,7 @@ function BowyerWatson (listPoints,bbox) -- add points one by one for i=1,lgth do -- find the triangles which the circumcircle contained the point to add - badTriangles = buildBadTriangles(listPoints[i],triangulation) + badTriangles = buildBadTriangles(listPoints[i],triangulation,listPoints) -- build the polygon of the cavity containing the point to add polygon = buildCavity(badTriangles, triangulation) -- remove the bad triangles @@ -75,6 +86,36 @@ function buildBoundingBox(listPoints) return listPoints end +function BoundingBox(listPoints) + -- listPoints : list of points + -- epsV : parameter for the distance of the bounding box + local xmin, xmax, ymin, ymax, eps + xmin = 1000 + ymin = 1000 + xmax = -1000 + ymax = -1000 + for i=1,#listPoints do + if (listPoints[i].x < xmin) then + xmin = listPoints[i].x + end + if (listPoints[i].x > xmax) then + xmax = listPoints[i].x + end + if (listPoints[i].y < ymin) then + ymin = listPoints[i].y + end + if (listPoints[i].y > ymax) then + ymax = listPoints[i].y + end + end + eps = math.max(math.abs(xmax-xmin),math.abs(ymax-ymin))*0.15 + xmin = xmin - eps + xmax = xmax + eps + ymin = ymin - eps + ymax = ymax + eps + return xmin, xmax, ymin, ymax +end + function removeBoundingBox(triangulation,lgth) -- build the four bounding box edge point1 = lgth+1 @@ -82,7 +123,7 @@ function removeBoundingBox(triangulation,lgth) point3 = lgth+3 point4 = lgth+4 -- for all triangle - newTriangulation = {} + local newTriangulation = {} for i=1,#triangulation do boolE1 = pointInTriangle(point1,triangulation[i]) boolE2 = pointInTriangle(point2,triangulation[i]) @@ -96,8 +137,8 @@ function removeBoundingBox(triangulation,lgth) end -function buildBadTriangles(point, triangulation) - badTriangles = {} +function buildBadTriangles(point, triangulation,listPoints) + local badTriangles = {} for j=1,#triangulation do -- for all triangles A = listPoints[triangulation[j][1]] B = listPoints[triangulation[j][2]] @@ -113,7 +154,7 @@ end -- construction of the cavity composed by the bad triangles around the point to add function buildCavity(badTriangles, triangulation) - polygon = {} + local polygon = {} for j=1,#badTriangles do -- for all bad triangles ind = badTriangles[j] for k=1,3 do -- for all edges @@ -209,7 +250,7 @@ end -- compute the list of the circumcircle of a triangulation function listCircumCenter(listPoints,triangulation) - list = {} + local list = {} for j=1,#triangulation do A = listPoints[triangulation[j][1]] B = listPoints[triangulation[j][2]] @@ -269,8 +310,8 @@ end -- build the edges of the Voronoi diagram with a given triangulation function buildVoronoi(listPoints, triangulation) - listCircumCircle = listCircumCenter(listPoints, triangulation) - listVoronoi = {} + local listCircumCircle = listCircumCenter(listPoints, triangulation) + local listVoronoi = {} for i=1,#listCircumCircle do listN = findNeighbour(triangulation[i],i,triangulation) for j=1,#listN do @@ -283,12 +324,11 @@ function buildVoronoi(listPoints, triangulation) return listVoronoi end --------------------------- TeX -- build the list of points function buildList(chaine, mode) -- if mode = int : the list is given in the chaine string (x1,y1);(x2,y2);...;(xn,yn) -- if mode = ext : the list is given in a file line by line with space separation - listPoints = {} + local listPoints = {} if mode == "int" then local points = string.explode(chaine, ";") local lgth=#points @@ -312,429 +352,86 @@ function buildList(chaine, mode) end --- -function rectangleList(a,b,nbrA,nbrB) - stepA = a/nbrA - stepB = b/nbrB - listPoints = {} - k=1 - for i=1,(nbrA+1) do - for j=1,(nbrB+1) do - listPoints[k] = {x = (i-1)*stepA, y=(j-1)*stepB} - k=k+1 - end - end - return listPoints -end - - --- trace Voronoi with MP -function traceVoronoiMP(listPoints, triangulation,listVoronoi, points, tri,styleD,styleV) - if(styleD == "dashed") then - sDelaunay = "dashed evenly" - else - sDelaunay = "" - end - if(styleV == "dashed") then - sVoronoi = "dashed evenly" - else - sVoronoi = "" - end - listCircumC = listCircumCenter(listPoints,triangulation) - output = ""; - output = output .. " pair MeshPoints[];" - for i=1,#listPoints do - output = output .. "MeshPoints[".. i .. "] = (" .. listPoints[i].x .. "," .. listPoints[i].y .. ")*u;" - end - output = output .. " pair CircumCenters[];" - for i=1,#listCircumC do - output = output .. "CircumCenters[".. i .. "] = (" .. listCircumC[i].x .. "," .. listCircumC[i].y .. ")*u;" - end - if(tri=="show") then - for i=1,#triangulation do - PointI = listPoints[triangulation[i][1]] - PointJ = listPoints[triangulation[i][2]] - PointK = listPoints[triangulation[i][3]] - if(triangulation[i].type == "bbox") then - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle "..sDelaunay.." withcolor \\luameshmpcolorBbox;" - else - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle "..sDelaunay.." withcolor \\luameshmpcolor;" - end - end - end - for i=1,#listVoronoi do - PointI = listCircumC[listVoronoi[i][1]] - PointJ = listCircumC[listVoronoi[i][2]] - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u "..sVoronoi.." withcolor \\luameshmpcolorVoronoi;" - end - if(points=="points") then - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{"..j.."}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;" - j=j+1 - else - output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;" - end - end - for i=1,#listCircumC do - output = output .. "dotlabel.llft (btex $\\CircumPoint_{" .. i .. "}$ etex, (" .. listCircumC[i].x ..",".. listCircumC[i].y .. ")*u ) withcolor \\luameshmpcolorVoronoi ;" - end - else - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "drawdot (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u withcolor \\luameshmpcolorBbox withpen pencircle scaled 3;" - j=j+1 - else - output = output .. "drawdot (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u withcolor \\luameshmpcolor withpen pencircle scaled 3;" - end - end - for i=1,#listCircumC do - output = output .. "drawdot (" .. listCircumC[i].x ..",".. listCircumC[i].y .. ")*u withcolor \\luameshmpcolorVoronoi withpen pencircle scaled 3;" - end - end - - return output -end - - --- trace Voronoi with TikZ -function traceVoronoiTikZ(listPoints, triangulation,listVoronoi, points, tri,color,colorBbox,colorVoronoi,styleD,styleV) - if(styleD == "dashed") then - sDelaunay = ",dashed" - else - sDelaunay = "" - end - if(styleV == "dashed") then - sVoronoi = ",dashed" - else - sVoronoi = "" - end - listCircumC = listCircumCenter(listPoints,triangulation) - output = "" - for i=1,#listPoints do - output = output .. "\\coordinate (MeshPoints".. i .. ") at (" .. listPoints[i].x .. "," .. listPoints[i].y .. ");" - end - for i=1,#listCircumC do - output = output .. "\\coordinate (CircumPoints".. i .. ") at (" .. listCircumC[i].x .. "," .. listCircumC[i].y .. ");" - end - if(tri=="show") then - for i=1,#triangulation do - PointI = listPoints[triangulation[i][1]] - PointJ = listPoints[triangulation[i][2]] - PointK = listPoints[triangulation[i][3]] - if(triangulation[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox..sDelaunay.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" - else - output = output .. "\\draw[color="..color..sDelaunay.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" +-- function to add points on a polygon to respect +-- the size of unit mesh +function addPointsPolygon(polygon,h) + local newPolygon = shallowCopy(polygon) + k=0 -- to follow in the newPolygon + for i=1,#polygon do + k = k+1 + ip = (i)%(#polygon)+1 + dist = math.sqrt(math.pow(polygon[i].x-polygon[ip].x,2) + math.pow(polygon[i].y-polygon[ip].y,2)) + -- if the distance between two ponits of the polygon is greater than 1.5*h + if(dist>=2*h) then + n = math.floor(dist/h) + step = dist/(n+1) + for j=1,n do + a = {x=polygon[i].x+j*step*(polygon[ip].x-polygon[i].x)/dist,y=polygon[i].y+j*step*(polygon[ip].y-polygon[i].y)/dist} + table.insert(newPolygon,k+j,a) end + k=k+n end end - for i=1,#listVoronoi do - PointI = listCircumC[listVoronoi[i][1]] - PointJ = listCircumC[listVoronoi[i][2]] - output = output .. "\\draw[color="..colorVoronoi..sVoronoi.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..");" - end - if(points=="points") then - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};" - j=j+1 - else - output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};" - end - end - for i=1,#listCircumC do - output = output .. "\\draw[color="..colorVoronoi.."] (" .. listCircumC[i].x ..",".. listCircumC[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\CircumPoint_{" .. i .. "}$};" - end - else - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} ;" - j=j+1 - else - output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} ;" - end - end - for i=1,#listCircumC do - output = output .. "\\draw[color="..colorVoronoi.."] (" .. listCircumC[i].x ..",".. listCircumC[i].y .. ") node {$\\bullet$};" - end - end - return output -end - - - --- buildVoronoi with MP -function buildVoronoiMPBW(chaine,mode,points,bbox,scale,tri,styleD,styleV) - listPoints = buildList(chaine, mode) - triangulation = BowyerWatson(listPoints,bbox) - listVoronoi = buildVoronoi(listPoints, triangulation) - output = traceVoronoiMP(listPoints,triangulation,listVoronoi,points,tri,styleD,styleV) - output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}" - tex.sprint(output) -end - - --- buildVoronoi with TikZ -function buildVoronoiTikZBW(chaine,mode,points,bbox,scale,tri,color,colorBbox,colorVoronoi,styleD,styleV) - listPoints = buildList(chaine, mode) - triangulation = BowyerWatson(listPoints,bbox) - listVoronoi = buildVoronoi(listPoints, triangulation) - output = traceVoronoiTikZ(listPoints,triangulation,listVoronoi,points,tri,color,colorBbox,colorVoronoi,styleD,styleV) - output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}" tex.sprint(output) + return newPolygon end +-- function to build a gridpoints from the bounding box +-- with a prescribed +function buildGrid(listPoints,h,random) + -- listPoints : list of the points of the polygon, ordered + -- h : parameter for the grid + xmin, xmax, ymin, ymax = BoundingBox(listPoints) --- buildVoronoi with MP -function buildVoronoiMPBWinc(chaine,beginning, ending,mode,points,bbox,scale,tri,styleD,styleV) - listPoints = buildList(chaine, mode) - triangulation = BowyerWatson(listPoints,bbox) - listVoronoi = buildVoronoi(listPoints, triangulation) - output = traceVoronoiMP(listPoints,triangulation,listVoronoi,points,tri,styleD,styleV) - output = "\\leavevmode\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}" - tex.sprint(output) + local grid = rectangleList(xmin,xmax,ymin,ymax,h,random) + return grid end - --- buildVoronoi with TikZ -function buildVoronoiTikZBWinc(chaine,beginning, ending,mode,points,bbox,scale,tri,color,colorBbox,colorVoronoi) - listPoints = buildList(chaine, mode,styleD,styleV) - triangulation = BowyerWatson(listPoints,bbox) - listVoronoi = buildVoronoi(listPoints, triangulation) - output = traceVoronoiTikZ(listPoints,triangulation,listVoronoi,points,tri,color,colorBbox,colorVoronoi,styleD,styleV) - output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" ..beginning.. output..ending .."\\end{tikzpicture}" - tex.sprint(output) -end - - - --- trace a triangulation with TikZ -function traceMeshTikZ(listPoints, triangulation,points,color,colorBbox) - output = "" - for i=1,#listPoints do - output = output .. "\\coordinate (MeshPoints".. i .. ") at (" .. listPoints[i].x .. "," .. listPoints[i].y .. ");" - end - for i=1,#triangulation do - PointI = listPoints[triangulation[i][1]] - PointJ = listPoints[triangulation[i][2]] - PointK = listPoints[triangulation[i][3]] - if(triangulation[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" - else - output = output .. "\\draw[color="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" - end - end - if(points=="points") then - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};" - j=j+1 - else - output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};" - end - end - end - return output -end - - --- trace a triangulation with MP -function traceMeshMP(listPoints, triangulation,points) - output = ""; - output = output .. " pair MeshPoints[];" - for i=1,#listPoints do - output = output .. "MeshPoints[".. i .. "] = (" .. listPoints[i].x .. "," .. listPoints[i].y .. ")*u;" - end - for i=1,#triangulation do - PointI = listPoints[triangulation[i][1]] - PointJ = listPoints[triangulation[i][2]] - PointK = listPoints[triangulation[i][3]] - if(triangulation[i].type == "bbox") then - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolorBbox;" - else - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolor;" - end - end - if(points=="points") then - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{"..j.."}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;" - j=j+1 +-- function to build the list of points in the rectangle +function rectangleList(xmin,xmax,ymin,ymax,h,random) + -- for the random + math.randomseed( os.time() ) + nbrX = math.floor(math.abs(xmax-xmin)/h) + nbrY = math.floor(math.abs(ymax-ymin)/h) + local listPoints = {} + k=1 + for i=1,(nbrX+1) do + for j=1,(nbrY+1) do + rd = math.random() + if(random=="perturb") then + fact = 0.3*h + --print(fact) else - output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;" + fact = 0.0 end + listPoints[k] = {x = xmin+(i-1)*h+rd*fact, y=ymin+(j-1)*h+rd*fact} + k=k+1 end end - return output -end - - --- buildMesh with MP -function buildMeshMPBW(chaine,mode,points,bbox,scale) - listPoints = buildList(chaine, mode) - triangulation = BowyerWatson(listPoints,bbox) - output = traceMeshMP(listPoints, triangulation,points) - output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}" - tex.sprint(output) -end - --- buildMesh with MP include code -function buildMeshMPBWinc(chaine,beginning, ending,mode,points,bbox,scale) - listPoints = buildList(chaine, mode) - triangulation = BowyerWatson(listPoints,bbox) - output = traceMeshMP(listPoints, triangulation,points) - output = "\\leavevmode\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}" - tex.sprint(output) -end - --- buildMesh with TikZ -function buildMeshTikZBW(chaine,mode,points,bbox,scale,color,colorBbox) - listPoints = buildList(chaine, mode) - triangulation = BowyerWatson(listPoints,bbox) - output = traceMeshTikZ(listPoints, triangulation,points,color,colorBbox) - output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}" - tex.sprint(output) -end - --- buildMesh with TikZ -function buildMeshTikZBWinc(chaine,beginning, ending,mode,points,bbox,scale,color,colorBbox) - listPoints = buildList(chaine, mode) - triangulation = BowyerWatson(listPoints,bbox) - output = traceMeshTikZ(listPoints, triangulation,points,color,colorBbox) - output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" ..beginning.. output..ending .."\\end{tikzpicture}" - tex.sprint(output) + return listPoints end --- print points of the mesh -function tracePointsMP(listPoints,points) - output = ""; - output = output .. " pair MeshPoints[];" - for i=1,#listPoints do - output = output .. "MeshPoints[".. i .. "] = (" .. listPoints[i].x .. "," .. listPoints[i].y .. ")*u;" - end - if(points=="points") then - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{" .. j .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;" - j=j+1 - else - output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;" - end - end - else - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "drawdot (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u withcolor \\luameshmpcolorBbox withpen pencircle scaled 3;" - else - output = output .. "drawdot (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u withcolor \\luameshmpcolor withpen pencircle scaled 3;" - end - end - end - return output -end - --- print points of the mesh -function tracePointsTikZ(listPoints,points,color,colorBbox) - output = ""; - for i=1,#listPoints do - output = output .. "\\coordinate (MeshPoints".. i .. ") at (" .. listPoints[i].x .. "," .. listPoints[i].y .. ");" - end - if(points=="points") then - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};" - j = j+1 - else - output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};" - end - end - else - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} ;" - else - output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} ;" - end +-- function to add points from a grid to the interior of a polygon +function addGridPoints(polygon, grid,h) + local listPoints = shallowCopy(polygon) + k = #polygon + for i=1, #grid do + --print(grid[i].x,grid[i].y) + --print(isInside(polygon,grid[i])) + if(isInside(polygon,grid[i],h)) then + k=k+1 + listPoints[k] = grid[i] end end - return output -end - --- print points to mesh -function printPointsMP(chaine,mode,points,bbox,scale) - listPoints = buildList(chaine, mode) - if(bbox == "bbox" ) then - listPoints = buildBoundingBox(listPoints) - end - output = tracePointsMP(listPoints,points) - output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}" - tex.sprint(output) -end - - --- print points to mesh -function printPointsMPinc(chaine,beginning, ending, mode,points,bbox,scale) - listPoints = buildList(chaine, mode) - if(bbox == "bbox" ) then - listPoints = buildBoundingBox(listPoints) - end - output = tracePointsMP(listPoints,points) - output = "\\leavevmode\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}" - tex.sprint(output) -end - --- print points to mesh -function printPointsTikZ(chaine,mode,points,bbox,scale,color,colorBbox) - listPoints = buildList(chaine, mode) - if(bbox == "bbox" ) then - listPoints = buildBoundingBox(listPoints) - end - output = tracePointsTikZ(listPoints,points,color,colorBbox) - output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}" - tex.sprint(output) -end - - --- print points to mesh -function printPointsTikZinc(chaine,beginning, ending, mode,points,bbox,scale,color,colorBbox) - listPoints = buildList(chaine, mode) - if(bbox == "bbox" ) then - listPoints = buildBoundingBox(listPoints) - end - output = tracePointsTikZ(listPoints,points,color,colorBbox) - output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" ..beginning.. output..ending .."\\end{tikzpicture}" - tex.sprint(output) + return listPoints end --- buildMesh -function buildRect(largeur,a,b,nbrA, nbrB) - listPoints = rectangleList(a,b,nbrA,nbrB) - triangulation = BowyerWatson(listPoints,"none") - traceTikZ(listPoints, triangulation,largeur,"none") -end - -local function shallowCopy(original) - local copy = {} - for key, value in pairs(original) do - copy[key] = value - end - return copy -end -- function give a real polygon without repeting points function cleanPoly(polygon) - polyNew = {} - polyCopy = shallowCopy(polygon) + local polyNew = {} + local polyCopy = shallowCopy(polygon) e1 = polyCopy[1][1] e2 = polyCopy[1][2] table.insert(polyNew, e1) @@ -766,276 +463,11 @@ function cleanPoly(polygon) return polyNew end --- -function TeXaddOnePointTikZ(listPoints,P,step,bbox,color,colorBack, colorNew, colorCircle,colorBbox) - output = "" - -- build the triangulation - triangulation = BowyerWatson(listPoints,bbox) - badTriangles = buildBadTriangles(P,triangulation) - for i=1,#listPoints do - output = output .. "\\coordinate (MeshPoints".. i .. ") at (" .. listPoints[i].x .. "," .. listPoints[i].y .. ");" - end - if(step == "badT") then - -- draw all triangle - for i=1,#triangulation do - PointI = listPoints[triangulation[i][1]] - PointJ = listPoints[triangulation[i][2]] - PointK = listPoints[triangulation[i][3]] - if(triangulation[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" - else - output = output .. "\\draw[color="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" - end - end - -- draw and fill the bad triangle - for i=1,#badTriangles do - PointI = listPoints[triangulation[badTriangles[i]][1]] - PointJ = listPoints[triangulation[badTriangles[i]][2]] - PointK = listPoints[triangulation[badTriangles[i]][3]] - output = output .. "\\draw[fill="..colorBack.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" - end - -- draw the circoncircle - for i=1,#badTriangles do - PointI = listPoints[triangulation[badTriangles[i]][1]] - PointJ = listPoints[triangulation[badTriangles[i]][2]] - PointK = listPoints[triangulation[badTriangles[i]][3]] - center, radius = circoncircle(PointI, PointJ, PointK) - output = output .. "\\draw[dashed, color="..colorCircle.."] ("..center.x .. "," .. center.y .. ") circle ("..radius ..");" - end - -- mark the points - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};" - j = j+1 - else - output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};" - end - end - -- mark the point to add - output = output .. "\\draw[color="..colorNew.."] (" .. P.x ..",".. P.y .. ") node {$\\bullet$} node[anchor=north east] {$\\NewPoint$};" - elseif(step == "cavity") then - polygon = buildCavity(badTriangles, triangulation) - polyNew = cleanPoly(polygon) - -- remove the bad triangles - for j=1,#badTriangles do - table.remove(triangulation,badTriangles[j]-(j-1)) - end - -- draw the triangles - for i=1,#triangulation do - PointI = listPoints[triangulation[i][1]] - PointJ = listPoints[triangulation[i][2]] - PointK = listPoints[triangulation[i][3]] - if(triangulation[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" - else - output = output .. "\\draw[color="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" - end - end - -- fill and draw the cavity - path = "" - for i=1,#polyNew do - PointI = listPoints[polyNew[i]] - path = path .. "(".. PointI.x ..",".. PointI.y ..")--" - end - output = output .. "\\draw[color="..colorNew..",fill ="..colorBack..", thick] " .. path .. "cycle;" - -- mark the points of the mesh - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};" - j=j+1 - else - output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};" - end - end - -- mark the adding point - output = output .. "\\draw[color="..colorNew.."] (" .. P.x ..",".. P.y .. ") node {$\\bullet$} node[anchor=north east] {$\\NewPoint$};" - elseif(step == "newT") then - polygon = buildCavity(badTriangles, triangulation) - polyNew = cleanPoly(polygon) - -- remove the bad triangles - for j=1,#badTriangles do - table.remove(triangulation,badTriangles[j]-(j-1)) - end - -- draw the triangle of the triangulation - for i=1,#triangulation do - PointI = listPoints[triangulation[i][1]] - PointJ = listPoints[triangulation[i][2]] - PointK = listPoints[triangulation[i][3]] - if(triangulation[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" - else - output = output .. "\\draw[color="..color.."] (".. PointI.x ..",".. PointI.y ..")--("..PointJ.x..",".. PointJ.y ..")--("..PointK.x..",".. PointK.y ..")--cycle;" - end - end - -- fill and draw the cavity - path = "" - for i=1,#polyNew do - PointI = listPoints[polyNew[i]] - path = path .. "(".. PointI.x ..",".. PointI.y ..")--" - end - output = output .. "\\draw[color="..colorNew..",fill ="..colorBack..", thick] " .. path .. "cycle;" - -- draw the new triangles composed by the edges of the polygon and the added point - for i=1,#polygon do - 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 ..");" - output = output .. "\\draw[color="..colorNew..", thick]".."(".. listPoints[polygon[i][1]].x .. "," .. listPoints[polygon[i][1]].y .. ") -- (" .. P.x .. "," .. P.y ..");" - output = output .. "\\draw[color="..colorNew..", thick]".."(".. listPoints[polygon[i][2]].x .. "," .. listPoints[polygon[i][2]].y .. ") -- (" .. P.x .. "," .. P.y ..");" - end - -- mark points - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "\\draw[color="..colorBbox.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint^*_{" .. j .. "}$};" - j=j+1 - else - output = output .. "\\draw[color="..color.."] (" .. listPoints[i].x ..",".. listPoints[i].y .. ") node {$\\bullet$} node[anchor=north east] {$\\MeshPoint_{" .. i .. "}$};" - end - end - -- mark the added point - output = output .. "\\draw[color="..colorNew.."] (" .. P.x ..",".. P.y .. ") node {$\\bullet$} node[anchor=north east] {$\\NewPoint$};" - end - return output -end - -function TeXaddOnePointMPBW(listPoints,P,step,bbox) - output = ""; - output = output .. "pair MeshPoints[];" - -- build the triangulation - triangulation = BowyerWatson(listPoints,bbox) - badTriangles = buildBadTriangles(P,triangulation) - for i=1,#listPoints do - output = output .. "MeshPoints[".. i .. "] = (" .. listPoints[i].x .. "," .. listPoints[i].y .. ")*u;" - end - if(step == "badT") then - -- draw all triangle - for i=1,#triangulation do - PointI = listPoints[triangulation[i][1]] - PointJ = listPoints[triangulation[i][2]] - PointK = listPoints[triangulation[i][3]] - if(triangulation[i].type == "bbox") then - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolorBbox;" - else - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolor;" - end - end - -- draw and fill the bad triangle - for i=1,#badTriangles do - PointI = listPoints[triangulation[badTriangles[i]][1]] - PointJ = listPoints[triangulation[badTriangles[i]][2]] - PointK = listPoints[triangulation[badTriangles[i]][3]] - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolor;" - output = output .. "fill (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolorBack;" - end - -- draw the circoncircle - for i=1,#badTriangles do - PointI = listPoints[triangulation[badTriangles[i]][1]] - PointJ = listPoints[triangulation[badTriangles[i]][2]] - PointK = listPoints[triangulation[badTriangles[i]][3]] - center, radius = circoncircle(PointI, PointJ, PointK) - output = output .. "draw fullcircle scaled ("..radius .."*2u) shifted ("..center.x .. "*u," .. center.y .. "*u) dashed evenly withcolor \\luameshmpcolorCircle;" - end - -- mark the points - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{" .. j .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;" - j=j+1 - else - output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;" - end - end - -- mark the point to add - output = output .. "dotlabel.llft (btex $\\NewPoint$ etex,(" .. P.x ..",".. P.y .. ")*u) withcolor \\luameshmpcolorNew;" - elseif(step == "cavity") then - polygon = buildCavity(badTriangles, triangulation) - polyNew = cleanPoly(polygon) - -- remove the bad triangles - for j=1,#badTriangles do - table.remove(triangulation,badTriangles[j]-(j-1)) - end - -- draw the triangles - for i=1,#triangulation do - PointI = listPoints[triangulation[i][1]] - PointJ = listPoints[triangulation[i][2]] - PointK = listPoints[triangulation[i][3]] - if(triangulation[i].type == "bbox") then - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolorBbox;" - else - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolor;" - end - end - -- fill and draw the cavity - path = "" - for i=1,#polyNew do - PointI = listPoints[polyNew[i]] - path = path .. "(".. PointI.x ..",".. PointI.y ..")*u--" - end - output = output .. "fill " .. path .. "cycle withcolor \\luameshmpcolorBack;" - output = output .. "draw " .. path .. "cycle withcolor \\luameshmpcolorNew withpen pencircle scaled 1pt;" - -- mark the points of the mesh - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{" .. j .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;" - j=j+1 - else - output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;" - end - end - -- mark the adding point - output = output .. "dotlabel.llft (btex $\\NewPoint$ etex,(" .. P.x ..",".. P.y .. ")*u) withcolor \\luameshmpcolorNew ;" - elseif(step == "newT") then - polygon = buildCavity(badTriangles, triangulation) - polyNew = cleanPoly(polygon) - -- remove the bad triangles - for j=1,#badTriangles do - table.remove(triangulation,badTriangles[j]-(j-1)) - end - -- draw the triangle of the triangulation - for i=1,#triangulation do - PointI = listPoints[triangulation[i][1]] - PointJ = listPoints[triangulation[i][2]] - PointK = listPoints[triangulation[i][3]] - if(triangulation[i].type == "bbox") then - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolorBbox;" - else - output = output .. "draw (".. PointI.x ..",".. PointI.y ..")*u--("..PointJ.x..",".. PointJ.y ..")*u--("..PointK.x..",".. PointK.y ..")*u--cycle withcolor \\luameshmpcolor;" - end - end - -- fill the cavity - path = "" - for i=1,#polyNew do - PointI = listPoints[polyNew[i]] - path = path .. "(".. PointI.x ..",".. PointI.y ..")*u--" - end - output = output .. "fill " .. path .. "cycle withcolor \\luameshmpcolorBack;" - -- draw the new triangles composed by the edges of the polygon and the added point - for i=1,#polygon do - 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;" - 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;" - 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;" - end - -- mark points - j=1 - for i=1,#listPoints do - if(listPoints[i].type == "bbox") then - output = output .. "dotlabel.llft (btex $\\MeshPoint^{*}_{" .. j .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolorBbox ;" - j=j+1 - else - output = output .. "dotlabel.llft (btex $\\MeshPoint_{" .. i .. "}$ etex, (" .. listPoints[i].x ..",".. listPoints[i].y .. ")*u ) withcolor \\luameshmpcolor ;" - end - end - -- mark the added point - output = output .. "dotlabel.llft (btex $\\NewPoint$ etex,(" .. P.x ..",".. P.y .. ")*u) withcolor \\luameshmpcolorNew ;" - end - return output -end -- build the list of points extern and stop at nbr function buildListExt(chaine, stop) - listPoints = {} + local listPoints = {} io.input(chaine) -- open the file text=io.read("*all") lines=string.explode(text,"\n+") -- all the lines @@ -1048,64 +480,6 @@ function buildListExt(chaine, stop) return point, listPoints end - -function TeXOnePointTikZBW(chaine,point,step,scale,mode,bbox,color,colorBack,colorNew,colorCircle,colorBbox) - if(mode=="int") then - Sx,Sy=string.match(point,"%((.+),(.+)%)") - P = {x=Sx, y=Sy} - listPoints = buildList(chaine, mode) - else - -- point is a number - P, listPoints = buildListExt(chaine,tonumber(point)) - end - output = TeXaddOnePointTikZ(listPoints,P,step,bbox,color,colorBack,colorNew,colorCircle,colorBbox) - output = "\\noindent\\begin{tikzpicture}[x="..scale..",y="..scale.."]".. output .. "\\end{tikzpicture}" - tex.sprint(output) -end - -function TeXOnePointTikZBWinc(chaine,point,beginning, ending,step,scale,mode,bbox,color,colorBack,colorNew,colorCircle,colorBbox) - if(mode=="int") then - Sx,Sy=string.match(point,"%((.+),(.+)%)") - P = {x=Sx, y=Sy} - listPoints = buildList(chaine, mode) - else - -- point is a number - P, listPoints = buildListExt(chaine,tonumber(point)) - end - output = TeXaddOnePointTikZ(listPoints,P,step,bbox,color,colorBack,colorNew,colorCircle,colorBbox) - output = "\\noindent\\begin{tikzpicture}[x="..scale..",y="..scale.."]".. beginning..output ..ending.. "\\end{tikzpicture}" - tex.sprint(output) -end - -function TeXOnePointMPBW(chaine,point,step,scale,mode,bbox) - if(mode=="int") then - Sx,Sy=string.match(point,"%((.+),(.+)%)") - P = {x=Sx, y=Sy} - listPoints = buildList(chaine, mode) - else - -- point is a number - P, listPoints = buildListExt(chaine,tonumber(point)) - end - output = TeXaddOnePointMPBW(listPoints,P,step,bbox) - output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale..";".. output .. "endfig;\\end{mplibcode}" - tex.sprint(output) -end - -function TeXOnePointMPBWinc(chaine,point,beginning,ending,step,scale,mode,bbox) - if(mode=="int") then - Sx,Sy=string.match(point,"%((.+),(.+)%)") - P = {x=Sx, y=Sy} - listPoints = buildList(chaine, mode) - else - -- point is a number - P, listPoints = buildListExt(chaine,tonumber(point)) - end - output = TeXaddOnePointMPBW(listPoints,P,step,bbox) - output = "\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}" - tex.sprint(output) -end - - function split(pString, pPattern) local Table = {} -- NOTE: use {n = 0} in Lua-5.0 local fpat = "(.-)" .. pPattern @@ -1129,8 +503,8 @@ function readGmsh(file) io.input(file) -- open the file text=io.read("*all") local lines = split(text,"\n+") -- all the lines - listPoints={} - triangulation ={} + local listPoints={} + local triangulation ={} boolNodes = false Jnodes = 0 boolElements = false @@ -1169,74 +543,3 @@ function readGmsh(file) end return listPoints, triangulation end - -function drawGmshMP(file,points,scale) - listPoints,triangulation = readGmsh(file) - output = traceMeshMP(listPoints,triangulation,points) - output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}" - tex.sprint(output) -end - -function drawGmshMPinc(file,beginning,ending,points,scale) - listPoints,triangulation = readGmsh(file) - output = traceMeshMP(listPoints,triangulation,points) - output = "\\leavevmode\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}" - tex.sprint(output) -end - - - --- -function drawGmshTikZ(file,points,scale,color) - listPoints,triangulation = readGmsh(file) - output = traceMeshTikZ(listPoints, triangulation,points,color,colorBbox) - output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}" - tex.sprint(output) -end - --- -function drawGmshTikZinc(file,beginning, ending,points,scale,color) - listPoints,triangulation = readGmsh(file) - output = traceMeshTikZ(listPoints, triangulation,points,color,colorBbox) - output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" ..beginning.. output..ending .."\\end{tikzpicture}" - tex.sprint(output) -end - - --- buildVoronoi with MP -function gmshVoronoiMP(file,points,scale,tri,styleD,styleV) - listPoints,triangulation = readGmsh(file) - listVoronoi = buildVoronoi(listPoints, triangulation) - output = traceVoronoiMP(listPoints,triangulation,listVoronoi,points,tri,styleD,styleV) - output = "\\leavevmode\\begin{mplibcode}beginfig(0);u:="..scale.. ";" .. output .."endfig;\\end{mplibcode}" - tex.sprint(output) -end - - --- buildVoronoi with TikZ -function gmshVoronoiTikZ(file,points,scale,tri,color,colorVoronoi,styleD,styleV) - listPoints,triangulation = readGmsh(file) - listVoronoi = buildVoronoi(listPoints, triangulation) - output = traceVoronoiTikZ(listPoints,triangulation,listVoronoi,points,tri,color,colorBbox,colorVoronoi,styleD,styleV) - output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" .. output .."\\end{tikzpicture}" tex.sprint(output) -end - - --- buildVoronoi with MP -function gmshVoronoiMPinc(file,beginning, ending,points,scale,tri,styleD,styleV) - listPoints,triangulation = readGmsh(file) - listVoronoi = buildVoronoi(listPoints, triangulation) - output = traceVoronoiMP(listPoints,triangulation,listVoronoi,points,tri,styleD,styleV) - output = "\\leavevmode\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}" - tex.sprint(output) -end - - --- buildVoronoi with TikZ -function gmshVoronoiTikZinc(file,beginning, ending,points,scale,tri,color,colorVoronoi,styleD,styleV) - listPoints,triangulation = readGmsh(file) - listVoronoi = buildVoronoi(listPoints, triangulation) - output = traceVoronoiTikZ(listPoints,triangulation,listVoronoi,points,tri,color,colorBbox,colorVoronoi,styleD,styleV) - output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" ..beginning.. output..ending .."\\end{tikzpicture}" - tex.sprint(output) -end