0023170: Bug of creating a full sphere face
authorabv <abv@opencascade.com>
Thu, 24 May 2012 05:51:11 +0000 (09:51 +0400)
committerbugmaster <bugmaster@opencascade.com>
Fri, 1 Jun 2012 12:58:24 +0000 (16:58 +0400)
Method ElSLib::SphereVIso() is protected against creation of circle with negative radius when |V| > PI/2; now the circle on analytic continuation of sphere behind poles is returned in this case (thus always with positive or zero radius)

src/ElSLib/ElSLib.cxx

index 27df296..b741441 100755 (executable)
@@ -1644,6 +1644,14 @@ gp_Circ  ElSLib::SphereVIso(const gp_Ax3& Pos,
   Ve.Multiply(Radius * sin(V));
   axes.Translate(Ve);
   Standard_Real radius = Radius * cos(V);
+  // #23170: if V is even slightly (e.g. by double epsilon) greater than PI/2,
+  // radius will become negative and constructor of gp_Circ will raise exception.
+  // Lets try to create correct isoline even on analytical continuation for |V| > PI/2...
+  if (radius < 0.)
+  {
+    axes.SetDirection (-axes.Direction());
+    radius = -radius;
+  }
   gp_Circ Circ(axes,radius);
   return Circ;
 }