yaml-ify
This commit is contained in:
parent
ee802e0675
commit
f9071f5209
9 changed files with 68 additions and 43 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,2 +1,3 @@
|
|||
.jekyll-cache
|
||||
_site/
|
||||
resources/gen
|
||||
|
|
|
|||
4
Makefile
4
Makefile
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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']
|
||||
|
|
|
|||
|
|
@ -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.
|
|
@ -1 +1,5 @@
|
|||
cube();
|
||||
size = 10;
|
||||
color = "blue";
|
||||
|
||||
color(color)
|
||||
cube(size);
|
||||
|
|
|
|||
17
rules.mk
17
rules.mk
|
|
@ -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
|
||||
|
||||
|
|
|
|||
73
rules.py
73
rules.py
|
|
@ -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}))
|
||||
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(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}")
|
||||
print(MAKE_STL_PNG.format(
|
||||
**{'target': resources / png, 'src': resources / stl, 'flags': flags}))
|
||||
|
|
|
|||
Loading…
Reference in a new issue