mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0026384: Add explicit check for null magnitude instead of catching of exception in BRepMesh_FastDiscretFace::control()
Check normal for null magnitude using gp::Resolution ()
This commit is contained in:
@@ -1227,29 +1227,24 @@ Standard_Real BRepMesh_FastDiscretFace::control(
|
|||||||
Standard_Real aSqDef = -1.;
|
Standard_Real aSqDef = -1.;
|
||||||
Standard_Boolean isSkipped = Standard_False;
|
Standard_Boolean isSkipped = Standard_False;
|
||||||
gp_XYZ normal(aLinkVec[0] ^ aLinkVec[1]);
|
gp_XYZ normal(aLinkVec[0] ^ aLinkVec[1]);
|
||||||
try
|
if (normal.SquareModulus () < gp::Resolution())
|
||||||
{
|
continue;
|
||||||
OCC_CATCH_SIGNALS
|
|
||||||
|
|
||||||
normal.Normalize();
|
normal.Normalize();
|
||||||
|
|
||||||
// Check deflection on triangle
|
// Check deflection at triangle centroid
|
||||||
gp_XY mi2d = (xy[0] + xy[1] + xy[2]) / 3.0;
|
gp_XY aCenter2d = (xy[0] + xy[1] + xy[2]) / 3.0;
|
||||||
gFace->D0(mi2d.X(), mi2d.Y(), pDef);
|
gFace->D0(aCenter2d.X(), aCenter2d.Y(), pDef);
|
||||||
aSqDef = Abs(normal * (pDef.XYZ() - p[0]));
|
aSqDef = Abs(normal * (pDef.XYZ() - p[0]));
|
||||||
aSqDef *= aSqDef;
|
aSqDef *= aSqDef;
|
||||||
|
|
||||||
isSkipped = !checkDeflectionAndInsert(pDef, mi2d, theIsFirst,
|
isSkipped = !checkDeflectionAndInsert(pDef, aCenter2d, theIsFirst,
|
||||||
aSqDef, aSqDefFace, aCircles, theNewVertices, aMaxSqDef);
|
aSqDef, aSqDefFace, aCircles, theNewVertices, aMaxSqDef);
|
||||||
|
|
||||||
if (isSkipped)
|
if (isSkipped)
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
catch (Standard_Failure)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Check deflection at triangle links
|
||||||
for (Standard_Integer i = 0; i < 3 && !isSkipped; ++i)
|
for (Standard_Integer i = 0; i < 3 && !isSkipped; ++i)
|
||||||
{
|
{
|
||||||
if (m[i]) // is a boundary
|
if (m[i]) // is a boundary
|
||||||
|
Reference in New Issue
Block a user