1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0027079: Bad approximation of intersection curves with variable curvature

1. Method Approx_ComputeLine::Perform is modified: now it contains also recursive calls after new line computation made by new method ApproxInt_MultiLine::MakeMLOneMorePoint.
    2. New method MakeMLOneMorePoint is added to ApproxInt_MultiLine: it builds new sub-line as a part of main line with new point added into the middle of the longest interval between existing points.
    3. Method ShapeConstruct_ProjectCurveOnSurface::ApproxPCurve is modified to avoid regressions: now it takes care of the set of initial points to be enough close to each other so that an interval between two adjacent points is less than half-period of the surface.
    4. Modification in ShapeConstruct_ProjectCurveOnSurface: correction of pcurves of edges which extremities are in the singularities of surface.
This commit is contained in:
jgv
2017-03-20 14:43:32 +03:00
committed by bugmaster
parent 6c060ff2c4
commit 2c26a53d85
29 changed files with 1626 additions and 460 deletions

View File

@@ -489,8 +489,16 @@ Standard_Boolean ShapeFix_Edge::FixAddPCurve (const TopoDS_Edge& edge,
Handle(Geom2d_Curve) c2d;
Standard_Real a1, b1;
if ( ! sae.HasPCurve (edge, surf, location)) {
Standard_Real TolFirst = -1, TolLast = -1;
TopoDS_Vertex V1, V2;
TopExp::Vertices(edge, V1, V2);
if (!V1.IsNull())
TolFirst = BRep_Tool::Tolerance(V1);
if (!V2.IsNull())
TolLast = BRep_Tool::Tolerance(V2);
myProjector->Init ( sas, preci );
myProjector->Perform (c3d,First,Last,c2d);
myProjector->Perform (c3d,First,Last,c2d,TolFirst,TolLast);
// stat = 2 : reinterpoler la c3d ?
if ( myProjector->Status ( ShapeExtend_DONE4 ) )
myStatus |= ShapeExtend::EncodeStatus (ShapeExtend_DONE2);