mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-29 14:00:49 +03:00
0029159: Sewing fail when using a maximum tolerance
Force setting truly computed tolerance of the edge if BRepLib::SameParameter has put too large tolerance.
This commit is contained in:
@@ -118,6 +118,7 @@
|
|||||||
#include <Geom_OffsetSurface.hxx>
|
#include <Geom_OffsetSurface.hxx>
|
||||||
#include <BRep_PointOnCurve.hxx>
|
#include <BRep_PointOnCurve.hxx>
|
||||||
#include <BRep_ListOfPointRepresentation.hxx>
|
#include <BRep_ListOfPointRepresentation.hxx>
|
||||||
|
#include <BRep_TEdge.hxx>
|
||||||
#include <BRep_TVertex.hxx>
|
#include <BRep_TVertex.hxx>
|
||||||
#include <Message_ProgressSentry.hxx>
|
#include <Message_ProgressSentry.hxx>
|
||||||
#include <BRepBuilderAPI_VertexInspector.hxx>
|
#include <BRepBuilderAPI_VertexInspector.hxx>
|
||||||
@@ -951,11 +952,22 @@ TopoDS_Edge BRepBuilderAPI_Sewing::SameParameterEdge(const TopoDS_Edge& edgeFirs
|
|||||||
if (dist > dist2)
|
if (dist > dist2)
|
||||||
dist2 = dist;
|
dist2 = dist;
|
||||||
}
|
}
|
||||||
maxTol = Max(sqrt(dist2), Precision::Confusion());
|
maxTol = Max(sqrt(dist2) * (1. + 1e-7), Precision::Confusion());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(maxTol >= 0. && maxTol < tolReached)
|
if(maxTol >= 0. && maxTol < tolReached)
|
||||||
|
{
|
||||||
|
if (tolReached > MaxTolerance())
|
||||||
|
{
|
||||||
|
// Set tolerance directly to overwrite too large tolerance
|
||||||
|
static_cast<BRep_TEdge*>(edge.TShape().operator->())->Tolerance(maxTol);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// just update tolerance with computed distance
|
||||||
aBuilder.UpdateEdge(edge, maxTol);
|
aBuilder.UpdateEdge(edge, maxTol);
|
||||||
|
}
|
||||||
|
}
|
||||||
aBuilder.SameParameter(edge,Standard_True);
|
aBuilder.SameParameter(edge,Standard_True);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
29
tests/bugs/modalg_7/bug29159
Normal file
29
tests/bugs/modalg_7/bug29159
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
puts "========"
|
||||||
|
puts "OCC29159"
|
||||||
|
puts "========"
|
||||||
|
puts ""
|
||||||
|
#################################################
|
||||||
|
# Sewing fail when using a maximum tolerance
|
||||||
|
#################################################
|
||||||
|
|
||||||
|
set MaxTol 5e-4
|
||||||
|
set ExpLength 97.234
|
||||||
|
|
||||||
|
restore [locate_data_file bug29159_F.brep] f
|
||||||
|
sewing result 5e-4 f +mint 1e-8 +maxt $MaxTol
|
||||||
|
|
||||||
|
regexp {EDGE *: MAX=([-0-9.+eE]+)} [tolerance result] full toler
|
||||||
|
|
||||||
|
if {$toler > $MaxTol} {
|
||||||
|
puts "Error: Tolerance after sewing is greater than max allowed tolerance"
|
||||||
|
}
|
||||||
|
|
||||||
|
if {![regexp "seems to be OK" [bopcheck result 2]]} {
|
||||||
|
puts "Error: result of sewing is self-interfering"
|
||||||
|
}
|
||||||
|
|
||||||
|
checknbshapes result -m "Sewing result" -edge 8 -face 2
|
||||||
|
|
||||||
|
smallview +X+Y
|
||||||
|
don result
|
||||||
|
fit
|
Reference in New Issue
Block a user