Skip to content

Commit aca0a5a

Browse files
TMHSDigitalclaude
andcommitted
feat(showcase): add sawhorse-plank piece
Two pine sawhorses carrying an 8 ft 2x10 fir plank. - Beam tops sit at 0.72 m on 0.95 m beams. - Legs splay 15 degrees to the side and 10 degrees to the end, are let 9.2 mm into the beam sides, and are nailed. The end aprons are nailed. - A western handsaw leans against the near horse: a 600 mm blade tapering from 130 to 60 mm, 60 raked teeth, a closed beech D-handle with an open hand-hole, and three brass split nuts. Two-support span witnesses, measured off the finished mesh: - the plank bears 0.5 mm into both saddles (a span over two supports, not a single seat); - all eight feet are on the floor; - every leg is housed in its beam, and the splay angles are equal and symmetric; - the saw's 12.6 degree lean is solved so the toe stands on the floor and the handle bears on the beam arris (closest approach 0.16 mm). Budgets: 3248 tris, five materials (pine 364, fir 26, steel 1190, beech 340, brass 120 faces), envelope 2.440 x 1.146 x 0.7575 m. Hygiene is all zero. The split nuts get distinct heights so no faces are coplanar across shells. Falsifiers: 24 runs on Blender 4.5.11 LTS, 5.1.2 and 5.2.1 LTS (.scratch binaries). The default run exits 0, and each falsifier exits its own code. Every value, LOD counts included, is identical across the three versions. --skip-decimate 9 --stray-vert 15 --lift-z 16 --loose-leg 17 leg pulled out of its housing --short-leg 18 one foot off the floor --uneven-splay 19 one leg off the declared splay --low-horse 20 plank off one saddle Review pass: - The first render's saw read as a flat disc on the plank. It was rebuilt as a toothed, tapered blade with a D-handle and brass nuts, and re-posed leaning on the horse. - The striped "corduroy" grain was replaced by noise-warped, low-contrast grain along each part's long axis, with per-part tone. Gates: - Framing: pass (fill x 0.722 / y 0.789). - Asset quality: pass (5 materials, edge90 0.178). - Contact sheet: stage 0.239, warmth -0.062 and saturation 0.190 are in the calibration span. Luma is 0.271 against 0.237-0.243; accepted, because shipped heroes run brighter (lattice-deform 0.284). - Asset sheet: pass. The piece is not the least-designed object in the reference lineup. gallery.json gives the piece the display title "Sawhorses and Plank". scripts/asset_sheet.py gains the SawhorseLow SELECT row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent cf97b1c commit aca0a5a

92 files changed

Lines changed: 5062 additions & 161 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.cursor-plugin/plugin.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@
217217
"showcase/sundial",
218218
"showcase/mine-cart",
219219
"showcase/garden-gate",
220-
"showcase/ships-wheel"
220+
"showcase/ships-wheel",
221+
"showcase/sawhorse-plank"
221222
]
222223
}

‎AGENTS.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ classifies it as a `cursor-plugin`. This is content the AI loads when the user
2121
asks Blender questions or works on Blender add-ons in Cursor or Claude Code.
2222

2323
The content base is 16 skills, 9 rules, 3 templates, 27 snippets, 64
24-
examples, and 75 showcase pieces (counts are CI-enforced against README.md)
24+
examples, and 76 showcase pieces (counts are CI-enforced against README.md)
2525
and the manifest). The full inventory tables and per-item purposes live in
2626
`CLAUDE.md`. Example anatomy and authoring rules: copy `examples/bmesh-gear/`;
2727
showcase conventions: `showcase/README.md`. The render look is specified

‎CLAUDE.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ rules/<rule-name>.mdc - Anti-pattern rules, 9 total
2222
templates/<template-name>/ - Starter projects, 3 total
2323
snippets/<snippet-name>.py - Standalone code patterns, 27 total
2424
examples/<name>/ - Runnable smoke-gated examples, 64 total (+ gallery.json)
25-
showcase/<name>/ - Budget-conformance props, 75 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
25+
showcase/<name>/ - Budget-conformance props, 76 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
2626
scripts/build_gallery.py - Regenerates docs/gallery/ from examples/gallery.json + showcase/gallery.json
2727
scripts/site/ - Vendored landing-page build (Jinja2); tokens.css is the shared palette
2828
tests/check_site_links.py - Internal link/anchor/alt gate over the built site (docs/)

