Skip to content

fix(examples): redesign curve-bevel-arc as a horseshoe magnet with field-line filings - #277

Merged
TMHSDigital merged 2 commits into
mainfrom
fix/hero-curve-bevel-arc
Sep 26, 2026
Merged

TMHSDigital merged 2 commits into
mainfrom
fix/hero-curve-bevel-arc

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

What changed and why

The gallery review called the old hero programmer art: one plain rose tube lying on the floor. This PR redesigns the render. The check does not change.

The checked curve (8 Bezier points, bevel_depth 0.15, use_fill_caps) is now staged as a round-bar horseshoe magnet lying on the floor with its open end toward the camera:

  • Red enamel with ground-steel pole ends. This is one material keyed on object-space Y, so the magnet is still a single curve datablock.
  • The two filled caps are the pole faces. They are the use_fill_caps witness, and they face the camera. An uncapped build would show hollow pipe ends in exactly that spot.
  • Paper clips (teal, amber) are beveled Bezier curves too. They use explicit FREE handles, with straight legs and quarter-circle bends at the 4/3·tan(π/8) handle length. Each clip lies along the field line that leaves its pole.
  • Iron filings follow the field lines. For two opposite line poles, the field lines are exact circular arcs through both pole faces.
  • Steel bearings sit on one pole shoe.

Shared-tooling change (small, additive):

  • examples/gallery_asset_quality.py now counts curve objects as hero parts. It checks naming, materials, and edge90; edge90 runs on the depsgraph-evaluated tessellation, which is freed with to_mesh_clear().
  • scripts/asset_sheet_panel.py now keeps curve objects.
  • Before this change, a curve-built asset was silently skipped by both.
  • No existing caller passes a curve object. prop-origin-transform's floors are identical before and after: materials n=7 dominant 0.50, edge90 446/5973.

Before / after

  • Contact sheet: docs/gallery/contact-sheets/curve-bevel-arc-contact-sheet.webp
  • Asset sheet: docs/gallery/asset-sheets/curve-bevel-arc.webp
  • The old hero (a single magenta tube) is in the parent commit's docs/gallery/assets/curve-bevel-arc-hero.webp.

Gate numbers (5.2.1 LTS)

  • Framing: fill x=0.759, y=0.478 (band 0.70–0.90). Margins: L 0.153, R 0.059, B 0.150, T 0.078. framing_ok.

  • Asset quality:

    • naming ok
    • materials n=4, dominant MagnetEnamelAndPoles@0.25
    • edge90 0/7686
    • compactness 178 (informational)
    • aq_ok
  • Contact sheet (luma / stage / warmth / sat):

    Tile Luma Stage Warmth Sat
    candidate 0.2286 0.2191 +0.025 0.182
    armature-bend 0.2787 0.2132 −0.428 0.144
    damped-track-aim 0.1511 0.1448 +0.277 0.231
    bmesh-gear 0.2358 0.1772 +0.303 0.250
    • Stage darkness: pass. It is inside the calibration range and matches armature-bend.
    • Wedge warmth: marginal. It is warm but weaker than gear and aim; the pool sits upper right on the floor and wall.
    • Subject fill: pass.
    • Saturation: pass. It is between the calibration tiles.
    • Thumbnail legibility: pass. At 427×240 it reads as a red horseshoe magnet with silver poles and a filings field.
  • Asset sheet verdict: borderline, reviewer call. The finish holds up next to the references: two-tone enamel/steel, clean bevels, and designed clips. By part count and silhouette it is the simplest object in the lineup, because a horseshoe magnet is a simple product. It is not sloppier than the references, but it is the least complex.

  • Hero drift: measure_hero_drift.py --only curve-bevel-arc: mean_abs 0.0036, verdict matches.

Proven by live run

Local binaries: E:\Blender-Developer-Tools\.scratch\blender-{5.2.1,5.1.2,4.5.11}-windows-x64\blender.exe, reporting Blender 5.2.1 LTS, Blender 5.1.2, Blender 4.5.11 LTS.

  • Check-only path: exit 0 on all three with points=8 bevel=0.15 caps=True eval_verts=1044 eval_faces=1028 z=-0.000..0.300 x_span=3.292. tests/smoke/run_example.py gives [PASS] on all three.
  • Falsifier --no-caps: exit 6 (use_fill_caps is False) on all three.
  • Render path: framing and asset-quality gates pass on all three binaries. The hero was rendered with 5.2.1 via scripts/render_hero.py.
  • Helper falsifier (new curve coverage): I temporarily named the magnet object BezierCurve. The render path exited 11 with aq_naming default_names=['BezierCurve'] FAIL, then I restored the name. With the old helper the curve was invisible to the floors, so this probe could not have failed.
  • Gallery: build_gallery.py was re-run after rebasing on main. I read the generated <img alt> in docs/gallery/index.html and docs/gallery/curve-bevel-arc/index.html and both show the new sentence.

Established by inspection only

  • The claim that an uncapped build would show hollow pole faces. The check exits 6 before any render, so no uncapped still was produced.
  • The field-line geometry. The arcs are the analytic solution; no field was simulated.

🤖 Generated with Claude Code

…eld-line filings

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.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Signed-off-by: TMHSDigital <[email protected]>
@github-actions github-actions Bot added examples Runnable smoke-gated examples under examples/ documentation Improvements or additions to documentation labels Sep 26, 2026
Union of asset-sheet SELECT rows; generated gallery pages regenerated.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Signed-off-by: TMHSDigital <[email protected]>
@TMHSDigital
TMHSDigital merged commit d93ee17 into main Sep 26, 2026
11 checks passed
@TMHSDigital
TMHSDigital deleted the fix/hero-curve-bevel-arc branch September 26, 2026 03:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation examples Runnable smoke-gated examples under examples/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant