1
0
mirror of https://github.com/nophead/Mendel90.git synced 2025-01-16 20:38:15 +01:00
Mendel90/stls.py
Chris Palmer 805b4ea427 Added vero_bed config option for huxley.
Moved screw sizes to vitamins.scad so it can be used stand alone.
Added capped option to hole_support.
Fixed bug in rounded_cylinder().
2016-01-06 00:49:11 +00:00

104 lines
3.1 KiB
Python
Executable File

#!/usr/bin/env python
import os
import openscad
import shutil
import sys
import c14n_stl
from set_machine import *
from time import *
from bom import source_dir
def bom_to_stls(machine, assembly = None):
#
# Make a list of all the stls in the BOM
#
stl_files = []
if assembly:
bom = "accessories/%s.txt" % assembly
else:
bom = "bom.txt"
for line in open(machine + "/bom/" + bom, "rt").readlines():
words = line.split()
if words:
last_word = words[-1]
if len(last_word) > 4 and last_word[-4:] == ".stl":
stl_files.append(last_word)
return stl_files
def stls(machine, parts = None):
#
# Make the target directory
#
target_dir = machine + "/stls"
if os.path.isdir(target_dir):
if not parts:
shutil.rmtree(target_dir) #if making the BOM clear the directory first
sleep(0.1)
os.makedirs(target_dir)
else:
os.makedirs(target_dir)
#
# Set the target machine
#
set_machine(machine)
#
# Decide which files to make
#
if parts:
targets = list(parts) #copy the list so we dont modify the list passed in
else:
targets = bom_to_stls(machine)
#
# Find all the scad files
#
used = []
for filename in os.listdir(source_dir):
if filename[-5:] == ".scad":
#
# find any modules ending in _stl
#
for line in open(source_dir + "/" + filename, "r").readlines():
words = line.split()
if(len(words) and words[0] == "module"):
module = words[1].split('(')[0]
stl = module.replace("_stl", ".stl")
if stl in targets:
#
# make a file to use the module
#
stl_maker_name = source_dir + "/stl.scad"
f = open(stl_maker_name, "w")
f.write("use <%s>\n" % filename)
f.write("%s();\n" % module);
f.close()
#
# Run openscad on the created file
#
stl_name = target_dir + "/" + module[:-4] + ".stl"
openscad.run("-D$bom=1","-o", stl_name, stl_maker_name)
c14n_stl.canonicalise(stl_name)
targets.remove(stl)
#
# Add the files on the BOM to the used list for plates.py
#
for line in open("openscad.log"):
if line[:7] == 'ECHO: "' and line[-6:] == '.stl"\n':
used.append(line[7:-2])
#
# List the ones we didn't find
#
for module in targets:
print("Could not find", module)
return used
if __name__ == '__main__':
if len(sys.argv) > 1:
stls(sys.argv[1], sys.argv[2:])
else:
print("usage: stls dibond|mendel|sturdy|your_machine [part.stl ...]")
sys.exit(1)