- 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
+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
+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 .)