‎README.md‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
</p>
1919

2020
<p align="center">
21-
<strong>16 skills</strong> &nbsp;&bull;&nbsp; <strong>9 rules</strong> &nbsp;&bull;&nbsp; <strong>3 templates</strong> &nbsp;&bull;&nbsp; <strong>27 snippets</strong> &nbsp;&bull;&nbsp; <strong>64 examples</strong> &nbsp;&bull;&nbsp; <strong>75 showcase pieces</strong>
21+
<strong>16 skills</strong> &nbsp;&bull;&nbsp; <strong>9 rules</strong> &nbsp;&bull;&nbsp; <strong>3 templates</strong> &nbsp;&bull;&nbsp; <strong>27 snippets</strong> &nbsp;&bull;&nbsp; <strong>64 examples</strong> &nbsp;&bull;&nbsp; <strong>76 showcase pieces</strong>
2222
</p>
2323

2424
<p align="center">
@@ -37,7 +37,7 @@
3737

3838
## Overview
3939

40-
This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 64 examples, and 75 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
40+
This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 64 examples, and 76 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
4141

4242
The content is consumed by AI coding agents reading these files directly from a checkout — **there is no MCP server in this repository, and none is required**. Cursor applies `rules/*.mdc` automatically wherever their scope globs match and takes skills by name in chat; Claude Code reads `skills/` and `rules/` from the project workspace, or from this repo kept as a referenced checkout. Any agent that can read files in a workspace can use it the same way. There is no build step for the content — edit the Markdown and Python files directly.
4343

@@ -106,7 +106,7 @@ per-script exit-code model, are in
106106
Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](showcase/README.md).
107107

108108
<details>
109-
<summary><strong>75 showcase pieces</strong> — click to expand the preview grid</summary>
109+
<summary><strong>76 showcase pieces</strong> — click to expand the preview grid</summary>
110110

111111
<p align="center">
112112
<a href="showcase/shipping-crate/"><img src="showcase/shipping-crate/preview.webp" width="24%" alt="Shipping crate: a wooden slat crate stencilled PORT ROYAL and NO 17, with iron corner brackets and an end handle, on a dark studio floor, warm wedge on the back wall" /></a>
@@ -184,6 +184,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
184184
<a href="showcase/mine-cart/"><img src="showcase/mine-cart/preview.webp" width="24%" alt="Mine cart: a rust-streaked riveted red steel tub on oak sills, four flanged iron wheels resting on two polished rails spiked to sleepers in grey ballast, on a dark studio floor" /></a>
185185
<a href="showcase/garden-gate/"><img src="showcase/garden-gate/preview.webp" width="24%" alt="Garden gate: a bow-topped gate of weathered oak boards standing ajar on black strap hinges between square posts on sandstone flags, on a dark studio floor" /></a>
186186
<a href="showcase/ships-wheel/"><img src="showcase/ships-wheel/preview.webp" width="24%" alt="Ship's wheel: a varnished teak eight-spoke wheel with turned handles, a brass nave and a brass rim inlay, on a panelled teak pedestal with a stepped plinth, on a dark studio floor" /></a>
187+
<a href="showcase/sawhorse-plank/"><img src="showcase/sawhorse-plank/preview.webp" width="24%" alt="Sawhorse plank: two pine sawhorses with splayed legs and nailed end aprons carrying a long fir plank, a toothed handsaw with a beech handle leaning on the near horse, on a dark studio floor" /></a>
187188
</p>
188189

189190
[`shipping-crate`](showcase/shipping-crate/) — procedural crate through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets. Falsifier `--skip-decimate` exits 9.
@@ -324,6 +325,8 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
324325

