Skip to content

GeomPlate_MakeApprox drives the #522 approximator directly, and no census counts it #571

Description

@gsdali

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.

Three bridge call sites

GeomPlate_MakeApprox approx(plateSurface, tolerance, 1, 8, tolerance * 10, 0);
  • Sources/OCCTBridge/src/OCCTBridge_Healing.mm:950
  • Sources/OCCTBridge/src/OCCTBridge_Healing.mm:997
  • Sources/OCCTBridge/src/OCCTBridge_ProjLib_NLPlate.mm:232

All three use the six-argument form, so CritOrder = 0 and Continuity defaults 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.

What to measure

  1. Whether the plate/filling surfaces these three produce moved at all between a stock kernel and a
    0019 kernel. 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; the
    incremental slice rebuild in docs/guides/building-occt.md makes a real before/after cheap.
  2. Whether the CritOrder = 0 criterion was doing anything before. If its threshold was being
    compared against a number that could not exceed it, the criterion was inert and dmax was a
    dead 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_Defeaturing ignored
    SetFuzzyValue entirely.
  3. Whether Continuity should be defaulted or passed explicitly at these three sites. It is
    currently 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_BuildPlateSurface SIGSEGV), #434 (the two filling entry
points converged onto one implementation). Note BRepFill_Filling.cxx:712 mentions
GeomConvert_ApproxSurface but the line is commented out, so filling reaches the approximator only
through GeomPlate_MakeApprox.

Refs #522

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    cluster:kernelOCCTSwift core geometry/meshing/IO librariesphase:1bPass 1b — C++ bridge header duplication audit (#381)priority:P2Normaltype:bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions