3d-printing/tapo-ceiling-mount/generate-print-stls.sh

59 lines
2.4 KiB
Shell
Executable file

#!/usr/bin/env bash
# Export every printable part to stl/, each turned to its print orientation and
# placed on the bed (z = 0). Run from anywhere.
set -euo pipefail
DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$DIR"
mkdir -p stl
if ! command -v openscad &>/dev/null; then
echo "Error: openscad not found in PATH" >&2
exit 1
fi
# name | source file | print-orientation transform applied to the module call
render() {
local name="$1" src="$2" body="$3" wrap
wrap="$(mktemp "${TMPDIR:-/tmp}/_bp_XXXX.scad")"
{
echo "parameters_only = false;"
echo "include <$DIR/tapo_ceiling_mount_parameters.scad>;"
echo "use <$DIR/$src>;"
echo "$body"
} > "$wrap"
echo "Rendering stl/$name.stl"
openscad --render -o "stl/$name.stl" "$wrap"
rm -f "$wrap"
}
# A part flipped rim-down. OpenSCAD snaps vertices to a 2^-20 mm grid, so the
# flipped rim can land a hair above or below z = 0. Sink the part by 0.01 um
# and clip it at z = 0, so the rim sits exactly on the bed.
flipped() {
echo "intersection() { translate([0,0,-1e-5]) translate([0,0, $1]) mirror([0,0,1]) $2 translate([-500,-500,0]) cube(1000); }"
}
render inner_clamps tapo_ceiling_inner_clamp.scad \
"$(flipped clamp_boss_height "tapo_inner_clamp_pair();")"
render inner_clamp tapo_ceiling_inner_clamp.scad \
"$(flipped clamp_boss_height "tapo_inner_clamp();")"
render outer_plate tapo_ceiling_outer_plate.scad \
"translate([0,0, plate_thickness + max(centering_lip_height, screw_boss_h)]) mirror([0,0,1]) tapo_outer_plate();"
render camera_connector tapo_ceiling_camera_connector.scad \
"$(flipped conn_top_z "camera_connector();")"
render camera_adapter_blank tapo_ceiling_camera_adapter_blank.scad \
"$(flipped adapter_rim_z "tapo_camera_adapter_blank();")"
render camera_adapter_tapo_original_base tapo_ceiling_camera_adapter_tapo_original_base.scad \
"$(flipped adapter_rim_z "tapo_camera_adapter_original_base();")"
render camera_adapter_tapo tapo_ceiling_camera_adapter_tapo.scad \
"$(flipped adapter_rim_z "tapo_camera_adapter_tapo();")"
render nut_fit_test tapo_ceiling_nut_fit_test.scad \
"tapo_nut_fit_test_print();"
render tapo_base_test_set tapo_ceiling_tapo_base.scad \
"for (i = [0 : len(tapo_fit_gaps) - 1]) translate([i * 62, 0, 0]) tapo_base(tapo_fit_gaps[i], i + 1);"
render tapo_base tapo_ceiling_tapo_base.scad \
"tapo_base(tapo_lug_gap);"
echo "Done. Print 1 plate, 1 linked clamp pair, 1 connector, 1 adapter."