325326
[`ships-wheel`](showcase/ships-wheel/) — procedural eight-spoke ship's wheel on its pedestal, turned teak spokes and handles on a brass nave, through the same pipeline; nave concentric with the rim, every spoke and handle seated in the rim, spokes 45° apart. Falsifiers `--skip-decimate` exits 9, `--stray-vert` exits 15, `--lift-z` exits 16, `--offset-hub` exits 17, `--short-spoke` exits 18, `--skew-spoke` exits 19.
326327

328+
[`sawhorse-plank`](showcase/sawhorse-plank/) — procedural pair of pine sawhorses carrying a fir plank with a handsaw leaning on one, legs splayed both ways and housed into each beam, nailed end aprons, through the same pipeline; the plank bears on both saddles and every foot stands on the floor. Falsifiers `--skip-decimate` exits 9, `--stray-vert` exits 15, `--lift-z` exits 16, `--loose-leg` exits 17, `--short-leg` exits 18, `--uneven-splay` exits 19, `--low-horse` exits 20.
329+
327330
</details>
328331

329332
## Examples

‎ROADMAP.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
147147
- ~~Hinged garden gate as a game-prop showcase piece~~ **SHIPPED** as `showcase/garden-gate/` — ledged-and-braced oak gate on hook-and-band hinges: knuckle axis on pin axis (0.000 mm, 0.600 mm clearance), knuckle seat on the hook, both pins plumb on one axis, swing circle clearing the latch post by 14.87 mm; `--skip-decimate` exits 9 on the LOD1 ratio band, `--offset-knuckle` 17, `--lift-gate` 18, `--tilt-pintle` 19, `--tight-post` 20
148148
- Mooring bollard with a coiled rope as a game-prop showcase piece — rope turns laid as stacked helices around the barrel: each turn resting on the one below (not interpenetrating, not floating), measured turn-to-turn off the mesh
149149
- ~~Ship's wheel as a game-prop showcase piece~~ **SHIPPED** as `showcase/ships-wheel/` — eight turned teak spokes and handles on a brass nave, laminated rim with a brass inlay, iron shaft in a bolted brass collar on a panelled pedestal; nave concentric with the rim and the shaft in its bore (`--offset-hub` exits 17), every spoke and handle seated 1–6 mm into the rim (`--short-spoke` exits 18), spokes 45° ± 0.05° apart with handles on their axes (`--skew-spoke` exits 19); `--skip-decimate` exits 9 on the LOD1 ratio band
150-
- Sawhorse pair carrying a plank as a game-prop showcase piece — splayed legs and a board spanning two supports: the plank's underside rests on both saddles within a band (a two-support span, not a single seat) and every foot lands on the floor
150+
- ~~Sawhorse pair carrying a plank as a game-prop showcase piece~~ **SHIPPED** as `showcase/sawhorse-plank/` — two pine sawhorses (legs splayed 15° side / 10° end, housed into each beam, nailed end aprons) under an 8 ft fir plank with a handsaw leaning on one; the plank bears on both saddles within −1.0..−0.2 mm (`--low-horse` exits 20), every foot on the floor (`--short-leg` exits 18), every leg's splay (`--uneven-splay` exits 19) and housing (`--loose-leg` exits 17); `--skip-decimate` exits 9 on the LOD1 ratio band
151151
- Tiered stone fountain as a game-prop showcase piece — concentric basins on a column: every basin coaxial, each upper basin's lip overhanging the one below by a stated band so the overflow line lands inside the next basin
152152
- Cannon on a wooden field carriage as a game-prop showcase piece — trunnions seated in the carriage's cap-square cradles: trunnion axis coaxial with both cradles and wheels resting on the ground at the axle's computed height
153153
- Spinning wheel as a game-prop showcase piece — a drive band running from the wheel groove to the whorl: band path tangent to both pulleys within a band (a belt-on-pulley contact), treadle linkage reaching the crank

