Modeling
No capability names extrude
twist, scaleTop, or divisions. OCCT
advertises plain extrude and passes capability preflight, including the
mechanical-exact profile; a nonzero twist, a scaleTop other than
[1, 1], or nonzero divisions then fails inside the kernel with
KERNEL_ERROR, not KERNEL_CAPABILITY_MISSING. The 0.1.1 package tolerated
a twist or scaleTop difference up to modelingTolerance (default 1e-7)
and built a plain prism for it.
OCCT applies a nonuniform scale through a general affine transform;
0.1.1 treated factors that agreed within modelingTolerance as
uniform. Such results with curved faces are approximate, so their measured
volume and area can differ from the analytic values: a cylinder scaled by
[1, 2, 1] measures about 0.9% too large. In 0.1.1, stock OCCT
transforms of shapes with complete topology history and a degenerate pole or
apex edge, such as a sphere or pointed cone, failed; 0.2.0 transforms
them. Shapes with partial history, such as imported shapes and stock Boolean
results, skip that per-edge work and already transformed in 0.1.1.
0.2.0 adds kernel-neutral evaluator checks that run before the
geometry kernel:
- a revolve profile must lie on one side of the revolve axis, which it may
touch; a crossing profile fails with
FEATURE_INVALID(reasonprofile-crosses-axis) - each hole must clear its outer loop and every other hole by more than the
sketch tolerance; touching, crossing, outside, or nested holes fail with
SKETCH_NO_CLOSED_REGION - each straight sweep-path segment must be longer than the right-corner miter
setbacks at its ends, and remote segments must clear the outer miter reach;
otherwise the sweep fails with
FEATURE_INVALID(reasonpath-clearance). See clearance and conditioning.
Topology
Construction and complete history are separate columns conceptually. A stock
OCCT fillet may construct successfully while downstream semantic lineage is
partial.
Stock OCCT advertises both signature rows only from the bundled runtime that
createOcctKernel() loads when neither wasm nor moduleFactory is supplied.
An explicit wasm or moduleFactory without the owned facade ABI omits both,
even with byte-identical stock files. The mechanical-exact preflight still
passes, but a selector that uses a persistent topology reference then fails
with KERNEL_CAPABILITY_MISSING.
Product structure and analysis
These evaluator-level features work with either kernel when all underlying geometry features are supported:- parameters and dimension-safe expressions
- materials and density expressions
- parts and fixed-placement nested assemblies
- named configurations
- instance suppression and part-material overrides
- deterministic BOMs
- geometric and physical mass properties
- canonical documents, migration, validation, and hashing
- design-impact and effective-feature hash reports
The nullable genus contract was added in 0.2.0. The 0.1.1 package typed
genus as
number and always returned one: OCCT derived a heuristic integer
from the whole shape’s Euler characteristic, clamped at zero; Manifold
reported its whole-mesh genus, which was negative for disjoint bodies; and
assembly aggregates reported 0.null; no backend or assembly path guesses,
clamps, or silently converts the value.
Body-result classification was added in 0.2.0 and is not in 0.1.1.
The repository-staged Document v7 evaluator admits a Boolean result only when
its kernel classifies it as
single-body; explicit body sets remain the only
multibody product boundary.
Exchange
The strong deterministic STEP paragraph and verified-import table below
describe behavior added in 0.2.0. The exchange table above is unchanged
from 0.1.1.
wasm, moduleFactory,
and attested runtimes retain weak raw STEP and omit this envelope until
separately qualified. An output that OCCT writes as several STEP products, such
as a disjoint union, returns weak native bytes from a plain export("step")
and fails with EXPORT_UNSUPPORTED (reason multiple-products) when STEP
options are passed. This is narrower than geometric canonicalization and
does not make STEP a portable artifact or cache format. Exact aggregate
body-set and assembly STEP remains unsupported.
The public imported-body workflow admits exactly one committed
solid through stock OCCT’s strong document-body import capability:
This is a separate opaque one-body document and
Evaluator.evaluateImportedBody(...) method. It verifies a caller-supplied
SHA-256 and byte-length commitment before parsing, fixes healing to none, and
does not publish the broader Document v7 product model. Its JSON is a frozen,
minimal Document v7 subset
(schema https://invariantcad.dev/schema/document/v7, version 7) that a
future public Document v7 will keep accepting. Only the imported-body functions
read, write, and evaluate it: parseDocument, validateDocument, and the other
general v1–v6 document APIs return IR_INVALID at /, and
stringifyDocument, hashDocument, and cloneDocument throw TypeError.
Multibody import, assembly import, repair/healing, automatic file/URL I/O, and
approximate fallback remain unsupported.
Runtime coverage
Explicitly not in 0.2
- drawings, dimensions, PMI, and GD&T
- sheet metal and flat patterns
- assembly mates, joints, motion, interference, and contact
- CAM, toolpaths, posts, and stock simulation
- CAE/meshing/solver workflows
- general surfacing, NURBS editing, healing, and feature recognition
- variable fillets/chamfers and advanced shell modes
- complete transparent cross-run native shape caching