mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0025591: Command mkshell produces wrong shell
The functionality to decide, whether the edge is degenerated, was shared via BRepLib_MakeFace. The verification of producing degenerated edges was added to BRepLib_MakeShell. Test case for issue CR25591
This commit is contained in:
@@ -48,6 +48,7 @@ uses
|
||||
Cone from gp,
|
||||
Sphere from gp,
|
||||
Torus from gp,
|
||||
Curve from Geom,
|
||||
Surface from Geom,
|
||||
Face from TopoDS,
|
||||
Wire from TopoDS,
|
||||
@@ -258,6 +259,18 @@ is
|
||||
NotDone from StdFail
|
||||
is static;
|
||||
|
||||
|
||||
IsDegenerated (myclass;
|
||||
theCurve : Curve from Geom;
|
||||
theMaxTol : Real from Standard;
|
||||
theActTol : in out Real from Standard)
|
||||
returns Boolean;
|
||||
--- Purpose: Checks the specified curve is degenerated
|
||||
-- according to specified tolerance.
|
||||
-- Returns <theActTol> less than <theMaxTol>, which shows
|
||||
-- actual tolerance to decide the curve is degenerated.
|
||||
-- Warning: For internal use of BRepLib_MakeFace and BRepLib_MakeShell.
|
||||
|
||||
fields
|
||||
myError : FaceError from BRepLib;
|
||||
end MakeFace;
|
||||
|
@@ -427,7 +427,8 @@ void BRepLib_MakeFace::Init(const Handle(Geom_Surface)& S,
|
||||
// passed tolerance value
|
||||
//=======================================================================
|
||||
|
||||
static Standard_Boolean IsDegenerated(const Handle(Geom_Curve)& theCurve,
|
||||
Standard_Boolean BRepLib_MakeFace::IsDegenerated(
|
||||
const Handle(Geom_Curve)& theCurve,
|
||||
const Standard_Real theMaxTol,
|
||||
Standard_Real& theActTol)
|
||||
{
|
||||
|
@@ -17,6 +17,7 @@
|
||||
#include <BRepLib_MakeShell.ixx>
|
||||
|
||||
#include <BRepLib.hxx>
|
||||
#include <BRepLib_MakeFace.hxx>
|
||||
#include <Precision.hxx>
|
||||
#include <TColStd_Array1OfReal.hxx>
|
||||
|
||||
@@ -35,6 +36,8 @@
|
||||
#include <TopTools_Array1OfShape.hxx>
|
||||
#include <BRep_Builder.hxx>
|
||||
|
||||
#include <TopExp_Explorer.hxx>
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function : BRepLib_MakeShell
|
||||
@@ -355,6 +358,20 @@ void BRepLib_MakeShell::Init(const Handle(Geom_Surface)& S,
|
||||
BRepLib::EncodeRegularity(myShape);
|
||||
myShape.Closed (BRep_Tool::IsClosed (myShape));
|
||||
|
||||
// Additional checking for degenerated edges
|
||||
Standard_Boolean isDegenerated;
|
||||
Standard_Real aFirst, aLast;
|
||||
Standard_Real aTol = Precision::Confusion();
|
||||
Standard_Real anActTol;
|
||||
TopExp_Explorer anExp(myShape, TopAbs_EDGE);
|
||||
for ( ; anExp.More(); anExp.Next())
|
||||
{
|
||||
const TopoDS_Edge& anEdge = TopoDS::Edge(anExp.Current());
|
||||
Handle(Geom_Curve) aCurve = BRep_Tool::Curve(anEdge, aFirst, aLast);
|
||||
isDegenerated = BRepLib_MakeFace::IsDegenerated(aCurve, aTol, anActTol);
|
||||
B.Degenerated(anEdge, isDegenerated);
|
||||
}
|
||||
|
||||
myError = BRepLib_ShellDone;
|
||||
Done();
|
||||
}
|
||||
|
18
tests/bugs/modalg_5/bug25591
Normal file
18
tests/bugs/modalg_5/bug25591
Normal file
@@ -0,0 +1,18 @@
|
||||
puts "============"
|
||||
puts "OCC25591"
|
||||
puts "============"
|
||||
puts ""
|
||||
#################################
|
||||
# Command mkshell produces wrong shell
|
||||
#################################
|
||||
|
||||
sphere surf 100
|
||||
mkshell sh surf 1
|
||||
explode sh e
|
||||
catch {mkcurve csh_2 sh_2}
|
||||
|
||||
if { [llength [dump csh_2]] > 0 } {
|
||||
puts "Error: Command mkshell produces wrong shell"
|
||||
} else {
|
||||
puts "OK: Command mkshell produces good shell"
|
||||
}
|
Reference in New Issue
Block a user