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:
@@ -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);
|
||||
|
Reference in New Issue
Block a user