Skip to content

Releases: Open-Cascade-SAS/OCCT

V8_0_0_rc5

06 Apr 11:42

Choose a tag to compare

V8_0_0_rc5 Pre-release
Pre-release

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_GordonBuilder classes implementing transfinite interpolation from N x M curve networks via the Boolean sum formula, generalizing GeomFill_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 (BRepGraph public API + BRepGraphInc internal structure), with bidirectional traversal, typed node IDs, extensible Layer/Cache system, deduplication, history tracking, mutation guards, and roundtrip conversion to/from TopoDS_Shape
  • Modern differential properties packages: New Geom2dProp, GeomProp, and BRepProp packages replace the legacy macro-based LProp/.gxx pattern with C++17 std::variant-dispatched evaluators, result structs instead of exceptions, derivative caching, and per-geometry optimizations
  • Geometry-aware bounding boxes: New GeomBndLib package with per-type evaluators for all Geom curve/surface types, std::variant-based dispatch, analytical solutions for conics/quadrics, and PSO+Powell optimization for tight BoxOptimal results; BndLib delegated to GeomBndLib internally
  • New evaluation and extrema packages: GeomEval/Geom2dEval evaluation-focused geometry classes (Bezier surfaces, helicoids, spirals, ellipsoids), ExtremaPC point-to-curve extrema with per-geometry std::variant dispatch and grid evaluation
  • API modernization: Return-by-value handle APIs with deprecated out-parameter overloads, removed TColGeom/TColGeom2d packages, harmonized GC/gce maker APIs, new string operators, configurable GeomHash tolerances
  • Thread-safety and performance: Data race fixes in BRepCheck_* and Foundation globals, TopExp_Explorer stack refactored to NCollection_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-based for loops 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_Set storage switched from NCollection_List to NCollection_Vector, reduced redundant lookups/copies in BOPAlgo_Builder, replaced std::map/std::set with NCollection_DataMap/NCollection_Map in ray-tracing state

String Enhancements

  • New string operators #1188: Added AssignCat(int/double) and Cat(int/double) overloads to TCollection_ExtendedString (plus operator+=/operator+). Added AssignCat(TCollection_ExtendedString, replaceNonAscii) and wide-char (wchar_t*) append/concat helpers to TCollection_AsciiString

Math and Solver Enhancements

  • Modern Math API alignment* #1134: Aligned modern MathRoot/MathSys/MathLin APIs with legacy math_* behavior for consistent results

  • math_FunctionRoot constructor safety #1121: Guarded Sol.NbIterations() calls with if (Done) check, preventing StdFail_NotDone exception during construction when root is not found

PointSetLib Package

  • New PointSetLib package #1140: Standalone point cloud analysis in TKMath without GProp_GProps inheritance:
    • 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_EquaType enum (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 via std::atomic, added mutex-based protection for lazy initialization, introduced std::call_once for Windows host initialization. Converted several TKBool global mutable statics to thread_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_Shape linked data structure. The foundation provides two levels:

    • BRepGraph (public): Graph representation with typed BRepGraph_NodeId identifiers, 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), extensible Layer/Cache system, 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) and BRepGraphInc_Reconstruct (BRepGraph -> TopoDS_Shape) roundtrip conversion
    • BRepGraph_Tool: Centralized geometry access API (analogue of BRep_Tool) for extracting curves, surfaces, locations, tolerances, and flags from graph nodes
    • BRepGraph_Builder: Programmatic graph construction without requiring an input TopoDS_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 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 refs
    • Builder::AppendFull: Full node append with all properties
    • BuilderView::RemoveRef with orphan pruning
    • Mutation APIs: SetCoEdgePCurve, ClearFaceMesh, ClearEdgePolygon3D, ValidateMutationBoundary
    • Layer event propagation: ref-modification events through LayerRegistry (deferred/immediate modes)
    • CreateAutoProduct option in BRepGraphInc_Populate::Options
    • Renamed CoEdgeDef::Sense to Orientation, FreeChildRefIds to AuxChildRefIds

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...
Read more

V8_0_0_rc4

16 Feb 17:10
e72d772

Choose a tag to compare

V8_0_0_rc4 Pre-release
Pre-release

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 virtual D0/D1/D2/D3 methods, elementary geometry evaluation devirtualized via std::variant dispatch, new EvalRep descriptor system decouples geometry identity from evaluation strategy, all 29 leaf Geom/Geom2d classes marked final
  • 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_TShape hierarchy replaces linked-list child storage with contiguous arrays, bit-packs shape state into uint16_t, devirtualizes ShapeType(), and introduces index-based iteration
  • Modern C++ foundation layer: Standard_Failure inherits from std::exception, error handlers use thread_local storage 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 via Items() views, unified map API with Contained/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_FlatDataMap and NCollection_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_Transient reference counting with explicit memory ordering (following std::shared_ptr pattern), deprecated Standard_Mutex in favor of std::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_XY out-of-the-box
    • Optional per-point radii via compile-time template parameter
    • Weighted nearest queries support
  • New NCollection_OrderedMap and NCollection_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_IndexedMap which 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, and NCollection_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 and IndexedItems() for IndexedMap and IndexedDataMap

  • NCollection_List optimization #1040: std::initializer_list constructor, 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 returning std::optional<std::reference_wrapper<T>>, TryEmplace/TryBind parity 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
  • 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::handle to std::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 - use throw instead
  • Thread-local error handler stack #980: Replaced global mutex-protected stack with thread_local storage:

    • 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_SIGNALS macro with new Raise() 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_Transient uses explicit memory ordering (memory_order_relaxed for increment, memory_order_release for decrement with acquire fence only at zero)

  • Laguerre polynomial solver and Newton API refactoring #1086: New MathPoly_Laguerre for 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 BrentAlongCoordinate in MathUtils_LineSearch, new MathUtils_Random utility

  • PLib polynomial evaluation optimization #953

  • MathRoot and MathSys enhancements #954: New mathematical utilities

  • **math_DirectPolynomialRoots refactorin...

Read more

V8_0_0_rc3

15 Dec 17:15

Choose a tag to compare

V8_0_0_rc3 Pre-release
Pre-release

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_Mutex to std::mutex
  • Performance optimizations across Foundation Classes, especially BSpline computations
  • API improvements with constexpr/noexcept annotations 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 std equivalents #833: The following functions are now deprecated and will be removed in future releases:
    • ACos(), ASin(), ATan(), ATan2() → use std::acos, std::asin, std::atan, std::atan2
    • Sinh(), Cosh(), Tanh() → use std::sinh, std::cosh, std::tanh
    • ASinh(), ACosh(), ATanh() → use std::asinh, std::acosh, std::atanh
    • Sqrt(), Log(), Log10(), Exp() → use std::sqrt, std::log, std::log10, std::exp
    • Pow(), Abs(), Sign() → use std::pow, std::abs, std::copysign
    • Sin(), Cos(), Tan() → use std::sin, std::cos, std::tan
    • Floor(), Ceiling(), Round() → use std::floor, std::ceil, std::round
    • IntegerPart() → use std::trunc
    • Min(), Max() → use std::min, std::max
    • NextAfter() → use std::nextafter

Threading Modernization

  • Replaced Standard_Mutex with std::mutex #766: Migrated from legacy mutex implementation to standard C++ mutexes across all modules:
    • Use std::lock_guard or std::unique_lock instead of Standard_Mutex::Sentry
    • Use std::mutex instead of Standard_Mutex
    • Optional mutex holders now use std::unique_ptr<std::mutex>

Geometric Primitives (gp)

  • Added standard direction enumerations #803: New gp_Dir::D and gp_Dir2d::D enums 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: New TCollection_AsciiString::EmptyString() and TCollection_ExtendedString::EmptyString() for efficient empty string access
  • Optimized TCollection_AsciiString #752: Pre-defined string optimization for better performance

