]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
0054769: isCylinder with parameters generates UNKNOWN_UserException
authorazv <azv@opencascade.com>
Mon, 25 Jul 2022 09:46:41 +0000 (12:46 +0300)
committerazv <azv@opencascade.com>
Mon, 25 Jul 2022 09:46:41 +0000 (12:46 +0300)
src/GEOM_I/GEOM_ICanonicalRecognition_i.cc

index b7119d02f13b72bed43cc413d84568289e705374..d8ab9b2885d435ee6ea62e86cf8ab91af280fa7c 100644 (file)
@@ -290,9 +290,12 @@ CORBA::Boolean GEOM_ICanonicalRecognition_i::isEllipse(GEOM::GEOM_Object_ptr the
   gp_Elips aElips;
   if (aIsValidNormal && aIsValidOrigin && aIsValidDirX && aIsValidRad1 && aIsValidRad2)
   {
-    gp_Ax2 aAx2(gp_Pnt(theOrigin[0], theOrigin[1], theOrigin[2]),
-      gp_Dir(theNormal[0], theNormal[1], theNormal[2]),
-      gp_Dir(theDirX[0], theDirX[1], theDirX[2]));
+    gp_Pnt anOrigin(theOrigin[0], theOrigin[1], theOrigin[2]);
+    gp_XYZ aNormal(theNormal[0], theNormal[1], theNormal[2]);
+    gp_XYZ aDirX(theDirX[0], theDirX[1], theDirX[2]);
+    Standard_Boolean isCollinear =
+        aNormal.CrossSquareMagnitude(aDirX) < Precision::SquareConfusion();
+    gp_Ax2 aAx2 = isCollinear ? gp_Ax2(anOrigin, aNormal) : gp_Ax2(anOrigin, aNormal, aDirX);
     aElips = gp_Elips(aAx2, theMajorRadius, theMinorRadius);
   }
   else