Verify the enclosure STLs and renders against the model; document how to regenerate them
Re-exported all ten STLs and the eight poster pose parts with OpenSCAD 2021.01: same triangles as the committed files. Recovered the camera for renders/assembly.png and exploded.png (pixel-identical apart from a few anti-aliased pixels) and wrote the recipes into enclosure/README.md. The poster script now finds DejaVu fonts on more distros (or via POSTER_FONT_DIR) and the poster README's pose_info command works on 2021.01. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AFN8nRRCiDiMN7ChBpHJhs
This commit is contained in:
@@ -11,10 +11,11 @@ cd enclosure
|
||||
for n in base servo_pan plate body yoke servo_tilt cradle camera; do
|
||||
openscad -o poster/pose/$n.stl -D "PART=\"pose_$n\"" -D '$fn=48' hermes_robot.scad
|
||||
done
|
||||
openscad -o /dev/null -D 'PART="pose_info"' hermes_robot.scad # prints WIN / LED coordinates
|
||||
openscad -o /tmp/pose_info.stl -D 'PART="pose_info"' hermes_robot.scad # prints WIN / LED coordinates
|
||||
python3 poster/render_poster.py
|
||||
```
|
||||
|
||||
If the window or LED positions change, copy the printed `WIN` and `LED` values into
|
||||
`render_poster.py`. `face.png` is a frame captured from `docs/face-prototype.html` (flat shape,
|
||||
`render_poster.py`. The script needs the DejaVu fonts (Debian `fonts-dejavu`, Arch `ttf-dejavu`); elsewhere, set
|
||||
`POSTER_FONT_DIR` to a folder holding them. `face.png` is a frame captured from `docs/face-prototype.html` (flat shape,
|
||||
P7, speaking). Requires `numpy`, `trimesh` and `Pillow`.
|
||||
|
||||
@@ -32,10 +32,26 @@ AMBER = np.array([1.00, 0.66, 0.24]) # phosphor / sodium light
|
||||
WARM = np.array([0.95, 0.86, 0.70]) # edge highlight
|
||||
TEAL = np.array([0.30, 0.66, 0.70]) # contours, grid
|
||||
SCREEN = np.array([0.66, 0.82, 1.00]) # P7 phosphor: blue-white
|
||||
FONT_B = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"
|
||||
FONT_L = "/usr/share/fonts/truetype/dejavu/DejaVuSans-ExtraLight.ttf"
|
||||
FONT_C = "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed.ttf"
|
||||
FONT_M = "/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf"
|
||||
|
||||
|
||||
def find_font(name):
|
||||
"""A DejaVu font by file name. Looks in $POSTER_FONT_DIR first, then where Debian/Ubuntu, Arch and
|
||||
Fedora keep it, so the poster renders on any of them; fails with a clear message otherwise."""
|
||||
import os
|
||||
dirs = [os.environ.get("POSTER_FONT_DIR", ""), "/usr/share/fonts/truetype/dejavu", "/usr/share/fonts/TTF",
|
||||
"/usr/share/fonts/dejavu", "/usr/share/fonts/dejavu-sans-fonts", "/usr/share/fonts/dejavu-sans-mono-fonts",
|
||||
os.path.expanduser("~/.local/share/fonts"), os.path.expanduser("~/.fonts")]
|
||||
for d in dirs:
|
||||
if d and os.path.isfile(os.path.join(d, name)):
|
||||
return os.path.join(d, name)
|
||||
sys.exit(f"render_poster.py needs the DejaVu font {name}. Install DejaVu (Debian: fonts-dejavu, "
|
||||
f"Arch: ttf-dejavu) or put dejavu-fonts-ttf-2.37/ttf/ somewhere and set POSTER_FONT_DIR to it.")
|
||||
|
||||
|
||||
FONT_B = find_font("DejaVuSans-Bold.ttf")
|
||||
FONT_L = find_font("DejaVuSans-ExtraLight.ttf")
|
||||
FONT_C = find_font("DejaVuSansCondensed.ttf")
|
||||
FONT_M = find_font("DejaVuSansMono.ttf")
|
||||
|
||||
# ------------------------------------------------------------------ camera
|
||||
target = np.array([0.0, 0.0, 112.0])
|
||||
|
||||
Reference in New Issue
Block a user