- Added Array1 views for contiguous NCollection containers, including const read-only views for LinearVector and LocalArray.
- Updated Poly mesh containers and copy paths to preserve contiguous data, deflection, cached bounds, and triangulation parameters.
- Added mesh hashers for polygons and triangulations with tests covering tolerant equality and hash consistency.
- Kept the common base allocator alive through process finalization to avoid static destruction order crashes.
- Updated shader grid rendering to intersect the grid plane in view space and draw it with a single full-screen triangle.
- Added shader grid bounds to camera Z-fit, so the grid is visible in empty views and after object display without an extra vfit.
- Fixed shader grid echo to use the active shader grid plane, effective scale, bounds and clip-safe display point.
- Kept the viewer-managed CPU grid path separate from the per-view shader grid path and preserved CPU grid type/mode handling in vgrid.
- Added grid tests for empty/no-vfit visibility and perspective rendering without mirrored fragments.
- Removed `Approx_BSplineApproxInterp` (and its GTest)
- Removed `GeomFill_GordonBuilder`.
- Added `GeomFill_GordonUtilities.pxx` for curve conversion/reparametrization and intersection-table preparation
- Added `GeomFill_NetworkSurface` for direct compatible-network surface construction.
- Updated `GeomFill_Gordon` API with explicit `ResultStatus`, approximate-fallback mode, and status reporting.
- Updated `NCollection_Array1/2::Assign()` to copy bounds/size from the source; introduced `CopyValues()` to copy element values while preserving existing bounds.
- Replaced usages of `Assign()` / `operator=` with `CopyValues()` in several `Geom*` classes and math utilities to preserve prior behavior after the `Assign()` semantic change.
- Expanded GTests for `NCollection_Array1/2` to cover assignment behavior (owned/external buffers, size changes) and `CopyValues()` behavior.
- Reintroduced `GProp_PGProps` and `GProp_PEquation` implementations and registered them in `TKGeomBase`.
- Moved and split unit tests for point-set properties/equation analysis into `TKGeomBase` GTests.
- Updated callers and documentation, and removed the `PointSetLib` package from `TKMath`.
- Reverting #1140357ae60dd9
To input parameters of ShapeConstruct_ProjectCurveOnSurface::insertAdditionalPointOrAdjust() new arrays were assigned. The size of new arrays are guaranteed to be 1 element larger that original array. NCollection_Array1::Assign() is guaranteed to throw exception when arrays size mismatch. So, given that assignment code is reached, function will always throw.
Fixed by calling move assignment instead - size mismatch is allowed in this case. Also it is more optimal.
- Renames many example variables to align better with current OCCT naming/style conventions.
- Updates documentation around deprecated 2D construction APIs, build options, resource paths, and environment variables.
- Cleans up assorted wording, links, and outdated references across user guides, samples, and contributor docs.
- Redesign seam detection/pairing to be connectivity-derived (`SeamPair()` walks sibling coedges on the same face with opposite orientations), with seam halves now present in wire `CoEdgeRefIds` to match TopoDS iteration.
- Move geometric continuity storage/round-trip to `BRepGraph_LayerRegularity` (including seam continuity), updating populate/reconstruct/editor APIs accordingly.
- Add/adjust GTests to cover seam ordering, seam symmetry, layer regularity behavior, and split/compact/reconstruct interactions under the new model.
- Renamed grid terminology and command/API surface from `inf`/“infinite” to `gpu`/“GPU”, plus `viewAdaptive` for camera-relative sizing.
- Updated OpenGl grid rendering to compute adaptive bounds from the visible region and to fix axis coloring for rotated rectangular grids.
- Refreshed Draw tests, help text, and API comments to match the new behavior.
Concurrent STEPControl_Writer::Transfer calls crashed inside TCollection_AsciiString::Move with a libmalloc double-free, and concurrent STEP/IGES readers occasionally crashed inside Interface_FileReaderTool::RecognizeByLib. Both originated in process-shared mutable state that every per-thread reader/writer silently mutated.
STEP write actor (writer-side race):
- Pre-populate the shared STEPControl_ActorWrite parameter map and processing flags inside STEPControl_Controller::Init under the existing one-time mutex, so concurrent STEPControl_Writer::Transfer calls no longer mutate the shared actor in the default path.
- Drop the per-Transfer call to STEPControl_Writer::InitializeMissingParameters; defaults are now in place from controller construction time.
- Make XSAlgo_ShapeProcessor::SetParameter idempotent: skip the destructive Bind when the existing entry already matches the new value, eliminating the TCollection_AsciiString::Move/Free path that was the immediate double-free site under concurrent writers.
- Stop clearing the target ParameterMap in XSAlgo_ShapeProcessor::SetShapeFixParameters before refilling it; rely on the idempotent SetParameter for in-place replacement.
LibCtl_Library (reader-side race):
- Drop the file-scope "last protocol" optimization cache (theprotocol/thelast) that raced between concurrent STEP/IGES readers in Interface_FileReaderTool::RecognizeByLib.
- Treat the global registry as immutable after one-time controller initialization: writers (SetGlobal) serialize against each other, readers traverse without locking. Move internal helper logic into an anonymous namespace.
Commit a2e851b25 (#1223) replaced the classical Graphic3d_Structure-based grid rendering with a single shader path driven by Aspect_GridParams. This change brings the CPU rendering back as a coexisting backend so consumers can pick CPU or GPU per use case. Snap math on Aspect_Grid is unchanged; only the presentation layer is split.
V3d layer:
- V3d_RectangularGrid / V3d_CircularGrid restore the nested custom Graphic3d_Structure, myStructure / myGroup, DefineLines / DefinePoints and the myCur* change-detection cache. UpdateDisplay rebuilds the primitive arrays with the same SetTransformation + CalculateBoundBox flow as before #1223.
- DefineLines / DefinePoints use NCollection_LinearVector<gp_Pnt> pre-sized from XStep / YStep / Radius to avoid reallocations.
- V3d_CircularGrid emits a one-shot warning when an arc range is set (CPU cannot honor it; use the shader path for arcs).
V3d_View layer:
- V3d_View tracks myShaderGridActive. SetGrid erases the shader grid on this view before activating the CPU grid; GridDisplay erases the viewer-wide CPU rendering (snap geometry preserved) before enabling the shader grid. Remove tears both down.
Aspect / Viewer:
- Aspect_GridParams comment clarifies it is consumed only by the GPU path. V3d_Viewer.hxx grid block is annotated as the legacy CPU entry.
- Adjusted faulties and warnings in tests for IGES and STEP files to reflect updated results.
- Corrected tolerance values in multiple tests to ensure accuracy in shape validation.
- Updated expected label counts and properties in several test cases to align with new outputs.
- Modified error messages and expected results in HLR and offset tests for consistency.
- Refined metadata checks in GLTF and STEP tests to match revised reference sizes and values.
- Update Improvements cases with removing TODO
- Replace various `Size()` calls with `Extent()`/`Length()` (int-returning) when passing element counts into `Message_ProgressScope`.
- Make “unsupported id type” fallbacks explicit in `BRepGraphInc_Storage` visitors to avoid MSVC control-path warnings.
- Minor warning-focused cleanups (loop variable rename in a test, use of `BRepGraph_NodeId::Invalid()`, removal of duplicated `Standard_EXPORT`).
- Replaced many `std::vector` usages with `NCollection_LinearVector`, updating call sites to use `Size()`, `Append()`, `EmplaceAppend()`, `Resize()`, `Reserve()`, `Clear()`, and `Data()`.
- Updated BVH array type plumbing to consistently use `NCollection_LinearVector`, simplifying conditional STL-vs-OCCT handling.
- Extended `NCollection_LinearVector` API (constructor with size+value, `Resize(size, value)`) and added new GTests for this behavior.
- Inject `-Werror` (plus select warning toggles) into the shared GitHub Action used for configuring Linux/macOS builds.
- Replace several `0` / `CopyFromParent`-style null constants with `nullptr` to satisfy `-Wzero-as-null-pointer-constant`.
- Add defensive bounds/clamps and initialization to avoid fixed-buffer overreads/memcpy/sort issues and uninitialized reads.
- Replaced many direct field writes in tests with `EditorView` typed setters and `GenOps::RemoveRef`, and updated mutation-gen tests to use `MarkDirty()`.
- Added incremental reverse-index bind/unbind helpers in `BRepGraphInc_ReverseIndex` and updated editor operations to maintain the reverse index without full rebuilds in many cases.
- Extended `BRepGraph_Copy`/`BRepGraph_Transform` to `CopyNode`/`TransformNode`, adding optional mesh-copy/transform support and new coverage tests.
- Added new GTests covering multiple historical regressions (intersection, projection, pipe shell, boolean ops, fillet, distances, gp transforms, string hashing).
- Registered new test sources in the relevant `GTests/FILES.cmake` lists.
- Removed legacy Tcl tests and removed the associated QADraw commands from `QABugs_*.cxx`.
- Added `Standard_DEPRECATED_STD(...)` to `Standard_Macro.hxx`, expanding to the standard `[[deprecated("...")]]` attribute (or empty when `OCCT_NO_DEPRECATED` is defined).
- Replaced `Standard_DEPRECATED(...)` with `Standard_DEPRECATED_STD(...)` in multiple `GCE2d_*` alias headers to keep deprecation warnings while restoring compiler compatibility.
2 cylinders are tangent along a line.
The analytical intersection returns a point which is not valid and it is a restriction of the analytical intersection algorithm.
The patch is ensured to use the implicit-implicit intersection algorithm.
- Replace `BRepGraph_Builder::Perform()` with `BRepGraph_Builder::Add()` and introduce `BRepGraph::Clear()` as the rebuild boundary.
- Refactor product/occurrence editing APIs (e.g., `AddAssembly` → `CreateEmptyProduct`, `AddOccurrence` → `LinkProducts`, occurrence mutation via `Editor().Occurrences()`).
- Update a large set of GTests and inline docs to use the new lifecycle and API names.
- Removed multiple legacy DRAW test scripts and several QABugs DRAW command implementations.
- Added new GTest suites covering the migrated regressions in ModelingData/ModelingAlgorithms/FoundationClasses/DataExchange/ApplicationFramework.
- Updated multiple `FILES.cmake` lists to compile/link the new tests; introduced an additional `STEPControl_Writer::SetShapeFixParameters()` overload.
- Added zero-based constructors (allocation + buffer-reuse wrapping) to `NCollection_Array1` and `NCollection_Array2`.
- Added `size_t`-based `Resize()` overloads (and refactored `NCollection_Array1` resize logic into a shared implementation).
- Added GTest coverage for the new zero-based construction / access / resize behaviors.
- Removes the dead `IVtkTools_ShapePicker::SetTolerance(float)` / `GetTolerance()` API and the unused stored tolerance value.
- Adds `SetPixelTolerance(int)` / `PixelTolerance() const` to `IVtkTools_ShapePicker` and `IVtkOCC_ShapePickerAlgo`, forwarding to `SelectMgr_ViewerSelector`.
- Removes `IVtkOCC_ViewerSelector`’s local cached tolerance fields and updates all `Pick()` overloads to apply `myTolerances.Tolerance()` on every pick.
- Add lazy initialization of `ShapeBuild_ReShape` context in `ShapeUpgrade_FaceDivide::Perform()`.
- Add GTests covering `Perform()` without an explicit context and under parallel execution.
- Register the new GTest source in `TKShHealing` GTests CMake file list.
- Guard `vtkRenderingGL2PSOpenGL2` being appended to `USED_TOOLKITS_BY_CURRENT_PROJECT` behind a `TARGET` existence check for both namespaced (VTK 9) and legacy (VTK 7/8) target names.
- Add inline comments documenting why the guard is necessary (module omitted on Android/iOS and when building VTK with GLES).
- Fixed a bug in GeomFill_ConstrainedFilling::Init(): law functions were
discarded due to erroneous use of method Func() instead of SetFunc().
- Corrected parameter usage in GeomFill_CoonsAlgPatch::Value() to ensure
proper variable assignment for curve evaluation.
- Introduced `IntPatch_PolyhedronBVH` to wrap polyhedra as BVH primitive sets
- Implemented `IntPatch_BVHTraversal` for efficient dual-tree traversal to find candidate triangle pairs
- Refactored `IntPatch_InterferencePolyhedron::Interference()` to use BVH-based detection
- Relocated used node binding from `initDataStructure()` to `registerNode()` to ensure consistent tracking of all nodes
- Added comprehensive GTest suite to validate internal vertex handling in mesh triangulation
- Migrated node/ref/rep ID types and many count-returning APIs from `int` to `uint32_t`/`size_t` (history indices), updating iterators and bounds checks accordingly.
- Reworked numerous loops from raw integer indexing to typed-id iteration (`Start()`, `IsValid()`, range-for) across core code and tests.
- Expanded compaction test coverage (incl. bounding-box preservation assertion), plus clearer assertions/messages.
- Adds a 3D-distance based closure check that marks the intersection line as closed when the walker returns near the starting point.
- Forces early termination and closes the polyline by re-adding the first point when 3D cycling is detected.