mirror of https://github.com/CGAL/cgal
convert from lsp to ipe format (ipe lua script)
Example use: cat ~/Dropbox/geom/mat/input1.plg | ~/code/geom/Segment_Delaunay_graph_Linf_2/developer_scripts/plg2lsp.py | ipescript lsp2ipe vecmask1test.ipe 16 16 0.0625 Signed-off-by: Panagiotis Cheilaris <philaris@cs.ntua.gr>
This commit is contained in:
parent
d69a143abd
commit
6f3adf3e31
|
|
@ -0,0 +1,140 @@
|
|||
-- lsp2ipe.lua
|
||||
-- convert segments in lsp format from stdin
|
||||
-- to an ipe file that is given in the command line;
|
||||
|
||||
function printusage()
|
||||
io.stderr:write("Usage: ipescript lsp2ipe <file_to_save>")
|
||||
io.stderr:write(" [[offsetx offsety] scale]\n")
|
||||
end
|
||||
|
||||
-- print('#argv = ', #argv)
|
||||
if #argv < 1 then
|
||||
printusage()
|
||||
return
|
||||
end
|
||||
fname = argv[1]
|
||||
|
||||
offsetx = 0
|
||||
offsety = 0
|
||||
scale = 1
|
||||
|
||||
if #argv > 1 then
|
||||
if #argv == 3 or #argv == 4 then
|
||||
offsetx = tonumber(argv[2])
|
||||
offsety = tonumber(argv[3])
|
||||
if #argv == 4 then
|
||||
scale = tonumber(argv[4])
|
||||
end
|
||||
else
|
||||
printusage()
|
||||
end
|
||||
end
|
||||
|
||||
if offsetx == nil or offsety == nil or scale == nil then
|
||||
io.stderr:write("Error: bad number input in command line\n")
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
-- find basic.isy ipe style sheet
|
||||
|
||||
-- list of possible locations
|
||||
basiclist = {
|
||||
"/opt/local/share/ipe/7.1.4/styles/basic.isy",
|
||||
"/usr/share/ipe/7.1.2/styles/basic.isy",
|
||||
"/usr/share/ipe/7.1.1/styles/basic.isy",
|
||||
"/opt/local/share/ipe/7.1.2/styles/basic.isy"
|
||||
}
|
||||
|
||||
function file_exists(name)
|
||||
local f = io.open(name,"r")
|
||||
if f ~= nil then io.close(f) return true else return false end
|
||||
end
|
||||
|
||||
basicfilename = nil
|
||||
|
||||
for i, filename in ipairs(basiclist) do
|
||||
--print("trying ", filename)
|
||||
if file_exists(filename) then
|
||||
basicfilename = filename
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if basicfilename == nil then
|
||||
io.stderr:write("Error: missing basic.isy\n")
|
||||
return
|
||||
end
|
||||
|
||||
doc = ipe.Document()
|
||||
sheet = ipe.Sheet(basicfilename)
|
||||
sheets = ipe.Sheets()
|
||||
sheets:insert(1, sheet)
|
||||
doc:replaceSheets(sheets)
|
||||
|
||||
|
||||
attr = {}
|
||||
for l in io.lines() do
|
||||
print(l)
|
||||
t = {}
|
||||
for w in l:gmatch("[^\t ]+") do
|
||||
table.insert(t, w)
|
||||
end
|
||||
print("#t=", #t)
|
||||
if #t ~= 0 then
|
||||
print(t[1])
|
||||
if t[1] == 'p' then
|
||||
if #t ~= 3 then
|
||||
io.stderr:write("Error: bad point line, t=", #t, "\n")
|
||||
return
|
||||
end
|
||||
--print("point found")
|
||||
px = tonumber(t[2])
|
||||
py = tonumber(t[3])
|
||||
if px == nil or py == nil then
|
||||
io.stderr:write("Error: bad number input\n")
|
||||
return
|
||||
end
|
||||
fpx = offsetx + (px * scale)
|
||||
fpy = offsety + (py * scale)
|
||||
v = ipe.Vector(fpx, fpy)
|
||||
obj = ipe.Reference(attr, "mark/disk(sx)", v)
|
||||
elseif t[1] == 's' then
|
||||
if #t ~= 5 then
|
||||
io.stderr:write("Error: bad segment line, t=", #t, "\n")
|
||||
return
|
||||
end
|
||||
px = tonumber(t[2])
|
||||
py = tonumber(t[3])
|
||||
qx = tonumber(t[4])
|
||||
qy = tonumber(t[5])
|
||||
if px == nil or py == nil or qx == nil or qy == nil then
|
||||
io.stderr:write("Error: bad number input\n")
|
||||
return
|
||||
end
|
||||
fpx = offsetx + (px * scale)
|
||||
fpy = offsety + (py * scale)
|
||||
fqx = offsetx + (qx * scale)
|
||||
fqy = offsety + (qy * scale)
|
||||
|
||||
seg = {}
|
||||
seg["type"] = "segment"
|
||||
seg[1] = ipe.Vector(fpx, fpy)
|
||||
seg[2] = ipe.Vector(fqx, fqy)
|
||||
subpath = {}
|
||||
subpath["type"] = "curve"
|
||||
subpath["closed"] = false
|
||||
subpath[1] = seg
|
||||
shape = { subpath }
|
||||
obj = ipe.Path(attr, shape, false)
|
||||
else
|
||||
-- here we have neither 'p' nor 's'
|
||||
io.stderr:write("Error: bad line type (neither p nor s):\n")
|
||||
io.stderr:write(l)
|
||||
return
|
||||
end
|
||||
doc[1]:insert(nil, obj, nil, "alpha")
|
||||
end
|
||||
end
|
||||
|
||||
doc:save(fname, xml, nil)
|
||||
Loading…
Reference in New Issue