Skip to content

General exact boolean over planar-faced solids #77

Description

@GeneralPawz

Problem

v0.6 widened exact boolean from half-space-bounded difference to coaxial
prisms
by reducing the pair to a certified 2D cross-section overlay
(0fafffe). That covers the dominant building-model case — a wall with
rectangular openings — but still refuses:

  • operands whose extrusion axes are not parallel;

  • unions of prisms with differing z-spans (the result is a stepped solid, not
    a prism);

  • any operand with a curved face.

  • CGAL: Nef_polyhedron_3 performs exact boolean over arbitrary polyhedra.

  • OCCT: BRepAlgoAPI_* over general B-rep.

Depends on

v0.7 measurement and v0.8 repair. A general boolean is checked by volume
identities (|A ∪ B| + |A ∩ B| = |A| + |B|), and those are unavailable until
measurement exists.

Scope

  • Exact boolean over general planar-faced solids: convex and non-convex,
    arbitrary orientation, including results of prior exact operations.
  • Every face-plane classification and edge-crossing decision goes through
    certified predicates. Where a predicate cannot decide, the operation
    refuses — it must never fall back to a tolerance comparison for a decision
    it claimed to make exactly.
  • Coplanar face pairs handled explicitly. This is the case that breaks naive
    implementations: two solids sharing a face plane produce zero-area or
    duplicated faces unless the shared region is classified deliberately.
  • The v0.5 fixture corpus already contains a coplanar-contact fixture and a
    near-degenerate half-space column; both must pass.

Not in scope

Curved-surface operands. Cylinders, spheres and tori as boolean operands need
general curved surface/surface intersection, which is separate work. Note this
now includes results of v0.6's exact revolution, which produces cylindrical
faces — those must continue to refuse by name.

Verification

  • bash scripts/gate.sh
  • Differential against the boolmesh mesh oracle on the shared fixture
    corpus, mirroring the discipline in boolmesh: differentially test against certified predicates #24 and Exact boolean breadth: general operand pairs, not just half-space extrusions #66.
  • Volume identity |A ∪ B| + |A ∩ B| = |A| + |B| holds across the corpus,
    using the v0.7 provider.
  • Every result passes v0.7 diagnosis: closed, manifold, no self-intersection.
  • Non-convex operands specifically: a boolean of two L-shaped prisms, where a
    convex-only implementation silently produces the wrong solid.
  • Mutation probe: weaken a refusal to a silent mesh fallback; the test must
    fail rather than return triangles from an exact request.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

needs-triageFiled but not yet accepted, sized, or scheduled

Type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions