Skip to content

Commit c3d778d

Browse files
TMHSDigitalclaude
andcommitted
feat(showcase): add garden-gate piece
A ledged-and-braced oak gate, 900 mm wide with a bowed top, hung on two hook-and-band hinges (400 x 38 mm straps on 12 mm pins) between square posts. It stands on sandstone flags and has a barrel bolt, a keeper staple and a ring pull. Pin-in-knuckle contact witness, measured off the finished mesh: - each knuckle is coaxial with its pin (0.000 mm off, 0.3 mm tolerance) with 0.600 mm running clearance, and sits -0.50 mm on its hook; - both pins are plumb on one shared hinge axis (0.000 mm off); - the swing circle clears the latch post and keeper by 14.87 mm. Budgets: 3320 tris, three materials (timber 370, iron 1534, ground 156 faces). The collider is four hulls, 344 tris. LOD ratios are 0.50 and 0.22. The grounded envelope is 1.56 x 0.56 x 1.245 m. Falsifiers. Each one exits its own code on Blender 4.5.11 LTS, 5.1.2 and 5.2.1 LTS (.scratch binaries, 24 runs including the default). The default run exits 0 on all three. Only the LOD tri counts differ between versions, which is why LOD is checked as a ratio band. --skip-decimate 9 LOD1 ratio 1.0 --stray-vert 15 one loose vert --lift-z 16 zmin 50 mm --offset-knuckle 17 knuckle 1.5 mm off its pin --lift-gate 18 knuckle 2.5 mm above the hook --tilt-pintle 19 pin top 3.96 mm off plumb --tight-post 20 0.89 mm swing clearance Gates: - Framing and asset quality pass on the hero render. - Contact sheet: luma 0.229 (references 0.237-0.243) and stage are inside their bands. - Saturation is 0.133, below the reference range of 0.153-0.237. This is accepted: the subject is silvered oak, black iron and sandstone, and it still reads at thumbnail size. - Asset sheet: pass. The piece was re-posed so it reads as an open gate, and it is not the least-designed object in the reference lineup. scripts/asset_sheet.py gains the GateLow SELECT row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent ff47579 commit c3d778d

90 files changed

Lines changed: 5202 additions & 157 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
@@ -213,6 +213,7 @@
213213
"showcase/bamboo-clump",
214214
"showcase/toboggan",
215215
"showcase/sundial",
216-
"showcase/mine-cart"
216+
"showcase/mine-cart",
217+
"showcase/garden-gate"
217218
]
218219
}

‎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, 62
24-
examples, and 73 showcase pieces (counts are CI-enforced against README.md)
24+
examples, and 74 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, 62 total (+ gallery.json)
25-
showcase/<name>/ - Budget-conformance props, 73 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
25+
showcase/<name>/ - Budget-conformance props, 74 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>62 examples</strong> &nbsp;&bull;&nbsp; <strong>73 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>62 examples</strong> &nbsp;&bull;&nbsp; <strong>74 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, 62 examples, and 73 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, 62 examples, and 74 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>73 showcase pieces</strong> — click to expand the preview grid</summary>
109+
<summary><strong>74 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>
@@ -182,6 +182,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
182182
<a href="showcase/toboggan/"><img src="showcase/toboggan/preview.webp" width="24%" alt="Toboggan: a wooden runner sled with steel-shod runners curling into front horns, a screwed seven-slat deck on posts, a red crossbar, and a twisted hemp pull rope ending in a wooden toggle, on a dark studio floor" /></a>
183183
<a href="showcase/sundial/"><img src="showcase/sundial/preview.webp" width="24%" alt="Sundial: a garden sundial with a stepped stone plinth, a tapered octagonal granite column and cap, and a bronze dial plate with hour lines, a Roman-numeral chapter ring and a triangular gnomon, on a dark studio floor" /></a>
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>
185+
<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>
185186
</p>
186187

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

319320
[`mine-cart`](showcase/mine-cart/) — procedural narrow-gauge mine cart on a rail segment, riveted tub on flanged wheels over 30 lb rails, sleepers and ballast, through the same pipeline; every tread seated on its railhead and every flange clear of it. Falsifiers `--skip-decimate` exits 9, `--stray-vert` exits 15, `--lift-z` exits 16, `--float-wheel` exits 18, `--skew-axle` exits 19, `--wide-gauge` exits 20.
320321

322+
[`garden-gate`](showcase/garden-gate/) — procedural ledged-and-braced garden gate on hook-and-band hinges through the same pipeline; every knuckle measured coaxial on its pin, both pins on one plumb axis, and the swing circle clearing the latch post. Falsifiers `--skip-decimate` exits 9, `--offset-knuckle` exits 17, `--lift-gate` exits 18, `--tilt-pintle` exits 19, `--tight-post` exits 20.
323+
321324
</details>
322325

323326
## Examples

‎ROADMAP.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
144144
- Library rolling ladder (hooked top rollers riding a round rail, raked stiles, treads, floor wheels) as a game-prop showcase piece — the unbuilt half of the item above: a hook riding a round rail is a curved-on-curved contact that neither the trolley's flat backrests nor the yoke's hung ring exercise
145145
- Ox cart tongue or plough beam that hitches to the yoke's ring as a game-prop showcase piece — a hitch is a ring-on-hook contact the yoke's hung ring only tests against a fixed bar
146146
- ~~Mine cart on a rail segment as a game-prop showcase piece~~ **SHIPPED** as `showcase/mine-cart/` — riveted steel tub on four flanged wheels over 30 lb rails, spiked sleepers and ballast; every tread seated within −1.5..+0.5 mm of its railhead (`--float-wheel` exits 18), axles square (`--skew-axle` exits 19), flanges 3–10 mm clear of the railheads (`--wide-gauge` exits 20); `--skip-decimate` exits 9 on the LOD1 ratio band
147-
- Hinged garden gate as a game-prop showcase piece — strap hinges whose knuckles sit coaxial on the post pintles: knuckle axis-to-pintle axis distance within a band and the swing arc clearing the latch post, a pin-in-knuckle contact no existing piece tests
147+
- ~~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 — spokes and handles by exact radial repetition: equal angular spacing, every spoke end seated in the rim, hub/rim concentric, handles on the computed radius
150150
- 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

‎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 73 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 74 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 73 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 74 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 73 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 74 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 73 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 74 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 73 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 74 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 73 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 74 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>
58.1 KB
Loading
8.26 KB
Loading

0 commit comments

Comments
 (0)