Open Cascade is publishing Open CASCADE Technology version 8.0.0p1 as a hot patch on top of 8.0.0.
This patch release consolidates the fixes and stabilization work merged after V8_0_0. It is intended to become the foundation for future 8.0.x maintenance releases. The C++17, build-system, repository-layout, and major API baseline remains the same as in 8.0.0, but several experimental 8.0.0 components were refined or replaced before the maintenance branch is continued.
The full 8.0.0 release notes are available in V8_0_0.
Highlights
- Version line: CMake version metadata now marks the release as
8.0.0.p1. - Gordon surface rework: the experimental 8.0.0 implementation was replaced by a new construction path with explicit status reporting, approximate fallback mode, and a new low-level
GeomFill_NetworkSurfacebuilder. - BRepGraph stabilization: graph storage, layer registration, cache services, copy/compact remapping, population, reconstruction, mesh handling, and orientation preservation were substantially hardened.
- Thread-safe numeric parsing:
Standard_Strtod()no longer shares its Bigint pool between threads, fixing random numeric mis-parses in parallel parsing workloads such as parallel BRep reads. - Shader grid fixes: the GPU grid now uses view-space plane intersection and a single full-screen triangle, participates in Z-fit, and keeps CPU and shader grid paths separated.
- Modeling crash and hang fixes: guarded
BRepFill_CompatibleWires,BRepExtrema_DistanceSS,IntWalk_IWalking, andBOPTools_AlgoTools::GetFaceOff()against reported degenerate inputs. - Back-face vertex color policy: visualization users can now control whether per-vertex colors are applied to back-facing fragments.
- FreeBSD STEP fix: AP203 default date/time generation now handles older FreeBSD
timezonedeclarations safely. - DRAW plugin loading:
ploadcontinues after optional plugin load failures and reports loaded/skipped plugin counts.
Migration Notes
GeomFill_GordonBuilderwas removed. UseGeomFill_Gordonfor the high-level workflow orGeomFill_NetworkSurfaceonly when the caller already owns a prepared compatible B-spline curve network.Approx_BSplineApproxInterpwas removed. Existing users should migrate to the appropriate interpolation or approximation APIs, such asGeomLib_Interpolate,GeomAPI_Interpolate, orGeomAPI_PointsToBSpline*, depending on constraints.GeomFill_Gordonnow exposesStatus(),Report(),SetApproximationMode(),GetApproximationMode(), andIsApproximate(). Check these when exact curve interpolation is required.GeomFill_Gordon::ApproximationMode::ExactOnlyremains the safe default. Enable approximate fallback only when an approximate sampled B-spline surface is acceptable.- Direct BRepGraph extension code should use registered layers for metadata and cache services for recomputable transient data. Direct storage-level extensions are not the intended path.
- BRepGraph stable external identity should use
UID,RefUID, orItemUIDwhere appropriate. Do not persistNodeId,RefId, orRepIdas durable external identifiers. - BRepGraph history, locks, parametric data, deferred state, topology supplements, and mesh data are now layer/cache/view responsibilities. Code using older history or mesh-cache helpers must be updated to the new registries and
Mesh()subviews. SameParameterandSameRangeare per-CoEdgederived properties. Query them through theCoEdgeAPI rather than as edge-level state.NCollection_Sequenceis no longer recommended as the default container for new code. PreferNCollection_LinearVectorfor most append-and-iterate or contiguous-data workflows, and useNCollection_Listwhen list-like node behavior is specifically required.Graphic3d_Aspects::ToUseVertexColorForBackFaces()defaults totruefor compatibility. Disable it only when back faces should use the back material/interior color instead of vertex colors.
Modeling Algorithms
- Reworked
GeomFill_Gordonaround a new exact network-construction path and a detailed result-reporting model. - Added
GeomFill_Gordon::ResultStatus,GeomFill_Gordon::ApproximationMode,GeomFill_Gordon::BuildStage, andGeomFill_Gordon::BuildReport. - Added
GeomFill_NetworkSurfaceas a low-level builder for direct compatible-network Gordon surface construction. - Added
GeomFill_NetworkSurface::ResultStatusvalues covering invalid input, curve compatibility, skinning, reference surface, knot alignment, rational construction, periodicity, and generic construction failures. - Added internal Gordon utilities for curve conversion, periodic-curve expansion, contact discovery, network ordering, parameter equalization, and intersection-table preparation.
- Added exact rational-network support through common-denominator multiplication with explicit overflow and construction-failure statuses.
- Added approximate fallback support for difficult networks and rational reparametrization cases where exact construction is not available.
- Removed the old
GeomFill_GordonBuilderintermediate-surface builder and itsProfileSurface(),GuideSurface(), andTensorSurface()style workflow. - Removed
Approx_BSplineApproxInterp, which had been used by the previous Gordon prototype. - Fixed a
BRepFill_CompatibleWires::SameNumberByPolarMethod()crash inThruSectionsworkflows with mismatched or non-coaxial closed profiles by guarding correspondence-list iterator advancement. - Fixed null 3D curve dereferences in
BRepExtrema_DistanceSSfor edge-edge and edge-face distance computations when an edge is defined only by pcurves. - Fixed possible infinite loops in
IntWalk_IWalking::ComputeOpenLine()and related walking paths by detecting repeated bad-root subdivision failures and stopping after the division limit. - Hardened
BOPTools_AlgoTools::GetFaceOff()for near-zero angles between coplanar or near-degenerate candidate faces.
Modeling Data And BRepGraph
- Reworked BRepGraph storage so
BRepGraph_Dataowns storage, layer registry, cache registry, and stable views. - Moved graph metadata into registered layers for history, locks, deferred loading, parametric data, and topology supplements.
- Added
BRepGraph_ItemIdfor transient node/reference item addressing andBRepGraph_ItemUIDfor durable item identity stable across compaction and reordering. - Moved
BRepGraph_RepIdtoBRepGraphInc_RepId.hxx; it remains a session-local use-record identity and is not a durable external identifier. - Added GUID-keyed
BRepGraph_CacheRegistryand derived-state caches for edge, coedge, wire, shell, and mesh data. - Added lock-free fresh reads for derived-state cache entries by using packed atomic state and acquire/release synchronization.
- Added shared-lock fast paths for
EnsureLayer()andEnsureCache()with exclusive locking only on creation. - Added an identity full-graph copy path using
PrepareForLoad()and direct slot assignment when copying into an empty graph. - Added centralized
BRepGraph_CopyRemapsupport for copy and compact flows, including identity and explicit remapping modes. - Preserved layer data, deleted history, lock propagation, product occurrence references, persistent mesh handles, topology supplements, removed flags, and shape bindings across copy, compact, transform, reconstruct, and mutation flows.
- Made runtime cache copy explicit through cache-copy policies; transient cache entries are dropped by default.
- Split mesh access into explicit
Mesh().Cache(),Mesh().Persistent(),Mesh().Editor(), andMesh().Poly()paths. - Fixed topology population so TopoDS definition data remains local while root and compound placement is stored on graph references.
- Preserved located triangulations and polygon-on-triangulation data during graph population.
- Preserved degenerate natural boundary edges for faces without explicit wires.
Foundation Classes
- Added
NCollection_LinearVector::ToArray1()andNCollection_LocalArray::ToArray1()views for contiguous data. - Added const read-only
NCollection_Array1<const T>views for contiguous containers. - Added a zero-based reference/size constructor to
NCollection_Array1for direct array views. - Strengthened
NCollection_DynamicArrayiterator behavior, including append scenarios across segmented blocks. - Added OCCT-style
Reserve()aliases toNCollection_FlatMapandNCollection_FlatDataMap. - Kept the common base allocator alive through process finalization to avoid static destruction-order crashes.
- Added array-based
Convert_GridPolynomialToPolesconstructors and switched relevantAdvApp2Varpaths to array views instead of extra handle allocations. - Added
size_taccessors toPoly_ArrayOfNodesandPoly_ArrayOfUVNodes. - Added
Poly_Polygon2D::Copy()and improved polygon and triangulation copy paths to preserve contiguous arrays, deflection, cached bounds, and triangulation parameters. - Added
Poly_PolygonOnTriangulation::ChangeNodeArray()andChangeParameterArray(). - Added mesh hashers for
Poly_Polygon2D,Poly_Polygon3D,Poly_PolygonOnTriangulation, andPoly_Triangulation, with null-handle-safe equality and hash support. - Made the internal Bigint pool used by
Standard_Strtod()thread-local, fixing concurrent parsing races.
Visualization
- Reworked shader grid rendering to intersect the active grid plane in view space and draw it with a single full-screen triangle.
- Added
OpenGl_ShaderGridto keep shader grid state, bounds, echo snapping, point snapping, bounded or unbounded extents, circular grid data, arc bounds, background anchoring, and view-adaptive scale data together. - Added shader grid participation in camera Z-fit through
Graphic3d_CView::ZFitAllBounds()andAutoZFit()integration. - Fixed shader grid visibility in empty views and after displaying objects without an extra
vfit. - Fixed perspective shader grid rendering cases that could produce mirrored fragments.
- Kept viewer-managed CPU grid behavior separate from per-view shader grid behavior in
vgrid. - Added
Graphic3d_CView::ShaderGridEcho()andShaderGridSnapPoint(). - Added
V3d_View::ConvertToGrid(int, int, Graphic3d_Vertex&),ConvertToGridEcho(),IsGridActive(), andIsShaderGridActive(). - Added
Graphic3d_Aspects::ToUseVertexColorForBackFaces()andSetUseVertexColorForBackFaces(bool). - Added corresponding
Prs3d_ShadingAspectaccessors for the back-face vertex color policy. - Added shader support for front-only vertex colors and back-material/interior coloring on back-facing fragments.
- Exposed the back-face vertex color policy in
vaspectsthrough-useVertexColorForBackFacesand related aliases.
Data Exchange
- Fixed STEP AP203 default date/time generation on older FreeBSD versions where
timezonemay be declared as the historical BSD function rather than the POSIX/XSI variable. - Older FreeBSD now uses
time()andlocaltime()->tm_gmtoff; newer FreeBSD and POSIX/XSI platforms keep the existingtimezonevariable path.
DRAW And Tests
ploadnow catches plugin load failures per resource, continues loading the remaining requested plugins, and reports loaded and skipped counts.ploadreturns an error only when all requested plugin resources were skipped and none were loaded.- Added DRAW regression coverage for mixed missing/valid plugin resources and all-missing plugin resources.
- Added Gordon surface tests for report reset, disjoint network failures, periodic expansion, multiple-intersection branch selection, low-level periodicity, tolerance-controlled periodicity, invalid prepared networks, rational exact construction, rational failure statuses, and approximate fallback.
- Added BRepGraph tests for storage/layers/caches, copy, compact, transform, sparse models, item identifiers, layer history, topology supplements, locks, populate regression cases, reversed-shell orientation, and shape lookup behavior.
- Added NCollection, mesh hasher,
Standard_Strtod, BRep parallel-read, BRepExtrema null-curve, shader grid, shader manager, aspects, and OpenGL back-face vertex-color tests.
Gordon Surface Historical Note
The experimental Gordon-surface implementation introduced with 8.0.0 has been replaced in 8.0.0p1. The earlier prototype used some broadly known Gordon-surface construction ideas that overlap with algorithms visible in public TiGL-related solutions, including occ_gordon. Users who were specifically experimenting with the former prototype can consult that public project directly and use or test with your solutions. The 8.0.0p1 implementation does not continue the prototype: it uses different ideas, algorithms, classes, and code paths.
New Contributors
- @moench-tegeder made their first contribution in #1277
Full Changelog: V8_0_0...V8_0_0_p1