Skip to main content

thicken_trimmed_sheet

Function thicken_trimmed_sheet 

Source
pub fn thicken_trimmed_sheet(
    surface: &NurbsSurface,
    loops: &[Vec<NurbsCurve>],
    thickness: f64,
    symmetric: bool,
) -> Result<BrepSolid, String>
Expand description

§5.9 THICKEN a TRIMMED sheet region into a closed solid.

loops are parameter-space curves on surface exactly as FaceRecord loops store them: the outer loop first, running counter-clockwise in (u, v), followed by optional hole loops running clockwise (the same_sense = true convention of validate_uv_wire). Each loop’s pcurves must chain tip-to-tail and close; a loop may also be a single closed pcurve (e.g. a rational circle).

  • symmetric = false: the solid occupies the space between the sheet and its offset at signed thickness along the sheet normal n = Su × Sv (negative thickness grows the solid on the −n side).
  • symmetric = true: the material splits evenly, |thickness|/2 on each side of the sheet (the sheet becomes the mid-surface).

The caps are the bottom/top offset sheets trimmed by the SAME pcurve loops (the offset shares the sheet’s basis, so pcurves transfer verbatim); every boundary pcurve contributes one ruled side wall between its bottom and top 3D images, ruled pointwise at equal pcurve parameter — for an offset pair that ruling runs along the surface normal, so walls are exact wherever the full-domain walls were. Hole loops produce inner wall tubes and each adds one handle: genus = loops.len() - 1.

Every boundary edge is a single EdgeRecord shared by exactly two coedges (cap + wall); wall-to-wall junction edges are likewise shared. Refuses (Err) on: zero/non-finite thickness, closed sheets, open or misoriented loops, pinched loops, general (non-iso) pcurves on curved sheets, and offsets through the evolute.