SvParam[2]=Param(3);
SvParam[3]=Param(4);
//
- ChoixIso= myIntersectionOn2S.Perform(Param, Rsnld, ChoixIso);
+ Standard_Integer aTryNumber = 0;
+ Standard_Real isBadPoint = Standard_False;
+ IntImp_ConstIsoparametric aBestIso = ChoixIso;
+ do
+ {
+ isBadPoint = Standard_False;
+
+ ChoixIso= myIntersectionOn2S.Perform(Param, Rsnld, aBestIso);
+
+ if (myIntersectionOn2S.IsDone() && !myIntersectionOn2S.IsEmpty())
+ {
+ Standard_Real aNewPnt[4], anAbsParamDist[4];
+ myIntersectionOn2S.Point().Parameters(aNewPnt[0], aNewPnt[1], aNewPnt[2], aNewPnt[3]);
+
+ if (aNewPnt[0] < u1min || aNewPnt[0] > u1max ||
+ aNewPnt[1] < v1min || aNewPnt[1] > v1max ||
+ aNewPnt[2] < u2min || aNewPnt[2] > u2max ||
+ aNewPnt[3] < v2min || aNewPnt[3] > v2max)
+ {
+ break; // Out of borders, handle this later.
+ }
+
+ anAbsParamDist[0] = Abs(Param(1) - dP1 - aNewPnt[0]);
+ anAbsParamDist[1] = Abs(Param(2) - dP2 - aNewPnt[1]);
+ anAbsParamDist[2] = Abs(Param(3) - dP3 - aNewPnt[2]);
+ anAbsParamDist[3] = Abs(Param(4) - dP4 - aNewPnt[3]);
+ if (anAbsParamDist[0] < ResoU1 &&
+ anAbsParamDist[1] < ResoV1 &&
+ anAbsParamDist[2] < ResoU2 &&
+ anAbsParamDist[3] < ResoV2 &&
+ Status != IntWalk_PasTropGrand)
+ {
+ isBadPoint = Standard_True;
+ aBestIso = IntImp_ConstIsoparametric((aBestIso + 1) % 4);
+ }
+ }
+ } while (isBadPoint && ++aTryNumber <= 4);
//
if (!myIntersectionOn2S.IsDone())
{
--- /dev/null
+puts "================"
+puts "OCC25380"
+puts "================"
+puts ""
+#######################################################################
+# Intersection curve cannot reach boundary of surface
+#######################################################################
+
+restore [locate_data_file bug25380_b1.brep] b1
+restore [locate_data_file bug25380_b2.brep] b2
+
+set log [bopcurves b1 b2]
+
+regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurv
+set MaxTol 1.e-11
+if {${Toler} > ${MaxTol}} {
+ puts "Error: Tolerance is too big!"
+}
+
+regexp {The length c_1 is ([-0-9.+eE]+)} [length c_1] full Curve_Length
+
+set expected_length 1.614
+set tol_abs_length 1.e-3
+set tol_rel_length 0.01
+checkreal "Curve length" ${Curve_Length} ${expected_length} ${tol_abs_length} ${tol_rel_length}
+
+smallview
+donly c_1 b1
+fit
+display b2
+
+set only_screen_axo 1