// atomic state counter
static volatile Standard_Integer THE_STATE_COUNTER = 0;
+
+ // minimum camera distance
+ static const Standard_Real MIN_DISTANCE = Pow (0.1, ShortRealDigits() - 2);
};
// =======================================================================
{
gp_Vec aCenter2Eye (Direction());
aCenter2Eye.Reverse();
- aCenter2Eye.Scale (theDistance);
+
+ // Camera should have non-zero distance.
+ aCenter2Eye.Scale (Max (theDistance, MIN_DISTANCE));
SetEye (Center().Translated (aCenter2Eye));
}
const Standard_ShortReal aNormLength = std::sqrt (theNormal.x() * theNormal.x()
+ theNormal.y() * theNormal.y()
+ theNormal.z() * theNormal.z());
+
+ if (aNormLength < FLT_EPSILON)
+ return 0.0f;
+
const Standard_ShortReal anInvNormLength = 1.0f / aNormLength;
const Standard_ShortReal aD = theNormal.w() * anInvNormLength;
const Standard_ShortReal anA = theNormal.x() * anInvNormLength;
// ShortReal precision factor used to add meaningful tolerance to
// ZNear, ZFar values in order to avoid equality after type conversion
// to ShortReal matrices type.
- const Standard_Real aPrecision = 1.0 / Pow (10.0, ShortRealDigits() - 1);
+ const Standard_Real aPrecision = Pow (0.1, ShortRealDigits() - 2);
// Compute enlarged or shrank near and far z ranges
Standard_Real aZNear = aMidDepth - aHalfDepth * theScaleFactor;
Standard_Real aZFar = aMidDepth + aHalfDepth * theScaleFactor;
- aZNear -= Abs (aZNear) * aPrecision;
- aZFar += Abs (aZFar) * aPrecision;
+ aZNear -= aPrecision * 0.5;
+ aZFar += aPrecision * 0.5;
if (!myCamera->IsOrthographic())
{
gp_Trsf aCenterTrsf;
aCenterTrsf.SetTranslation (theCamera->Center(), aNewCenter);
theCamera->Transform (aCenterTrsf);
- theCamera->SetDistance (Max (aMatchDistance[5] + aMatchDistance[4], Precision::Confusion()));
+ theCamera->SetDistance (aMatchDistance[5] + aMatchDistance[4]);
// Bounding box collapses to a point or thin line going in depth of the screen
if (aViewSizeXv < theResolution && aViewSizeYv < theResolution)
--- /dev/null
+puts "==========="
+puts "OCC25063"
+puts "==========="
+puts ""
+##########################################################################
+# Visualization - 2D objects are not displayed at some camera positions
+##########################################################################
+
+vinit
+vtop
+vline 1 -90 -90 130 90 90 130
+vfit
+
+set only_screen 1