This commit is contained in:
Jeff Epler 2020-07-21 19:01:04 -05:00
parent ee802e0675
commit f9071f5209
9 changed files with 68 additions and 43 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
.jekyll-cache
_site/
resources/gen

View file

@ -3,8 +3,8 @@ default::
clean:
rm -rf resources/gen
rules.mk: files.gen rules.py
./rules.py files.gen > rules.mk
rules.mk: _data/assets.yml rules.py
./rules.py $< > $@
-include rules.mk

View file

@ -5,6 +5,6 @@
- name: Big Featureless Cube
scad: main.scad
flags: -Dsize=100
stl: gen/main.stl
images: ['gen/main.png']
flags: -Dsize=100 -Dcolor="red"
stl: gen/big.stl
images: ['gen/big.png']

View file

@ -1,2 +1,2 @@
CONVEXITY=4
CONVEXITY=4;
import(input, convexity=CONVEXITY);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

View file

@ -1 +1,5 @@
cube();
size = 10;
color = "blue";
color(color)
cube(size);

View file

@ -1,4 +1,3 @@
# resources/gen/main has no recognized extension
-include resources/gen/main.stl.d
resources/gen/main.stl: resources/main.scad
@ -15,3 +14,19 @@ resources/gen/main.png: resources/main.scad
openscad -o resources/gen/main.png -d resources/gen/main.png.d $(SCAD_FLAGS) resources/main.scad
default:: resources/gen/main.png
-include resources/gen/big.stl.d
resources/gen/big.stl: resources/main.scad
mkdir -p $(dir resources/gen/big.stl)
openscad -o resources/gen/big.stl.tmp.stl -d resources/gen/big.stl.d $(SCAD_FLAGS) -Dsize=100 '-Dcolor="red"' resources/main.scad
admesh -b resources/gen/big.stl resources/gen/big.stl.tmp.stl
rm -f resources/gen/big.stl.tmp.stl
default:: resources/gen/big.stl
-include resources/gen/big.png.d
resources/gen/big.png: resources/main.scad
mkdir -p $(dir resources/gen/big.png)
openscad -o resources/gen/big.png -d resources/gen/big.png.d $(SCAD_FLAGS) -Dsize=100 '-Dcolor="red"' resources/main.scad
default:: resources/gen/big.png

View file

@ -1,7 +1,12 @@
#!/usr/bin/python3
import os
import pathlib
import shlex
import sys
import yaml
resources = pathlib.Path("resources")
MAKE_SCAD_STL = """
-include {target}.d
@ -13,6 +18,16 @@ MAKE_SCAD_STL = """
default:: {target}
"""
MAKE_SCAD_SVG = """
-include {target}.d
{target}: {src}
\tmkdir -p $(dir {target})
\topenscad -o {target}.tmp.svg -d {target}.d $(SCAD_FLAGS) {flags} {src}
\tadmesh -b {target} {target}.tmp.svg
\trm -f {target}.tmp.svg
default:: {target}
"""
MAKE_SCAD_PNG = """
-include {target}.d
{target}: {src}
@ -25,45 +40,35 @@ MAKE_STL_PNG = """
-include {target}.d
{target}: {src}
\tmkdir -p $(dir {target})
\topenscad -o {target} -d {target}.d $(SCAD_FLAGS) {flags} -Dinput=\"{src}\" readfile.scad
\topenscad -o {target} -d {target}.d $(SCAD_FLAGS) {flags} -Dinput=\\\"{src}\\\" readfile.scad
default:: {target}
"""
with open(sys.argv[1]) as f:
for row in f:
parts = row.split(":", 2)
if len(parts) == 1:
target = parts
src = f"{target}.scad"
if not os.exists(src):
src = f"{target}.stl"
flags = ""
if len(parts) == 2:
target, src = parts
flags = ""
else:
target, src, flags = parts
doc = yaml.safe_load(f)
target = target.strip()
src = src.strip()
flags = flags.strip()
for row in doc:
flags = row.get('flags', '')
if isinstance(flags, str):
flags = flags.split()
flags = " ".join(shlex.quote(f) for f in flags)
scad = row.get('scad', '')
stl = row.get('stl', '')
svg = row.get('svg', '')
src = f"resources/{src}"
target = f"resources/gen/{target}"
if stl.startswith('gen/'):
print(MAKE_SCAD_STL.format(
**{'target': resources / stl, 'src': resources / scad, 'flags': flags}))
if src.lower().endswith(".scad"):
if target.lower().endswith(".stl"):
print(MAKE_SCAD_STL.format(**{'target': target, 'src': src, 'flags': flags}))
elif target.lower().endswith(".png"):
print(MAKE_SCAD_PNG.format(**{'target': target, 'src': src, 'flags': flags}))
else:
print(f"# {target} has no recognized extension")
print(MAKE_SCAD_STL.format(**{'target': f"{target}.stl", 'src': src, 'flags': flags}))
print(MAKE_SCAD_PNG.format(**{'target': f"{target}.png", 'src': src, 'flags': flags}))
elif src.lower().endswith(".stl"):
if target.lower().endswith(".png"):
print(MAKE_STL_PNG.format(**{'target': target, 'src': src, 'flags': flags}))
else:
print(MAKE_STL_PNG.format(**{'target': f"{target}.png", 'src': src, 'flags': flags}))
else:
raise RuntimeError(f"Don't know how to handle {src} -> {target}")
if svg.startswith('gen/'):
print(MAKE_SCAD_SVG.format(
**{'target': resources / svg, 'src': resources / scad, 'flags': flags}))
for png in row.get('images', []):
if png.startswith('gen/'):
if scad:
print(MAKE_SCAD_PNG.format(
**{'target': resources / png, 'src': resources / scad, 'flags': flags}))
else:
print(MAKE_STL_PNG.format(
**{'target': resources / png, 'src': resources / stl, 'flags': flags}))