Open Cascade is pleased to announce the release of Open CASCADE Technology version 8.0.0 Beta 3 to the public.
- Beta 2
- Beta 1
- Release Candidate 5
- Release Candidate 4
- Release Candidate 3
- Release Candidate 2
- Release Candidate 1
Overview
Beta 3 is the last preview before final 8.0.0. It tightens a few rough edges from the Beta cycle: a breaking semantic change to NCollection_Array1/2::Assign (it now overwrites the destination bounds), a revert of the GProp_PGProps / GProp_PEquation relocation, and the BRepGraph CoEdge model rework that lands seam handling on its final design. The shader grid command surface is renamed from inf/"infinite" to gpu and gains camera-relative sizing.
⚠️ Read the migration notes below before upgrading. The
NCollection_Array1/2::Assignchange is silent at the call site - code that previously relied on the destination keeping its bounds (or relied onAssign()throwing on size mismatch) will compile unchanged but behave differently at runtime, and any code that misusedAssign()to copy into a fixed-size view is now particularly likely to surface latent bugs.
Final 8.0.0 release is planned for May 7, 2026 - immediately after this Beta.
Highlights
- ⚠️ Breaking:
NCollection_Array1/2::Assignnow overwrites destination bounds; newCopyValues()preserves them #1269 -Assign()andoperator=now resize the destination to match the source (matchingstd::vectorsemantics). The previous behavior - throw/assert on size mismatch and copy element-wise into the existing buffer - is nowCopyValues(). Callers inGeom*and math utilities that depended on the old behavior were migrated toCopyValues(). Tests expanded to cover owned/external buffers and size changes. Note that this exposes pre-existing misuse: code that relied onAssign()throwing to "validate" sizes, or that assigned a larger array into a smaller view expecting truncation, will now silently change behavior - theShapeConstruct_ProjectCurveOnSurfacecrash fix below is one such case found in our own tree. - CoEdge model rework #1261 - seam detection/pairing is now connectivity-derived:
SeamPair()walks sibling coedges on the same face with opposite orientations, and seam halves are present in wireCoEdgeRefIdsto match TopoDS iteration order. Geometric continuity (including seam continuity) moved toBRepGraph_LayerRegularity; populate/reconstruct/editor APIs adjusted accordingly. - GProp point-set classes restored to TKGeomBase #1268 - reverts #1140.
GProp_PGPropsandGProp_PEquationare back inTKGeomBase, thePointSetLibpackage is removed fromTKMath, callers and docs updated, and the corresponding GTests moved toTKGeomBase. - Shader grid renamed
inf→gpu, plusviewAdaptivesizing #1264 - command and API surface renamed throughout; OpenGl path now computes adaptive bounds from the visible region and fixes axis coloring for rotated rectangular grids. Draw tests, help text, and comments refreshed. - Crash fix in
ShapeConstruct_ProjectCurveOnSurface::insertAdditionalPointOrAdjust#1267 - the function previously assigned a larger array to a smaller one throughNCollection_Array1::Assign, which always threw on size mismatch. Switched to move assignment, which is also more efficient. size_tprinting in DRAW #1270 - newDraw_Interpretor::Append()andoperator<<overloads forsize_t.- Documentation refresh #1265, #1271, #1273 - example variables aligned with OCCT conventions, modern macros/types (
occ::handle,nullptr,M_PI), corrected API/enum names (BOPTools_AlgoTools,BOPAlgo_GlueEnum,BRepPrimAPI_MakePrism, etc.), and a long list of fixed snippet bugs (GetClosedWires/GetOpenWires, invertedIsNull, missingIsDone()guards, JSON syntax in debug, sphere latitude range, BNF brackets inbrep_format, and assorted typos).
Migration
Beta 3 includes one source-compatible-but-behavior-changing item; review if you depend on either area.
NCollection_Array1/2::Assign/operator=now changes the destination bounds. This is a runtime behavior change with no compile-time signal:- Old behavior: throw on size mismatch, copy element-wise into the existing buffer, leave destination bounds untouched.
- New behavior: replace destination bounds and storage from the source, like
std::vectorassignment. - Migration: switch to
CopyValues()anywhere the destination's bounds must stay fixed - in particular for arrays wrapping external storage, arrays sized to a specific algorithm input, or any spot where you were relying on the old throw to catch size mismatches. - Audit hint: incorrect uses of
Assign()were previously caught at runtime by the size-mismatch throw; under the new semantics they will compile and run silently with surprising bounds. Grep for.Assign(andoperator=onNCollection_Array1/Array2in your codebase and review each call. The OCCT in-tree migration is done inGeom*and math utilities, and one such latent bug surfaced inShapeConstruct_ProjectCurveOnSurface(see #1267).
GProp_PGProps/GProp_PEquationlocation. These are back inTKGeomBase(their pre-#1140 home), andPointSetLibis gone fromTKMath. If you had updated includes or link dependencies for the Beta 1/2 layout, revert those changes.- Shader grid command/API rename. Anything driving the grid through Draw with
inf*commands or referencing theinfinite/shadernaming should switch togpu*. The CPU backend restored in Beta 2 is unaffected. The newviewAdaptivemode is opt-in.
Full Changelog: V8_0_0_beta2...V8_0_0_beta3