* 2D intersector takes into account the given tolerance when intersects line with circle.
* Extrema curve-curve executes parametric branch in case of analytical has given zero solutions.
* Command 'intersect' has been improved to show additional information about the area of tangency (start and end parameters on each curve).
}
default: break;
}
+ if (mypoints.Size() == 0) {
+ myDone = Standard_False;
+ }
} else if (type1 == GeomAbs_Circle && type2 == GeomAbs_Circle) {
//analytical case - two circles
Standard_Boolean bIsDone;
PrepareResults(CCXtrem, Standard_False, U11, U12, U21, U22);
}
else {
- myECC.Perform();
- PrepareResults(myECC, U11, U12, U21, U22);
+ myDone = Standard_False;
}
- } else {
+ }
+ if(!myDone){
myECC.Perform();
PrepareResults(myECC, U11, U12, U21, U22);
}
for (Standard_Integer i = 1; i <= aNbSegments; i++)
{
di << "Segment #" << i << " found.\n";
+ di << "Curve 1 first parameter:" << S1->FirstParameter() << " last parameter: " << S1->LastParameter() <<"\n";
+ di << "Curve 2 first parameter:" << S2->FirstParameter() << " last parameter: " << S2->LastParameter() << "\n";
Intersector.Segment(i,S1,S2);
CD = new DrawTrSurf_Curve2d(S1, Draw_bleu, 30);
dout << CD;
Standard_Real dO1O2=Line.Distance(Circle.Location());
Standard_Real R=Circle.Radius();
Standard_Real RmTol=R-Tol;
+ Standard_Real RpTol = R + Tol;
Standard_Real binf1,binf2=0,bsup1,bsup2=0;
//----------------------------------------------------------------
if(dO1O2 > RmTol && !b2Sol) {
//if(dO1O2 > RmTol) {
Standard_Real dx=dO1O2;
- Standard_Real dy=0.0; //(RpTol*RpTol-dx*dx); //Patch !!!
+ Standard_Real dy = RpTol*RpTol - dx*dx;; //(RpTol*RpTol-dx*dx); //Patch !!!
dy=(dy>=0.0)? Sqrt(dy) : 0.0;
dAlpha1=ATan2(dy,dx);
else {
//------------------- Intersection Line Circle+ --------------------------
Standard_Real dx=dO1O2;
- Standard_Real dy=R*R-dx*dx; //(RpTol*RpTol-dx*dx); //Patch !!!
+ Standard_Real dy = RpTol*RpTol - dx*dx; //(RpTol*RpTol-dx*dx); //Patch !!!
dy=(dy>=0.0)? Sqrt(dy) : 0.0;
dAlpha1=ATan2(dy,dx);
--- /dev/null
+puts "============"
+puts "OCC30217"
+puts "============"
+puts ""
+#########################################################################
+# Intersection between a circle and a line not detected (2d)
+#########################################################################
+
+2ddrseg s2 -80.461134694338 53.07587187722 -31.501464018476 67.029737602069
+circle c2 -18.339655323916 20.849340929486 48.019394466707
+# Set tolerance.
+set tol_abs 1.0e-7
+set tol_rel 1.0e-2
+
+# Set reference data.
+set param11 1.8484218380721342
+set param12 1.8484627151687805
+set param21 50.908401295062035
+set param22 1.8484627151687805
+
+set info [2dintersect c2 s2 -tol 1e-8]
+regexp {Curve 1 first parameter: +([-0-9.+eE]+) last parameter: +([-0-9.+eE]+)} ${info} full curve1p1 curve1p2
+regexp {Curve 2 first parameter: +([-0-9.+eE]+) last parameter: +([-0-9.+eE]+)} ${info} full curve2p1 curve2p2
+
+checkreal "Curve 1 param 1" ${curve1p1} ${param11} ${tol_abs} ${tol_rel}
+checkreal "Curve 1 param 2" ${curve1p2} ${param12} ${tol_abs} ${tol_rel}
+
+checkreal "Curve 2 param 1" ${curve2p1} ${param21} ${tol_abs} ${tol_rel}
+checkreal "Curve 2 param 2" ${curve2p2} ${param22} ${tol_abs} ${tol_rel}
\ No newline at end of file
--- /dev/null
+puts "============"
+puts "OCC30217_1"
+puts "============"
+puts ""
+#########################################################################
+# Intersection between a circle and a line not detected (3d)
+#########################################################################
+set tol_abs 2.e-7
+
+drseg s -80.461134694338 53.07587187722 0.0 -31.501464018476 67.029737602069 0.0
+circle c -18.339655323916 20.849340929486 0.0 48.019394466707
+set info1 [extrema c s]
+
+if {[regexp "ext" ${info1}] != 1} {
+ puts "Error : No intersection detected"
+} else {
+ puts "OK: Intersection are detected"
+}
+
+# Distance check
+set info2 [dump ext_1]
+regexp "Parameters : 0 +(\[-0-9*\.+eE\]+)" $info2 full extLength
+if { ${extLength} > $tol_abs } {
+ puts "Error: bad distance poins obtained"
+} else {
+ puts "OK: good distance between obtained points"
+}
\ No newline at end of file