pub fn fillet_edges(
solid: &BrepSolid,
edge_points: &[Vec3],
edge_names: Option<&[String]>,
radius: f64,
chamfer: bool,
name: Option<&str>,
) -> Result<BrepSolid, KernelRefusal>Expand description
Fillet (or chamfer) a GROUP of edges as ONE operation, and — for fillets — round the convex “star” vertices where three or more of the selected edges meet (Golovanov §6.9.7). This is the whole multi-edge fillet in a single kernel call: the caller passes the object plus one 3D point on each edge, and the kernel orchestrates the filleting and corner blending against the full topology (so acute corners resolve coherently instead of being stitched edge-by-edge by the app). A corner the kernel cannot round (e.g. non-orthogonal beyond support, or a general no-common-ball star) is left as the edge fillets rather than failing the whole group.
When the WHOLE selection cannot be blended as one unit — a shared convex
corner where a revolve axis/pole edge meets the adjacent cap edges can
defeat the sequential corner surgery even though each edge and every proper
SUBSET of the selection blends cleanly (the three fillets converge on the
pole with no single end face across the corner) — a maximal-valid-SUBSET
search blends the largest subset that works, dropping only the edges that
cannot co-blend. That is a real outcome and fillet_edges_reported
returns it, WITH the list of edges it could not blend.
This entry point does not. A solid holding eight of the ten walls that
were asked for is not the answer to the question that was asked, and
returning it as a plain Ok reports success for a different result; so an
incomplete selection is an error here, naming every edge that was dropped
and the group refusal behind them. A caller that genuinely wants the
partial answer asks for it by name.
edge_names (when Some) is the per-edge blend-FACE name parallel to
edge_points — each grown wall is named after ITS originating edge; None
names every wall with the single base name (the legacy/test behavior,
byte-identical to before). The whole *_edges family takes the same
edge_names slot in the same position.