Commit Graph

162 Commits

Author SHA1 Message Date
Pasukhin Dmitry
ae7e259e17 Foundation Classes - align modern Math* APIs with legacy math_* behavior (#1134)
MathLin:
- Return full matrix solutions for multi-RHS APIs.
- Add LinearMultipleResult for matrix RHS solve results.

MathSys:
- Fix Newton2D/3D/4D tiny-step exit logic: re-check residual at updated point and return OK when converged.

MathUtils / MathInteg:
- Add modern Gauss points/weights implementation in MathUtils_Gauss.cxx.
- Keep legacy-table parity for orders 1..61 and compute fallback for higher orders.
- Make GaussAdaptive use IntegConfig InitialOrder/MaxOrder with bounds validation.
- Propagate ordered Gauss points/weights retrieval failures in set/multiple integration.
- Extend BracketMinimum API with bounded/options-based behavior.

Tests:
- Extend MathLin, MathSys and MathInteg tests for new behavior and regressions.
- Add MathUtils bracketing tests.
- Add MathLin_EigenSearch parity test coverage against legacy solver.

Documentation:
- Update MathLin/MathInteg/MathUtils READMEs to match current APIs and behavior.
2026-03-03 14:18:18 +00:00
luzpaz
33688d1049 Documentation - Fix typos (#1132) 2026-03-03 08:16:13 +00:00
Pasukhin Dmitry
6606bc75af Modeling Data - Harden geometry builders and add regression GTests (#1129)
Improve robustness and status handling across TKGeomBase construction code and extend unit coverage for boundary/degenerate cases.

Code changes:
- gce_MakeCone:
  - fix perpendicular direction fallback branches
  - implement gp_Cone + gp_Pnt / gp_Cone + Dist constructors
  - add defensive radius handling and semi-angle cosine guard
- gce_MakeCylinder:
  - fix perpendicular direction fallback branches
- GCE2d_MakeCircle, GC_MakePlane:
  - propagate status from delegated gce builders instead of forcing Done
- GC_MakeArcOfCircle:
  - replace hardcoded tolerance with Precision::Confusion()
- GCE2d_MakeSegment:
  - replace exact zero checks with gp::Resolution()-based checks
- gce_MakeCirc2d:
  - migrate to gp::Resolution() and remove boundary overlap in branch setup
- gce_MakeElips, gce_MakeHypr:
  - add explicit near-zero cross-product guards before gp_Dir construction
- ProjLib_Cone:
  - replace exact x/y zero check with angular tolerance
  - document tolerance intent for atan2 stability
- ProjLib_ComputeApproxOnPolarSurface:
  - replace period != 0.0 checks with Precision::PConfusion()
- ElCLib:
  - replace Focal == 0.0 checks with abs(Focal) <= gp::Resolution()

Tests:
- add new TKGeomBase GTests for:
  - gce_MakeCone, gce_MakeCylinder, gce_MakeCirc2d, gce_MakeElips
  - GCE2d_MakeCircle, GCE2d_MakeSegment
  - GC_MakePlane, GC_MakeArcOfCircle, GC_MakeConicalSurface
  - ProjLib_Cone, ProjLib_ComputeApproxOnPolarSurface
- extend ElCLib tests with near-zero and above-threshold parabola focal cases
2026-02-28 15:49:14 +00:00
Pasukhin Dmitry
2ce7b26ddb Coding - Standardize comment separators, translate French comments (#1126)
Normalize method separator lines across the codebase to exactly
100 characters (// followed by 98 = signs) matching the project
coding standard.

Translate remaining French comments to English in ModelingData
packages (TKBRep, TKG2d, TKG3d, TKGeomBase) and FoundationClasses.

Add [[nodiscard]] attribute to Copy() methods on Geom_Geometry,
Geom2d_Geometry, Geom_Transformation, and Geom2d_Transformation
to prevent accidental discard of returned handles.

Fix typo in AppDef_Variational::Dump() debug output: "Nombre of
3d par multipoint" -> "Number of 3d per multipoint".

Update .github/copilot-instructions.md separator examples to match
the corrected convention.
2026-02-27 12:34:21 +00:00
Vladislav Romashko
64592d9fcf Foundation Classes, math_FunctionRoot - Constructor exception (#1121)
- Guarded `Sol.NbIterations()` calls with `if (Done)` in both `math_FunctionRoot` constructors.
- Prevents `StdFail_NotDone` from being raised during construction when the root is not found.
2026-02-26 11:35:08 +00:00
Pasukhin Dmitry
3266a82318 Modeling Data - Add Geom2dProp package for modern 2D curve differential properties (#1113)
Replace archaic LProp/Geom2dLProp macro-based (.gxx) pattern with a modern C++17 std::variant-dispatched package for computing local differential properties of 2D curves: tangent, curvature, normal, centre of curvature, curvature extrema, and inflection points.

New package Geom2dProp (TKG2d) provides:
- Geom2dProp: Result structs (TangentResult, CurvatureResult, NormalResult, CentreResult, CurveAnalysis) and geometry-agnostic free functions for property computation from derivatives.
- Geom2dProp_Curve: Unified variant dispatcher that auto-detects curve type from Geom2d_Curve or Adaptor2d_Curve2d and delegates to specialized evaluators. Owns the Geom2dAdaptor_Curve handle and passes non-owning raw pointers to per-geometry classes.
- Per-geometry evaluators with optimized evaluation:
  - Line (header-only): zero curvature, constant tangent
  - Circle (header-only): constant curvature 1/R
  - Ellipse: analytical extrema at 0, PI/2, PI, 3PI/2
  - Hyperbola: analytical extremum at vertex
  - Parabola: analytical extremum at vertex
  - BezierCurve: numeric curvature extrema/inflection finding
  - BSplineCurve: numeric with C3 interval subdivision
  - OffsetCurve: numeric approach
  - OtherCurve: fallback via adaptor virtual D1/D2/D3

Key design decisions:
- Uses Geom2dAdaptor_Curve for optimized derivative evaluation (D0-DN) with BSpline span caching.
- Non-owning raw pointers in per-geometry classes; lifetime managed by the Geom2dProp_Curve dispatcher which holds the adaptor handle.
- Returns result structs with IsDefined flags instead of throwing exceptions for degenerate cases.
- 106 GTests covering all curve types, free functions, adaptor/geometry initialization, trimmed curves, cross-validation against LProp.
2026-02-24 17:10:36 +00:00
Pasukhin Dmitry
7544a74168 Coding - Fix KD-Tree empty case handling by initializing arrays instead of resizing (#1111)
- Fixed `NCollection_KDTree::KNearestPoints` to properly handle empty tree/K=0 cases by initializing output arrays to empty instead of calling Resize with invalid bounds
- Enhanced Linux vcpkg cache download action to include debug library paths for better debug build support
2026-02-23 21:15:21 +00:00
Pasukhin Dmitry
8430a532ba Foundation Classes - Align FlatMap/FlatDataMap lookup path and update usage notes (#1108)
- Simplify `findSlotIndex()` in `NCollection_FlatMap` and `NCollection_FlatDataMap` to probe until empty slot or key match.
- Remove lookup early-exit based on probe distance to keep lookup behavior consistent between both flat containers.
- Reorder `NCollection_FlatDataMap::Slot` members to keep hash/probe metadata before key/value storage.
- Refresh class-level Doxygen comments with practical usage guidance and relative notes vs `NCollection_Map` / `NCollection_DataMap`.
2026-02-23 09:28:17 +00:00
Pasukhin Dmitry
2a09e06d48 Foundation Classes - Optimize NCollection_FlatMap and NCollection_FlatDataMap internals (#1103)
- Encode slot state in probe distance (`myProbeDistancePlus1`): 0 = empty, >0 = used
  and remove explicit `SlotState`/tombstone handling paths.
- Replace internal `findSlot()` optional-index API with `findSlotIndex()` bool + out index.
- Consolidate insertion logic into `insertRehashedImpl()` variants and reuse cached hash
  during rehash to avoid redundant hash recomputation.
- Tune growth policy to max load factor 13/16 (81.25%) and update `reserve()` math.
- Keep behavior and API intact while reducing per-slot metadata overhead and hot-path branching.
2026-02-20 23:40:49 +00:00
Pasukhin Dmitry
e384f0bb93 Testing - Add unit tests for geometric classes and conversions (#1099)
- Introduced new tests for TopExp class to validate shape mapping and vertex retrieval.
- Added tests for Geom_Circle, Geom_Line, and Geom_Plane classes to ensure correct geometric behavior and transformations.
- Implemented tests for GCPnts_AbscissaPoint to verify length calculations and parameter retrieval for lines and circles.
- Created conversion tests in GeomConvert to check the accuracy of converting geometric entities to B-spline representations.
- Updated CMake files to include new test files for the added tests.
2026-02-20 20:25:09 +00:00
Pasukhin Dmitry
c9bdc4b9f1 Modeling Algorithms - Optimize properties computation for complex compounds (#1091)
Optimized exact vprops path for OCC28402 by reducing TopLoc_Location
composition overhead in edge pcurve lookup.

Changes:
- added fast-path exits in TopLoc_Location::Predivided() for identity and
  equal-location cases;
- cached face surface/location in BRepGProp_Face and reused this context in
  Load(const TopoDS_Edge&);
- in BRep_Tool::CurveOnSurface(...), compute Predivided() only when edge
  has curve representations to iterate.

This keeps algorithmic behavior unchanged and targets the performance
regression reported by tests/bugs/modalg_7/bug28402.
2026-02-15 09:24:57 +00:00
Pasukhin Dmitry
c31fc654b1 Foundation Classes - Add coordinate-wise polishing to PSO and DE solvers (#1088)
Add a Brent-based coordinate-wise polishing phase to PSO and Differential
Evolution, improving component-level precision from ~1e-4 to 1e-8+ for
separable functions. Introduce BrentAlongCoordinate in MathUtils_LineSearch
as a zero-allocation 1D minimizer for axis-aligned searches.

Changes:
- MathUtils_LineSearch: add BrentAlongCoordinate() for in-place 1D Brent
  minimization along a single coordinate axis (no vector allocations)
- MathOpt_PSO: add PolishCoordinateWise() post-processing with configurable
  budget (PolishBudgetPerDim, default 50, 0 disables); validate NbParticles > 0;
  validate SeededOnly requires seeds; re-evaluate function when seed position
  is clamped to bounds (discard stale user-provided value)
- MathOpt_GlobOpt: apply coordinate-wise polishing after DE evolution loop;
  propagate PolishBudgetPerDim from GlobalConfig to auto-generated PSOConfig
- MathUtils_Random: add RandomGenerator utility (Lehmer LCG)
- GTests: tighten sphere-type test tolerances to 1e-6; add polishing precision,
  SeededOnly validation, and clamped seed re-evaluation tests
2026-02-14 17:55:31 +00:00
Pasukhin Dmitry
04068e3aea Modeling Data - Simplify EmplaceValue in Array1 and Array2 (#1087) 2026-02-14 13:43:11 +00:00
Pasukhin Dmitry
d515004353 Foundation Classes - Add Laguerre polynomial solver and refactor specialized Newton APIs (#1086)
Add a general Laguerre polynomial solver to MathPoly and migrate specialized
MathSys Newton solvers (2D/3D/4D) to a unified fixed-size API aligned with
MathUtils statuses and configuration.

MathPoly:
- Add MathPoly_Laguerre.hxx with Laguerre + deflation for higher-degree polynomials.
- Add GeneralPolyResult with real and complex root outputs.
- Add Quintic/Sextic/Octic helpers built on the general solver.
- Add MathPoly_Laguerre gtests and update FILES.cmake/README.

MathSys:
- Add MathSys_NewtonTypes.hxx with NewtonResultN, NewtonBoundsN, NewtonOptions.
- Add/replace specialized APIs:
  - Solve2D(), Solve2DSymmetric()
  - Solve3D(), SolveCurveSurfaceExtrema3D()
  - Solve4D(), SolveSurfaceSurfaceExtrema4D()
- Add dedicated 2D/3D/4D Newton gtests and update FILES.cmake.
- Restore detailed solver comments/docs and update MathSys README.

MathUtils alignment:
- Add Status::NonDescentDirection.
- Make NewtonOptions derive from MathUtils::Config and use FTolerance/
  XTolerance/MaxIterations consistently.
- Add shared Newton-related constants in MathUtils_Config.hxx.
- Add Domain1D::IsEqual().
- Update MathUtils README accordingly.

Correctness updates in specialized Newton:
- Convergence is strictly residual-based.
- Armijo directional derivative in symmetric 2D uses J^T*F.
- Singular Jacobian handling keeps robust fallback directions.
- NewtonResultN iteration counter renamed to NbIterations for consistency.

Also updated docs and tests to remove old specialized Newton status/options
references and use MathUtils::Status + FTolerance/XTolerance.
2026-02-14 13:05:07 +00:00
Pasukhin Dmitry
fcd88b933f Modeling Data - Add Geom2dGridEval package for batch 2D curve evaluation (#1079)
Add new Geom2dGridEval package in TKG2d providing batch evaluation of 2D curves at multiple parameter values, mirroring the existing 3D GeomGridEval package in TKG3d. Specialized evaluators use analytical formulas for conics and cache-based evaluation for BSpline/Bezier curves, with a unified std::variant dispatcher for automatic type-based dispatch.

New classes:
- Geom2dGridEval_Line (header-only), _Circle, _Ellipse, _Hyperbola, _Parabola, _BezierCurve, _BSplineCurve, _OffsetCurve, _OtherCurve
- Geom2dGridEval_Curve: unified dispatcher with Initialize() from Adaptor2d_Curve2d or occ::handle<Geom2d_Curve>
- Geom2dGridEval.hxx: CurveD1/D2/D3 result structures

BSplCLib_Cache changes:
- Add D0Local/D1Local/D2Local/D3Local overloads for gp_Pnt2d/gp_Vec2d
- Refactor existing 2D D0/D1/D2/D3 methods to delegate to D*Local, consistent with the existing 3D delegation pattern
2026-02-13 22:41:40 +00:00
Pasukhin Dmitry
ea9443d154 Modeling Data - Optimize BSplCLib interpolation and blend evaluation erformance (#1082)
Profiling identified several performance bottlenecks in the BSpline interpolation and blend surface computation pipeline. This commit addresses them through four categories of optimization:

1. Static initialization for GeomFill convertors: the monomial-to-BSpline conversion matrices in GeomFill_QuasiAngularConvertor::Init() and GeomFill_PolynomialConvertor::Init() are mathematical constants that were recomputed on every call via Convert_CompPolynomialToPoles. Now computed once via static lambda-initialized locals.

2. Stack allocation for small matrices/arrays: InterpolationMatrix in BSplCLib::Interpolate, aBSplineBasis in BuildBSpMatrix, and parameters/contact_array in Convert_CompPolynomialToPoles::Perform now use stack buffers when sizes fit, avoiding heap allocation.

3. Raw pointer access in hot loops: replaced multi-layer accessor chains (math_Matrix::Value -> math_DoubleTab::Value -> NCollection_Array2::Value -> NCollection_Array1::at with bounds checks) with direct pointer arithmetic in EvalBsplineBasis, FactorBandedMatrix, BuildBSpMatrix, SolveBandedSystem, and math_VectorBase operations (Multiply, TMultiply, Multiplied, Norm, Norm2).

4. Eliminated redundant recomputation: cached AdvApprox_ApproxAFunction:: NbPoles() results in Approx_SweepApproximation, Approx_CurveOnSurface, and Approx_Curve2d instead of recomputing BSplCLib::NbPoles in inner loops. Cached math_FunctionSetRoot solver in BRepBlend_AppFuncRoot to avoid repeated construction/destruction per SearchPoint call.

Also fixed undefined behavior in BSplCLib::NbPoles where pointer arithmetic created a pointer before the array start (pmu -= f).
2026-02-13 21:35:03 +00:00
Pasukhin Dmitry
bdddadec19 Coding - Remove redundant null checks before deallocation (#1077)
In C++, delete/delete[] on nullptr and free(NULL) are guaranteed no-ops.
This removes redundant null-check guards before these calls across 39
files, reducing code noise without behavioral change. Also simplifies
map value cleanup in BRepClass3d_SolidExplorer by using iterator
reference instead of redundant hash lookups.
2026-02-13 12:37:51 +00:00
Pasukhin Dmitry
56e162c480 Coding - Fix critical CodeQL static analysis warnings (#1074)
Interface_ParamSet:
- Eliminate use-after-free in Append() by deleting old buffer through
  a temp variable after reassigning the member pointer (CodeQL #5132/#2684)

delabella.cpp:
- Fix upcast array pointer arithmetic by parenthesizing cast to ensure
  pointer arithmetic uses derived class (Vert) size rather than base
  class (DelaBella_Vertex) size (CodeQL #5131)

NCollection_SparseArrayBase:
- Rework to replace virtual dispatch (createItem/destroyItem/copyItem)
  with function pointers passed as arguments to protected methods
- Store only DestroyItemFunc in base class to enable safe cleanup
  in destructor without virtual dispatch
- Pass CreateItemFunc and CopyItemFunc as arguments with zero
  per-instance storage overhead
- Move Clear() and UnsetValue() from base public API to protected
  clearItems()/unsetValue() with function pointer parameters;
  template class provides public wrappers
- Remove vtable entirely (no virtual methods remain)
- This eliminates the pure virtual call during base class destruction
  (CodeQL #5012)

AdvApp2Var_MathBase:
- Rewrite comparison to avoid potential signed integer overflow:
  *ncfnew + 1 > ncut becomes *ncfnew >= ncut (CodeQL #2692)
2026-02-13 08:48:17 +00:00
Pasukhin Dmitry
833c86f176 Foundation Classes, NCollection - Add KDTree container for spatial point queries (#1073)
Add NCollection_KDTree - a header-only static balanced KD-Tree for
efficient nearest-neighbor, k-nearest, range (sphere), box (AABB),
sphere containment, and weighted nearest queries on point sets.

Key features:
- O(N log N) construction via median-split (std::nth_element)
- O(log N) nearest-neighbor search with bounding box pruning
- Leaf buckets (linear scan for small subtrees) for better performance
- Cache-friendly permutation-based layout (no node allocations)
- Optional per-point radii via compile-time template parameter
  (HasRadii=true) with zero overhead when unused
- Works with any point type providing Coord(int) with 1-based indexing
  (gp_Pnt, gp_Pnt2d, gp_XYZ, gp_XY out-of-the-box)

Public API:
- Build() from C array or NCollection_Array1 (with or without radii)
- NearestPoint() single nearest with optional squared distance output
- NearestPoints() all equidistant nearest within tolerance
- KNearestPoints() k-nearest sorted by distance
- RangeSearch() sphere query returning NCollection_DynamicArray
- BoxSearch() axis-aligned bounding box query
- ContainingSearch() find all spheres containing a query point (HasRadii)
- NearestWeighted() nearest sphere surface, minimizing dist-radius (HasRadii)

Includes 187 GTests covering construction, copy/move semantics,
2D/3D queries, radii-aware queries, brute-force correctness verification,
identical-point edge cases, and stress tests.
2026-02-13 00:35:12 +00:00
Pasukhin Dmitry
4df229f2c4 Foundation Classes - Bnd package improvements (#1051)
Bug fixes:
- Bnd_Box::Add(Bnd_Box) - fix unconditional bounds merge before open direction check
- Bnd_Box::IsOut(gp_Pln) - use GetXMin()/GetXMax() accessors (include Gap) instead of raw fields
- Bnd_Box::Distance() - add void box check to avoid invalid results
- Bnd_Range::Common() - add missing return statement
- Bnd_Sphere::SquareDistances() - fix radius comparison (was comparing distance vs radius instead of squared values)
- Bnd_OBB: OBBTool::ProcessTriangle - add safety check for degenerate cross products before normalization
- Bnd_OBB: OBBTool::ProcessDiTetrahedron - fix off-by-one in bounds check (use < instead of <=)

Performance optimizations:
- Bnd_Box::IsOut(Bnd_Box) - add early return fast path for non-open boxes
- Bnd_Box2d::IsOut(Bnd_Box2d) - add early return fast path for non-open boxes

API improvements:
- Add Contains()/Intersects() semantic wrappers (inverse of IsOut) to Bnd_Box, Bnd_Box2d, Bnd_OBB, Bnd_Range
- Add Center() returning std::optional to Bnd_Box, Bnd_Box2d, Bnd_Range
- Add Min()/Max()/Get() returning std::optional to Bnd_Range
- Add Bnd_Range::Bounds struct for C++17 structured bindings via Get()
- Add Bnd_OBB::HalfSizes struct and GetHalfSizes() for structured bindings
- Add Bnd_Box2d::Distance() method
- Replace Bnd_Range::IsIntersected magic int returns with IntersectStatus enum

Code modernization:
- Add [[nodiscard]] and noexcept annotations across all Bnd classes
- Migrate Bnd_Sphere inline methods from .lxx to header, delete Bnd_Sphere.lxx
- Remove unused includes (iomanip, fstream, legacy Standard_*.hxx headers)
- Fix Bnd_Box.hxx "Ymix" typo in IsOpenYmin() comment
- Clean up DET-style comments in Bnd_Box.cxx
- Update IntPatch_WLineTool.cxx to use IntersectStatus enum
2026-02-12 23:02:36 +00:00
Pasukhin Dmitry
27788ce7a4 Foundation Classes, NCollection - Add OrderedMap and OrderedDataMap containers (#1072)
Add two new hash-based containers that preserve insertion order via an intrusive doubly-linked list threaded through the hash nodes:

- NCollection_OrderedMap<K>    (key-only, like NCollection_Map)
- NCollection_OrderedDataMap<K,V> (key-value, like NCollection_DataMap)

Both provide O(1) hash lookup, O(1) append/remove, and deterministic iteration in insertion order. Removal unlinks from the doubly-linked list in O(1), unlike NCollection_IndexedMap which requires O(n) swap-and-shrink on its dense array.

Public API mirrors the corresponding unordered containers:
- OrderedMap: Add, Added, Emplace, Emplaced, TryEmplace, TryEmplaced, Contains, Contained, Remove, First, Last
- OrderedDataMap: Bind, Bound, TryBind, TryBound, Emplace, Emplaced, TryEmplace, TryEmplaced, IsBound, Contained, UnBind, Seek, Find, ChangeSeek, ChangeFind, Items, First, Last, FirstValue, LastValue, ChangeFirstValue, ChangeLastValue

Both containers are header-only templates inheriting NCollection_BaseMap. Iterators walk the linked list (not bucket chains) and are compatible with NCollection_StlIterator for STL range-based for loops.

GTests added: 85 tests covering insertion order preservation, add/remove in all positions, copy/move/assign/exchange semantics, resize stability, First/Last access, Contained optional lookup, TryEmplace/TryEmplaced no-overwrite semantics, structured bindings via Items(), and custom stateful hashers.
2026-02-12 22:56:10 +00:00
Pasukhin Dmitry
bfa0311ef0 Foundation Classes - Tree & collection performance optimizations, move semantics, unified map API (#1065)
NCollection_UBTree/EBTree:
- Add move constructor and move assignment operators
- Replace recursive Select() and delNode() with iterative stack-based
  traversal to avoid stack overflow on deeply unbalanced trees
- Optimize EBTree::Add() and Remove() to use single-lookup TryEmplaced()
  instead of double-lookup UnBind()+Bind() / Contains()+operator()
- Remove unused DEFINE_HUBTREE / DEFINE_HEBTREE / IMPLEMENT_HUBTREE /
  IMPLEMENT_HEBTREE macros
- Remove unused includes from EBTree (Standard_Type, Standard_Transient,
  NCollection_List, Standard_Integer, NCollection_Sequence)
- Fix doxygen @param tags and comment style

NCollection_LocalArray:
- Add move constructor and move assignment operators with optimized
  three-way branching (stack-stack copy, heap-heap swap, stack-heap steal)
- Add Reallocate() method supporting grow-with-copy for use as a
  dynamically growable stack
- Add static_assert enforcing trivially copyable element type

NCollection_CellFilter:
- Replace const_cast destructive-copy hack in Cell with proper move
  semantics; delete copy constructor and copy assignment
- Add Cell constructor from CellIndex for lightweight lookup keys
- Refactor add()/iterateAdd() to accept CellIndex instead of Cell,
  use TryEmplaced() for single-lookup cell insertion
- Refactor remove()/inspect() to use Contained() API with const_cast
  instead of C-style cast on Seek()
- Change ListNode default constructor from runtime throw to = delete
- Use size_t for dimension loops and add dimension size guard in IsEqual
- Remove SUN WorkShop 5.3 workaround
- Fix typo "usially" -> "usually" in class documentation

NCollection map API unification (Contained, TryEmplace, TryBind):
- Add Contained() to all map types returning std::optional with
  std::reference_wrapper; key-only maps return const key ref,
  data maps return std::pair of const key ref + value ref
- Add TryEmplace()/TryEmplaced() to NCollection_FlatMap and
  NCollection_IndexedMap for parity with NCollection_Map
- Add TryBind() to NCollection_IndexedDataMap for parity with
  NCollection_DataMap and NCollection_FlatDataMap
- Remove Seek()/ChangeSeek() from NCollection_Map (replaced by
  Contained())

Dead compiler workaround removal:
- NCollection_DefineAlloc: remove Borland/SUN #if branch, keep only
  the version with placement delete
- NCollection_SparseArrayBase: remove SUN WorkShop 5.3 workaround

GTests:
- Add move constructor/assignment tests for LocalArray, UBTree, EBTree
- Add Contained tests for NCollection_Map
- Add CellFilter tests and UBTree deep-unbalanced-tree stress test
2026-02-12 20:28:20 +00:00
Pasukhin Dmitry
43adc26488 Foundation Classes, TCollection_AsciiString - fix multibyte UTF-8 handling in UsefullLength() (#1070)
Replace byte-by-byte backward scan with NCollection_UtfIterator-based
forward iteration that correctly handles multibyte UTF-8 sequences.
The old code treated individual UTF-8 bytes (>= 0x80) as non-graphic
via std::isgraph(), causing premature truncation of strings ending
with non-ASCII Unicode characters.
Added GTests for UsefullLength() covering ASCII and UTF-8 cases.
2026-02-12 18:03:50 +00:00
Pasukhin Dmitry
a934911912 Coding - Fix MSVC warnings C4723 and C4324 (#1060) 2026-02-11 09:22:42 +00:00
Pasukhin Dmitry
964a2c75df Modeling Data, Algorithms - Always-populated weights, direct array access migration, Hermit bug fix (#1058)
Introduce always-populated weight arrays in BSpline/Bezier curve and surface
classes using non-owning views over a static unit-weights buffer. Migrate
~100 callers across the codebase from deprecated copy-out APIs to direct
const-reference array access. Fix a long-standing typo bug in Hermit.cxx.

Infrastructure (BSplCLib, BSplSLib):
- Add BSplCLib::UnitWeights(n) returning a non-owning NCollection_Array1
  view over a compile-time-initialized static array of 2049 ones; falls
  back to heap allocation for larger sizes.
- Add BSplCLib::MaxUnitWeightsSize() (constexpr 2049) and
  BSplCLib::UnitWeightsData() exposing the raw pointer for BSplSLib.
- Add BSplSLib::UnitWeights(nU, nV) returning a non-owning
  NCollection_Array2 view when nU*nV <= 2049, heap-allocated otherwise.

Always-populated myWeights (Geom/Geom2d curve and surface classes):
- myWeights is now always sized to match poles count.
  Non-rational: non-owning view via UnitWeights (zero allocation).
  Rational: owning array with actual weight values.
- Add WeightsArray() returning const NCollection_Array1<double>& (curves)
  or const NCollection_Array2<double>& (surfaces) that is always valid.
- Update all constructors, copy constructors, and restructuring operations
  (IncreaseDegree, InsertKnots, RemoveKnot, Segment, SetPeriodic,
  SetOrigin, SetNotPeriodic, ExchangeUV, etc.) to maintain the invariant.
- SetWeight: copies non-owning view to owned array before mutation when
  transitioning to rational; assigns UnitWeights when becoming non-rational.
- Remove myRational derivation from myWeights.Size() in updateKnots();
  rationality is now tracked explicitly via the myRational flag only.
- Fix Geom2d_BSplineCurve::InsertPoleAfter missing myRational update
  after inserting a weighted pole.
- Fix Geom_BSplineCurve::DumpJson stale myWeights.Size() > 0 guard
  (changed to myRational, matching all other classes).

Caller migration to direct array access (~100 files):
- Replace deprecated copy-out pattern (allocate temp + call Foo(temp))
  with const-reference access for Poles(), Knots(), Multiplicities(),
  UKnots(), VKnots(), UMultiplicities(), VMultiplicities(),
  KnotSequence(), UKnotSequence(), VKnotSequence().
- Replace Weights() null-pointer patterns with WeightsArray() const-ref
  or *Weights() dereference where null check is still appropriate.
- Affected modules: GeomConvert, Geom2dConvert, GeomLib, GeomFill,
  ProjLib, ShapeUpgrade, ShapeCustom, ShapeConstruct, ShapeAnalysis,
  ShapeAlgo, BRepLib, BRepGProp, HLRBRep, ChFi3d, ChFiKPart, BlendFunc,
  FairCurve, IntTools, TopOpeBRepTool, TopOpeBRepBuild, LocOpe,
  BRepOffset, Adaptor3d, GeomAdaptor, Geom2dAdaptor, BndLib, Extrema,
  DrawTrSurf, GeometryTest, GeomliteTest, SWDRAW, QABugs,
  GeomToIGES, IGESToBRep, GeomToStep, StdPrs.

Bug fix in Hermit.cxx (PolyTest, both 3D and 2D overloads):
- Fix typo: "Pole0 < 3" changed to "Pole0 < Pole3" — was comparing
  a double variable against the integer literal 3 instead of the
  variable Pole3 holding the endpoint weight value.
- Fix logic: "if (boucle == 1)" changed to "else if (boucle == 1)"
  to make the boucle==1 and boucle==2 branches mutually exclusive.
- Add explanatory comments on BSplCLib::D1 calls that intentionally
  pass weight values as scalar "poles" to evaluate the weight function.

NCollection_PackedMapAlgo migration (TDataStd, QABugs):
- Replace deprecated member functions (IsSubset, Subtraction, Subtract,
  Unite, Intersect, IsEqual) with NCollection_PackedMapAlgo free functions.

GTests:
- New BSplCLib_Test.cxx: 5 tests for UnitWeights API.
- New BSplSLib_Test.cxx: 5 tests for surface UnitWeights API.
- New Hermit_Test.cxx: 11 tests for Hermit::Solution (3D/2D) and
  Hermit::Solutionbis covering uniform, distinct, high-ratio, reversed,
  symmetric weights and positive-poles invariant.
- Add WeightsArray tests to Geom_BSplineCurve_Test, Geom_BezierCurve_Test,
  Geom_BSplineSurface_Test, Geom_BezierSurface_Test (2 tests each)
  verifying const-ref return, non-owning for non-rational, owning for
  rational.
2026-02-10 18:41:34 +00:00
Pasukhin Dmitry
8949fd25f9 Coding - Fix clang warning suppression for function pointer casts (#1059)
- Switched from `__clang_major__ >= 16` gating to `__has_warning(...)` checks
- Added fallback suppression for `-Wcast-function-type` when `-Wcast-function-type-mismatch` is unavailable
2026-02-10 18:13:04 +00:00
Pasukhin Dmitry
498e7cd173 Foundation Classes, Convert - Replace handle-based APIs with direct array access (#1057)
Refactor the Convert package to eliminate heap-allocated handle-based storage
in favor of direct NCollection_Array members, improving performance and
simplifying the API. Deprecate single-element accessors (Pole, Knot, etc.)
in favor of batch const-reference accessors (Poles, Knots, etc.).

Convert_ConicToBSplineCurve:
- Replace handle members (poles, weights, knots, mults) with direct
  NCollection_Array1 fields (myPoles, myWeights, myKnots, myMults).
- Replace BuildCosAndSin handle-based parameters with array references.
- Add batch accessors: Poles(), Weights(), Knots(), Multiplicities().
- Deprecate single-element accessors: Pole(), Weight(), Knot(), Multiplicity().
- Update all conic subclasses: Circle, Ellipse, Hyperbola, Parabola.

Convert_ElementarySurfaceToBSplineSurface:
- Replace handle members with direct NCollection_Array fields
  (myPoles, myWeights, myUKnots, myVKnots, myUMults, myVMults).
- Add Finalize() to trim oversized arrays in derived constructors.
- Add batch accessors: Poles(), Weights(), UKnots(), VKnots(),
  UMultiplicities(), VMultiplicities().
- Deprecate single-element accessors: Pole(), Weight(), UKnot(), VKnot(),
  UMultiplicity(), VMultiplicity().
- Update all surface subclasses: Cone, Cylinder, Sphere, Torus.

Convert_CompPolynomialToPoles / Convert_GridPolynomialToPoles:
- Replace handle-based output parameters with direct const-reference
  accessors for Poles, Knots, Multiplicities.
- Deprecate old handle-based Poles(), Knots(), Multiplicities() overloads.

Convert_CompBezierCurvesToBSplineCurve (2D and 3D):
- Extract common logic into Convert_CompBezierCurvesToBSplineCurveBase
  template header to eliminate code duplication.
- Replace handle<HArray1> members with direct NCollection_Array1 storage
  in the internal sequence, removing unnecessary heap indirection.

NCollection_Sequence:
- Fix Node constructors to use member initializer lists (copy/move
  construction) instead of default-construct + assign, which failed for
  types like NCollection_Array1 where operator= requires matching sizes.

Downstream callers migrated:
- AdvApprox_ApproxAFunction: use new const-ref Knots()/Multiplicities().
- AppDef_Variational: use new const-ref Knots()/Multiplicities().
- AdvApp2Var_ApproxAFunc2Var, AdvApp2Var_Patch: use new const-ref API.
- Geom2dConvert, GeomConvert, GeomConvert_1: use new const-ref API.
- GeomFill_PolynomialConvertor, GeomFill_QuasiAngularConvertor: adapted.
- Geom_OsculatingSurface: use direct array references instead of
  handle->Array*() calls.

Added GTests for all Convert classes covering conic curves,
elementary surfaces, CompBezier, CompPolynomial, and GridPolynomial
conversions.
2026-02-09 16:38:55 +00:00
Pasukhin Dmitry
87703a2dac Modeling Data - Refactor BSpline/Bezier classes to use direct array members (#1056)
Replace handle-based NCollection_HArray1/HArray2 members with direct
NCollection_Array1/Array2 value members in Geom_BSplineCurve,
Geom2d_BSplineCurve, Geom_BSplineSurface, Geom_BezierCurve,
Geom2d_BezierCurve and Geom_BezierSurface. This eliminates heap
indirection and reference counting overhead for exclusively owned data.

Changes:
- Replace handle-wrapped arrays with value members (myPoles, myWeights,
  myKnots, myFlatKnots, myMults) using OCCT myFieldName convention
- Bezier classes store only myPoles/myWeights; knots, multiplicities and
  flat knots are provided by public instance methods (BezierKnots,
  BezierMults, BezierFlatKnots, etc.) returning static arrays by degree
- Add WeightsPtr() inline method on all classes returning nullptr for
  non-rational geometry, replacing scattered ternary expressions
- Add InternalFlatKnots(), InternalPoles() inline accessors for grid
  evaluation without virtual dispatch
- Deprecate copy-out accessor overloads (Knots(Array1&), Poles(Array1&),
  etc.) in favor of const-reference returning versions
- Remove #define macros (POLES, KNOTS, FKNOTS, FMULTS, WEIGHTS) from
  BSplineCurve_1.cxx and BSplineSurface_1.cxx, replacing with direct
  member access
- Update GeomGridEval and Geom_OsculatingSurface for new accessors

Bug fixes:
- Fix Geom_BSplineCurve::IsEqual skipping knot comparison due to reused
  pole loop index; replaced with separate loop-scoped iterators
- Fix Geom_BSplineSurface::SetUNotPeriodic/SetVNotPeriodic using wrong
  NCollection_Array2 5-arg constructor; replaced with 4-arg + Init(0.0)
- Fix Geom_BezierSurface::Increase self-referencing Init(myPoles,
  &myWeights) call; replaced with direct rationality flag update

NCollection_Array2 enhancements:
- Add ResizeWithTrim() for 2D-preserving resize (copies common sub-matrix
  maintaining row/col positions)
- Handle resize from empty arrays and same-size bound changes without
  unnecessary reallocation
2026-02-09 09:53:05 +00:00
Pasukhin Dmitry
fca1b3e0c3 Foundation Classes - Optimize NCollection_List (#1040)
- Added `std::initializer_list` constructor for convenient list initialization
- Improved const-correctness by providing separate const and non-const `begin()`/`end()` methods
- Optimized move constructor to directly transfer ownership instead of using move assignment
- Added `Exchange()` method for efficient list swapping without reallocation
2026-02-03 09:32:50 +00:00
Pasukhin Dmitry
5ce5f2e4dd Foundation Classes - Add Items() views with C++17 structured bindings to NCollection maps (#1038)
Add key-value pair iteration support with C++17 structured binding syntax to NCollection map classes. This enables modern iteration patterns like:
  for (auto [aKey, aValue] : aMap.Items()) { ... }

Changes include:
- New NCollection_ItemsView.hxx with reusable template utilities organized under namespace NCollection_ItemsView:
  - KeyValueRef: key-value pair reference for structured bindings
  - KeyValueIndexRef: key-value-index tuple for indexed maps
  - KeyIndexRef: key-index pair for key-only indexed maps
  - Iterator: generic forward iterator for view classes
  - View: generic view class for Items() iteration
- Items() method for NCollection_DataMap, NCollection_FlatDataMap, NCollection_IndexedDataMap returning key-value pair views
- IndexedItems() method for NCollection_IndexedMap and NCollection_IndexedDataMap returning key-index or key-value-index tuple views
- Custom hasher constructors (copy and move) for NCollection_DataMap, NCollection_FlatDataMap, NCollection_FlatMap, NCollection_Map
- GetHasher() accessor methods for all map types with custom hashers
- IsEqual() method for NCollection_FlatDataMap::Iterator and NCollection_FlatMap::Iterator to support proper iterator comparison
- Fixed copy constructors and assignment operators in FlatMap/FlatDataMap to preserve exact capacity and copy hasher state

The iterator equality comparison in NCollection_ItemsView::Iterator correctly checks both More() state and IsEqual() position, matching NCollection_StlIterator.

Added comprehensive GTest coverage for all new functionality including Items() iteration, structured bindings, hasher preservation, and iterator equality semantics.
2026-01-28 16:44:50 +00:00
Pasukhin Dmitry
218862282b Foundation Classes - Add Emplace methods to NCollection containers (#1035)
Add in-place construction support to sequential and array containers, following the pattern already established in map containers.

New methods added:
- NCollection_List: EmplaceAppend, EmplacePrepend, EmplaceBefore, EmplaceAfter
- NCollection_Sequence: EmplaceAppend, EmplacePrepend, EmplaceAfter, EmplaceBefore
- NCollection_DynamicArray: EmplaceAppend, EmplaceValue
- NCollection_Array1: EmplaceValue
- NCollection_Array2: EmplaceValue

NCollection_Sequence::Node class extended with in-place constructor to support the new Emplace methods.

All methods use perfect forwarding to construct elements in-place, avoiding unnecessary copies or moves. This is particularly useful for:
- Types with expensive copy/move operations
- Types with multiple constructor arguments
- Move-only types (non-copyable)

Added corresponding unit tests for all new methods.
2026-01-28 16:42:43 +00:00
Pasukhin Dmitry
8a31910e06 Coding - Fix compilation warnings (#1034)
- Added version guard for Clang compiler to conditionally apply `-Wcast-function-type-mismatch` pragma
- Wrapped deprecated `Standard_HMutex` typedef with deprecation warning suppression macros
2026-01-28 10:20:44 +00:00
Pasukhin Dmitry
1f251bb5ac Testing - Update CI workflow to build and test on Ubuntu with GCC (#1028)
- Replaced macOS Clang (No PCH) job with Ubuntu GCC (No PCH) job in the workflow dependency list
- Updated the build job to use `ubuntu-24.04` runner with GCC compiler instead of `macos-15` with Clang
- Updated the test job to run on Ubuntu with GCC instead of macOS with Clang
2026-01-24 12:03:19 +00:00
Pasukhin Dmitry
cc367178fb Foundation Classes - Add Try* and Emplace methods to NCollection maps (#1022)
- Added Try* methods for conditional binding (only insert if key doesn't exist)
- Added Emplace* methods for in-place construction of values
- Fixed memory safety issues in NCollection_FlatMap/FlatDataMap with proper storage management
- Fixed exception safety issue in NCollection_IndexedMap/IndexedDataMap by moving Increment() call
2026-01-22 19:10:51 +00:00
Pasukhin Dmitry
f71af062ad Foundation Classes - Refactor TColStd_PackedMapOfInteger and related classes (#1023)
- Replaced `TColStd_PackedMapOfInteger` implementation with a typedef to `NCollection_PackedMap<int>`
- Introduced new `NCollection_PackedMap` template class and `NCollection_PackedMapAlgo` namespace with standalone boolean operation functions
- Removed `TColStd_HPackedMapOfInteger` implementation files, keeping only the header as a deprecated wrapper
- Updated all iterator references from `TColStd_MapIteratorOfPackedMapOfInteger` to `TColStd_PackedMapOfInteger::Iterator`
- Replaced direct map method calls (Unite, Subtract, etc.) with standalone algorithm functions from `NCollection_PackedMapAlgo`
2026-01-22 17:19:10 +00:00
Pasukhin Dmitry
6707d70f59 Foundation Classes - Performance optimizations and new high-performance collections (#1015)
This commit introduces performance improvements across fundamental OCCT classes
and adds new high-performance collection types optimized for modern CPU architectures.

New Collection Classes:
- NCollection_FlatDataMap: High-performance hash map using open addressing with
  Robin Hood hashing. Provides better cache locality than NCollection_DataMap
  by storing all key-value pairs inline in a contiguous array. Features include
  power-of-2 sizing for fast modulo operations, cached hash codes, exception-safe
  insertion, and no per-element memory allocations.
- NCollection_FlatMap: High-performance hash set with the same optimizations.

Matrix and Vector Optimizations:
- math_Matrix: Cache-friendly i-k-j loop order for matrix multiplication.
  The inner loop now accesses matrix rows sequentially, significantly
  improving cache utilization for large matrices.
- math_VectorBase: Norm() and Norm2() rewritten with 4-way loop unrolling
  enabling better SIMD vectorization. Partial sums are combined pairwise for
  improved numerical stability.

Thread Safety Improvements:
- Standard_Transient: Optimized reference counting with explicit memory ordering.
  IncrementRefCounter uses relaxed ordering (sufficient for pure counting).
  DecrementRefCounter uses release ordering with an acquire fence only when
  the count reaches zero, avoiding unnecessary synchronization overhead on
  every decrement (follows std::shared_ptr pattern).
- Standard_Mutex: Deprecated in favor of std::mutex. Added deprecation warnings
  indicating removal in OCCT 8.0.0.

Bug Fixes:
- OSD_Thread (Windows): Added error handling for DuplicateHandle failure in
  Assign() method, properly resetting handle and thread ID on failure.
- OSD_Thread (POSIX): Fixed nanoseconds overflow in Wait() when the computed
  timeout exceeds 1 second. Added normalization to properly carry excess
  nanoseconds to seconds.

Tests:
- Added comprehensive GTest suites for NCollection_FlatDataMap and
  NCollection_FlatMap covering basic operations, iterators, edge cases,
  collisions, and performance characteristics.
2026-01-21 17:46:07 +00:00
Pasukhin Dmitry
36e781813e Coding - Revert type definitions for Standard_CString replacements (#1021)
Fix the replacement issue when Standard_CString was replaced to const char* even when it was const.
Now "const Standard_CString" is replaced with "const char* const".
Only places which were before const Standard_CString is replaced.
2026-01-21 10:09:22 +00:00
Pasukhin Dmitry
aea3d95052 Foundation Classes - Optimize TopLoc_Location::HashCode computation (#1006)
Update code with hash calculation to use pointer directly instead of Handle.
It helps to avoid casting and incrementing atomic counter.
2026-01-19 17:26:09 +00:00
Pasukhin Dmitry
848bf7f697 Foundation Classes - Enhance TCollection_ExtendedString with std::u16string_view support (#1009)
- Added constructor and assignment operator for std::u16string_view.
- Implemented conversion operator to std::u16string_view.
- Introduced methods to append std::u16string_view.
- Added Copy and assignment operator overloads for char16_t pointers.
- Fixed variable name inconsistencies (myLength vs mylength).
- Added new string manipulation methods: LeftAdjust, RightAdjust, LeftJustify, RightJustify, Center, Capitalize, Prepend, FirstLocationInSet, FirstLocationNotInSet, IntegerValue, IsIntegerValue, RealValue, IsRealValue, IsSameString.
2026-01-18 21:07:30 +00:00
Pasukhin Dmitry
b5cd7a8410 Coding - Suppress macOS system header warnings in multiple files (#997)
- Added clang diagnostic pragmas to suppress three specific warning types around macOS/iOS framework imports
- Added version-specific warning suppression for clang 20+ in the general warnings disable header
- Extended function cast warning suppression to cover clang's `-Wcast-function-type-mismatch`
2026-01-14 21:22:11 +00:00
Pasukhin Dmitry
0a1e8b7802 Coding - Include Standard_ErrorHandler header in OSD_signal (#996) 2026-01-14 21:21:12 +00:00
Dmitrii Kulikov
985287f213 Foundation Classes - Refactoring of gp_Pln (#1003)
- Renamed private member field from `pos` to `myPosition` throughout the class
- Added `[[nodiscard]]` attributes to getter and computation methods
- Introduced `SignedDistance()` methods for point, line, and plane to identify relative positions
- Refactored `Distance()` methods to use `SignedDistance()` internally, eliminating code duplication
- Made `gp_Ax3::Direct()` and `gp_Pln::Direct()` constexpr
2026-01-14 16:32:28 +00:00
Dmitrii Kulikov
c639199c01 Fixed warnings that appear when building with MSVC (#1004)
- Refactored loop control flow to use an `if` statement instead of a `for` loop with immediate `break`
- Changed variable type from `int` to `size_t` to match the expected type and eliminate conversion warnings
2026-01-14 14:49:43 +00:00
Pasukhin Dmitry
a36bca57a9 Coding - Clean up the FILES (#1002)
- Removed legacy metadata entries (EXTERNLIB, PACKAGES, DEFINES, FILES) that are no longer used by the build system
- Removed references to obsolete build artifacts (.lex, .yacc files) that appear to be superseded by generated .c/.h files
- Removed references to non-source files (README.md, .tcl scripts, GUID.txt) that shouldn't be listed in source file manifests
2026-01-14 14:46:42 +00:00
Pasukhin Dmitry
e1d36343e4 Foundation Classes - Inherited Standard_Failure from std::exception (#984)
First patch in iterative renovation of exceptions.

- Simplify exception classes to be container of data only.
- Removed redundant inclusion of <Standard_Type.hxx> in various header files across the project.
- Removed Set methods for failure and its define template.
- Removed Raise and Rerise static methods.
- Remove Instance and Throw methods
- Deprecated getting message with old approach, and moving to what()
- Update ErrorHandler to handle only specific list of exceptions.
2026-01-07 12:22:32 +00:00
Kirill Gavrilov
6c6f2ceb41 Coding - Use throw instead of legacy Standard_Failure::Raise (#983)
Replace Standard_*::Raise calls with throw statements for better exception handling
2026-01-05 19:17:00 +00:00
Kirill Gavrilov
078dfc44ae Foundation Classes, Standard_ErrorHandler - use thread_local stack instead of global mutex lock (#980)
Refactored Standard_ErrorHandler to use thread_local storage for the error handler stack
instead of a global list protected by mutex. This eliminates locking overhead entirely
since each thread only accesses its own error handlers.

Changes:
- Replaced global mutex-protected stack with thread_local Top pointer
- Simplified FindHandler() to directly return the thread-local Top
- Removed Catches() and LastCaughtError() methods (no longer needed)
- Added Raise() method for re-throwing caught exceptions
- Removed obsolete member variables: myStatus, myThread
- Deleted unused headers: Standard_HandlerStatus.hxx, Standard_JmpBuf.hxx, Standard_PErrorHandler.hxx
- Updated OCC_CATCH_SIGNALS macro to use new Raise() method
2026-01-05 17:03:00 +00:00
Pasukhin Dmitry
6c24544fe1 Coding - Apply more flags from Clang-tidy (#977)
- Refactor boolean expressions and improve code readability across multiple files
- Simplified boolean expressions by removing unnecessary comparisons to true/false.
- Replaced explicit boolean checks with direct variable usage 

Used flags:
readability-static-accessed-through-instance
readability-simplify-boolean-expr
performance-for-range-copy
performance-move-const-arg
misc-unused-parameters
misc-redundant-expression
2026-01-03 12:18:59 +00:00
Pasukhin Dmitry
825b0bd782 Coding - Fix GCC warnings (#975)
- Removed unnecessary reference qualifiers (`&`) from `gp_Dir` variable declarations in geometric evaluation classes
- Initialized previously uninitialized variables (`DuvBuf`, `anFDOpenMode`) to prevent undefined behavior
- Removed redundant `Standard_EXPORT` from deleted copy constructors
- Added explicit base class initialization in `EnumeratedThread` copy constructor
- Replaced C-style cast with `reinterpret_cast` in `Quantity_ColorRGBA` for type safety
2026-01-02 14:34:45 +00:00
Pasukhin Dmitry
bd99539eb2 Coding - Remove unused typedefs and includes, replace with forward declarations (#971)
- Deleted TopoDS_ListOfShape.hxx and removed its references in various files.
- Replaced instances of TopoDS_ListOfShape with NCollection_List in TopoDS_Builder, TopoDS_Iterator, and TopoDS_TShape.
- Updated CMake files to exclude TopoDS_ListOfShape from the build.
- Removed Geom2dConvert_SequenceOfPPoint and its usages, replacing them with NCollection_Sequence.
- Cleaned up Select3D and SelectMgr modules by removing Select3D_EntitySequence, Select3D_IndexedMapOfEntity, and SelectMgr_IndexedMapOfOwner.
- Adjusted includes in various files to use NCollection types instead of removed classes.
- Overall, this commit streamlines the codebase by eliminating unused types and reducing dependencies.
2025-12-29 22:31:23 +00:00