0028244: Visualization - AIS_AngleDimension throws exception for 180 degree
authorisk <isk@opencascade.com>
Thu, 22 Dec 2016 09:53:46 +0000 (12:53 +0300)
committerkgv <kgv@opencascade.com>
Thu, 22 Dec 2016 14:24:31 +0000 (17:24 +0300)
Small correction of test case for issue CR28244

src/AIS/AIS_AngleDimension.cxx
tests/v3d/dimensions/angle180 [new file with mode: 0644]

index 3d0dd98..1a1ff29 100644 (file)
@@ -61,6 +61,17 @@ namespace
   static const Standard_Real              THE_EMPTY_LABEL_WIDTH = 0.0;
   static const Standard_ExtCharacter      THE_DEGREE_SYMBOL (0x00B0);
   static const Standard_Real              THE_3D_TEXT_MARGIN = 0.1;
+
+  //! Returns true if the given points lie on a same line.
+  static Standard_Boolean isSameLine (const gp_Pnt& theFirstPoint,
+                                      const gp_Pnt& theCenterPoint,
+                                      const gp_Pnt& theSecondPoint)
+  {
+    gp_Vec aVec1 (theFirstPoint, theCenterPoint);
+    gp_Vec aVec2 (theCenterPoint, theSecondPoint);
+
+    return aVec1.IsParallel (aVec2, Precision::Angular());
+  }
 }
 
 //=======================================================================
@@ -177,7 +188,8 @@ void AIS_AngleDimension::SetMeasuredGeometry (const gp_Pnt& theFirstPoint,
   myGeometryType  = GeometryType_Points;
   myIsGeometryValid       = IsValidPoints (myFirstPoint, myCenterPoint, mySecondPoint);
 
-  if (myIsGeometryValid && !myIsPlaneCustom)
+  Standard_Boolean anIsSameLine = isSameLine (myFirstPoint, myCenterPoint, mySecondPoint);
+  if (myIsGeometryValid && !myIsPlaneCustom && !anIsSameLine)
   {
     ComputePlane();
   }
@@ -202,7 +214,8 @@ void AIS_AngleDimension::SetMeasuredGeometry (const TopoDS_Vertex& theFirstVerte
   myGeometryType    = GeometryType_Points;
   myIsGeometryValid = IsValidPoints (myFirstPoint, myCenterPoint, mySecondPoint);
 
-  if (myIsGeometryValid && !myIsPlaneCustom)
+  Standard_Boolean anIsSameLine = isSameLine (myFirstPoint, myCenterPoint, mySecondPoint);
+  if (myIsGeometryValid && !myIsPlaneCustom && !anIsSameLine)
   {
     ComputePlane();
   }
diff --git a/tests/v3d/dimensions/angle180 b/tests/v3d/dimensions/angle180
new file mode 100644 (file)
index 0000000..879204f
--- /dev/null
@@ -0,0 +1,16 @@
+#puts "============================================================================"
+#puts "OCC28244: Visualization - AIS_AngleDimension throws exception for 180 degree"
+#puts "============================================================================"
+
+vclear
+vclose all
+
+vinit
+
+vpoint p0 -100 0 0
+vpoint p1 0 0 0
+vpoint p2 100 0 0
+vdimension angle -angle -shapes p0 p1 p2
+vfit
+
+vdump $imagedir/${casename}.png