fillet
Round one or more edges with a constant radius fillet. Select edges by intent using a filter, or by midpoint or index, to add stress relief or deburred transitions to autoparts.
Instructions
Redondeo — fillet (round) one or more edges, constant radius.
selector (recommended) — pick edges by INTENT instead of reading
list_edges() and guessing an index. A closed-schema dict resolved against
the live geometry, e.g. round every circular edge:
fillet(selector={"filter": {"geom": "circle"}}, radius_mm=2)
or the single largest-radius edge:
fillet(selector={"filter": {"geom": "circle"}, "sort":
{"axis": "radius", "dir": "desc"}, "pick": "first"}, radius_mm=3)
Schema: filter{geom:circle|line|arc|other|any, body, radius_mm/radius_tol_mm,
axis:x|y|z + at_mm/tol_mm or min_mm/max_mm}, sort{axis:x|y|z|radius, dir},
pick:all|first|last|int|[int]. Mutually exclusive with edge_* args. The
result echoes selector_matched {n, sample_points_mm} so you can sanity-check.
Standard autoparts use: stress relief on cast/forged parts, deburred machined edges, transition radii on stamped reinforcements (ISO 8062 on Schaeffler-style brackets). Constant-radius is the v1 variant — variable-radius and full-round fillets are deferred (rare in autoparts juniors' workflows).
Args (edge addressing — pass exactly ONE of selector / edge_midpoints_mm / edge_indices): edge_midpoints_mm: Optional. List of [x, y, z] midpoints from list_edges() → e["midpoint_mm"] (line / partial-arc edges only). radius_mm: Fillet radius. Must be > 0. Typical autoparts values: 0.5-1mm for machined edge softening, 2-5mm for cast-part transitions, R = 0.5-1.5 × wall_thickness for plastic ribs. tangent_propagation: If True (default), SW propagates the fillet along tangent-continuous neighboring edges. False = strict per-edge (each edge gets a separate filleted region). edge_indices: Optional. List of {"body_name": str, "index": int} from list_edges(), verbatim. Works for ANY edge — required for closed-loop circles (disc rims, hole edges, cylinder tops) where midpoint_mm is None.
Returns the resulting Redondeo feature (name, type="fillet", R1).
Failure modes:
- midpoint doesn't match any edge → raises with hint to re-run
list_edges()
- midpoint matches multiple edges within 0.01mm → raises listing
candidates
- edge_indices: unknown body or out-of-range index → raises
with the available bodies / valid index range
- radius exceeds adjacent edge lengths → SW silently rejects;
we surface "no new feature" with a hint
- body name shifts after first fillet ("Saliente-Extruir1" →
"Redondeo1"). When filleting N identical-class edges (e.g.
all 4 vertical corner edges of a plate), pass ALL N indices
in ONE call. Batching N/2 now + N/2 later addresses the OLD
body name on the second call and fails with "no new
feature"; recovery is undo + redo as one batch.
Caveat: NOT parametric. Re-radiusing requires deleting the feature and re-running. Parametric edits via modify_dimension on "Redondeo1" → "R1" work for simple cases.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | ||
| radius_mm | No | ||
| edge_circles | No | ||
| edge_indices | No | ||
| edge_midpoints_mm | No | ||
| tangent_propagation | No |