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]]
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