mirror of
https://github.com/Open-Cascade-SAS/OCCT.git
synced 2026-05-11 10:10:56 +08:00
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.
This commit is contained in:
@@ -20,8 +20,8 @@
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <gp_Vec.hxx>
|
||||
#include <PLib.hxx>
|
||||
#include <StdFail_NotDone.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <StdFail_NotDone.hxx>
|
||||
#include <NCollection_Array1.hxx>
|
||||
#include <NCollection_HArray1.hxx>
|
||||
#include <NCollection_Array2.hxx>
|
||||
@@ -77,7 +77,7 @@ void GeomFill_PolynomialConvertor::Init()
|
||||
Coeffs,
|
||||
Inter,
|
||||
TrueInter); En attente du bon Geomlite*/
|
||||
AConverter.Poles(Poles1d);
|
||||
Poles1d = new NCollection_HArray2<double>(AConverter.Poles());
|
||||
|
||||
for (jj = 1; jj <= Ordre; jj++)
|
||||
{
|
||||
|
||||
@@ -93,7 +93,7 @@ void GeomFill_QuasiAngularConvertor::Init()
|
||||
|
||||
// Convertion
|
||||
Convert_CompPolynomialToPoles AConverter(Ordre, Ordre - 1, Ordre - 1, Coeffs, Inter, TrueInter);
|
||||
AConverter.Poles(Poles1d);
|
||||
Poles1d = new NCollection_HArray2<double>(AConverter.Poles());
|
||||
|
||||
for (jj = 1; jj <= Ordre; jj++)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user