From 1092d5cc8e88b3fe88c9ac7678fdfd9c809935e8 Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Mon, 9 Aug 2010 13:26:13 +0200 Subject: optically pleasing drawing. refined positioning in background --- mplife.cld | 81 ++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 28 deletions(-) (limited to 'mplife.cld') diff --git a/mplife.cld b/mplife.cld index 0de02d0..eac9bbb 100644 --- a/mplife.cld +++ b/mplife.cld @@ -25,19 +25,24 @@ gol.setup.current = gol.setup.current or {} do local c = gol.setup.current - c.file = c.file or "examples/puffertrain.gol" + --c.file = c.file or "examples/10x10_glider.gol" + c.file = c.file or "examples/gliders.gol" + --c.file = c.file or "examples/ggun.gol" c.rule = gol.parse_rule("B3/S23") -- default Conway c.init = gol.parse_file(c.file) c.last = c.init -- for successive mode - c.pensize = .03 - c.fade = true + c.pensize = .1 + c.color = { r = .6, g = .6, b = .8 } + c.fade = false c.firstframe = 1 c.frames = 5 c.preamble = [[ \setupcolors[state=start] \setupbackgrounds[state=start] \setuppapersize[S6][S6] + +\setuppagenumbering[state=stop,location=] ]] --c.before_frame = [[ --\defineoverlay @@ -52,17 +57,16 @@ do --]] c.before_frame = [[ \startuseMPgraphic{back} -pickup pensquare scaled ]] .. c.pensize .. [[pt; - +pickup pencircle xyscaled (.25*]] .. c.pensize .. [[pt, ]] .. c.pensize .. [[pt) rotated 45; ]] c.after_frame = [[ -currentpicture := currentpicture xysized (PaperHeight*.6,PaperWidth*.6) ; +currentpicture := currentpicture xysized (\the\paperwidth, \the\paperheight); \stopuseMPgraphic \defineoverlay[back][\useMPgraphic{back}] \setupbackgrounds [page] [background=back] ]] - + gol.setup.current = c end @@ -142,7 +146,7 @@ function mplife.p_square (from, filled, fade_level) else fade_level = .05 * fade_level + .5 end - tmp = tmp .. f.space .. "withcolor" .. f.space .. fade_level .. "white" + tmp = tmp .. f.space .. "scaled 200 " .. "withcolor" .. f.space .. fade_level .. "white" end tmp = tmp .. f.scolon @@ -153,46 +157,65 @@ function mplife.p_square (from, filled, fade_level) end function mplife.draw_grid(grid) - print (grid) local h = gol.helpers - local pat = "" --"StartPage; " + local pat = "" if type(grid) == "string" then grid = h.split(grid, "\n") -- may leave an empty string as last item if grid[#grid] == "" then grid[#grid] = nil end end - local n = 1 - --for n, row in ipairs(grid) do - while grid[n] ~= nil do - local row = grid[n] + local max = {} + max.x, max.y = grid[1]:len(), #grid + + local n = 0 + local pos -- kept in broader scope for picture border estimation + while grid[#grid-n] ~= nil do + + local row = grid[#grid-n] + pos = 1 - local pos = 1 repeat + local opacity local cell = row:sub(pos, pos) - local p = { x = pos, y = 1 - n, unit = "" } + local p = { x = pos-1, y = n, unit = "" } local fill, fade_level - --if cell ~= "0" then fill = true end fill = true if fill and mplife.fade then fade_level = tonumber(cell) end - - - --if fade_level ~= 0 then -- dont draw dead cells (workaround for rounded pens) - --pat = pat .. mplife.p_square( p, fill, fade_level ) - --end - pat = pat .. mplife.p_square( p, fill, fade_level ) - --.. "\nlabel.bot(btex $" .. pos .. "$ etex, (" .. - --pos .. "cm," .. 1 - n .. "cm));" + + if not fade_level then -- no number --> cell once dead (marked "D") + fade_level = 9.3 + end + + if fade_level ~= 0 then -- don't draw dead cells + if fade_level == 1 then + opacity = .33 + pat = pat .. string.format("%s unitsquare shifted (%s,%s) withcolor transparent(1,%s,\\MPcolor{lifesquare});\n", + "draw", p.x, p.y, opacity*2) + else + opacity = (1/3) - (fade_level / 30) + end + pat = pat .. string.format("%s unitsquare scaled .9 shifted (%s+.05,%s+.05) withcolor transparent(1,%s,\\MPcolor{lifesquare});\n", + "filldraw", p.x, p.y, opacity) + end pos = pos + 1 - --print ("pos: " .. pos .. "," .. n .. " -->" .. row .. "<-- " .. type(row)) until pos > row:len() pat = pat .. "\n" n = n + 1 end + pat = pat .. string.format([[ +path border; +border = (0,0)--(%s,0)--(%s,%s)--(0,%s)--cycle; +fill border withcolor transparent (1,.75, white) ; +setbounds currentpicture to boundingbox border ; +]], max.x, max.x, max.y, max.y) + +--fill border withcolor transparent (1,.3,1white) ; + --print("Pic\n", pat) mplife.runcode(pat) return true end @@ -271,6 +294,8 @@ end function mplife.main () local c = gol.setup.current + + context.definecolor({ "lifesquare" }, c.color) context(c.preamble) -- only once context.starttext() @@ -280,9 +305,9 @@ function mplife.main () --mplife.life_frames() - for i=1,55,1 do + for i=1,10,1 do mplife.successive() - context(Test) + --context("\\input knuth") context.page() end context.stoptext() -- cgit v1.2.3