temperature-tower

3d printable temperature tower
git clone https://git.woozle.org/neale/temperature-tower.git

commit
2f6156c
parent
78ae418
author
Neale Pickett
date
2023-11-26 15:48:09 -0700 MST
Move to make!
4 files changed,  +63, -76
A Makefile
+16, -0
 1@@ -0,0 +1,16 @@
 2+PARAMSETS != cat params.json | jq -r '.parameterSets | keys[] | select(length > 0)'
 3+OUTPUTS = $(PARAMSETS:%=%.3mf)
 4+
 5+all: $(OUTPUTS)
 6+
 7+clean:
 8+	rm -f $(OUTPUTS) *.bare.3mf *.log
 9+
10+targets:
11+	@for i in $(PARAMSETS); do echo $$i.3mf; done
12+
13+%.bare.3mf %.log: temp-tower.scad params.json
14+	openscad -o $*.bare.3mf -P $* -p params.json temp-tower.scad 2>$*.log
15+
16+%.3mf: %.bare.3mf %.log postprocess.sh
17+	./postprocess.sh $@ $*.bare.3mf $*.log
M README.md
+24, -7
 1@@ -4,14 +4,31 @@ A Tiny Temperature Tower
 2 This is a tiny temperature tower.
 3 I made it because I suspected my printer's hotend thermistor was reporting too cold.
 4 
 5-`build.sh` generates `.3mf` files 
 6-with extra code to make PrusaSlicer change temperatures automatically.
 7+(I think I was right.)
 8 
 9-Defining A New Model
10-======================
11 
12-You can add a new set of model parameters to `params.json`.
13+Building
14+----------
15+
16+This uses make(1).
17+If you've never used make(1) before,
18+here's a quick introduction:
19+
20+    make all      # Build everything
21+    make clean    # Remove build files
22+    make targets  # List everything you can build
23+
24+
25+Building A New Model
26+---------------------------
27+
28+You can add a new set of model parameters to [params.json](params.json).
29 
30 Let's say you named your new parameters `my-new-parameters`.
31-`build.sh my-new-parameters` will generate `my-new-parameters.3mf`,
32-with PrusaSlicer temperature changes and ponies and everything.
33+
34+    make my-new-parameters.3mf  # Build only your model
35+
36+The resulting 3mf file will have 
37+temperature changes for PrusaSlicer
38+and ponies
39+and everything!
D build.sh
+0, -69
 1@@ -1,69 +0,0 @@
 2-#! /bin/sh
 3-
 4-set -e
 5-
 6-# paramsets contains the location of the OpenSCAD parameter sets.
 7-# see https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Customizer#Saving_Parameters_value_in_JSON_file
 8-paramsets=params.json
 9-
10-# run executes a program after printing the commandline to stdout.
11-run () {
12-    echo "=== $*"
13-    "$@"
14-}
15-
16-# render turns OpenSCAD echo into 3mf temperature changes.
17-# 
18-# It does this by kludging together a PrusaSlicer-specific Metadata file.
19-render () {
20-    basename=$1; shift
21-    logfile=$basename.log
22-    run openscad -o $basename "$@" temp-tower.scad 2>&1 | tee $logfile
23-
24-    rm -rf Metadata
25-    mkdir -p Metadata
26-    cat $logfile | while IFS=# read _ _ custom type path text _; do
27-        [ "$custom#$type" = "CUSTOM#3mf" ] || continue
28-        echo $text >> $path
29-    done
30-
31-    run zip $basename $custom
32-    
33-    rm $custom $logfile
34-    rmdir Metadata
35-}
36-
37-# paramsets lists all defined parameter sets, one per line.
38-paramsets () {
39-    cat $paramsets | jq -r '.parameterSets | keys[] | select(length > 0)'
40-}
41-
42-case "$1" in
43-    -h|-help|--help)
44-        cat <<EOD
45-Usage: $0 [-paramsets] [PARAMSET ...]
46-
47-Generates .3mf files with temperature changes
48-for each given parameter set.
49-
50-Parameter sets are specified in $paramsets.
51-
52--paramsets   List all defined parameter sets, and exit.
53-EOD
54-        exit 1
55-        ;; 
56-    -p*|--p*)
57-        paramsets
58-        exit
59-        ;;
60-    "")
61-        paramsets | while read paramset; do
62-            render $paramset.3mf -P $paramset -p $paramsets
63-        done
64-        ;;
65-    *)
66-        for paramset in "$@"; do
67-            render $paramset.3mf -P $paramset -p $paramsets
68-        done
69-        ;;
70-esac
A postprocess.sh
+23, -0
 1@@ -0,0 +1,23 @@
 2+#! /bin/sh
 3+
 4+## Postprocess a 3mf file, adding in anything in the log
 5+
 6+set -e
 7+
 8+outfile=$(realpath $1)
 9+infile=$(realpath $2)
10+logfile=$(realpath $3)
11+
12+tmpdir=$(mktemp -d --tmpdir 3mf.XXXXXXXXXX)
13+trap "rm -rf $tmpdir" EXIT
14+
15+(cd $tmpdir && unzip $infile)
16+
17+cat $logfile | while IFS=# read _ _ custom type path text _; do
18+    [ "$custom#$type" = "CUSTOM#3mf" ] || continue
19+    basepath=$(dirname $path)
20+    mkdir -p $tmpdir/$basepath
21+    echo $text >> $tmpdir/$path
22+done
23+
24+(cd $tmpdir && zip -r $outfile .)