Releases: Open-Cascade-SAS/OCCT
V8_0_0
Open Cascade is delighted to announce the final release of Open CASCADE Technology version 8.0.0 to the public.
This is the largest single-version step in OCCT in many years. The cycle covered five Release Candidates and three Beta builds and accumulated more than 500 changes since 7.9.0. The notes below describe what is different in 8.0.0 final compared to 7.9.0. Per-stage notes remain available for anyone tracking individual increments.
Migration guidance is published separately on the developer portal: https://dev.opencascade.org/doc/overview/html/occt__upgrade.html. The page may take a short time to refresh after the tag.
Per-stage release notes
- Release Candidate 1
- Release Candidate 2
- Release Candidate 3
- Release Candidate 4
- Release Candidate 5
- Beta 1
- Beta 2
- Beta 3
Project layout, language baseline and tooling
The minimum C++ standard is now C++17. The codebase uses if constexpr, std::optional, std::variant, std::string_view, std::shared_mutex, structured bindings and fold expressions throughout. Compilers below the C++17 line are no longer supported.
The source tree was reorganized to follow src/Module/Toolkit/Package/File. Resources moved to a top-level /resource directory. Documentation generation moved from the legacy Tcl harness to CMake. Inspector and ExpToCas were extracted into their own repositories. The samples/ directory contains a top-level README pointing to the external samples repository and the browsable site.
CMake support was reworked. The build is validated on CMake 3.10 and above. ARM64 is a first-class target on both macOS and Windows. VCPKG support is comprehensive: a share/-compliant layout, the OCCT_PROJECT_NAME parameter for directory customization, and the upstream opencascade port with TclTk and GTest. VTK 9 is supported, with conditional linkage of vtkRenderingGL2PSOpenGL2 so Android, iOS and GLES builds do not require it. VTK is no longer enabled by default: configurations that depend on TKIVtk and the VTK-based viewer must set USE_VTK=ON explicitly.
GTest is the unit-testing framework for OCCT. New tests were added across every module, and many legacy QADraw test cases were migrated to GTest.
Foundation Classes
Exceptions and threading
Standard_Failure now inherits from std::exception. OCCT errors can be caught through catch (const std::exception&) or catch (const Standard_Failure&). The class exposes what() and ExceptionType(). The static helpers Raise(), Throw() and Instance() are gone; exceptions are raised with the C++ throw keyword. Standard_ErrorHandler::Catches() and LastCaughtError() are also removed.
The error-handler stack is thread_local. There is no global mutex on the error-handler path, so OCCT exception handling scales linearly with thread count. OCC_CATCH_SIGNALS was updated accordingly.
Standard_Mutex and TopTools_MutexForShapeProvider were retired. Code uses std::mutex, std::lock_guard, std::unique_lock and, where ownership is optional, std::unique_ptr<std::mutex>. Standard_Condition was rebuilt on top of standard primitives. Foundation-level globals use std::atomic. Windows host initialization uses std::call_once. Several global mutable statics in TKBool were converted to thread_local. Concurrent operations in the BRep checker and several Foundation paths are race-free.
Transfer_TransferDeadLoop is deprecated. Dead-loop detection now uses local status flags rather than a thrown exception; the class is retained for binary compatibility but should not be used by new code.
Math
The OCCT global math wrappers (ACos, ASin, ATan, ATan2, Sin, Cos, Tan, Cosh, Sinh, Tanh, ACosh, ASinh, ATanh, Sqrt, Log, Log10, Exp, Pow, Abs, Sign, Floor, Ceiling, Round, IntegerPart, Min, Max, NextAfter, ACosApprox) are deprecated. Code should use the matching std:: functions.
Solver and matrix code received broad updates:
MathPoly_Laguerreprovides general polynomial root finding with Laguerre iteration plus deflation, including specialized helpers for quintic, sextic and octic polynomials.- The 2D, 3D and 4D Newton solvers were refactored onto a unified fixed-size API.
- A coordinate-wise polishing phase based on Brent line search (
MathUtils_LineSearch::BrentAlongCoordinate,MathUtils_Random) was added to the PSO and DE solvers. On separable functions it improves component-level precision from around 1e-4 to 1e-8 and better. - The modern
MathRoot,MathSysandMathLinpackages were aligned with the legacymath_*results so callers can switch without behavioural drift. math_Matrix::Multiply()uses an i-k-j loop order matching the row-major storage.math_VectorBase::Norm()andNorm2()use four-way unrolling with pairwise partial sums.math_Matrixandmath_Vectorare movable.math_Vector::Resize()was added.math_DoubleTabis built onNCollection.math_DirectPolynomialRootswas refactored.math_FunctionRootno longer raisesStdFail_NotDonewhen iteration count is queried after a failed root search.- Compile-time
sqrtconstants and a constexpr Pascal allocator forPLib::Binare available. Jacobi coefficients are precomputed. PLib_BaseandPLib_DoubleJacobiPolynomialwere removed.PLib_JacobiPolynomialandPLib_HermitJacobiare value types and their evaluation methods areconst.- Polynomial evaluation in
PLibwas optimized along the hot path. EigenValuesSearcherwas tightened.
TKMath was reorganized: the modern MathRoot, MathSys, MathLin, MathPoly, MathUtils packages own the new solver, root-finder and utility code, while the legacy math_* headers continue to compile.
Collections
Several new containers entered the foundation:
NCollection_FlatMapandNCollection_FlatDataMapare open-addressing hash tables with Robin Hood probing. Pairs are inline in a contiguous array, sizing is power-of-two with bitwise modulo, and hash codes are cached.NCollection_OrderedMapandNCollection_OrderedDataMappreserve insertion order through an intrusive doubly linked list. Lookup, append and removal are O(1).NCollection_KDTreeis a header-only static balanced KD-tree supporting nearest-neighbour, k-NN, range, axis-aligned-box and sphere queries, plus a callback-based range query for custom filtering during spatial searches. It works out of the box withgp_Pnt,gp_Pnt2d,gp_XYZandgp_XY, with optional per-point radii and weighted nearest queries through compile-time template parameters.NCollection_LinearVectoris a contiguous flat-buffer dynamic array. Trivially copyable types grow throughStandard::Reallocate; non-trivial types grow through move construction. Iterator invalidation is documented in the header.NCollection_DynamicArraywas rebuilt on top ofNCollection_LinearVector<T*>with fixed-size blocks, power-of-two block sizing, and a precomputed shift and mask for O(1) indexed access.InsertBefore()andInsertAfter()helpers are available with element-shift semantics.NCollection_ForwardRangeis a lightweight non-owning forward-range adapter. It supports range-basedforover index spans.
The whole map family received an API pass:
Contained()is available on every map type and returnsstd::optional<std::reference_wrapper<T>>.TryEmplace()andTryBind()are available on every map type.Items()andIndexedItems()views allowfor (auto [k, v] : map.Items()) { ... }overDataMap,FlatDataMap,IndexedDataMapandIndexedMap.- Emplace methods (
EmplaceAppend,EmplacePrepend,EmplaceBefore,EmplaceAfter) are present onList,Sequence,DynamicArray,Array1andArray2. NCollection_Listhas astd::initializer_listconstructor, anExchange()method, an optimized move constructor and improved const-correctness.NCollection_UBTreeandNCollection_EBTreetraverse iteratively through an explicit stack (the recursive variant could overflow on deep trees) and have move semantics.NCollection_LocalArrayworks with non-trivial types through placement-new and explicit destruction, has move semantics andReallocate(), so it can be used as a growable stack.NCollection_CellFilterhas proper move semantics.- The
NCollection_IncAllocatorfast path is lock-free: astd::shared_mutexplus CAS bump allocation on an atomic available-size means existing-block allocations never contend. NCollection_BaseMapiterators were unified undersize_tthrough afindFirst()helper.Size()returnssize_tonMap,DataMap,IndexedMap,IndexedDataMap,Sequence,Array1,Array2andList.Length()keeps theintcontract for callers that feed sizes intoint-typed APIs.NCollection_Array1andArray2have zero-based constructors andsize_t-basedResize()overloads.Assign()andoperator=now overwrite the destination bounds (matchingstd::vector); the previous element-wise copy with size-mismatch throw is preserved asCopyValues().Standard_Transientreference counting uses explicit memory ordering (relaxed increment, release decrement with an acquire fence at zero).- Sun WorkShop and Borland compiler workarounds were removed.
- `NCollection_SparseArray...
V8_0_0_beta3
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. TheNCollection_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
V8_0_0_beta2
Open Cascade is pleased to announce the release of Open CASCADE Technology version 8.0.0 Beta 2 to the public.
- Beta 1
- Release Candidate 5
- Release Candidate 4
- Release Candidate 3
- Release Candidate 2
- Release Candidate 1
Overview
Beta 2 is a small follow-up to Beta 1 addressing two issues raised during the Beta soak: thread-safety crashes in the STEP/IGES read and STEP write pipelines, and the loss of the classical CPU grid backend. It also ships the 8.0.0 documentation refresh and a new top-level samples/ slot.
No new features, no API breakage beyond what Beta 1 already announced. Final 8.0.0 release remains planned for May 7, 2026.
Highlights
- Thread-safe STEP write and STEP/IGES read #1259 - fixes
libmallocdouble-free under concurrentSTEPControl_Writer::Transferand intermittent crashes in concurrent STEP/IGES readers. Contract: one reader/writer per thread; STEP read and write safe under that contract, IGES read is not. - CPU grid path restored alongside the shader grid #1252 - the classical
Graphic3d_Structure-based grid removed in Beta 1 (#1223) is back as a coexisting backend for legacy GL profiles and embedded targets. Snap math unchanged; backends mutually exclusive per view. - Documentation modernized for 8.0.0 #1256 - GitHub-native workflow, vcpkg build, C++17 baseline, full 8.0.0 upgrade guide; obsolete Mantis/Gitolite/Inspector/DFBrowser pages removed.
- Top-level
samples/directory #1257 - new README points to the external samples repository and browsable site. - CI warning cleanup #1253 -
NULL->nullptrsweep in OpenGL files plus macOS / Ubuntu warning fixes under the Beta 1-Werrorbaseline.
Migration
Beta 2 introduces no new API breakage. Beta 1 migration material applies unchanged. Two additions to keep in mind:
- STEP/IGES concurrency: STEP read and write are safe with one instance per thread (default parameter set). IGES read is not supported concurrently - serialize it.
- Grid backend: existing
V3d_View::SetGrid/V3d_Viewer::ActivateGridcalls resolve to the restored CPU path again.V3d_View::GridDisplay(Aspect_GridParams, ...)remains the shader path. Activating one erases the other on the same view.
Full Changelog: V8_0_0_beta1...V8_0_0_beta2
V8_0_0_beta1
Open Cascade is delighted to announce the release of Open CASCADE Technology version 8.0.0 Beta 1 to the public.
Overview
Version 8.0.0-beta1 marks the feature-freeze milestone on the road to OCCT 8.0.0. It incorporates 41 changes since 8.0.0-rc5, bringing the cumulative total of improvements and fixes since 7.9.0 to over 500 changes. The Beta cycle is dominated by two large automated quality sweeps and one major NCollection / BRepGraph overhaul.
The Beta phase signals that 8.0.0 is feature-complete: no further functional or API changes are planned before the final release. The remaining work is documentation polish, sample-folder modernization to reflect the new project layout and workflows, and - only if surfaced during the Beta soak - targeted fixes for critical bugs or regressions.
Final 8.0.0 release is planned for May 7, 2026, contingent on a stable, regression-free Beta cycle.
This release focuses on:
- NCollection size_t API migration #1212:
Size()now returnssize_tacross maps, sequences, arrays, and lists;Length()retains the legacyint-returning contract - this is the single most impactful migration item in 8.0.0 - NCollection_LinearVector #1212, #1244: New contiguous flat-buffer dynamic array with
Standard::Reallocate-based growth;NCollection_DynamicArrayrebuilt on top of it;NCollection_Vectordeprecated;NCollection_BasePointerVectorremoved entirely - BRepGraph editor consolidation #1212, #1237:
BuilderViewretired;EditorView(with a dedicatedEditorView_Setters.cxx) becomes the single mutation surface, owning both structural Add/Remove and field-levelMut*()RAII operations with automatic generation propagation - Two-tier mesh storage #1212: New
BRepGraph_MeshCacheandBRepGraph_MeshViewseparate algorithm-derived caches from persistent (definition) triangulations; freshness keyed onFaceDef.OwnGen - Shader-based infinite grid #1223: V3d rectangular and circular grids unified onto a single shader path with infinite extent, background mode, sub-pixel AA, arbitrary
gp_Ax3privileged plane, and matrix-derived pan/rotate compensation - noGraphic3d_CameraAPI change required - Selection through group flipping #1219: New
Graphic3d_Flipperbrings flip-aware BVH bounds and frustum overlap testing in line withOpenGl_Flipperrendering, fixing missed clicks onAIS_TextLabel/PrsDim_Dimensionafter camera rotation - BVH-accelerated polyhedra interference #924: New
IntPatch_PolyhedronBVH(BVH_PrimitiveSet<double, 3>+BVH_LinearBuilder) andIntPatch_BVHTraversalreplace pairwise triangle scanning inIntPatch_InterferencePolyhedron::Interference()- O(log n) queries replace linear search - Shape Healing robustness #1227, #1247: Replacement-chain leaf resolution, cycle rejection, and DFS in-flight guards eliminate stack overflows and edge multiplication on shapes with shared sub-shapes
-Werrorenabled in Linux/macOS CI #1209: GitHub Actions configure step now sets-Werror -Wzero-as-null-pointer-constantplus a curated allow-list of-Wno-error=...suppressions, locking in a clean warning baseline- Two large Clang-Tidy automated sweeps #1207, #1245: Round 1 focused on
emplace_back/empty()/= default; round 2 (clang-tidy 22.1.3) is a codebase-wide sweep applying braces-around-statements,nullptr,override,=default/=delete, and redundant-init removal
What is a Beta Release
A Beta release is a feature-freeze tag on the master branch. All planned 8.0.0 features and APIs are present and stable; the remaining cycle is dedicated to documentation, samples, and regression-only fixes. Unlike Release Candidates - which still admit small targeted features - the Beta gate is intentionally narrow: only critical defects or regressions surfaced during the Beta soak are eligible for cherry-pick before the final release.
What's New in OCCT 8.0.0-beta1
Foundation Classes
NCollection Modernization (Major) #1212
PR #1212 is a single change that touches the entire NCollection layer. Highlights:
-
Size()migration tosize_t: AcrossNCollection_Map,NCollection_DataMap,NCollection_IndexedMap,NCollection_IndexedDataMap,NCollection_Sequence,NCollection_Array1,NCollection_Array2,NCollection_List(and the underlyingNCollection_BaseMap/NCollection_BaseSequence/NCollection_BaseList),Size()now returnssize_t. The legacyint-returning accessor is preserved asLength().intoverloads ofReSize()/BeginResize()/EndResize()delegate through a sharedNbBucketsFromInt()helper with a negative-input guard. The same PR sweepsSize()->Length()across all call sites in TKG2d, TKG3d, TKMath, TKMesh, TKBO, TKOffset, TKShHealing, TKTopAlgo, TKBRep, TKService, TKV3d, TKOpenGl, TKMeshVS, TKDE*, TKXCAF, TKXSBase, TKLCAF, TKStd, and Draw harness wherever the count fed anint-typed API or progress scope. -
New
NCollection_LinearVector: Contiguous flat-buffer dynamic array. UsesStandard::Reallocate-based growth for trivially copyable types and move-construction for non-trivial types. The header carries a documented iterator-invalidation contract. -
NCollection_DynamicArrayrebuilt: Now aLinearVector<T*>of fixed-size blocks with power-of-two block sizing and precomputed shift/mask for O(1) indexed access. Old block-pointer indirection layer is gone. -
NCollection_BasePointerVectorremoved: Superseded byNCollection_LinearVector. No backward-compatibility shim. -
NCollection_BaseMap::Statisticsremoved: Unused. -
NCollection_IncAllocatorlock-free fast path: Switched tostd::shared_mutexplus CAS bump allocation on an atomicAvailableSize. Exclusive lock is taken only for new-block allocation and free-list reordering - existing block allocations now proceed without contention. -
NCollection_BaseMapiterator rework: New forwardfindFirst()helper eliminates negative-bucket arithmetic; iterator state unified undersize_t. -
<cstddef>include added toNCollection_Primes.hxx: Clean-build fix forsize_tresolution on platforms that did not implicitly include it. -
GTest coverage: New
NCollection_DynamicArray_Test.cxxandNCollection_LinearVector_Test.cxxcovering construction, growth, iterator invalidation, move semantics, andResizepatterns.
Other NCollection Improvements
-
NCollection_LinearVectorextended #1244: Added size+value constructor andResize(size, value)overload. Migrated manystd::vectorusages across TKMath/TKMesh/TKBO/TKBRep/visualization toNCollection_LinearVector, including BVH array plumbing - removing the conditional STL-vs-OCCT branches that previously cluttered those paths. -
NCollection_Vectordeprecated #1230: All in-tree usages migrated toNCollection_DynamicArray. The class continues to compile under a deprecation warning. -
NCollection_Array1/Array2zero-based constructors andsize_tresize #1236: New zero-based constructors (allocation + buffer-reuse wrapping).size_t-basedResize()overloads.NCollection_Array1resize logic refactored into a shared implementation. Dedicated GTest coverage included.
Foundation Improvements
-
Robust unit-conversion error handling #1201:
Units_MeasurementandUnits::Convert()now print the name of the unknown unit when conversion fails.Units::Convert()no longer crashes when the first unit is unknown.UnitsAPIdocumentation strings corrected (non-existent unit type "millimeter" replaced with "mm"). -
Standard_DEPRECATED_STDmacro #1241: New macro inStandard_Macro.hxxexpanding to standard[[deprecated("...")]](or empty underOCCT_NO_DEPRECATED). Used byGCE2d_*alias headers; restores compiler compatibility while preserving deprecation warnings.
Modeling Data
BRepGraph - Editor Consolidation and Mesh Cache (Major)
The same PR #1212 rewrites the BRepGraph mutation surface:
EditorViewreplacesBuilderView#1212: TheBuilderViewAPI is removed (BRepGraph_BuilderView.cxx/.hxxdeleted).EditorView(BRepGraph_EditorView.cxx/.hxx, plusBRepGraph_EditorView_Mut.cxx) becomes the single programmatic mutation surface, owning both struct...
V8_0_0_rc5
Open Cascade is delighted to announce the release of Open CASCADE Technology version 8.0.0 Release Candidate 5 to the public.
Overview
Version 8.0.0-rc5 is a candidate release incorporating 64 improvements and bug fixes compared to version 8.0.0-rc4, bringing the total improvements since version 7.9.0 to over 460 changes.
This release focuses on:
- Gordon surface construction: New
GeomFill_Gordon/GeomFill_GordonBuilderclasses implementing transfinite interpolation from N x M curve networks via the Boolean sum formula, generalizingGeomFill_Coons(4-boundary patch) to arbitrary curve grids with automatic intersection detection, reparametrization, and parallel processing support - BRepGraph -- graph-based BRep representation: New foundation for topology representation as incidence tables (
BRepGraphpublic API +BRepGraphIncinternal structure), with bidirectional traversal, typed node IDs, extensible Layer/Cache system, deduplication, history tracking, mutation guards, and roundtrip conversion to/fromTopoDS_Shape - Modern differential properties packages: New
Geom2dProp,GeomProp, andBRepProppackages replace the legacy macro-based LProp/.gxx pattern with C++17std::variant-dispatched evaluators, result structs instead of exceptions, derivative caching, and per-geometry optimizations - Geometry-aware bounding boxes: New
GeomBndLibpackage with per-type evaluators for all Geom curve/surface types,std::variant-based dispatch, analytical solutions for conics/quadrics, and PSO+Powell optimization for tightBoxOptimalresults;BndLibdelegated toGeomBndLibinternally - New evaluation and extrema packages:
GeomEval/Geom2dEvalevaluation-focused geometry classes (Bezier surfaces, helicoids, spirals, ellipsoids),ExtremaPCpoint-to-curve extrema with per-geometrystd::variantdispatch and grid evaluation - API modernization: Return-by-value handle APIs with deprecated out-parameter overloads, removed
TColGeom/TColGeom2dpackages, harmonized GC/gce maker APIs, new string operators, configurableGeomHashtolerances - Thread-safety and performance: Data race fixes in
BRepCheck_*and Foundation globals,TopExp_Explorerstack refactored toNCollection_LocalArray, BSpline span location optimization, transformed surface caching, memory management improvements in Boolean operations
What is a Release Candidate
A Release Candidate is a tag on the master branch that has completed all test rounds and is stable to use. Release candidates progress in parallel with maintenance releases, with the difference that maintenance releases remain binary compatible with minor releases and cannot include most improvements. The cycle for a release candidate is planned to be 5-10 weeks, while maintenance releases occur once per quarter.
What's New in OCCT 8.0.0-rc5
Foundation Classes
Collection Improvements
-
NCollection_FlatMap/FlatDataMap optimizations #1103, #1108: Internal optimizations for Robin Hood hash maps -- aligned lookup paths, improved probe sequence handling, updated usage notes
-
NCollection_ForwardRange #1166: New lightweight forward-range adapter providing
begin()/end()iteration over non-owning index spans, enabling range-basedforloops over graph node collections -
NCollection_DynamicArray extensions #1167: New
InsertBefore()/InsertAfter()helpers with element shift semantics -
NCollection_LocalArray for non-trivial types #1181: Extended to support elements with constructors/destructors using placement-new and explicit destruction, enabling use as a stack for non-POD types
-
NCollection_KDTree extensions #1167: New callback-based range query API for custom filtering during spatial searches
-
Container usage optimizations #1102: Hot-path optimizations in TKBO/TKOffset/TKOpenGl --
BOPTools_Setstorage switched fromNCollection_ListtoNCollection_Vector, reduced redundant lookups/copies inBOPAlgo_Builder, replacedstd::map/std::setwithNCollection_DataMap/NCollection_Mapin ray-tracing state
String Enhancements
- New string operators #1188: Added
AssignCat(int/double)andCat(int/double)overloads toTCollection_ExtendedString(plusoperator+=/operator+). AddedAssignCat(TCollection_ExtendedString, replaceNonAscii)and wide-char (wchar_t*) append/concat helpers toTCollection_AsciiString
Math and Solver Enhancements
-
Modern Math API alignment* #1134: Aligned modern
MathRoot/MathSys/MathLinAPIs with legacymath_*behavior for consistent results -
math_FunctionRoot constructor safety #1121: Guarded
Sol.NbIterations()calls withif (Done)check, preventingStdFail_NotDoneexception during construction when root is not found
PointSetLib Package
- New PointSetLib package #1140: Standalone point cloud analysis in TKMath without
GProp_GPropsinheritance:PointSetLib_Props: Weighted point set properties (mass, barycentre, inertia matrix via Huygens theorem)PointSetLib_Equation: PCA-based dimensionality analysis (point/line/plane/space detection) with principal axes and extents- Deprecates
GProp_PGProps,GProp_PEquation,GProp_CelGProps,GProp_SelGProps,GProp_VelGProps - Removed
GProp_EquaTypeenum (zero consumers)
Thread Safety
- Fix thread-safety data races #1180: Refactored
BRepCheck_*result classes to use always-present mutex with parallel-mode guard. Made Foundation-level globals thread-safe viastd::atomic, added mutex-based protection for lazy initialization, introducedstd::call_oncefor Windows host initialization. Converted several TKBool global mutable statics tothread_local
Modeling Data
BRepGraph -- Graph-Based BRep Representation
-
New BRepGraph foundation #1166: A graph-based representation of topology and BRep geometry as an alternative to the
TopoDS_Shapelinked data structure. The foundation provides two levels:- BRepGraph (public): Graph representation with typed
BRepGraph_NodeIdidentifiers, multiple View classes (TopoView,RefsView,CacheView,BuilderView), bidirectional parent/child exploration (BRepGraph_ChildExplorer,BRepGraph_ParentExplorer,BRepGraph_WireExplorer), definition and reference iterators (BRepGraph_DefsIterator,BRepGraph_RefsIterator), extensibleLayer/Cachesystem, mutation guards (BRepGraph_MutGuard), history tracking (BRepGraph_History), deduplication (BRepGraph_Deduplicate), compaction (BRepGraph_Compact), deep copy (BRepGraph_Copy), and validation (BRepGraph_Validate) - BRepGraphInc (internal): Incidence table storage with
BRepGraphInc_Populate(TopoDS_Shape -> BRepGraph) andBRepGraphInc_Reconstruct(BRepGraph -> TopoDS_Shape) roundtrip conversion BRepGraph_Tool: Centralized geometry access API (analogue ofBRep_Tool) for extracting curves, surfaces, locations, tolerances, and flags from graph nodesBRepGraph_Builder: Programmatic graph construction without requiring an inputTopoDS_Shape- 49,000+ lines of new code with comprehensive GTest coverage (20+ test files covering build, explore, copy, deduplicate, history, events, geometry, polygons, transforms, validation, version stamps, views)
- BRepGraph (public): Graph representation with typed
-
BRepGraph iterators, ref caching, mutation APIs, and layer events #1190: Extensions to the BRepGraph foundation:
- New iterators:
BRepGraph_RelatedIterator(navigate related entities),BRepGraph_CacheKindIterator(iterate cache by entity kind),BRepGraph_LayerIterator(iterate registered layers) BRepGraph_RefTransientCache: Cache for transient data associated with refsBuilder::AppendFull: Full node append with all propertiesBuilderView::RemoveRefwith orphan pruning- Mutation APIs:
SetCoEdgePCurve,ClearFaceMesh,ClearEdgePolygon3D,ValidateMutationBoundary - Layer event propagation: ref-modification events through
LayerRegistry(deferred/immediate modes) CreateAutoProductoption inBRepGraphInc_Populate::Options- Renamed
CoEdgeDef::SensetoOrientation,FreeChildRefIdstoAuxChildRefIds
- New iterators:
Geometry Evaluation Classes
- New Eval geometry classes #1104: Evaluation-focused geometry classes extending the Geom/Geom2d hierarchies:
- 2D:
Geom2dEval_TBezierCurve,Geom2dEval_AHTBezierCurve,Geom2dEval_SineWaveCurve,Geom2dEval_ArchimedeanSpiralCurve,Geom2dEval_LogarithmicSpiralCurve,Geom2dEval_CircleInvoluteCurve - 3D curves:
GeomEval_TBezierCurve,GeomEval_AHTBezierCurve,GeomEval_SineWaveCurve,GeomEval_CircularHelixCurve - 3D surfaces:
GeomEval_TBezierSurface, `GeomEval_AHTBezierSur...
- 2D:
V8_0_0_rc4
Open CASCADE Technology Version 8.0.0 Release Candidate 4
Open Cascade is delighted to announce the release of Open CASCADE Technology version 8.0.0 Release Candidate 4 to the public.
Overview
Version 8.0.0-rc4 is a candidate release incorporating 111 improvements and bug fixes compared to version 8.0.0-rc3, bringing the total improvements since version 7.9.0 to over 400 changes.
This release focuses on:
- Redesigned geometry evaluation architecture: New
EvalD*API with POD result structs replaces old virtualD0/D1/D2/D3methods, elementary geometry evaluation devirtualized viastd::variantdispatch, new EvalRep descriptor system decouples geometry identity from evaluation strategy, all 29 leaf Geom/Geom2d classes markedfinal - Elimination of heap indirection in core geometry classes: BSpline/Bezier classes use direct value-member arrays instead of handle-wrapped heap storage, always-populated weights via static unit-weights buffer eliminates pervasive null-check patterns across ~100 call sites
- Topological data structure overhaul:
TopoDS_TShapehierarchy replaces linked-list child storage with contiguous arrays, bit-packs shape state intouint16_t, devirtualizesShapeType(), and introduces index-based iteration - Modern C++ foundation layer:
Standard_Failureinherits fromstd::exception, error handlers usethread_localstorage eliminating global mutex contention, reference counting uses optimized memory ordering, mesh plugin system replaced with registry-based factory - New high-performance collections: Robin Hood hash maps (
NCollection_FlatDataMap/FlatMap), insertion-order-preserving maps (NCollection_OrderedMap/OrderedDataMap), header-only KD-Tree for spatial queries, C++17 structured binding support viaItems()views, unified map API withContained/TryEmplace/TryBind - Numerical solver improvements: Laguerre polynomial root-finder, coordinate-wise Brent polishing for PSO/DE improving precision by 4+ orders of magnitude, batch 2D curve evaluation, BSplCLib interpolation hot-path optimizations
- Comprehensive automated migration toolkit: 12-phase Python script suite in
adm/scripts/migration_800/for migrating external projects to 8.0.0 APIs
What is a Release Candidate
A Release Candidate is a tag on the master branch that has completed all test rounds and is stable to use. Release candidates progress in parallel with maintenance releases, with the difference that maintenance releases remain binary compatible with minor releases and cannot include most improvements. The cycle for a release candidate is planned to be 5-10 weeks, while maintenance releases occur once per quarter.
What's New in OCCT 8.0.0-rc4
Foundation Classes
High-Performance Collections
-
New
NCollection_FlatDataMapandNCollection_FlatMap#1015: Cache-friendly open-addressing hash containers with Robin Hood hashing:- All key-value pairs stored inline in contiguous array (eliminates per-element heap allocations)
- Robin Hood hashing reduces probe sequence variance for more predictable performance
- Power-of-2 sizing for fast modulo operations via bitwise AND
- Cached hash codes for faster collision handling and rehashing
- Also in this PR: optimized
Standard_Transientreference counting with explicit memory ordering (followingstd::shared_ptrpattern), deprecatedStandard_Mutexin favor ofstd::mutex
-
New
NCollection_KDTree#1073: Header-only static balanced KD-Tree for efficient spatial point queries:- Nearest-neighbor search in O(log N), k-nearest, range (sphere), box (AABB), and sphere containment queries
- Works with
gp_Pnt,gp_Pnt2d,gp_XYZ,gp_XYout-of-the-box - Optional per-point radii via compile-time template parameter
- Weighted nearest queries support
-
New
NCollection_OrderedMapandNCollection_OrderedDataMap#1072: Insertion-order-preserving hash containers using intrusive doubly-linked list:- O(1) hash lookup, O(1) append/remove
- Deterministic iteration in insertion order
- O(1) removal (unlike
NCollection_IndexedMapwhich requires O(n) swap-and-shrink)
-
Try and Emplace methods for NCollection maps* #1022: Non-throwing lookup operations and in-place construction:
if (auto* pValue = aMap.TryBind(key, defaultValue)) { /* use pValue */ } aMap.Emplace(key, constructorArgs...); // No copy/move!
-
Emplace methods for NCollection containers #1035: In-place construction support for
NCollection_List(EmplaceAppend,EmplacePrepend,EmplaceBefore,EmplaceAfter),NCollection_Sequence,NCollection_DynamicArray,NCollection_Array1, andNCollection_Array2 -
Items() views with C++17 structured bindings #1038: Key-value pair iteration for NCollection map classes:
for (auto [aKey, aValue] : aMap.Items()) { ... }
Added
Items()for DataMap, FlatDataMap, IndexedDataMap andIndexedItems()for IndexedMap and IndexedDataMap -
NCollection_List optimization #1040:
std::initializer_listconstructor, improved const-correctness, optimized move constructor,Exchange()method -
Unified map API and collection performance optimizations #1065: API unification and performance improvements across NCollection:
- Unified map API:
Contained()added to all map types returningstd::optional<std::reference_wrapper<T>>,TryEmplace/TryBindparity across all map types - NCollection_UBTree/EBTree: iterative stack-based traversal replacing recursion (prevents stack overflow on deep trees), move semantics
- NCollection_LocalArray: move semantics,
Reallocate()for use as growable stack - NCollection_CellFilter: proper move semantics replacing destructive-copy hack
- Removed dead Sun WorkShop/Borland compiler workarounds
- Unified map API:
-
TColStd_PackedMapOfInteger refactoring #1023: Improved implementation of specialized integer set
-
Keep deprecated NCollection aliases #1026: Deprecated package type aliases (
TColStd_*,TopTools_*) kept for backward compatibility with deprecation warnings
Exception Handling Revolution
-
Standard_Failure inherits from std::exception #984: Bridges OCCT's exception system with standard C++:
- OCCT exceptions now caught by standard
catch (const std::exception&)blocks - Internal storage switched from
occ::handletostd::shared_ptr - New
what()method implements std::exception interface - New
ExceptionType()virtual method for exception class identification - Exception classes simplified to pure data containers
- Removed
Raise(),Instance(),Throw()static methods - usethrowinstead
- OCCT exceptions now caught by standard
-
Thread-local error handler stack #980: Replaced global mutex-protected stack with
thread_localstorage:- Zero lock overhead - no mutex acquisition for error handler operations
- Perfect scalability - threads never contend on error handler state
- Especially beneficial in TBB/OpenMP parallelized algorithms
- Removed:
Catches(),LastCaughtError()methods - Updated
OCC_CATCH_SIGNALSmacro with newRaise()re-throw method
-
Use throw instead of legacy Standard_Failure::Raise #983: Migrated codebase to modern C++ exception throwing
Math and Solver Enhancements
-
Cache-friendly matrix multiplication #1015: Changed
math_Matrix::Multiply()from i-j-k to i-k-j loop order for row-major storage with significant speedup for large matrices -
SIMD-friendly vector norm #1015: 4-way loop unrolling for
math_VectorBase::Norm()/Norm2()with pairwise partial sum combination -
Optimized atomic reference counting #1015:
Standard_Transientuses explicit memory ordering (memory_order_relaxedfor increment,memory_order_releasefor decrement with acquire fence only at zero) -
Laguerre polynomial solver and Newton API refactoring #1086: New
MathPoly_Laguerrefor general polynomial root finding with Laguerre + deflation, including Quintic/Sextic/Octic helpers. Refactored specialized Newton solvers (2D/3D/4D) to unified fixed-size API -
Coordinate-wise polishing for PSO and DE solvers #1088: Brent-based coordinate-wise polishing phase improving component-level precision from ~1e-4 to 1e-8+ for separable functions. New
BrentAlongCoordinateinMathUtils_LineSearch, newMathUtils_Randomutility -
PLib polynomial evaluation optimization #953
-
MathRoot and MathSys enhancements #954: New mathematical utilities
-
**math_DirectPolynomialRoots refactorin...
V8_0_0_rc3
Open CASCADE Technology Version 8.0.0 Release Candidate 3
Open Cascade is delighted to announce the release of Open CASCADE Technology version 8.0.0 Release Candidate 3 to the public.
Overview
Version 8.0.0-rc3 is a candidate release incorporating 157 improvements and bug fixes compared to version 8.0.0-rc2, bringing the total improvements since version 7.9.0 to over 290 changes.
This release focuses on:
- Modernization of math functions with migration to C++ standard library
- Threading improvements with migration from
Standard_Mutextostd::mutex - Performance optimizations across Foundation Classes, especially BSpline computations
- API improvements with
constexpr/noexceptannotations throughout the codebase - Data Exchange enhancements including stream support and STEP metadata export
What is a Release Candidate
A Release Candidate is a tag on the master branch that has completed all test rounds and is stable to use. Release candidates progress in parallel with maintenance releases, with the difference that maintenance releases remain binary compatible with minor releases and cannot include most improvements. The cycle for a release candidate is planned to be 5-10 weeks, while maintenance releases occur once per quarter.
What's New in OCCT 8.0.0-rc3
Foundation Classes
Math Functions Modernization
- Deprecated math global functions in favor of
stdequivalents #833: The following functions are now deprecated and will be removed in future releases:ACos(),ASin(),ATan(),ATan2()→ usestd::acos,std::asin,std::atan,std::atan2Sinh(),Cosh(),Tanh()→ usestd::sinh,std::cosh,std::tanhASinh(),ACosh(),ATanh()→ usestd::asinh,std::acosh,std::atanhSqrt(),Log(),Log10(),Exp()→ usestd::sqrt,std::log,std::log10,std::expPow(),Abs(),Sign()→ usestd::pow,std::abs,std::copysignSin(),Cos(),Tan()→ usestd::sin,std::cos,std::tanFloor(),Ceiling(),Round()→ usestd::floor,std::ceil,std::roundIntegerPart()→ usestd::truncMin(),Max()→ usestd::min,std::maxNextAfter()→ usestd::nextafter
Threading Modernization
- Replaced
Standard_Mutexwithstd::mutex#766: Migrated from legacy mutex implementation to standard C++ mutexes across all modules:- Use
std::lock_guardorstd::unique_lockinstead ofStandard_Mutex::Sentry - Use
std::mutexinstead ofStandard_Mutex - Optional mutex holders now use
std::unique_ptr<std::mutex>
- Use
Geometric Primitives (gp)
- Added standard direction enumerations #803: New
gp_Dir::Dandgp_Dir2d::Denums for standard directions (X, Y, Z, NX, NY, NZ) - Enhanced constructors with
constexpr/noexcept#798, #796, #790: Geometric primitives (circles, cones, cylinders, axes) now have constexpr constructors
Strings
- Added
EmptyString()methods #788: NewTCollection_AsciiString::EmptyString()andTCollection_ExtendedString::EmptyString()for efficient empty string access - Optimized
TCollection_AsciiString#752: Pre-defined string optimization for better performance
Math Containers
- Move semantics for
math_Matrixandmath_Vector#841: Added move constructors and move assignment operators for efficient container transfers
BSpline Optimizations
- Optimized BSpline cache #906, #897: Improved BSpline data containers with
constexprand validation, optimized local calls - Enhanced B-Spline curve computation #855: Performance improvements for curve calculations
Other Foundation Improvements
- Optimized
Bndpackage #839, #856: Bounding box optimizations and fixes - Modernized
Bnd_B2andBnd_B3#838: Template-based implementation - Enhanced BVH implementation #842, #858: Generic vector types and transformation tests
- Performance improvements for
TopExppackage #831 - Optimized
Quantitypackage #834 - Improved
NCollectionvector constructors #835 - Modernized
NCollection_SparseArrayBase#804 - EigenValuesSearcher improvements #714
- Refactored
CSLibpackage with GTests #857 - Refactored
Extremapackage #869 - Compile-time sqrt constants #789
- Precomputed Jacobi coefficients #778
- Constexpr Pascal allocator for
PLib::Bin#777 - Added precision-related methods in
Precision.hxx#811 - Angle normalization refactor for
ElSLib/ElCLib#813
Modeling Data
- New
GeomHashandGeom2dHashpackages #845: Hash functions for geometric curves and surfaces enabling efficient comparison and caching
Modeling Algorithms
- Enhanced periodic curve handling in
ChFi3d_Builder#892 - Improved parameter validation logic in BSplineCache #829
Shape Healing
Data Exchange
Stream Support
- Implemented stream support for
DE_Wrapper#663: Stream-based read/write methods for STEP, STL, VRML, and other formats with validation utilities
STEP Improvements
- STEP General Attributes export #634: Export string metadata as STEP
property_definitionentities - STEP coordinate system connection points import #779
std::string_viewfor STEP type names #784: Performance improvement usingstd::string_viewfor type recognition- Refactored
StepTypeselection #786 - Custom hasher for string_view types in
RWStepAP214#888
Plugin System
- Reorganized DE plugin system #696: New
Register/UnRegistermethods for configuration nodes,DE_MultiPluginHolderfor multiple registrations
Visualization
Build and Configuration
- Fixed C++ standard options and NOMINMAX scope #907
- Modernized compiler flags for C++17 #867
- Updated macOS compiler flags and includes #884
- Updated VCPKG version #878
- Validated configuration on CMake 3.10+ #762
- C++17 version macro #785
- Updated
.gitignorewith explicit allowlist #787
Testing
- Migrated QA DRAW tests to GTest #818, #823
- Migrated QA NCollection to GTests #709
- Added Boolean operation GTests #721
- Added
ShapeAnalysis_CanonicalRecognitionunit tests #720 - Added
Standard_ArrayStreamBufferunit tests #708 - Added PLib functionality unit tests #705
- Covered math module with GTests [#684](https://github.com/Open-Cascade-SAS/OCCT/pul...
V7_9_3
Open CASCADE Technology 7.9.3 Released
Open Cascade is delighted to announce the release of Open CASCADE Technology version 7.9.3 to the public.
Overview
Version 7.9.3 is a maintenance release incorporating over 15 improvements and bug fixes compared to version 7.9.2.
What's New in OCCT 7.9.3
Modeling
- Fix memory consumption in BOPAlgo_PaveFiller_6.cxx (#864)
- Fix BRepBuilderAPI_GTransform face stretch crash (#875)
- Fix Boolean fuse segfaults on loft (#860)
- Fix BRepFilletAPI_MakeFillet::Add hangs on adding edge (#859)
- Fix crash in BRepFilletAPI_MakeChamfer (#743)
- Fix crash in BRepOffsetAPI_MakePipeShell (#740)
- Fix segfault on chamfer or fillet approaching ellipse (#738)
- Fix ShapeUpgrade_UnifySameDomain crash (#876)
Shape Healing
- Optimize FixFaceOrientation (#584)
Visualization
- Improve detection of full cylinder/cone parameters (#830)
Data Exchange
- Fix hang in STEPCAFControl_Reader (#733)
Application Framework
- Early-return null NamedShape when TNaming_UsedShapes is missing (#760)
Full Changelog: V7_9_2...V7_9_3
V7_9_2
Open CASCADE Technology 7.9.2 Released
Open Cascade is delighted to announce the release of Open CASCADE Technology version 7.9.2 to the public.
Overview
Version 7.9.2 is a maintenance release incorporating over 25 improvements and bug fixes compared to version 7.9.1.
What's New in OCCT 7.9.2
Configuration & Build System
- VCPKG add TclTk support (#580)
- Remove jemalloc port files (#581)
- Update C++ standard to C++17
- Fix ARCH for older 32-bit macs (#626)
- Fixed issue with CSF variable overwriting (#561)
Testing & Quality
- Update samples C++ version (#606)
- Remove marking warnings as errors in CI builds
Foundation Classes
Modeling
- Fix array indexing bug in IntAna_IntQuadQuad::NextCurve method (#703)
- CornerMax incorrect realisation in Bnd_Box (#664)
- Fix null surface crash in fixshape (#623)
- Fix null surface crash in UnifySameDomain (#624)
- GeomFill_CorrectedFrenet hangs in some cases (#630)
- Mismatch between projected point and parameter in ShapeAnalysis_Curve (#600)
- Infinite loop when Simplifying Fuse operation, CPU to 100% (#557)
Shape Healing
- Revolved shape in STEP file is imported inverted (#699)
Visualization
- Do not write comment into binary PPM image (Image_AlienPixMap)
Data Exchange
- Crash on empty list in STEP (#671)
- Facets with empty normals like 'f 1// 2// 3//' in RWObj_Reader (#520)
- Fix indices during parsing of arrays in GLTF Reader (#602)
- Preserving control directives in Step Export (#601)
- Optimize entity graph evaluating (#562)
Draw
- Fix message color mixing (#685)
- Misprint in vcomputehlr command leading to error if no Viewer (#526)
Coding
- Reducing relying on exceptions (#676)
Full Changelog: V7_9_1...V7_9_2
V8_0_0_rc2
Open CASCADE Technology Version 8.0.0 Release Candidate 2
Open Cascade is delighted to announce the release of Open CASCADE Technology version 8.0.0 Release Candidate 2 to the public.
(Release Candidate 1: https://github.com/Open-Cascade-SAS/OCCT/releases/tag/V8_0_0_rc1)
Overview
Version V8_0_0_rc2 is a candidate release incorporating over 80 improvements and bug fixes compared to version V8_0_0_rc1, bringing the total improvements since version 7.9.0 to over 130 changes.
What is a Release Candidate
A Release Candidate is a tag on the master branch that has completed all test rounds and is stable to use.
Release candidates progress in parallel with maintenance releases, with the difference that maintenance releases remain binary compatible with minor releases and cannot include most improvements.
The cycle for a release candidate is planned to be 5-10 weeks, while maintenance releases occur once per quarter.
What's New in OCCT 8.0.0-rc2
Core
- Upgraded minimum C++ version requirement to C++17 #537
- Geometric Classes Optimization: Significantly optimized gp_Vec, gp_Vec2d, gp_XY, and gp_XYZ classes by simplifying mathematical computations, replacing indirect API calls with direct data member access in performance-critical sections, and improving matrix operations including inversion, transposition, and power calculations #578
- Reworked atomic and Standard_Condition implementation #598
- Optimized NCollection_Array1 with type-specific improvements #608
- Reworked math_DoubleTab to use NCollection container #607
- Fixed WinAPI resource leaks #625
- Fixed include brackets type issues #635
- Geom package copy optimization #645
Build System and Configuration
- Comprehensive VCPKG Support: Added full VCPKG layout configuration with CMake file placement in share/ directory for compliance, introduced OCCT_PROJECT_NAME parameter for customizing directory structure, and updated environment scripts while maintaining backward compatibility #618, #637, #638
- Added VCPKG port opencascade with TclTk and GTest support #580, #616
- Implemented flexible project root configuration #641
- Fixed build config file validation issues #647
- Disabled GLTF build without RapidJSON #646
- Fixed link errors on macOS when not building using vcpkg #609
- Fixed CSF variable overwriting issues #561
- Fixed paths to 3rd-party in cmake configuration #523
- Fixed ARCH detection for older 32-bit Macs #626
- Removed unused CMake scripts and dependencies #644, #581
- Fixed samples CMake configuration #643
Modeling
- New Helix Toolkit: Implemented a complete TKHelix toolkit with geometric helix curve adaptor and topological builders, featuring advanced B-spline approximation algorithms for high-quality helix representation and comprehensive TCL command interface #648
- Added option to not build history in BRepFill_PipeShell #632
- Fixed GeomFill_CorrectedFrenet hanging in some cases #630
- Fixed infinite loop in Simplifying Fuse operation #557
- Fixed Bnd_BoundSortBox::Compare failures in some cases #518
- General Fuse Optimization: Improved BOPAlgo_PaveFiller performance by adding null checks for triangulation in BRep_Tool::IsClosed, simplifying index lookup logic in BOPDS_DS, and introducing helper functions for better clarity and robustness #514
- Fixed BRepFilletAPI_MakeFiller segfault with two curves and rim #532
- Fixed mismatch between projected point and parameter in ShapeAnalysis_Curve #600
Shape Healing
- Implemented reusing Surface Analysis for Wire fixing #565
Visualization
- Enhanced FFmpeg Compatibility Layer and updated Video Recorder #582
- Fixed binary PPM image comment writing in Image_AlienPixMap #413c08272b
- Updated Graphic3d_Aspects::PolygonOffsets documentation #519
- Marked Immediate Mode rendering methods as deprecated in AIS_InteractiveContext #521
Data Exchange
- Fixed GLTF indices parsing during array processing #602
- Implemented non-uniform scaling in GLTF Import #503
- Fixed GLTF saving edges when Merge Faces is enabled #554
- Changed GLTF export line type to LINE_STRIP #535
- Fixed missing GDT values in STP Import #617
- Preserved control directives in Step Export #601
- Ignored unit factors during tessellation export #577
- Applied scaling transformation in Step Export #513
- Fixed missing Model Curves in IGES Export transfer cache #483
- Fixed XCAFDoc_Editor::RescaleGeometry not rescaling translation of roots reference #529
- Fixed facets with empty normals handling in RWObj_Reader #520
- Added conversion utilities for STEP geometrical and visual enumerations #545
- Added missing headers #530
- Optimized StepData_StepReaderData #543
- Optimized entity graph evaluating #562
- Removed GLTF files from XDEDRAW #649
- Removed unused dependencies from TKXDEDRAW #650
Testing
- Updated GitHub Actions to use latest versions #640
- Added performance summary posting to PR #612
- Fixed master validation workflow #611
- Added daily vcpkg package validation #605
- Updated samples C++ version #606
- Removed extra GitHub jobs #594
- Added ASCII code validation #593
- Migrated PR actions to VCPKG-based #587
- Added compilation on Clang without PCH #540
- Enabled IR integration concurrency #531, #536
Draw and Tools
- Fixed vcomputehlr misprint leading to error if no Viewer #526
- Updated DrawDefault script to handle missing directory cases #542
Documentation
- Added missing description to HLRBRep_HLRToShape methods #525
- Added Copilot instructions for OCCT development #589
How to Upgrade
There are no critical breaking changes at the API level, however note the following:
- C++17 Requirement: The minimum C++ version has been upgraded to C++17. Ensure your compiler supports this standard.
- Deprecated Methods: Some Immediate Mode rendering methods in AIS_InteractiveContext have been marked as deprecated.
Migration should proceed smoothly for most applications.
Performance Improvements
This release includes several significant performance optimizations:
- Geometric Classes: Major performance improvements in gp_Vec, gp_Vec2d, gp_XY, and gp_XYZ classes through direct data access and simplified computations
- Boolean Operations: General Fuse algorithm opt...