Skip to content

Commit 7ad90c9

Browse files
TMHSDigitalclaude
andcommitted
feat(showcase): add traffic-cones (vehicles)
The seventh piece in the vehicles category, things that direct movement: a roadworks set (generic, no marks or text) on a cut-out patch of asphalt with a broken, closed-form jittered edge, a worn white road line and two sealed tar cracks. Seven 720 mm PVC cones: each a hollow lathed body with a moulded bead and a rolled lip round an open tip, bonded into a 356 mm square rubber base (chamfered corners, raked top, collar, four lugs, a recess underneath that takes the collar of the cone below), hooped with a 4 in and a 6 in retroreflective collar. Three stand in a taper line, three are nested in a stack, and one lies knocked over on the edge of its base and the lip of its tip, its roll solved by bisection so both touch and its open base faces the lens. Behind them a folding A-frame barricade: four 32 mm square steel legs hinged in pairs on pivot bolts (washer, head, nut), spread by straps pinned to the front leg and through a spacer to the back leg, rubber foot pads, plastic leg caps; two boards on each face cut on 45-degree lines into orange and white retroreflective stripes and bolted to the legs; and a warning lamp (bracket, battery box, drum housing, amber fresnel lens and bezel each face) on the top front board. The cone wall is sized from the body slope and the nesting pitch (WALL_H = slope x pitch + bite), so each stacked cone bears 1 mm on the one below at 36 mm. Eleven materials; a PartTone face attribute gives every cone, board and leg its own tone. Budgets (measured, 5.2.1): 45816 tris (45300-46400), LOD 0.5000/0.2200, 11 materials with face floors, UVs 0..1 no overlap, AABB 3.0365x2.0374x 1.3354 (+-0.01, read off the vertices), collider 493 (<=540), hygiene 0 incl. 0 coplanar cross-shell pairs, zmin 0; 10 supports (5 cone bases, the fallen body, 4 pads) sunk 1.5 mm into the slab (0.8-3.0); 4 boards, 8 joints biting their legs 1.5 mm (0.8-3.0); 14 collars seated 0.600 mm (0.2-1.5) and 1.400 mm proud (min 1.0); 6 upright cones 0.0000 deg off plumb (0.2), 0.720 m tall on bases 0.356 m across the flats (+-3 mm); 4 legs mirrored within 0.0001 mm (1 mm); one stack of 3, pitch 0.036/0.036 (0.030-0.042), wall bite 0.847-0.949 and 1.034-1.105 mm (0.4-2.0); one assembly of 125 shells. Two default runs print identical measurements; 4.5.11 and 5.1.2 print the same measurements (export differs by 28 bytes). The first draft measured 205 coplanar pairs: the lamp bracket's two bolts, 40 mm apart, shared a base plane (196; the second now sits 0.3 mm deeper), and stack yaws 15 deg apart put two bases' collar walls on the same planes (8; yaws now 3.1/-8.7/14.9). Falsifiers (flag -> measured -> exit), 5.2.1 and 4.5.11 identical; tris 45816 and envelope unchanged in all: --skip-decimate LOD1 1.0000 9 --stray-vert loose_v 1 15 --lift-z zmin 0.05000 16 --float-cone right cone sink -2.5 mm 16 --gap-board lower front board bite -1.5 mm (both legs) 17 --float-band left cone 6 in collar seat -1.4 mm 18 --lean-cone middle cone tilt 1.431 deg 19 --skew-leg leg mirror 2.500 mm 19 --loose-stack pitch 0.046, bite -0.576..-0.505 mm 20 --loose-lamp 2 components [9, 116] 21 --loose-stack at 12 mm put the top base on the middle collar-top plane and exited 15 (192 pairs); 10 mm keeps it on 20. --loose-lamp moves the lamp level off the board; along the board normal it lifted zmax 0.8 mm. tests/check_falsifier_targets.py --run --only traffic-cones passes. Blender: E:\Blender-Developer-Tools\.scratch\5.2\blender-5.2.1-windows-x64\blender.exe, reports "Blender 5.2.1 LTS"; default and every falsifier also run on .scratch\blender-4.5.11-windows-x64 ("Blender 4.5.11 LTS"); default on .scratch\blender-5.1.2-windows-x64 ("Blender 5.1.2"). Render: render_hero.py wrote hero (37182 B) and preview (33408 B); framing fill x 0.709, y 0.822, margins >= 0.061; asset-quality floors pass (11 materials, edge90 0.046). Default stage, no deviation. Asset sheet (docs/gallery/asset-sheets/traffic-cones.webp): not the least-designed object; the hydrant is plainer. Isolated, it reads at once as cones, a nested stack, a fallen cone and a striped barricade with a lamp on an asphalt patch. Weak point: the panel crops the patch's near corner. Contact sheet (docs/gallery/contact-sheets/traffic-cones-contact-sheet.webp): luma 0.2385 against 0.2369-0.2428 (in band, after relighting from 0.354); stage 0.2030 against 0.1919-0.2517; saturation 0.1933 against 0.1525-0.2367; wedge warmth +0.0396 inside the -0.1440/+0.1052 spread. Thumbnail legible. Also updated: README, CLAUDE.md, AGENTS.md counts (60 -> 61), ROADMAP Vehicles list (traffic cone and barrier set struck as shipped), asset_sheet.py SELECT row, catalog.json, plugin.json and the regenerated gallery. build_gallery, check_site_links (116 pages, 0 failures), check_falsifier_targets, check_exit_code_readme, check_engine_id, check_gallery_images and check_import_export_rules pass. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent d66bf80 commit 7ad90c9

