Report: clock (grandfather clock)
Files: dogfood/clock.aix (97 lines), dogfood/clock_reimport.aix, outputs in out/clock/ (sheet, slices, steps, poses, anim_tick.png, model.glb 5.8 MB, model.stl 9.2 MB, model.obj, report.md) and out/clock_beauty/beauty.png (1024, pose show). 15 renders of the model, about 10 checks.
1. The model
A grandfather clock 1.94 × 5.85 × 1.16 units, front on +z, walnut throughout, 41 named steps:
- Plinth:
base_mould+plinth+plinth_cap, three rounded boxes stacked and overlapped. - Waist:
waist_solid(1.3 × 3 × 0.8) →shell(0.08)→- door_cutthrough the front wall only; adoor_frame(an extruded rect-minus-rect, "z");glass= a 0.045 pane sunk into the front wall,material("glass", transmit=0.95). The inner walls get adecal(box…, "tan")so the interior is not black in the beauty render. - Pendulum:
rod(r 0.035, reaching 0.05 into the waist's top wall) +bob(cylinder r 0.27 turned to face +z) +bob_boss, wrapped injoint(..., "pendulum", 0, 3.86, 0). - Hood:
hood_solid - hood_recess(a 0.06 recess in the front face), two turnedcolumns(mirror),cornice_1,cornice_2,pediment, brassfinial. - Dial:
dial_platebrass cylinder r 0.5 facing +z, sunk 0.045 into the recess floor;chapter_region(ring 0.31..0.49) decal in ivory,tick_region(60 boxes viaring) andnumeral_region(twelve Roman numerals, eachtext(...)extruded "z", moved to radius 0.355 androtate(z=-30*i), so they read radially) decals in black.bezeltorus,hubcylinder bridging both hands. - Hands:
hour_handandminute_handare extruded polygons pointing to 12 at rest, each ajointat the dial's centre (hourat z 0.47,minuteat z 0.565, separated by a 0.04 air gap and joined through the hub). - Maker's plate: brass
plate1.0 × 0.2 under the dial,maker_text"FABLE" in serif raised 0.05. - Poses:
rest,three(hour −90°),ten_ten(hour +55°, minute −60°),swing(+8°),swing_back(−8°),show(10:10 with the pendulum at −8°); animationtickswing→swing_back→swing over 2 s.
Verified in pictures: out/clock_three/front.png (hour on III, minute on XII), out/clock_dial/sheet.png (10:10 at cell 0.006, numerals legible, ticks and chapter ring right), out/clock_maker/sheet.png (FABLE clean, close-up watertight yes at 0.005), out/clock/slices.png (hollow waist, rod and bob inside, the pane in the front wall), the 1024 beauty (dial and plate read, pendulum visible through the glass).
Final check: no warnings. Sizes: base 1.9 × 0.18 × 1.12 … hood 1.94 × 2 × 1.12 (y 3.85..5.85), dial 1 × 1 × 0.08 at z 0.38..0.46, hands 0.09 × 0.41 × 0.06 and 0.08 × 0.55 × 0.05, clock 1.94 × 5.85 × 1.12, grid 256 → cell 0.0229.
2. Print readiness and re-import
From out/clock/report.md (rest pose, the exported one):
| Row | Value |
|---|---|
| Watertight | yes |
| Pieces | 1 |
| Stands | yes, centre of mass 0.555 inside the footprint (18-sided hull) |
| Overhangs | 4.5% of the surface faces down more than 45° |
| Cavities | volume 2.079 at (0, 2.405, 0.005) — the glazed waist, sealed by design (not drained) |
| Volume | 5.512, triangles 184 596 |
Re-import (dogfood/clock_reimport.aix, import("../out/clock/model.glb", resolution=160), 17.4 s to sample in check and again in render):
| source | re-import | |
|---|---|---|
| Size | 1.94 × 5.85 × 1.16 | 1.941 × 5.85 × 1.16 (z −0.56..0.6 in check, padded) |
| Volume | 5.512 | 5.491 |
| Pieces | 1 | 1 |
| Cavities | 2.079 | 2.082 |
| Stands | yes | yes (0.552 inside) |
| Overhangs | 4.5% | 3.7% |
| Watertight | yes | no: 21 edges, "mostly 4 at (−0.031, 4.689, 0.532)" — all at the hub and hands, which are 0.05–0.06 thick and the import's cell is 0.037 |
What survived: every wooden part, bezel, dial disc, the raised FABLE, the hands (as bumps), the finial. Lost, as expected from positions-and-triangles-only: all materials, so the numerals, ticks and chapter ring (decals) and the glass are gone; the door reads as a recessed solid panel.
3. Friction
- Line 23 (now 28),
glass—warning: 'glass' (line 23) is only 0.03 units thin, 1.128 of the 0.027 cell: it may be missing or broken in the mesh. Thicken it or raise the grid (set grid 488).Expected a 0.03 pane to be fine at 1.1 cells; the threshold is 1.2. Thickened to 0.045. Clear message, one iteration. - Line 79 (now 84),
maker_text—warning: 'maker_text' (line 79) has gaps (a letter's counters, the space between letters, a slot) only 0.005 wide, 0.175 of the 0.027 cell: they close up in the mesh. Use a larger size, a lighter weight or more spacing=, or raise the grid (set grid 512).The message does not say which gap. I probed:spacing=0.07left it at 0.022 (so a counter, not spacing);weight=0.026cleared it but gavehas a wall, tube (at its thin end, if tapered) or stroke only 0.026 thick, 0.978 of the 0.027 cell; size 0.13/weight 0.03 gave1.128 of the cell. Five checks and three name/size changes ("FABLE & CO" → "FABLE", 0.07 → 0.14) to land on size 0.14, weight 0.032, which passes. The plate had to grow to 1.0 × 0.2 to hold it. - Glass is opaque on every diagnostic picture.
sheet.png,poses.pngandanim_tick.png(8 frames) show a grey pane and nothing behind it; the animation strip shows a clock in which nothing moves. Onlyslices.png(Z = 0 cut) and the beauty render show the pendulum. Expected the strip to show the swing. I verified the swing from the beauty close-up instead (--focus glass --beauty --pose show), two extra renders. - Wrong steps blamed for non-watertight edges.
out/clock_dial/report.md(--focus bezel --pose ten_ten):Watertight | no: 4 edges ... 1 at (0.386, 4.946, 0.537) in 'dial_plate', 'hood_solid'. z 0.537 is neither the dial (front 0.46) nor the hood (front 0.475); it is the minute hand's pointed tip. Later,--pose showat grid 220:1 at (-0.195, 4.06, 0.49) in 'hood_solid', 'hood_recess'; 1 at (-0.196, 4.054, 0.504) in 'plate', 'maker_text'— both are the A's counter inmaker_text. The blame sent me looking at the hood recess first. Fixed by blunting the hand tips (polygon tips 0.032 wide, line 77–78) and grid 256. - A pointed polygon tip is not warned about.
checkwarns for tubes, strokes and shells under a cell but said nothing about the hands' 0-width tips (polygon(..., 0,0.47, ...), original line 73), which produced the edges in item 4. Expected the same "thin end" warning tubes get. - Two hands at rest both pointing to 12 — line 77–78. First version had hour 0.462..0.507 and minute 0.513..0.557 with the dial front at 0.46:
1 at (-0.064, 4.723, 0.513) in 'dial_plate', 'hour_hand'. The guide's "overlap by a cell" advice cannot apply to two thin plates that must stay separate parts of a rig; I had to leave a 0.04 gap and bridge it with a hub. Worth a line in the rigs section. - Interior lighting. First beauty (
out/clock_qb, 320 px): the door was a black rectangle. Three beauty renders (quick, 640,--focus glass) to arrive atset light_azimuth -20,set light_elevation 30,set ambient 1.8, atandecal on the inner walls (line 26) and swinging theshowpose to −8° so the bob sits on the lit side. The bob is still in shadow in the final picture. Nothing in the docs says how deep a key light at elevation 55 reaches into an opening. --quickis of little use on this model:warning: quick pass: 20 steps are thinner than this pass's 0.091 cell ... (plinth_cap, waist_shell, door_frame, glass, rod, bob, ...). Half the model is thinner than the quick cell, so every judgement needed the full render (12 s at grid 220, ~20 s at 256). Fine, but the quick loop the skill promises did not apply.poses.pngthumbnails cannot show a 0.05-thick hand (out/clock/poses.png): six identical-looking clocks. Documented ("meshed coarsely"), but a--focusper pose was the only way to judge the times: two more renders.- Re-import watertight "no" (item in section 2):
21 edges ... in 'back'with no way to tell from the report that they are at the hands rather than a real export defect; I inferred it from the coordinates (y 4.69, z 0.53). - Minor:
report.mdlists the material I namedbluedby its variable name (Materials | walnut, tan, brass, steel, glass*, ivory, black, blued), which is nice, but the*onglassis unexplained.
4. What worked well
check is fast and exact, and the size table caught every placement before a render. Decals for the chapter ring, sixty ticks and twelve numerals cost nothing in geometry, survive into the atlas, and read at 1024. joint/pose was trivial: hands and pendulum right first time, and --focus bezel --pose three proved the 3:00 pose at cell 0.006 with its own watertight row. shell + one cutter gave the glazed waist; the slices proved it. The beauty render's glass refracts and shows the pendulum, and the report's stands/pieces/cavities rows answered print-readiness directly.
5. Three changes that would have helped most
- Name the gap in the lettering warning: "counter of 'A' 0.022 wide" versus "gap between F and A", and offer a concrete pair that clears it ("at weight 0.032 size ≥ 0.14"). Item 2 cost five checks.
- Draw
transmitmaterials see-through (or as an outline) on the sheet,poses.pngand the animation strips, or at least say on the strip that a step is behind glass. Item 3 made the animation strip and pose sheet useless for the one moving part. - Blame the step whose surface actually holds a non-watertight edge, and warn in
checkabout a polygon or profile tip thinner than a cell the way tubes and strokes are warned. Items 4 and 5 were the only misdirections in the whole loop.