mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-09-13 14:27:08 +03:00
0027317: Some visualisation tests failed because of exceptions generated by FP signals.
- missing implementation of CenterOfGeometry method was added in MeshVS_CommonSensitiveEntity; - a check to prevent float overflow was added to OpenGl_BVHClipPrimitiveSet::Center.
This commit is contained in:
@@ -321,3 +321,12 @@ Select3D_BndBox3d MeshVS_CommonSensitiveEntity::BoundingBox()
|
||||
{
|
||||
return myBndBox;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : CenterOfGeometry
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
gp_Pnt MeshVS_CommonSensitiveEntity::CenterOfGeometry() const
|
||||
{
|
||||
return myCOG;
|
||||
}
|
||||
|
@@ -55,6 +55,9 @@ public:
|
||||
//! transformation is set, it will be applied
|
||||
Standard_EXPORT virtual Select3D_BndBox3d BoundingBox() Standard_OVERRIDE;
|
||||
|
||||
//! Returns center of a mesh
|
||||
Standard_EXPORT virtual gp_Pnt CenterOfGeometry() const Standard_OVERRIDE;
|
||||
|
||||
public:
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT (MeshVS_CommonSensitiveEntity, Select3D_SensitiveSet)
|
||||
|
@@ -54,8 +54,17 @@ Standard_ShortReal OpenGl_BVHClipPrimitiveSet::Center (const Standard_Integer th
|
||||
{
|
||||
Graphic3d_BndBox4f aBndBox = myStructs.FindKey (theIdx + 1)->BoundingBox();
|
||||
|
||||
return (aBndBox.CornerMin()[theAxis] +
|
||||
aBndBox.CornerMax()[theAxis]) * 0.5f;
|
||||
// to prevent float overflow
|
||||
const Standard_Real aMin = Standard_Real (aBndBox.CornerMin()[theAxis]);
|
||||
const Standard_Real aMax = Standard_Real (aBndBox.CornerMax()[theAxis]);
|
||||
const Standard_Real aCenter = (aMin + aMax) * 0.5;
|
||||
|
||||
if (aCenter <= Standard_Real (-ShortRealLast()))
|
||||
return -ShortRealLast();
|
||||
if (aCenter >= Standard_Real (ShortRealLast()))
|
||||
return ShortRealLast();
|
||||
|
||||
return Standard_ShortReal (aCenter);
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
|
Reference in New Issue
Block a user