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

0026576: Wrong result obtained by intersection algorithm.

1. Algorithm of Restriction line decomposition has been created.
2. Algorithm of check of coincidences between Walking and Restriction line has been improved in new function IsCoincide(...) (which replaces IsIn2DBox(...)).
3. Some useful methods have been added in IntPatch_PointLine (and inherited) classes.

Test cases for this issue have been created.
This commit is contained in:
nbv
2015-12-15 16:24:31 +03:00
committed by bugmaster
parent 4f99f761b1
commit 77dbd1f155
14 changed files with 878 additions and 246 deletions

View File

@@ -110,11 +110,6 @@
#include <IntTools_WLineTool.hxx>
#include <IntPatch_WLineTool.hxx>
//#ifdef OCCT_DEBUG_DUMPWLINE
//static
// void DumpWLine(const Handle(IntPatch_WLine)& aWLine);
//#endif
////
static
void TolR3d(const TopoDS_Face& ,
const TopoDS_Face& ,
@@ -893,6 +888,9 @@ void IntTools_FaceFace::MakeCurve(const Standard_Integer Index,
typl=L->ArcType();
if(typl == IntPatch_Restriction)
bAvoidLineConstructor = Standard_True;
//
// Line Constructor
if(!bAvoidLineConstructor) {
@@ -1492,8 +1490,8 @@ void IntTools_FaceFace::MakeCurve(const Standard_Integer Index,
Handle(IntPatch_WLine) WL =
Handle(IntPatch_WLine)::DownCast(L);
#ifdef OCCT_DEBUG
//WL->Dump(0);
#ifdef INTTOOLS_FACEFACE_DEBUG
WL->Dump(0);
#endif
//
@@ -2011,6 +2009,11 @@ void IntTools_FaceFace::MakeCurve(const Standard_Integer Index,
{
Handle(IntPatch_RLine) RL =
Handle(IntPatch_RLine)::DownCast(L);
#ifdef INTTOOLS_FACEFACE_DEBUG
RL->Dump(0);
#endif
Handle(Geom_Curve) aC3d;
Handle(Geom2d_Curve) aC2d1, aC2d2;
Standard_Real aTolReached;
@@ -3073,30 +3076,6 @@ Standard_Integer IndexType(const GeomAbs_SurfaceType aType)
}
return aIndex;
}
#ifdef OCCT_DEBUG_DUMPWLINE
//=======================================================================
//function : DumpWLine
//purpose :
//=======================================================================
void DumpWLine(const Handle(IntPatch_WLine)& aWLine)
{
Standard_Integer i, aNbPnts;
Standard_Real aX, aY, aZ, aU1, aV1, aU2, aV2;
//
printf(" *WLine\n");
aNbPnts=aWLine->NbPnts();
for (i=1; i<=aNbPnts; ++i) {
const IntSurf_PntOn2S aPntOn2S=aWLine->Point(i);
const gp_Pnt& aP3D=aPntOn2S.Value();
aP3D.Coord(aX, aY, aZ);
aPntOn2S.Parameters(aU1, aV1, aU2, aV2);
//
printf("point p_%d %lf %lf %lf\n", i, aX, aY, aZ);
//printf("point p_%d %20.15lf %20.15lf %20.15lf %20.15lf %20.15lf %20.15lf %20.15lf\n",
// i, aX, aY, aZ, aU1, aV1, aU2, aV2);
}
}
#endif
//=======================================================================
// Function : FindMaxDistance