Skip to main content

Shell

Shell hollows a solid into walls of a given thickness. You pick the faces to remove; they become the openings. A box becomes a tray, a cylinder becomes a cup.

In the viewport

  1. Click Shell on the toolbar. A small panel opens beside the model.
  2. Click the face (or faces) to open in the viewport. Right-click a pick for the multi-select menu — same-type faces, the producing feature's other buckets (Extrude End Faces …), Select other.
  3. Type the thickness. The statement is written as soon as the pick is complete.
The Shell panel with one face picked and a thickness of −5
  1. 1
    Selection
    The faces to remove — they become the openings. Each pick is a numbered chip; the ✕ drops one, and clicking a picked face again drops it too. Leave it empty and nothing happens: Shell always needs at least one face.
  2. 2
    Thickness
    How thick the walls end up. Negative shells inward and keeps the outer shape; positive shells outward and keeps the inner cavity.
  3. 3
    Join type
    How the offset walls meet at a corner: Arc rounds the join, Intersection runs both walls on until they cross, Tangent extends them tangentially. Arc is the safe default.
  4. 4
    Apply
    Writes the statement and adds the timeline row; Exit writes nothing.

From solid to walls

A cylinder with both flat faces removed becomes a tube:

BeforeBefore modecylinder(50, 100)

A Ø50 cylinder, 100 tall, solid all the way through.

AfterAfter modeshell(-5)

The top and bottom faces are gone and what is left is a 5-thick wall. The outside is still Ø50 — a negative thickness grows the wall inward.

The solid
cup.part.js
import { cylinder } from 'fluidcad/core';

// A Ø50 cylinder, 100 tall — solid all the way through.
cylinder(50, 100)
The complete file
import { cylinder, select, shell } from 'fluidcad/core';
import { face } from 'fluidcad/filters';

// A Ø50 cylinder, 100 tall — no sketch needed for a primitive.
cylinder(50, 100)

// Select the flat circular faces (top and bottom) — the Shell tool writes
// this select() when the picked faces match a filter.
select(face().circle())

// Hollow the cylinder with 5-thick walls, removing the selected faces.
// Negative: the walls grow inward and the outside stays Ø50.
shell(-5)

Thickness direction

SignResult
Negative, e.g. -5Walls grow inward — the outer shape stays the same
Positive, e.g. 5Walls grow outward — the inner cavity stays the same

Passing faces directly

In code, the faces to remove can come from an operation's accessors instead of a select():

const e = extrude(30)
shell(-3, e.endFaces()) // remove the top face, hollow the rest

Several faces at once:

shell(-3, e.endFaces(), e.startFaces()) // open on top and bottom

With no faces at all, shell() takes the last selection — the Selection and filters page covers how those are written.

Accessing geometry

const s = shell(-3, e.endFaces())

s.internalFaces() // the inner wall faces
s.internalEdges() // edges on the inner walls