Skip to content

V8_0_0_p1

Latest

Choose a tag to compare

@dpasukhi dpasukhi released this 17 Jun 11:15

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_NetworkSurface builder.
  • 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, and BOPTools_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 timezone declarations safely.
  • DRAW plugin loading: pload continues after optional plugin load failures and reports loaded/skipped plugin counts.

Migration Notes

  • GeomFill_GordonBuilder was removed. Use GeomFill_Gordon for the high-level workflow or GeomFill_NetworkSurface only when the caller already owns a prepared compatible B-spline curve network.
  • Approx_BSplineApproxInterp was removed. Existing users should migrate to the appropriate interpolation or approximation APIs, such as GeomLib_Interpolate, GeomAPI_Interpolate, or GeomAPI_PointsToBSpline*, depending on constraints.
  • GeomFill_Gordon now exposes Status(), Report(), SetApproximationMode(), GetApproximationMode(), and IsApproximate(). Check these when exact curve interpolation is required.
  • GeomFill_Gordon::ApproximationMode::ExactOnly remains 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, or ItemUID where appropriate. Do not persist NodeId, RefId, or RepId as 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.
  • SameParameter and SameRange are per-CoEdge derived properties. Query them through the CoEdge API rather than as edge-level state.
  • NCollection_Sequence is no longer recommended as the default container for new code. Prefer NCollection_LinearVector for most append-and-iterate or contiguous-data workflows, and use NCollection_List when list-like node behavior is specifically required.
  • Graphic3d_Aspects::ToUseVertexColorForBackFaces() defaults to true for compatibility. Disable it only when back faces should use the back material/interior color instead of vertex colors.

Modeling Algorithms

  • Reworked GeomFill_Gordon around a new exact network-construction path and a detailed result-reporting model.
  • Added GeomFill_Gordon::ResultStatus, GeomFill_Gordon::ApproximationMode, GeomFill_Gordon::BuildStage, and GeomFill_Gordon::BuildReport.
  • Added GeomFill_NetworkSurface as a low-level builder for direct compatible-network Gordon surface construction.
  • Added GeomFill_NetworkSurface::ResultStatus values 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_GordonBuilder intermediate-surface builder and its ProfileSurface(), GuideSurface(), and TensorSurface() style workflow.
  • Removed Approx_BSplineApproxInterp, which had been used by the previous Gordon prototype.
  • Fixed a BRepFill_CompatibleWires::SameNumberByPolarMethod() crash in ThruSections workflows with mismatched or non-coaxial closed profiles by guarding correspondence-list iterator advancement.
  • Fixed null 3D curve dereferences in BRepExtrema_DistanceSS for 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_Data owns 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_ItemId for transient node/reference item addressing and BRepGraph_ItemUID for durable item identity stable across compaction and reordering.
  • Moved BRepGraph_RepId to BRepGraphInc_RepId.hxx; it remains a session-local use-record identity and is not a durable external identifier.
  • Added GUID-keyed BRepGraph_CacheRegistry and 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() and EnsureCache() 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_CopyRemap support 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(), and Mesh().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() and NCollection_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_Array1 for direct array views.
  • Strengthened NCollection_DynamicArray iterator behavior, including append scenarios across segmented blocks.
  • Added OCCT-style Reserve() aliases to NCollection_FlatMap and NCollection_FlatDataMap.
  • Kept the common base allocator alive through process finalization to avoid static destruction-order crashes.
  • Added array-based Convert_GridPolynomialToPoles constructors and switched relevant AdvApp2Var paths to array views instead of extra handle allocations.
  • Added size_t accessors to Poly_ArrayOfNodes and Poly_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() and ChangeParameterArray().
  • Added mesh hashers for Poly_Polygon2D, Poly_Polygon3D, Poly_PolygonOnTriangulation, and Poly_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_ShaderGrid to 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() and AutoZFit() 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() and ShaderGridSnapPoint().
  • Added V3d_View::ConvertToGrid(int, int, Graphic3d_Vertex&), ConvertToGridEcho(), IsGridActive(), and IsShaderGridActive().
  • Added Graphic3d_Aspects::ToUseVertexColorForBackFaces() and SetUseVertexColorForBackFaces(bool).
  • Added corresponding Prs3d_ShadingAspect accessors 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 vaspects through -useVertexColorForBackFaces and related aliases.

Data Exchange

  • Fixed STEP AP203 default date/time generation on older FreeBSD versions where timezone may be declared as the historical BSD function rather than the POSIX/XSI variable.
  • Older FreeBSD now uses time() and localtime()->tm_gmtoff; newer FreeBSD and POSIX/XSI platforms keep the existing timezone variable path.

DRAW And Tests

  • pload now catches plugin load failures per resource, continues loading the remaining requested plugins, and reports loaded and skipped counts.
  • pload returns 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

Full Changelog: V8_0_0...V8_0_0_p1