Add additional settings for openscad
This commit is contained in:
parent
5711d7d1f7
commit
00922c6fd6
3 changed files with 40 additions and 14 deletions
14
README.md
14
README.md
|
@ -1,3 +1,15 @@
|
||||||
# multimaze
|
# multimaze
|
||||||
|
|
||||||
A collection of maze generation programs
|
> A collection of maze generation programs
|
||||||
|
|
||||||
|
## `main.lua`
|
||||||
|
Ported back in 2015 (and sine adapted) from an algorithm of my own design that originally implemented in Python.
|
||||||
|
|
||||||
|
Now has a 3d mode!
|
||||||
|
|
||||||
|
To render a 3D maze as a .STL file, do this:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lua main.lua maze3d_openscad -w 91 -h 91 -d 71 -f 91x91x71.scad
|
||||||
|
openscad -o 91x91x71.stl 91x91x71.scad
|
||||||
|
```
|
||||||
|
|
30
main.lua
30
main.lua
|
@ -12,7 +12,10 @@ local settings = {
|
||||||
height = 11,
|
height = 11,
|
||||||
depth = 7,
|
depth = 7,
|
||||||
|
|
||||||
filename = "maze.scad"
|
filename = "maze.scad",
|
||||||
|
|
||||||
|
scale = 5,
|
||||||
|
inverted = true
|
||||||
}
|
}
|
||||||
|
|
||||||
for i=1,#arg do
|
for i=1,#arg do
|
||||||
|
@ -33,6 +36,11 @@ for i=1,#arg do
|
||||||
elseif string.match(arg[i], "--filename") or string.match(arg[i], "-f") then
|
elseif string.match(arg[i], "--filename") or string.match(arg[i], "-f") then
|
||||||
i = i + 1
|
i = i + 1
|
||||||
settings.filename = arg[i]
|
settings.filename = arg[i]
|
||||||
|
elseif string.match(arg[i], "--scale") then
|
||||||
|
i = i + 1
|
||||||
|
settings.scale = tonumber(arg[i])
|
||||||
|
elseif string.match(arg[i], "--no-invert") then
|
||||||
|
settings.inverted = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -55,11 +63,13 @@ Modes:
|
||||||
maze3d_openscad Generates a 3d maze as an openscad file
|
maze3d_openscad Generates a 3d maze as an openscad file
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
-w --width Sets the width of the maze
|
-w --width {int} Sets the width of the maze
|
||||||
-h --height Sets the height of the maze
|
-h --height {int} Sets the height of the maze
|
||||||
-d --depth Sets the depth of the maze (only applicable to 3d mazes)
|
-d --depth {int} Sets the depth of the maze [3d only]
|
||||||
-s --seed Sets the seed
|
-s --seed {string} Sets the seed
|
||||||
-f --filename Sets the output filename
|
-f --filename {string} Sets the output filename
|
||||||
|
--no-invert Don't invert the output [openscad output only]
|
||||||
|
--scale {int} Sets the scale of the output [openscad output only]
|
||||||
]])
|
]])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -94,10 +104,16 @@ local function maze3d_openscad()
|
||||||
settings.depth
|
settings.depth
|
||||||
)
|
)
|
||||||
|
|
||||||
|
local openscad_settings = {
|
||||||
|
scale = settings.scale,
|
||||||
|
inverted = settings.inverted
|
||||||
|
}
|
||||||
|
|
||||||
openscad.write3d(
|
openscad.write3d(
|
||||||
world,
|
world,
|
||||||
settings.width, settings.height, settings.depth,
|
settings.width, settings.height, settings.depth,
|
||||||
settings.filename
|
settings.filename,
|
||||||
|
openscad_settings
|
||||||
)
|
)
|
||||||
print("Maze written to "..settings.filename)
|
print("Maze written to "..settings.filename)
|
||||||
end
|
end
|
||||||
|
|
10
openscad.lua
10
openscad.lua
|
@ -1,8 +1,6 @@
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
function M.write3d(maze, width, height, depth, filename)
|
function M.write3d(maze, width, height, depth, filename, settings)
|
||||||
local scale = 5
|
|
||||||
local inverted = true
|
|
||||||
local out = io.open(filename, "w")
|
local out = io.open(filename, "w")
|
||||||
out:write("// Generated by multimaze (lua)\n")
|
out:write("// Generated by multimaze (lua)\n")
|
||||||
out:write("// Hit the Render button (F6) to make the preview look better\n")
|
out:write("// Hit the Render button (F6) to make the preview look better\n")
|
||||||
|
@ -13,9 +11,9 @@ function M.write3d(maze, width, height, depth, filename)
|
||||||
for z = 0, depth - 1, 1 do
|
for z = 0, depth - 1, 1 do
|
||||||
for y = 0, height - 1, 1 do
|
for y = 0, height - 1, 1 do
|
||||||
for x = 0, width - 1, 1 do
|
for x = 0, width - 1, 1 do
|
||||||
if (maze[z][y][x] == "#" and not inverted) or
|
if (maze[z][y][x] == "#" and not settings.inverted) or
|
||||||
(maze[z][y][x] == " " and inverted) then
|
(maze[z][y][x] == " " and settings.inverted) then
|
||||||
out:write("\ttranslate(["..x*scale..", "..y*scale..", "..z*scale.."]) cube(size = "..scale..");\n")
|
out:write("\ttranslate(["..x*settings.scale..", "..y*settings.scale..", "..z*settings.scale.."]) cube(size = "..settings.scale..");\n")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue