mystl/rules.py
2020-07-21 19:01:04 -05:00

74 lines
1.9 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}
\tmkdir -p $(dir {target})
\topenscad -o {target}.tmp.stl -d {target}.d $(SCAD_FLAGS) {flags} {src}
\tadmesh -b {target} {target}.tmp.stl
\trm -f {target}.tmp.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}
\tmkdir -p $(dir {target})
\topenscad -o {target} -d {target}.d $(SCAD_FLAGS) {flags} {src}
default:: {target}
"""
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
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}))