Mise à jour archive v0.2 et liens index.md
[delaunay.git] / luamesh.lua
index af3da31..bc961b7 100644 (file)
@@ -420,12 +420,10 @@ function traceVoronoiTikZ(listPoints, triangulation,listVoronoi, points, tri,col
       j=1
       for i=1,#listPoints do
          if(listPoints[i].type == "bbox") then
-            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
+            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
@@ -471,6 +469,28 @@ function buildVoronoiTikZBW(chaine,mode,points,bbox,scale,tri,color,colorBbox,co
 end
 
 
+-- buildVoronoi with MP
+function buildVoronoiMPBWinc(chaine,beginning, ending,mode,points,bbox,scale,tri)
+   listPoints = buildList(chaine, mode)
+   triangulation = BowyerWatson(listPoints,bbox)
+   listVoronoi = buildVoronoi(listPoints, triangulation)
+   output = traceVoronoiMP(listPoints,triangulation,listVoronoi,points,tri)
+   output = "\\leavevmode\\begin{mplibcode}u:="..scale..";"..beginning .. output .. ending .. "\\end{mplibcode}"
+   tex.sprint(output)
+end
+
+
+-- buildVoronoi with TikZ
+function buildVoronoiTikZBWinc(chaine,beginning, ending,mode,points,bbox,scale,tri,color,colorBbox,colorVoronoi)
+   listPoints = buildList(chaine, mode)
+   triangulation = BowyerWatson(listPoints,bbox)
+   listVoronoi = buildVoronoi(listPoints, triangulation)
+   output = traceVoronoiTikZ(listPoints,triangulation,listVoronoi,points,tri,color,colorBbox,colorVoronoi)
+   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)
@@ -510,7 +530,6 @@ function traceMeshMP(listPoints, triangulation,points)
    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]]
@@ -1065,3 +1084,139 @@ function TeXOnePointMPBWinc(chaine,point,beginning,ending,step,scale,mode,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
+   local last_end = 1
+   local s, e, cap = pString:find(fpat, 1)
+   while s do
+      if s ~= 1 or cap ~= "" then
+         table.insert(Table,cap)
+      end
+      last_end = e+1
+      s, e, cap = pString:find(fpat, last_end)
+   end
+   if last_end <= #pString then
+      cap = pString:sub(last_end)
+      table.insert(Table, cap)
+   end
+   return Table
+end
+
+function readGmsh(file)
+   io.input(file) -- open the file
+   text=io.read("*all")
+   local lines = split(text,"\n+") -- all the lines
+   listPoints={}
+   triangulation ={}
+   boolNodes = false
+   Jnodes = 0
+   boolElements = false
+   Jelements = 0
+   J=0
+   for i=1,#lines-J do
+      if(lines[i+J] == "$EndNodes") then
+         boolNodes = false
+         -- go to the next line
+      end
+      if(boolNodes) then -- we are in the Nodes environment
+         xy=split(lines[i+J]," +")
+         table.insert(listPoints,{x=tonumber(xy[2]),y=tonumber(xy[3])})
+      end
+      if(lines[i+J] == "$Nodes") then
+         boolNodes = true
+         -- go to the next line
+         J=J+1
+      end
+      if(lines[i+J] == "$EndElements") then
+         boolElements = false
+         -- go to the next line
+      end
+      if(boolElements) then -- we are in the Nodes environment
+         xy=split(lines[i+J]," +")
+         if(tonumber(xy[2]) == 2) then -- if the element is a triangle
+            nbrTags = xy[3]+1
+            table.insert(triangulation,{tonumber(xy[2+nbrTags+1]),tonumber(xy[2+nbrTags+2]),tonumber(xy[2+nbrTags+3])})
+         end
+      end
+      if(lines[i+J] == "$Elements") then
+         boolElements = true
+         -- go to the next line
+         J=J+1
+      end
+   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)
+   listPoints,triangulation = readGmsh(file)
+   listVoronoi = buildVoronoi(listPoints, triangulation)
+   output = traceVoronoiMP(listPoints,triangulation,listVoronoi,points,tri)
+   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)
+   listPoints,triangulation = readGmsh(file)
+   listVoronoi = buildVoronoi(listPoints, triangulation)
+   output = traceVoronoiTikZ(listPoints,triangulation,listVoronoi,points,tri,color,colorBbox,colorVoronoi)
+   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)
+   listPoints,triangulation = readGmsh(file)
+   listVoronoi = buildVoronoi(listPoints, triangulation)
+   output = traceVoronoiMP(listPoints,triangulation,listVoronoi,points,tri)
+   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)
+   listPoints,triangulation = readGmsh(file)
+   listVoronoi = buildVoronoi(listPoints, triangulation)
+   output = traceVoronoiTikZ(listPoints,triangulation,listVoronoi,points,tri,color,colorBbox,colorVoronoi)
+   output = "\\noindent\\begin{tikzpicture}[x=" .. scale .. ",y=" .. scale .."]" ..beginning.. output..ending .."\\end{tikzpicture}"
+   tex.sprint(output)
+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.