Skip to content

Commit d93ee17

Browse files
TMHSDigitalclaude
andauthored
fix(examples): redesign curve-bevel-arc as a horseshoe magnet with field-line filings (#277)
The old hero was one plain rose tube lying on the floor: programmer art that said nothing about why a capped, beveled Bezier curve matters. The checked curve is now staged as a round-bar horseshoe magnet: red enamel with ground-steel pole ends (one material keyed on object-space Y, so it stays a single curve datablock). Its two filled caps - the use_fill_caps witness - are the pole faces, turned to the camera, where an uncapped build would show hollow pipe ends. Paper clips are beveled Bezier curves too (FREE handles, straight legs plus quarter-circle bends) lying along the field lines, and iron filings trace those lines as exact circular arcs between the poles. The check is unchanged (same constants, same exits); only the object transform changes, after the check. The render path gains the asset-quality gate (exit 11). gallery_asset_quality now measures curve objects as parts (edge90 on the evaluated tessellation, freed with to_mesh_clear), and the asset-sheet panel keeps curve objects, so a curve-built asset is measured and shown instead of silently skipped. No existing caller passes a curve object; prop-origin-transform's floors are identical before and after. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent 7583b33 commit d93ee17

13 files changed

Lines changed: 711 additions & 108 deletions

File tree

‎README.md‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -408,16 +408,17 @@ lifting and flaring the rim — authored through `shape_key_add` / `key_blocks`
408408
</tr>
409409
<tr>
410410
<td width="46%" valign="middle">
411-
<a href="examples/curve-bevel-arc/"><img src="examples/curve-bevel-arc/preview.webp" alt="Curve bevel arc: a rose beveled Bezier semicircle tube resting on a dark studio floor, both filled end caps facing the camera" /></a>
411+
<a href="examples/curve-bevel-arc/"><img src="examples/curve-bevel-arc/preview.webp" alt="Curve bevel arc: a red horseshoe magnet built from one beveled Bezier curve, its filled end caps turned to the camera as steel pole faces, iron filings arcing between the poles and Bezier-wire paper clips clinging to them" /></a>
412412
</td>
413413
<td valign="middle">
414414

415415
### [curve-bevel-arc](examples/curve-bevel-arc/)
416416

417417
A beveled Bezier semicircle authored on `bpy.types.Curve` — `splines.new('BEZIER')`,
418418
`bezier_points`, `bevel_depth`, `use_fill_caps` — so the curve renders as a solid tube
419-
without a prior mesh conversion. Asserts eight points, `bevel_depth == 0.15`, and
420-
evaluated topology 1044 verts / 1028 faces.
419+
without a prior mesh conversion — staged as a horseshoe magnet whose capped ends
420+
are the pole faces. Asserts eight points, `bevel_depth == 0.15`, and evaluated
421+
topology 1044 verts / 1028 faces.
421422

422423
</td>
423424
</tr>
51.9 KB
Loading
23.3 KB
Loading
-2.15 KB
Loading

‎docs/gallery/curve-bevel-arc/index.html‎

Lines changed: 320 additions & 37 deletions
Large diffs are not rendered by default.

‎docs/gallery/index.html‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ <h2><a href="shape-key-blend/">shape-key-blend</a></h2>
475475
</article>
476476
<article class="card" data-tags="curves bevel">
477477
<a class="card-media" href="curve-bevel-arc/" tabindex="-1" aria-hidden="true">
478-
<img src="assets/curve-bevel-arc-hero.webp" alt="A magenta beveled curve tube lying in a semicircle on a dark floor, both filled end caps facing the camera." loading="lazy" decoding="async" />
478+
<img src="assets/curve-bevel-arc-hero.webp" alt="A red horseshoe magnet made of one beveled Bezier curve on a dark floor, its filled end caps facing the camera as steel pole faces, iron filings arcing between them." loading="lazy" decoding="async" />
479479
</a>
480480
<div class="card-body">
481481
<h2><a href="curve-bevel-arc/">curve-bevel-arc</a></h2>

‎examples/curve-bevel-arc/README.md‎

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,20 @@ and that the depsgraph-evaluated mesh has the deterministic topology (1044 verts
1111
1028 faces for these resolution settings) with a Z span that rests on the floor
1212
(`[0, 2 × bevel]`) and an X span of `2 × radius + 2 × bevel`.
1313

14-
Staging: both ends of the semicircle face −Y, so the still looks from −Y and
15-
shows both filled caps (`use_fill_caps`, the witness) face-on, with the arc
16-
sweeping behind them. The old angle showed one cap and the other end edge-on.
17-
The cap's 12-sided outline is the pinned tessellation (`bevel_resolution` 4,
18-
locked by the 1044-vertex gate), not a presentation choice.
14+
Staging: the checked curve is presented as what a capped, beveled Bezier
15+
semicircle is in the world — a round-bar horseshoe magnet lying on the floor,
16+
open end to the camera. The two filled caps (`use_fill_caps`, the witness) are
17+
its ground-steel pole faces, turned face-on; an uncapped build would show two
18+
hollow pipe ends exactly there. The red enamel / bare-steel split is one
19+
material keyed on object-space Y, so the magnet stays a single curve
20+
datablock. The paper clips are beveled Bezier curves too (explicit `FREE`
21+
handles: straight legs plus quarter-circle bends), each lying along the field
22+
line that leaves its pole; the iron filings trace those lines — for two
23+
opposite line poles they are exact circular arcs through both pole faces. The
24+
cap's 12-sided outline is the pinned tessellation (`bevel_resolution` 4,
25+
locked by the 1044-vertex gate), not a presentation choice. The render path
26+
rotates the object only; the check reads object-space evaluated geometry and
27+
runs before any staging.
1928

2029
## Run
2130

@@ -49,7 +58,7 @@ against it. `10` is also the shared framing helper.
4958
| 8 | Tube does not rest on the floor |
5059
| 9 | Tube height ≠ 2 × bevel |
5160
| 10 | X span off closed form; also gallery framing violation |
52-
| 11 | `--output` produced no file |
61+
| 11 | `--output` produced no file; also asset-quality floor violation (`gallery_asset_quality`) |
5362

5463
The `blender-smoke` workflow runs the check on Blender 5.2 LTS and 4.5 LTS
5564
(5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch).

0 commit comments

Comments
 (0)