‎docs/gallery/anvil/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ <h1>Anvil</h1>
4545
<p>A procedural blacksmith anvil on a timber stump through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
4646
</header>
4747
<main id="main">
48-
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 75 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
48+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 76 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
4949
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A London-pattern forged anvil with a thick face block, tapered horn and broad flared foot on a hooped oak stand, a cross-peen hammer on the floor beside it.">
5050
<img src="../assets/anvil-hero.webp" alt="A London-pattern forged anvil with a thick face block, tapered horn and broad flared foot on a hooped oak stand, a cross-peen hammer on the floor beside it." width="1280" height="720" fetchpriority="high" />
5151
</button>
@@ -3571,7 +3571,7 @@ <h3><a class="stretch" href="../wooden-barrel/">Wooden Barrel</a></h3>
35713571
</article>
35723572
</div>
35733573
</section>
3574-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 75 showcase pieces</span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
3574+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 76 showcase pieces</span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
35753575
</main>
35763576
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
35773577
<div class="lightbox-bar"><button class="lightbox-close" id="lightboxNative" type="button" aria-pressed="false">Actual size</button><button class="lightbox-close" id="lightboxClose" type="button" autofocus>Close</button></div>

‎docs/gallery/apothecary-shelf/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ <h1>Apothecary Shelf</h1>
4545
<p>A procedural apothecary shelf — housed shelves, gallery rails, a drawer bank and an arched crest, stocked with fifteen lathed bottles, flasks and glazed jars, each corked or lidded and labelled — carried through UVs, bake, LOD, convex collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
4646
</header>
4747
<main id="main">
48-
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 75 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
48+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 76 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
4949
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A stained wooden shelf with an arched crest, gallery rails and three brass-knobbed drawers, stocked with labelled glass bottles and flasks and cream and blue glazed jars.">
5050
<img src="../assets/apothecary-shelf-hero.webp" alt="A stained wooden shelf with an arched crest, gallery rails and three brass-knobbed drawers, stocked with labelled glass bottles and flasks and cream and blue glazed jars." width="1280" height="720" fetchpriority="high" />
5151
</button>
@@ -3420,7 +3420,7 @@ <h3><a class="stretch" href="../wooden-barrel/">Wooden Barrel</a></h3>
34203420
</article>
34213421
</div>
34223422
</section>
3423-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 75 showcase pieces</span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
3423+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 76 showcase pieces</span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
34243424
</main>
34253425
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
34263426
<div class="lightbox-bar"><button class="lightbox-close" id="lightboxNative" type="button" aria-pressed="false">Actual size</button><button class="lightbox-close" id="lightboxClose" type="button" autofocus>Close</button></div>

‎docs/gallery/archery-target/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ <h1>Archery Target</h1>
4545
<p>A procedural archery range target on a turf patch — a 1.10 m compressed-straw boss coiled from rope courses that show on its back and round its edge, bound with doubled jute twine drawn tight over the crests; an 80 cm ten-zone World Archery face in aged inks with ring lines, an X ring and a printed X, held by four target pins; a timber easel leaning it back 12° on toe skids with knee braces, a ledge with a stop lip on a bolted rail and gussets, a numbered butt board, a strap hinge pinned to a rear leg in a steel ferrule and foot, and a splay chain between eye bolts; five carbon arrows in the face with cresting, nocks and three vanes, one glancing into the straw edge, one snapped with its fletched half on the grass, and a leather quiver of arrows lying among grass tufts — through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
4646
</header>
4747
<main id="main">
48-
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 75 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
48+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 76 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
4949
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A straw archery boss with a gold, red, blue, black and white face and five arrows, leaning on a timber easel numbered 12, a quiver on the grass patch below.">
5050
<img src="../assets/archery-target-hero.webp" alt="A straw archery boss with a gold, red, blue, black and white face and five arrows, leaning on a timber easel numbered 12, a quiver on the grass patch below." width="1280" height="720" fetchpriority="high" />
5151
</button>
@@ -5266,7 +5266,7 @@ <h3><a class="stretch" href="../wooden-barrel/">Wooden Barrel</a></h3>
52665266
</article>
52675267
</div>
52685268
</section>
5269-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 75 showcase pieces</span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
5269+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 76 showcase pieces</span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
52705270
</main>
52715271
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
52725272
<div class="lightbox-bar"><button class="lightbox-close" id="lightboxNative" type="button" aria-pressed="false">Actual size</button><button class="lightbox-close" id="lightboxClose" type="button" autofocus>Close</button></div>
52.1 KB
Loading
8.61 KB
Loading

0 commit comments

Comments
 (0)