mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
Commit for #28771
This commit is contained in:
@@ -241,6 +241,10 @@ static void DEBVerticesControl (const TopTools_IndexedMapOfShape& NewEdges,
|
|||||||
|
|
||||||
static void UpdateTolerance ( TopoDS_Shape& myShape,
|
static void UpdateTolerance ( TopoDS_Shape& myShape,
|
||||||
const TopTools_IndexedMapOfShape& myFaces);
|
const TopTools_IndexedMapOfShape& myFaces);
|
||||||
|
static Standard_Real ComputeMaxDist(const gp_Pln& thePlane,
|
||||||
|
const Handle(Geom_Curve)& theCrv,
|
||||||
|
const Standard_Real theFirst,
|
||||||
|
const Standard_Real theLast);
|
||||||
|
|
||||||
|
|
||||||
static Standard_Boolean FindParameter(const TopoDS_Vertex& V,
|
static Standard_Boolean FindParameter(const TopoDS_Vertex& V,
|
||||||
@@ -3104,12 +3108,38 @@ void BRepOffset_MakeOffset::EncodeRegularity ()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : ComputeMaxDist
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
Standard_Real ComputeMaxDist(const gp_Pln& thePlane,
|
||||||
|
const Handle(Geom_Curve)& theCrv,
|
||||||
|
const Standard_Real theFirst,
|
||||||
|
const Standard_Real theLast)
|
||||||
|
{
|
||||||
|
Standard_Real aMaxDist = 0.;
|
||||||
|
Standard_Integer i, NCONTROL = 23;
|
||||||
|
Standard_Real aPrm, aDist2;
|
||||||
|
gp_Pnt aP;
|
||||||
|
for (i = 0; i< NCONTROL; i++) {
|
||||||
|
aPrm = ((NCONTROL - 1 - i)*theFirst + i*theLast) / (NCONTROL - 1);
|
||||||
|
aP = theCrv->Value(aPrm);
|
||||||
|
if (Precision::IsInfinite(aP.X()) || Precision::IsInfinite(aP.Y())
|
||||||
|
|| Precision::IsInfinite(aP.Z()))
|
||||||
|
{
|
||||||
|
return Precision::Infinite();
|
||||||
|
}
|
||||||
|
aDist2 = thePlane.SquareDistance(aP);
|
||||||
|
if (aDist2 > aMaxDist) aMaxDist = aDist2;
|
||||||
|
}
|
||||||
|
return sqrt(aMaxDist)*1.05;
|
||||||
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : UpDateTolerance
|
//function : UpDateTolerance
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
static void UpdateTolerance (TopoDS_Shape& S,
|
void UpdateTolerance (TopoDS_Shape& S,
|
||||||
const TopTools_IndexedMapOfShape& Faces)
|
const TopTools_IndexedMapOfShape& Faces)
|
||||||
{
|
{
|
||||||
BRep_Builder B;
|
BRep_Builder B;
|
||||||
@@ -3126,14 +3156,35 @@ static void UpdateTolerance (TopoDS_Shape& S,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Standard_Real Tol;
|
||||||
|
TopExp_Explorer ExpF;
|
||||||
|
for (ExpF.Init(S, TopAbs_FACE); ExpF.More(); ExpF.Next())
|
||||||
|
{
|
||||||
|
const TopoDS_Shape& F = ExpF.Current();
|
||||||
|
if (Faces.Contains(F))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
BRepAdaptor_Surface aBAS(TopoDS::Face(F), Standard_False);
|
||||||
TopExp_Explorer Exp;
|
TopExp_Explorer Exp;
|
||||||
for (Exp.Init(S,TopAbs_EDGE); Exp.More(); Exp.Next()) {
|
for (Exp.Init(F, TopAbs_EDGE); Exp.More(); Exp.Next()) {
|
||||||
TopoDS_Edge E = TopoDS::Edge(Exp.Current());
|
TopoDS_Edge E = TopoDS::Edge(Exp.Current());
|
||||||
if (View.Add(E)) {
|
if (aBAS.GetType() == GeomAbs_Plane)
|
||||||
|
{
|
||||||
|
//Edge does not seem to have pcurve on plane,
|
||||||
|
//so EdgeCorrector does not include it in tolerance calculation
|
||||||
|
Standard_Real aFirst, aLast;
|
||||||
|
Handle(Geom_Curve) aCrv = BRep_Tool::Curve(E, aFirst, aLast);
|
||||||
|
Standard_Real aMaxDist = ComputeMaxDist(aBAS.Plane(), aCrv, aFirst, aLast);
|
||||||
|
B.UpdateEdge(E, aMaxDist);
|
||||||
|
}
|
||||||
|
if (View.Add(E))
|
||||||
|
{
|
||||||
Handle(BRepCheck_Edge) EdgeCorrector = new BRepCheck_Edge(E);
|
Handle(BRepCheck_Edge) EdgeCorrector = new BRepCheck_Edge(E);
|
||||||
Standard_Real Tol = EdgeCorrector->Tolerance();
|
Tol = EdgeCorrector->Tolerance();
|
||||||
B.UpdateEdge(E, Tol);
|
B.UpdateEdge(E, Tol);
|
||||||
|
}
|
||||||
|
Tol = BRep_Tool::Tolerance(E);
|
||||||
// Update the vertices.
|
// Update the vertices.
|
||||||
TopExp::Vertices(E, V[0], V[1]);
|
TopExp::Vertices(E, V[0], V[1]);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user