59 lines
2.4 KiB
Shell
Executable file
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."
|