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
Follow-up to #522. GeomPlate_MakeApprox is the one consumer of the defective code that does not
go through GeomConvert_ApproxSurface — it constructs AdvApp2Var_ApproxAFunc2Var directly
(GeomPlate_MakeApprox.cxx:302, :428, :464, :503). So it took #522's always-zero interior
error without appearing in any census built by grepping for GeomConvert_ApproxSurface, including
the PrecisCode census in Sources/OCCTBridge/src/OCCTBridge_Surface.mm.
All three use the six-argument form, so CritOrder = 0 and Continuitydefaults to GeomAbs_C1 (GeomPlate_MakeApprox.hxx:56-63). C1 means the degree collapse could not reach
them — the NDMINU floor is high there — but the reported error was zero-inflated exactly as
everywhere else, and these sites pass dmax = tolerance * 10 into a CritOrder = 0 G0 criterion
that the approximator evaluates against its own error estimate.
Related: #430 (BRepFill_Filling/GeomPlate_BuildPlateSurface SIGSEGV), #434 (the two filling entry
points converged onto one implementation). Note BRepFill_Filling.cxx:712mentions GeomConvert_ApproxSurface but the line is commented out, so filling reaches the approximator only
through GeomPlate_MakeApprox.
Follow-up to #522.
GeomPlate_MakeApproxis the one consumer of the defective code that does notgo through
GeomConvert_ApproxSurface— it constructsAdvApp2Var_ApproxAFunc2Vardirectly(
GeomPlate_MakeApprox.cxx:302,:428,:464,:503). So it took #522's always-zero interiorerror without appearing in any census built by grepping for
GeomConvert_ApproxSurface, includingthe
PrecisCodecensus inSources/OCCTBridge/src/OCCTBridge_Surface.mm.Three bridge call sites
Sources/OCCTBridge/src/OCCTBridge_Healing.mm:950Sources/OCCTBridge/src/OCCTBridge_Healing.mm:997Sources/OCCTBridge/src/OCCTBridge_ProjLib_NLPlate.mm:232All three use the six-argument form, so
CritOrder = 0andContinuitydefaults toGeomAbs_C1(GeomPlate_MakeApprox.hxx:56-63). C1 means the degree collapse could not reachthem — the
NDMINUfloor is high there — but the reported error was zero-inflated exactly aseverywhere else, and these sites pass
dmax = tolerance * 10into aCritOrder = 0G0 criterionthat the approximator evaluates against its own error estimate.
What to measure
0019kernel. Same fingerprint-and-diff method as GeomConvert_ApproxSurface at GeomAbs_C0 returns a degree-1 collapse while reporting IsDone and a maxError five orders of magnitude too small #522's own 98-case sweep; theincremental slice rebuild in
docs/guides/building-occt.mdmakes a real before/after cheap.CritOrder = 0criterion was doing anything before. If its threshold was beingcompared against a number that could not exceed it, the criterion was inert and
dmaxwas adead argument — the same shape of finding as Three parallel BRepAlgoAPI_Defeaturing bridge wrappers, the two shape-based ones split their feature (fuzzy tolerance) between overloads, and the header's cross-reference index only documents the third #497, where
BRepAlgoAPI_DefeaturingignoredSetFuzzyValueentirely.Continuityshould be defaulted or passed explicitly at these three sites. It iscurrently implicit, and BRepOffsetAPI_MakeFilling SIGSEGVs (uncaught) on non-C0 continuity against a curved boundary #430/FillingSurface.add(edge:continuity:) mis-maps both non-default cases: .c1 requests curvature, .c2 fails the whole build() #433/N-side filling is wrapped twice at two different OCCT layers — converge Shape.fill and FillingSurface onto one implementation #434 established that this family's continuity handling is
where its bugs live.
Related: #430 (
BRepFill_Filling/GeomPlate_BuildPlateSurfaceSIGSEGV), #434 (the two filling entrypoints converged onto one implementation). Note
BRepFill_Filling.cxx:712mentionsGeomConvert_ApproxSurfacebut the line is commented out, so filling reaches the approximator onlythrough
GeomPlate_MakeApprox.Refs #522