kcl-samples → c-shape-solid
c-shape-solid

KCL
// C-Shape Solid (Abstract Geometry Demo)
// This is a simplified geometry study that demonstrates how to create a "C" shape by subtracting a rectangular wedge from a circular ring. This base logic is foundational to models like split washers and other circular parts with a gap.
@settings(defaultLengthUnit = mm)
// ──────────
// PARAMETERS
// ──────────
// Outer diameter of the ring
ringOuterDiameter = 20
// Inner diameter — defines the hole in the middle of the ring
ringInnerDiameter = 10
// Thickness of the ring (height in Z direction)
ringThickness = 2
// Width of the wedge we will use to cut the split
cutGapWidth = 2
// ───────────────────────
// STEP 1: CREATE THE RING
// ───────────────────────
// We begin by sketching two concentric circles: the outer boundary and the hole. Then we subtract the inner one to get a donut-like profile.
ringSketch = startSketchOn(XY)
ringProfile = circle(ringSketch, center = [0, 0], diameter = ringOuterDiameter)
|> subtract2d(tool = [
circle(center = [0, 0], diameter = ringInnerDiameter)
])
// We extrude this sketch into a 3D solid. This is the full ring, with no gap yet.
solidRing = extrude(ringProfile, length = ringThickness)
// ───────────────────────────────
// STEP 2: CREATE THE WEDGE CUTTER
// ───────────────────────────────
// We now create a thin rectangular wedge that will be used to cut the split. This wedge starts from the center and extends past the outer radius.
// First, define a little clearance so that the wedge cuts fully through the body
cutClearance = ringThickness * 0.5
// Compute wedge dimensions
ringOuterRadius = ringOuterDiameter / 2
wedgeLength = ringOuterRadius + cutClearance
wedgeHeight = ringThickness + cutClearance * 2
// Draw the wedge on a plane slightly below the ring
wedgePlane = offsetPlane(XY, offset = -cutClearance)
wedgeSketch = startSketchOn(wedgePlane)
wedgeProfile = startProfile(wedgeSketch, at = [0, -cutGapWidth / 2])
|> yLine(length = cutGapWidth)
|> xLine(length = wedgeLength)
|> yLine(length = -cutGapWidth)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
wedgeBody = extrude(wedgeProfile, length = wedgeHeight)
// ──────────────────────
// STEP 3: SUBTRACT WEDGE
// ──────────────────────
// Finally, we subtract the wedge body from the solid ring. The result is a simple C-shape: a ring with a single clean gap.
cShape = subtract([solidRing], tools = [wedgeBody])