feather-quad-box/_lib/rules.py
2020-08-08 19:49:13 -05:00

80 lines
2.2 KiB
Python
Executable file

#!/usr/bin/python3
import os
import pathlib
import shlex
import sys
import yaml
resources = pathlib.Path("resources")
MAKE_SCAD_STL = """
-include {target}.d
{target}: {src}
\t$(ECHO) $target
\t$(Q)mkdir -p $(dir {target})
\t$(Q)openscad -o {target}.tmp.stl -d {target}.d $(SCAD_FLAGS) {flags} {src}
\t$(Q)admesh -b {target} {target}.tmp.stl
\t$(Q)rm -f {target}.tmp.stl
default: {target}
"""
MAKE_SCAD_SVG = """
-include {target}.d
{target}: {src}
\t$(ECHO) $target
\t$(Q)mkdir -p $(dir {target})
\t$(Q)openscad -o {target} -d {target}.d $(SCAD_FLAGS) {flags} {src}
default: {target}
"""
MAKE_SCAD_PNG = """
-include {target}.d
{target}: {src}
\t$(ECHO) $target
\t$(Q)mkdir -p $(dir {target})
\t$(Q)openscad --imgsize=1800,1800 -o {target}.tmp.png -d {target}.d $(SCAD_FLAGS) {flags} {src}
\t$(Q)convert -geometry 25% {target}.tmp.png {target}
\t$(Q)rm -f {target}.tmp.png
default: {target}
"""
MAKE_STL_PNG = """
-include {target}.d
{target}: {src}
\t$(ECHO) $target
\t$(Q)mkdir -p $(dir {target})
\t$(Q)openscad --imgsize=1800,1800 -o {target}.tmp.png -d {target}.d $(SCAD_FLAGS) {flags} -Dinput=\\\"{src}\\\" _lib/readfile.scad
\t$(Q)convert -geometry 25% {target}.tmp.png {target}
\t$(Q)rm -f {target}.tmp.png
default: {target}
"""
with open(sys.argv[1]) as f:
doc = yaml.safe_load(f)
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', '')
if stl.startswith('gen/'):
print(MAKE_SCAD_STL.format(
**{'target': resources / stl, 'src': resources / scad, '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(MAKE_STL_PNG.format(
**{'target': resources / png, 'src': resources / stl, 'flags': flags}))