0030486: Visualization - Rubber-band selection does not work with disabled overlap... IR-WEEK7
authorkgv <kgv@opencascade.com>
Fri, 8 Feb 2019 22:38:28 +0000 (01:38 +0300)
committerapn <apn@opencascade.com>
Wed, 13 Feb 2019 14:07:17 +0000 (17:07 +0300)
SelectMgr_RectangularFrustum::Overlaps() now treats degenerated polygon as point instead of returning FALSE.

src/SelectMgr/SelectMgr_RectangularFrustum.cxx

index d972e19..9b7f540 100644 (file)
@@ -537,10 +537,17 @@ Standard_Boolean SelectMgr_RectangularFrustum::Overlaps (const TColgp_Array1OfPn
   else if (theSensType == Select3D_TOS_INTERIOR)
   {
     gp_Vec aPolyNorm (gp_XYZ (RealLast(), RealLast(), RealLast()));
-    if (!hasOverlap (theArrayOfPnts, aPolyNorm)
-     || !segmentPlaneIntersection (aPolyNorm,
-                                   theArrayOfPnts.First(),
-                                   thePickResult))
+    if (!hasOverlap (theArrayOfPnts, aPolyNorm))
+    {
+      return Standard_False;
+    }
+
+    if (aPolyNorm.Magnitude() <= Precision::Confusion())
+    {
+      // treat degenerated polygon as point
+      return Overlaps (theArrayOfPnts.First(), thePickResult);
+    }
+    else if (!segmentPlaneIntersection (aPolyNorm, theArrayOfPnts.First(), thePickResult))
     {
       return Standard_False;
     }