Math Containers

  • Move semantics for math_Matrix and math_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 constexpr and validation, optimized local calls
  • Enhanced B-Spline curve computation #855: Performance improvements for curve calculations

Other Foundation Improvements

  • Optimized Bnd package #839, #856: Bounding box optimizations and fixes
  • Modernized Bnd_B2 and Bnd_B3 #838: Template-based implementation
  • Enhanced BVH implementation #842, #858: Generic vector types and transformation tests
  • Performance improvements for TopExp package #831
  • Optimized Quantity package #834
  • Improved NCollection vector constructors #835
  • Modernized NCollection_SparseArrayBase #804
  • EigenValuesSearcher improvements #714
  • Refactored CSLib package with GTests #857
  • Refactored Extrema package #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 GeomHash and Geom2dHash packages #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

  • Optimized PCurve projection #890
  • Optimized FixFaceOrientation #584

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_definition entities
  • STEP coordinate system connection points import #779
  • std::string_view for STEP type names #784: Performance improvement using std::string_view for type recognition
  • Refactored StepType selection #786
  • Custom hasher for string_view types in RWStepAP214 #888

Plugin System

  • Reorganized DE plugin system #696: New Register/UnRegister methods for configuration nodes, DE_MultiPluginHolder for multiple registrations

Visualization

  • Improved detection of full cylinder/cone parameters #830
  • Fixed AABB transformation method #735

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 .gitignore with explicit allowlist #787

Testing

Read more

V7_9_3

06 Dec 10:33

Choose a tag to compare

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

18 Oct 14:20

