X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=blobdiff_plain;f=src%2FIntPatch%2FIntPatch_ImpImpIntersection_4.gxx;h=428106622e4f4dd1e16ecb0e90c80c44231a077f;hb=3306fdd954ad583d2652f0454612b6183176eb2e;hpb=d9d3107d8df19cacc3d7a0cd46ba51deee0bf6f2 diff --git a/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx b/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx index cbd5928e69..428106622e 100644 --- a/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx +++ b/src/IntPatch/IntPatch_ImpImpIntersection_4.gxx @@ -29,12 +29,10 @@ static void ShortCosForm( const Standard_Real theCosFactor, Standard_Real& theCoeff, Standard_Real& theAngle); // -static - Standard_Boolean ExploreCurve(const gp_Cylinder& aCy, - const gp_Cone& aCo, - IntAna_Curve& aC, - const Standard_Real aTol, - IntAna_ListOfCurve& aLC); +static Standard_Boolean ExploreCurve(const gp_Cone& theCo, + IntAna_Curve& aC, + const Standard_Real aTol, + IntAna_ListOfCurve& aLC); static Standard_Boolean InscribePoint(const Standard_Real theUfTarget, const Standard_Real theUlTarget, @@ -511,13 +509,6 @@ private: const Standard_Boolean myIsReverse; }; -static - Standard_Boolean ExploreCurve(const gp_Cylinder& aCy, - const gp_Cone& aCo, - IntAna_Curve& aC, - const Standard_Real aTol, - IntAna_ListOfCurve& aLC); - static void SeekAdditionalPoints( const IntSurf_Quadric& theQuad1, const IntSurf_Quadric& theQuad2, const Handle(IntSurf_LineOn2S)& theLine, @@ -840,6 +831,7 @@ void ProcessBounds(const Handle(IntPatch_ALine)& alig, //-- ligne coura if (!procf) { d=ptf.Distance(ptsol.Value()); if (d <= Tol) { + ptsol.SetTolerance(Tol); if (!ptsol.IsMultiple()) { //-- le point ptsol (de aligold) est declare multiple sur aligold Multpoint = Standard_True; @@ -858,6 +850,7 @@ void ProcessBounds(const Handle(IntPatch_ALine)& alig, //-- ligne coura } if (!procl) { if (ptl.Distance(ptsol.Value()) <= Tol) { + ptsol.SetTolerance(Tol); if (!ptsol.IsMultiple()) { Multpoint = Standard_True; ptsol.SetMultiple(Standard_True); @@ -888,6 +881,8 @@ void ProcessBounds(const Handle(IntPatch_ALine)& alig, //-- ligne coura } } } + + ptsol.SetTolerance(Tol); if (!procf && !procl) { Quad1.Parameters(ptf,U1,V1); Quad2.Parameters(ptf,U2,V2); @@ -4136,7 +4131,7 @@ Standard_Boolean IntCyCo(const IntSurf_Quadric& Quad1, //curvsol = anaint.Curve(i); aC=anaint.Curve(i); aLC.Clear(); - ExploreCurve(Cy, Co, aC, 10.*Tol, aLC); + ExploreCurve(Co, aC, 10.*Tol, aLC); // aIt.Initialize(aLC); for (; aIt.More(); aIt.Next()) { @@ -4209,61 +4204,69 @@ Standard_Boolean IntCyCo(const IntSurf_Quadric& Quad1, } //======================================================================= //function : ExploreCurve -//purpose : +//purpose : Splits aC on several curves in the cone apex points. //======================================================================= -Standard_Boolean ExploreCurve(const gp_Cylinder& ,//aCy, - const gp_Cone& aCo, - IntAna_Curve& aC, - const Standard_Real aTol, - IntAna_ListOfCurve& aLC) - +Standard_Boolean ExploreCurve(const gp_Cone& theCo, + IntAna_Curve& theCrv, + const Standard_Real theTol, + IntAna_ListOfCurve& theLC) { - Standard_Boolean bFind=Standard_False; - Standard_Real aTheta, aT1, aT2, aDst; - gp_Pnt aPapx, aPx; - // - //aC.Dump(); - // - aLC.Clear(); - aLC.Append(aC); - // - aPapx=aCo.Apex(); - // - aC.Domain(aT1, aT2); + const Standard_Real aSqTol = theTol*theTol; + const gp_Pnt aPapx(theCo.Apex()); + + Standard_Real aT1, aT2; + theCrv.Domain(aT1, aT2); + + theLC.Clear(); // - aPx=aC.Value(aT1); - aDst=aPx.Distance(aPapx); - if (aDstaTol) { - return !bFind; + + if ((aT2 - aT1) > Precision::PConfusion()) + { + IntAna_Curve aC1 = theCrv; + aC1.SetDomain(aT1, aT2); + theLC.Append(aC1); } - // - // need to be splitted at aTheta - IntAna_Curve aC1, aC2; - // - aC1=aC; - aC1.SetDomain(aT1, aTheta); - aC2=aC; - aC2.SetDomain(aTheta, aT2); - // - aLC.Clear(); - aLC.Append(aC1); - aLC.Append(aC2); - // - return bFind; + + return Standard_True; }