Skip to main content
solid.operate(kind, { tools, instances? }) changes the target solid once: tools is one to a hundred solids. The tools stay separate, live solids. Moving or disposing a tool later does not change the target. A tool is drawn only if you add it to the scene.

Cut openings into a wall

An arched opening

Make an arch as one closed profile, a straight sill, two jambs and a half-circle head, and extrude it through the wall. This works through a straight or a curved wall:
Use one arch-profile prism. A rectangle prism plus a half-cylinder, whose sides touch along the cylinder, can fail through a curved wall.

The report

solid.getReport() returns the report of the last boolean, or null:
  • report.operation: 'union', 'intersection' or 'subtraction'.
  • report.face_mappings: for each face of the inputs, the faces of the result that came from it.
  • report.contacts and report.coincident: where the inputs touch.
  • handlers: the kernel methods that made the result.
  • revision: the shape revision of the result.
A rebuild or a mirror clears the report.

When a boolean is refused

A refused call throws an OGError and leaves the target as it was. details says which methods were tried:
  • CoverageGap: the kernel has no method for this pair yet. details.families names the pair, such as ['cone or frustum', 'cuboid'].
  • UnresolvedIntersection: the kernel could not trace the intersection.
  • toolIndex and ogIds name the tool that failed.
Some refused cuts are slow, because the kernel tries several methods before it refuses.

Instances

If the target’s shape is shared, pass { instances: 'all' } to cut every instance, or call makeUnique() first. Otherwise the call throws SharedShape. A tool may not be the target or have the target’s shape.
Last modified on November 10, 2026