Lecture Gmsh côté lua, voir test.tex
[delaunay.git] / luamesh.lua
index 179024d..fbcb645 100644 (file)
@@ -532,7 +532,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]]
@@ -1087,3 +1086,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 buildGmshVoronoiMP(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 buildGmshVoronoiTikZ(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 buildGmshVoronoiMPinc(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 buildGmshVoronoiTikZinc(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.