Skip to main content

fillet_edges

Function fillet_edges 

Source
pub fn fillet_edges(
    solid: &BrepSolid,
    edge_points: &[Vec3],
    edge_names: Option<&[String]>,
    radius: f64,
    chamfer: bool,
    name: Option<&str>,
) -> Result<BrepSolid, String>
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.