You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Does not gate the next release. Found in the #480 census, deliberately left out of PR #561 to keep
that fix to the continuity vocabulary.
What
GeomConvert_BSplineSurfaceKnotSplitting and Geom2dConvert_BSplineCurveKnotSplitting are each
wrapped twice, by two families added three releases apart, which nothing has ever reconciled:
Five Swift methods over five bridge functions (OCCTBSplineSurfaceKnotSplitsU/...V/ OCCTBSplineSurfaceKnotSplitValues, OCCTBSplineCurve2dKnotSplits, OCCTBSplineCurve2dKnotSplitValues), all reaching the same two analyzers as the canonical pair.
The duplicates are strictly weaker, not differently useful:
The two bsplineKnotSplits* count methods return exactly uSplitCount/vSplitCount and the
canonical array's .count.
Surface.bsplineKnotSplitValues is the only one carrying anything the canonical call does not:
knot-table indices rather than parameters. Those resolve through bsplineUKnot(index:) / bsplineVKnot(index:), so nothing is unreachable without it, and the global function they exist
to feed (GeomConvert::SplitBSplineSurface) is not wrapped.
Surface.bsplineKnotSplitValues also constructs the analyzer three times per call (once per
count method, once for the values), where the canonical call constructs it once.
Both duplicates take one continuity for both parametric directions where the canonical surface call
takes one per direction, so they cannot express a question the canonical one can.
Fix
Deprecate the five methods with @available(*, deprecated, ...) pointing at the canonical
spelling, implemented over it rather than over their own bridge functions
Collapse the duplicated docs/reference/Document-Geometry-Constructors.md sections into a
pointer at Surface-Advanced.md / Curve2D.md
Decide whether Surface's index-returning form is worth keeping at all, given GeomConvert::SplitBSplineSurface is unwrapped and the parameters are directly usable
Does not gate the next release. Found in the #480 census, deliberately left out of PR #561 to keep
that fix to the continuity vocabulary.
What
GeomConvert_BSplineSurfaceKnotSplittingandGeom2dConvert_BSplineCurveKnotSplittingare eachwrapped twice, by two families added three releases apart, which nothing has ever reconciled:
GeomConvert_BSplineSurfaceKnotSplittingSurface.knotSplitting(uContinuity:vContinuity:)(counts + parameters, #403)Surface.bsplineKnotSplitsU(continuity:),bsplineKnotSplitsV(continuity:),bsplineKnotSplitValues(continuity:)Geom2dConvert_BSplineCurveKnotSplittingCurve2D.splitIndicesAtDiscontinuities(continuity:)Curve2D.bsplineKnotSplits(continuity:),bsplineKnotSplitValues(continuity:)Five Swift methods over five bridge functions (
OCCTBSplineSurfaceKnotSplitsU/...V/OCCTBSplineSurfaceKnotSplitValues,OCCTBSplineCurve2dKnotSplits,OCCTBSplineCurve2dKnotSplitValues), all reaching the same two analyzers as the canonical pair.The duplicates are strictly weaker, not differently useful:
bsplineKnotSplits*count methods return exactlyuSplitCount/vSplitCountand thecanonical array's
.count.Curve2D.bsplineKnotSplitValuesreturns the identical indicessplitIndicesAtDiscontinuitiesreturns, as
[Int32]and empty rather thannil. PR fix(#480): one continuity vocabulary for the whole knot-splitting family, and the order it could not spell #561 added a test asserting they agree atevery continuity, so this one is measured, not assumed.
Surface.bsplineKnotSplitValuesis the only one carrying anything the canonical call does not:knot-table indices rather than parameters. Those resolve through
bsplineUKnot(index:)/bsplineVKnot(index:), so nothing is unreachable without it, and the global function they existto feed (
GeomConvert::SplitBSplineSurface) is not wrapped.Surface.bsplineKnotSplitValuesalso constructs the analyzer three times per call (once percount method, once for the values), where the canonical call constructs it once.
Both duplicates take one continuity for both parametric directions where the canonical surface call
takes one per direction, so they cannot express a question the canonical one can.
Fix
@available(*, deprecated, ...)pointing at the canonicalspelling, implemented over it rather than over their own bridge functions
OCCTBridgeis not an SPM product, so the C-layerbreak is free, per Surface/Curve3D/Curve2D batch-evaluation bridge functions: three unconsolidated implementation generations per type, and OCCTGridEvalSurfaceD0/D1 use the opposite U/V-major layout from OCCTSurfaceEvaluateGrid #486)
docs/reference/Document-Geometry-Constructors.mdsections into apointer at
Surface-Advanced.md/Curve2D.mdSurface's index-returning form is worth keeping at all, givenGeomConvert::SplitBSplineSurfaceis unwrapped and the parameters are directly usableRefs #480, #403, #377.