76 files changed

Lines changed: 7700 additions & 131 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
@@ -198,6 +198,7 @@
198198
"showcase/skate-ramp",
199199
"showcase/palm-tree",
200200
"showcase/wingback-armchair",
201-
"showcase/planet-rover"
201+
"showcase/planet-rover",
202+
"showcase/traffic-cones"
202203
]
203204
}

‎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, 60
24-
examples, and 60 showcase pieces (counts are CI-enforced against README.md)
24+
examples, and 61 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, 60 total (+ gallery.json)
25-
showcase/<name>/ - Budget-conformance props, 60 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
25+
showcase/<name>/ - Budget-conformance props, 61 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>60 examples</strong> &nbsp;&bull;&nbsp; <strong>60 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>60 examples</strong> &nbsp;&bull;&nbsp; <strong>61 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, 60 examples, and 60 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, 60 examples, and 61 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>60 showcase pieces</strong> — click to expand the preview grid</summary>
109+
<summary><strong>61 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>
@@ -169,6 +169,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
169169
<a href="showcase/palm-tree/"><img src="showcase/palm-tree/preview.webp" width="24%" alt="Palm tree: a coconut palm leaning on a raised disc of beach sand, its ringed trunk curving up to a crown of drooping pinnate fronds over green coconuts, fallen coconuts, a frond and driftwood below" /></a>
170170
<a href="showcase/wingback-armchair/"><img src="showcase/wingback-armchair/preview.webp" width="24%" alt="Wingback armchair: an oxblood leather wingback with a deep-button tufted back, rolled arms trimmed with brass nailheads and a piped seat cushion, beside a side table with a brass reading lamp and books on a fringed rug" /></a>
171171
<a href="showcase/planet-rover/"><img src="showcase/planet-rover/preview.webp" width="24%" alt="Planet rover: a six-wheeled rocker-bogie rover with gold-foil sides, a camera mast, a dish antenna and a finned power unit, its arm drilling a boulder on red-grey regolith" /></a>
172+
<a href="showcase/traffic-cones/"><img src="showcase/traffic-cones/preview.webp" width="24%" alt="Traffic cones: orange cones with white reflective collars on a patch of asphalt with a worn white line, three standing in a row, three nested in a stack and one knocked over showing its open base, before a striped A-frame barricade with an amber warning lamp" /></a>
172173
</p>
173174

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

288289
[`planet-rover`](showcase/planet-rover/) — the sixth `vehicles` piece: procedural six-wheeled planetary science rover on a patch of rocky red-grey regolith (a cream warm-electronics body with quilted gold-foil blankets, a deck of instrument boxes, inlets and a calibration target, a finned power unit on struts between two radiator banks; a rocker on each side pivoting on a boss in the body and a bogie pinned in a clevis on its front end, the two rockers linked through a differential bar on the deck; six drum wheels with 24 chevron grousers, curved flexure spokes and drive actuators, the four corners on steering actuators; a camera mast, a high-gain dish on a two-axis gimbal, a whip; a 5-DOF arm drilling a boulder; harnesses along every leg; ruts behind the wheel lines and 19 broken rocks), the regolith fitted so every wheel sinks 11–19 mm into it. `--float-wheel` exits 16 on every wheel sunk in band, `--offset-pin` 17 on the pivot pins coaxial with their bushings, `--sink-grousers` 18 on the grousers seated on the drum, `--lean-mast` 19 on the mast plumb and the rover's size, `--jam-rocker` 20 on the rockers equal and opposite through the differential, `--offset-steer` 21 on the steering axes through the wheel centres, `--camber-wheel` 22 on the axles level and lateral, `--bunch-grousers` 23 on the grouser pitch, `--overload-turret` 24 on the mass centre inside the support polygon by the 45° tip margin, `--loose-dish` 25 on one connected assembly, while the envelope holds.
289290

291+
[`traffic-cones`](showcase/traffic-cones/) — the seventh `vehicles` piece: procedural roadworks set on a cut-out patch of asphalt (a broken edge, a worn white road line and two sealed tar cracks; seven 720 mm PVC cones, each a hollow lathed body with a moulded bead and a rolled lip round an open tip, bonded into a square rubber base with chamfered corners, a raked top, a collar, four lugs and a recess underneath, and hooped with two retroreflective collars; three standing in a taper line, three nested in a stack and one knocked over onto the edge of its base and its lip; a folding A-frame barricade of four square steel legs hinged in pairs on pivot bolts, spread by pinned straps, footed in rubber pads, with two striped boards bolted to each face and a warning lamp with amber fresnel lenses on a bracket), the cone wall sized so each cone in the stack bears 1 mm on the one below at a 36 mm pitch. `--float-cone` exits 16 on every support bedded in the slab, `--gap-board` 17 on the boards biting their legs, `--float-band` 18 on the collars seated on their bodies, `--lean-cone` and `--skew-leg` 19 on the cones plumb at real size and the legs mirror-symmetric, `--loose-stack` 20 on the nesting pitch and wall bite, `--loose-lamp` 21 on one connected assembly, while the envelope holds.
292+
290293
</details>
291294

292295
## Examples

0 commit comments

Comments
 (0)