Choose a tag to compare

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

  • Leak of WinAPI resources (#625)
  • Matrix multiplied issue (#522)

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

29 Jul 16:02

Choose a tag to compare

V8_0_0_rc2 Pre-release
Pre-release

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...
Read more

V7_9_1

21 May 08:41

Choose a tag to compare

Open CASCADE Technology 7.9.1 Released

Open Cascade is delighted to announce the release of Open CASCADE Technology version 7.9.1 to the public.

Overview

Version 7.9.1 is a maintenance release incorporating over 30 improvements and bug fixes compared to version 7.9.0.

What's New in OCCT 7.9.1

Configuration & Build System

  • Update VTK configuration and enable optional components (#395)
  • Update file globbing and condition checks for installation paths (#399)
  • Extend CMake file filter regex (#400)
  • Modify VTK 9x handling (#401)
  • Update VTK optional components (#403)
  • Remove BUILD_PATCH option in CMake (#418)
  • Checking for FILES content (#424)
  • Enhance Qt5 directory detection for Windows (#419)
  • Remove -symbolic linker flag (#432)
  • TBB configuration prioritization to release (#496)
  • Fixed paths to 3rd-party in cmake configuration (#523)

Testing & Quality

  • Repeating failed tests in GitHub Actions (#412)
  • Inspector build error on latest CMake (#477)
  • Add a new compilation on Clang without PCH (#540)

Foundation Classes

  • Host resolving by itself (#457)
  • Update signal handling for GLIBC compatibility on Linux (#458)
  • Checking for MallInfo version (#459)

Modeling

  • Degenerated curves were not handled by Arrange function (#396)
  • Improve handling of polygon parameters in NURBS conversion (#410)
  • Handle void bounding box case in BRepBndLib::AddOptimal (#470)
  • Bounding BSpline periodic tolerance issue (#468)
  • Periodic BSpline curve bounding (#493)
  • XCAFDoc_Editor::RescaleGeometry does not rescale translation of roots reference (#529)
  • BRepFilletAPI_MakeFillet Segfault with two curves and rim (#532)
  • General Fuse (BOPAlgo_PaveFiller) optimization (#514)

Visualization

  • Refactor mouse click handling logic for improved double-click detection (#385)
  • AIS_Shape bounding box re-computation is not working properly (#422)

Data Exchange

  • DE Wrapper invalidating parameters after 'Load' (#393)
  • Datum Axis extraction issue (#407)
  • STEP: AP242 SchemaName Remove dot (#448)
  • IGES Export: Missing Model Curves in transfer cache (#483)
  • Small optimization of StepData_StepReaderData (#543)

Documentation

  • Enable server-based search and external search options in Doxyfile

Full Changelog: V7_9_0...V7_9_1

Open CASCADE Technology 8.0.0 Release Candidate 1

14 Apr 08:57
7aa8558

Choose a tag to compare

Open Cascade is delighted to announce the release of Open CASCADE Technology version 8.0.0 Release Candidate 1 to the public.

Overview

Version V8_0_0_rc1 is a candidate release incorporating over 50 improvements and bug fixes compared to version 7.9.0.

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-rc1

Core

  • Moved resource directories to /resource folder #427, #429
  • Migration of Inspector to own repository #438
  • Migration of ExpToCas to own repository #442
  • Reorganize source directory to follow "src/Module/Toolkit/Package/File" template #450
  • Host search resolving by itself #457
  • Update signal handling for GLIBC compatibility on Linux #458
  • Checking for MallInfo version #459
  • Introducing GTest test system into OCCT as a new way to unit testing to improve stability #443
  • HashUtils NoExcept optimization #473

Build system

  • Fixed CMake configuration with VTK configuration built with OCCT #395, #403
  • TBB configuration prioritization to release #496
  • Fixed issue with mismatching installation folder on Unix system #399
  • Fixed issue with build patch containing dot symbol #400
  • CMake Improvements to work with VTK 9x
  • Remove BUILD_PATCH option in CMake #418
  • Enhance Qt5 directory detection for Windows #419
  • Remove -symbolic linker flag from Unix system, which can lead to RTTI issues #432
  • Re-Configuration time optimization #467

Modeling

  • GeomFill updated with fix of incorrect arrangement of Degenerated BSpline curve #396
  • Improve handling of polygon parameters in NURBS conversion #410
  • Fixed issue with calculation of bounding box with faces without PCurves in BRepBndLib::AddOptimal #470
  • Fixed issue with periodic BSpline within bounding box calculation #493

Visualization

  • Added possibility to not write warnings about unsupported fonts #392
  • Improved double click detection event to prevent long click mismatching #385
  • Changed selection behavior and allow HandleMouseClick for schemes, allowing to select an object #416
  • Fixed issue with re-computing Bounding box #422

Data Exchange

  • Added support for SurfaceStyleReflectanceAmbientDiffuse and SurfaceStyleReflectanceAmbientDiffuseSpecular classes and reorganized Rendering Parameters catching #447
  • Added option to decrease STP file size for export by removing duplicate entities. Average size improvement is 20% #475
  • Fixed issue with File and System coordinate system mixing on DE Wrapper interface for Mesh formats #393
  • Added stream to GLTF JSON parser to read lines and points #489
  • Fixed crash with Datum extraction from STP file #407
  • Removed dot from AP242 SchemaName in "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF. {1 0 10303 442 1 1 4 }" #448
  • Step entity Direction optimization with decreased memory footprint #479

Testing

  • Added option to repeat failed tests automatically in GH Actions #412
  • Reorganized GitHub actions #480
  • GTest tests integration #471, #481, #443

Documentation

  • Fixed various typos found in codebase #413, #414, #495
  • Migrated documentation generation from TCL to CMake #441

How to Upgrade

There are no critical changes at the API level. Migration should proceed without issues.

What's Changed

  • Coding - Add flag for font mgr to avoid error message #392
  • Data Exchange - DE Wrapper invalidating parameters after 'Load' #393
  • Visualization - Refactor mouse click handling logic for improved double-click detection #385
  • Modeling - Degenerated curves were not handled by Arrange function #396
  • Configuration - Update VTK configuration and enable optional components #395
  • Configuration - Update file globbing and condition checks for installation paths #399
  • Configuration - Extend CMake file filter regex #400
  • Configuration - Modify VTK 9x handling #401
  • Data Exchange - Datum Axis extraction issue #407
  • Configuration - Update VTK optional components #403
  • Modeling - Improve handling of polygon parameters in NURBS conversion #410
  • Testing - Repeating failed tests in GH Action #412
  • Documentation - Fix various typos found in codebase #413
  • Documentation - Fix various typos found in codebase #414
  • Visualization, Selection - allow HandleMouseClick for schemes, allowing to select an object #416
  • Configuration - Remove BUILD_PATCH option in CMake #418
  • Configuration - Checking for FILES content #424
  • Visualization - AIS_Shape bounding box re-computation is not working properly #422
  • Coding - Include gxx files from global path #423
  • Configuration - Enhance Qt5 directory detection for Windows #419
  • Configuration - Remove -symbolic linker flag #432
  • Configuration - Adding resource packages to toolkit #427
  • Data Exchange, Step - AP242 SchemaName remove dot #448
  • Coding - Migration of Inspector to own repository #438
  • Coding - Migration of ExpToCas to own repository #442
  • Configuration - Resource structure reorganization #429
  • Documentation - Migration to CMake from TCL #441
  • Configuration - Reorganize repository structure #450
  • Configuration - Resource generation source path fix #453
  • Documentation - Generation schema fixing #452
  • Configuration - Update resource path references in build scripts #454
  • Foundation Classes - Host resolving by itself #457
  • Documentation - Convert module and toolkit names to lowercase for URL generation #460
  • Foundation Classes - Update signal handling for GLIBC compatibility on Linux [#458](https://github.com/Open-Cascade-SAS/OC...
Read more

V7_9_0

18 Feb 10:34
858dd02

Choose a tag to compare

Open CASCADE Technology 7.9.0 Released

Open Cascade is delighted to announce the release of Open CASCADE Technology version 7.9.0 to the public.

Overview

Version 7.9.0 is a minor release incorporating over 250 improvements and bug fixes compared to version 7.8.0.

What's New in OCCT 7.9.0

Core

  • Improved code quality through static analysis and consistent code formatting with Clang-Format.
  • Enhanced Standard_Type implementation for better RTTI support and optimized IsKind operations.
  • Reorganized foundation classes for improved performance, including inlining Standard_Type instances.
  • Deprecated the old aliasing for Handle types (e.g., Handle_<Type>).
  • Improved memory management and container optimization, including refactoring ShapeHealingMap to NCollection.
  • Updated map operations with the new NCollection_MapAlgo for union, intersection, and other set operations.
  • Updated the RemoveAll method in AsciiString to correctly truncate the string.

Build System

  • Added VCPKG manifest mode support (beta) for managing third-party dependencies.
  • Improved handling of third-party dependencies, including Draco, VTK, and OpenVR from Ubuntu packages.
  • Updated the minimum CMake version requirement to 3.10.
  • Added an option to enable/disable Git hash extraction in the version string.
  • Introduced a warning message regarding LGPL 2.1 licensing limitations for static linking.
  • Fixed an issue where custom.bat/sh was not regenerated in the build directory.
  • Added compiler version checks for C++17 support.
  • Removed Genproj.
  • Fixed static linking failures.
  • Implemented new PCH for faster compilation.
  • Added MinGW default third-party package support.

Modeling

  • Fixed multiple issues in the UnifySameDomain algorithm, including cases with SurfaceOfRevolution or SurfaceOfLinearExtrusion based on TrimmedCurve.
  • Improved BRepOffset and BRepFill algorithms, including skipping degenerated curves in BRepOffset_Tool::TryProject and adding boundary checks in BRepFill_Filling.
  • Enhanced shape processing and transformation handling, including the removal of surfaces after transformation.
  • Fixed various geometric computation issues, including resetting Plane YVector and enhancing intersection handling for closed curves in IntPatch_Intersection.
  • Improved the robustness of boolean operations.
  • Added a warning for incomplete wire detection in WireFromList.
  • Fixed NURB conversion for degenerated cases.
  • Disabled exception with scaling transformation.
  • Fixed degenerated curves in offset operations.
  • Corrected intersection curves handling.
  • Resolved BRepOffset_Tool segmentation fault.
  • Fixed sphere cutting and Boolean operations.

Visualization

  • Enhanced AIS_Manipulator functionality, including flat skin support and transformation depending on camera rotation.
  • Improved selection handling and transformation persistence.
  • Added support for flat skin in AIS_Manipulator presentation.
  • Enhanced Z-layer handling in V3d_View, including an option to dump only a selection of z-layers.
  • Improved transparency handling in various rendering modes.
  • Implemented an interface to change myToFlipOutput of OpenGl_View.
  • Fixed direction calculation for Select3D_SensitiveCylinder created from Geom_CylindricalSurface.
  • Added support for vertical mouse movement zooming.
  • Enhanced transparency handling for capping in 'Graphic3d_RTM_BLEND_OIT' mode.
  • Fixed selection for simple shapes.
  • Resolved manipulator interaction issues.
  • Fixed transform persistence and view transformation.
  • Addressed transparency and rendering issues.

Data Exchange

  • Migrated shape healing settings to a single object, DE_ShapeFixParameters.
  • STEP:
    • Added metadata support for products, including product attributes.
    • Enhanced tessellated geometry handling.
    • Improved thread safety.
    • Fixed multiple crash issues, including those related to null curves and out-of-range indices.
    • Added support for GENERAL_PROPERTY.
    • Implemented common logic for scaling during the write procedure.
  • GLTF:
    • Added vertex and edge support.
    • Improved material handling, including fixing material color space and edge colors.
    • Enhanced import/export functionality.
    • Added metadata support.
  • Implemented XCAFDoc filter tree functionality.
  • Improved handling of IGES imports, including fixing a resource leak when parsing an invalid file and addressing a crash with degenerated BSplines.
  • Moved StepData_ConfParameters to the DESTEP package.
  • Reorganized DE Wrapper classes to have a single style and logic: DE<FORMAT>_Parameters, DE<FORMAT>_Provider, and DE<FORMAT>_ConfigurationNode.

Testing

  • Implemented comprehensive GitHub Actions workflows for build validation (Ubuntu, Windows, MacOS), code formatting, and documentation building.
  • Added automated documentation building.
  • Enhanced test result comparison systems.
  • Improved cross-platform testing support.
  • Added WebAssembly build validation.
  • Added a new TCL command to clear the test folder of skipped tests.

Documentation

  • Updated code documentation and fixed various typos.
  • Enhanced API documentation.
  • Improved contributing guidelines.
  • Updated issue templates and release notes.
  • Updated links in the README.

How to Upgrade

For details on upgrading to the new version check Upgrade 790

Windows packages and 3rd-party

The release delivers x64 and x32 binaries in both Release and Debug configurations and third-party libraries, check GitHub Release

Full Changelog: V7_8_0...V7_9_0

V7_9_0_beta2

10 Feb 21:49

Choose a tag to compare

V7_9_0_beta2 Pre-release
Pre-release

Release Information

  • Release Date (Stable): February 17, 2025
  • Version: 7.9.0.beta2
  • Git Tag: V7_9_0_beta2

The Beta1 release: https://github.com/Open-Cascade-SAS/OCCT/releases/tag/V7_9_0_beta1

New changes:

  • Fixed issue with documentation version extraction
  • Fixes crash in RWMesh interface when using old interface of parsing
  • Added material export for GLTF Edge
  • Fixed issue with ignore write.schema for STEP export
  • Fixed build with WASM 3.x
  • Fixed color space with GLTF Import result
  • Added sample build on GH Actions (each PR)
  • Fixed exporting for incorrect elements(not free vertexes or edges) for GLTF
  • Fixed issue with ignore write.units for STEP export
  • Fixed not-stable behavior with Product metadata STEP import

Installation

  • Use Git tag V7_9_0_beta2
  • Windows installer available with VS 2022 binaries
  • Complete source archive available

Coming Soon

  • Detailed release content documentation
  • Documentation update
  • Development update guide

OCCT3D Development Team

Full Changelog: V7_9_0_beta1...V7_9_0_beta2