1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-14 13:30:48 +03:00

0025044: BRepMesh tweaks - treatments for degenerated and tiny faces

BRepMesh_ModelHealer - recognize a small face with 1 wire and 2 small edges as a face for refinement.
BRepMesh_DefaultRangeSplinner - reduce tolerance on tiny faces to improve the meshing results.

Added new test cases: bugs mesh bug25044_*.
Existing test cases updated to reflect improvements.
This commit is contained in:
drazmyslovich
2019-08-15 18:13:43 +03:00
committed by bugmaster
parent 3de0f78449
commit 8c186dad9b
68 changed files with 1122 additions and 14 deletions

View File

@@ -245,6 +245,30 @@ void BRepMesh_ModelHealer::process(const IMeshData::IFaceHandle& theDFace) const
#endif
aIntersections = aChecker.GetIntersectingEdges();
}
else
{
if (theDFace->WiresNb () == 1)
{
const IMeshData::IWireHandle& aDWire = theDFace->GetWire (0);
if (aDWire->EdgesNb () == 2)
{
const IMeshData::IEdgePtr& aDEdge0 = aDWire->GetEdge (0);
const IMeshData::IEdgePtr& aDEdge1 = aDWire->GetEdge (1);
const IMeshData::IPCurveHandle& aPCurve0 = aDEdge0->GetPCurve (theDFace.get (), aDWire->GetEdgeOrientation (0));
const IMeshData::IPCurveHandle& aPCurve1 = aDEdge1->GetPCurve (theDFace.get (), aDWire->GetEdgeOrientation (1));
if (aPCurve0->ParametersNb () == 2 && aPCurve1->ParametersNb () == 2)
{
aIntersections = new IMeshData::MapOfIEdgePtr;
// a kind of degenerated face - 1 wire, 2 edges and both edges are very small
aIntersections->Add (aDEdge0);
aIntersections->Add (aDEdge1);
}
}
}
}
}
}
catch (Standard_Failure const&)