github Open-Cascade-SAS/OCCT V8_0_0_beta3

latest release: V8_0_0
pre-release5 hours ago

Open Cascade is pleased to announce the release of Open CASCADE Technology version 8.0.0 Beta 3 to the public.

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::Assign change is silent at the call site - code that previously relied on the destination keeping its bounds (or relied on Assign() throwing on size mismatch) will compile unchanged but behave differently at runtime, and any code that misused Assign() 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::Assign now overwrites destination bounds; new CopyValues() preserves them #1269 - Assign() and operator= now resize the destination to match the source (matching std::vector semantics). The previous behavior - throw/assert on size mismatch and copy element-wise into the existing buffer - is now CopyValues(). Callers in Geom* and math utilities that depended on the old behavior were migrated to CopyValues(). Tests expanded to cover owned/external buffers and size changes. Note that this exposes pre-existing misuse: code that relied on Assign() throwing to "validate" sizes, or that assigned a larger array into a smaller view expecting truncation, will now silently change behavior - the ShapeConstruct_ProjectCurveOnSurface crash 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 wire CoEdgeRefIds to match TopoDS iteration order. Geometric continuity (including seam continuity) moved to BRepGraph_LayerRegularity; populate/reconstruct/editor APIs adjusted accordingly.
  • GProp point-set classes restored to TKGeomBase #1268 - reverts #1140. GProp_PGProps and GProp_PEquation are back in TKGeomBase, the PointSetLib package is removed from TKMath, callers and docs updated, and the corresponding GTests moved to TKGeomBase.
  • Shader grid renamed infgpu, plus viewAdaptive sizing #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 through NCollection_Array1::Assign, which always threw on size mismatch. Switched to move assignment, which is also more efficient.
  • size_t printing in DRAW #1270 - new Draw_Interpretor::Append() and operator<< overloads for size_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, inverted IsNull, missing IsDone() guards, JSON syntax in debug, sphere latitude range, BNF brackets in brep_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::vector assignment.
    • 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( and operator= on NCollection_Array1/Array2 in your codebase and review each call. The OCCT in-tree migration is done in Geom* and math utilities, and one such latent bug surfaced in ShapeConstruct_ProjectCurveOnSurface (see #1267).
  • GProp_PGProps / GProp_PEquation location. These are back in TKGeomBase (their pre-#1140 home), and PointSetLib is gone from TKMath. 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 the infinite/shader naming should switch to gpu*. The CPU backend restored in Beta 2 is unaffected. The new viewAdaptive mode is opt-in.

Full Changelog: V8_0_0_beta2...V8_0_0_beta3

Don't miss a new OCCT release

NewReleases is sending notifications on new releases.