Offset Shell
Status: Implemented

Offset Shell hollows a solid: you pick the faces to remove as openings, and the retained face supports are offset by a signed distance to become the wall.
Walkthrough

Inputs
id– astring, defaultnull; used when naming the generated solid and faces.faces– a multiplereference_selectionfiltered toFACE, default[]: the opening faces to remove. All of them must belong to the same solid.distance– anumber: the signed offset applied to the retained face supports. Default1. Positive is inward —+0.5through one face hollows a 4×4×4 box to a volume of 32.5. Must be non-zero.replaceOriginalSolid– aboolean, defaulttrue: the source solid is removed, leaving only the shell. Set it tofalseto keep the original alongside the shell.
Behaviour
- The result solid is named
{targetName}_{featureId}. - An outer face keeps its source face's name, its offset copy appends
_Offset, and an opening wall inherits the name of the face removed to make it. Collisions de-duplicate asbase,base_1,base_2, …
Limitations
These cases are quiet no-ops rather than errors, so you can repair the selection and try again:
- a single opening-face name that does not resolve (the name is reported as unresolved);
- faces spanning more than one solid;
- an empty selection;
- a zero or non-finite
distance; - the kernel's own "cannot produce a shell" refusal — which is what you get if you select every face.
A face whose surface curves tighter than the wall thickness across all of the face is dropped instead of being skinned with a reversed band, and its neighbours meet each other instead — the sharp inner corner a shell thicker than the blend is meant to leave. Whether the face curves too tightly is judged over the face itself, not over the whole surface it was cut from, so a face trimmed clear of a tight spot keeps its skin.
A face that curves too tightly over only PART of itself is carved: the curve along which the wall stops fitting is traced, the face's skin is trimmed back to it, and the part beyond is dropped. A cone shelled through its base is the plain example — the cavity ends at its own apex, where the inner skin runs out, rather than at the cone's. The outer face is untouched: the material there is real all the way to its rim.
A tight region that crosses the face as a BAND — the wall stops fitting between two curves and fits again beyond them — is refused by name. Because the outer skin is kept whole, a band leaves a strip of skin with no cavity wall above it, and nothing to close the shell against. The same refusal covers any carve that would keep more than one piece of the face. The one exception is an outward shell of the single curved face of a partial revolve, which closes on the axis and is built.
The cavity may end early only where it closes to a point, as at a cone's apex. Where the carved boundary's offset would be an edge with length instead, the shell is refused.
The carve is also refused, rather than approximated, when the boundary it needs does not divide the face cleanly: a tight region that enters and leaves the face an odd number of times, one that touches the face's edge without crossing it, one that cuts a hole out of it, or two that cross each other inside it. The refusal names what it saw.
A shell whose result would pass through itself is refused, and the refusal names the faces and the point. Two kinds are caught: two walls of the shell crossing each other, and a single face folded over itself in space — which is what an offset skin does where the source turned tighter than the distance and the carve could not reach it. Neither is visible in the usual way, because the body can still close and still measure the right volume while doing it. Where the crossing is two faces meeting along a curve, the shell first tries to split them there and drop the material between; the refusal appears only when that cannot be resolved, and it says why.
Any other kernel error is a hard failure that halts the rebuild. Some complex curved opening rims (a rim-tangent fillet on the opening face itself) fail with an actionable error recommending that the shell be moved earlier than the cut in history.
An opening plane truncates the offset skin it opens, inward as well as outward: the wall ends flush in the plane of the face that was removed, and the rim there is the annulus between the source outline and the offset skin's section with that plane. A narrowing cone shelled through its small end therefore ends its wall in that plane rather than sloping below it. Where the offset skin cannot reach the opening — an inward shell deep enough that the offset apex sinks below the plane — the cavity closes on that apex and the opening keeps its whole face.
Negative distances grow the shell OUTWARD (the retained faces move away from the material and each opening is held in place and extended by the thickness). A planar opening's wall is its outline offset by the thickness IN ITS PLANE, mitred at a convex corner and trimmed at a reflex one, so an L-shaped or rounded opening grows the way its own outline does. A curved opening is extended along itself when its surface is ruled — the cone or cylinder a straight profile edge sweeps. Outward shells close across several adjacent openings, across a through-bore behind retained faces or through the opened face, and across edge fillets with a corner blend.
An INWARD shell through a CURVED opening face (a dome, a fillet band) is refused by name when the offset skin stops short of it: only a planar opening's skin is grown to meet it.
An opening whose outline the offset cannot take — anything but lines and circular arcs, or a rounded reflex corner grown past its own radius — is shelled through the padded plane where that still covers the grown outline, and refused by name where it does not.