Push Face

Status: Implemented
Push Face moves one or more selected faces of a solid by a signed distance along their normals.
To carry a face bodily instead — keeping its shape and size and moving or turning it somewhere else — use Transform Face.
Walkthrough

Recorded from the running app by BREP_mcp/tests/videos/push-face.json; regenerate every walkthrough with ./build.sh docs-videos.
Inputs
id(string, defaultnull) – optional identifier for the history entry.faces(reference_selection,FACE, default[],multiple: true) – one or more face selections on the same solid.distance(number, default1) – signed push distance along each selected face normal.
Behaviour
- The pushed result replaces the selected faces' solid and keeps its name, so later features that reference it keep working.
- An empty selection, selections spanning multiple solids, and a non-finite or effectively zero distance are soft no-ops. Unresolved face names are reported for reference repair.
Supported faces
Support depends on the neighbouring faces and trim layout as well as the face being pushed. Unsupported combinations fail and leave the original solid alone.
| Face | Supported examples | Main limits |
|---|---|---|
| Plane | Flat faces with holes, including holes drilled at an angle to the face; cylindrical/conical caps; supported spherical neighbors | General torus and oblique spherical-neighbor arrangements |
| Cylinder | Side walls, bores (straight or drilled at an angle through a flat), slots, crossing-pipe junctions, spherical domes and toroidal grooves, bores that just touch the sides of a pocket | Windows crossing a seam, collapsed slots or separating neighbors |
| Cone/frustum | Side walls with planar or oblique caps | General slots and multiple trim loops |
| Sphere | Full sphere, planar caps, sphere/coaxial cylinder/cone neighbors, corner pockets | Noncoaxial ruled neighbors and vanished caps |
| Torus | Full torus or toroidal cavity | Neighbor-trimmed tori and collapsed/spindle forms |
| Revolution | Supported full/partial surfaces with planar boundaries | General non-planar neighbors and non-iso trims |
| Free-form NURBS | Intrinsic/untrimmed surfaces within the fit bounds | General neighbor-trimmed surfaces |
A curved push changes the carrier's size; it is not a rigid translation of the face. Fitted free-form offsets have measured approximation limits.
A flat face next to an angled cylinder or cone neighbour builds either way round. Pushing the flat face re-cuts the hole's mouth where the face now sits. Pushing the hole's wall changes its radius and re-cuts both mouths. Either way the new edge is the exact ellipse (or, on a cone, the exact conic), not an approximation.
A bore whose opening just touches the sides of a pocket above it (a round hole exactly inscribed in a hexagonal recess, say) can be pushed both ways. Shrinking the hole extends the pocket floor inward to meet it, and the floor keeps its faces and their names. Growing the hole past the pocket's corners removes the floor. The flat face left under the pocket's sides then faces down into the hole. Growing it only part of the way, so that its edge would cross the pocket's sides between their corners, is refused.
A push far enough to send the moved face through another face of the same body is checked. Where the overlap can be resolved the result is split along the two faces' intersection and the material the crossing enclosed is removed, so a wall pushed through a bore comes back as a block with an open channel rather than as a body that passes through itself; where it cannot, the push is refused by name and the original solid is left alone.
A hole drilled at an angle is resolved this way too. Pushing the flat face far enough that the angled hole's mouth reaches past the face's edge builds: the hole breaks out through the neighbouring face. Growing the hole's wall until both of its mouths break out through neighbouring faces at once is refused: the repair does not take two such crossings at once.