1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-06 18:26:22 +03:00

0026837: SameParameter algorithm throws an exception

Test case for issue CR26837
This commit is contained in:
ifv 2015-11-17 10:53:51 +03:00 committed by bugmaster
parent d2dfbc4d7d
commit 54f91e0332
2 changed files with 59 additions and 34 deletions

View File

@ -882,15 +882,18 @@ void GeomLib::SameRange(const Standard_Real Tolerance,
{ {
if(CurvePtr.IsNull()) Standard_Failure::Raise(); if(CurvePtr.IsNull()) Standard_Failure::Raise();
if (Abs(LastOnCurve - RequestedLast) <= Tolerance && if (Abs(LastOnCurve - RequestedLast) <= Tolerance &&
Abs(FirstOnCurve - RequestedFirst) <= Tolerance) { Abs(FirstOnCurve - RequestedFirst) <= Tolerance)
{
NewCurvePtr = CurvePtr; NewCurvePtr = CurvePtr;
return; return;
} }
// the parametrisation lentgh must at least be the same. // the parametrisation lentgh must at least be the same.
if (Abs(LastOnCurve - FirstOnCurve - RequestedLast + RequestedFirst) if (Abs(LastOnCurve - FirstOnCurve - RequestedLast + RequestedFirst)
<= Tolerance) { <= Tolerance)
if (CurvePtr->IsKind(STANDARD_TYPE(Geom2d_Line))) { {
if (CurvePtr->IsKind(STANDARD_TYPE(Geom2d_Line)))
{
Handle(Geom2d_Line) Line = Handle(Geom2d_Line) Line =
Handle(Geom2d_Line)::DownCast(CurvePtr->Copy()); Handle(Geom2d_Line)::DownCast(CurvePtr->Copy());
Standard_Real dU = FirstOnCurve - RequestedFirst; Standard_Real dU = FirstOnCurve - RequestedFirst;
@ -898,7 +901,8 @@ void GeomLib::SameRange(const Standard_Real Tolerance,
Line->Translate(dU * gp_Vec2d(D)); Line->Translate(dU * gp_Vec2d(D));
NewCurvePtr = Line; NewCurvePtr = Line;
} }
else if (CurvePtr->IsKind(STANDARD_TYPE(Geom2d_Circle))) { else if (CurvePtr->IsKind(STANDARD_TYPE(Geom2d_Circle)))
{
gp_Trsf2d Trsf; gp_Trsf2d Trsf;
NewCurvePtr = Handle(Geom2d_Curve)::DownCast(CurvePtr->Copy()); NewCurvePtr = Handle(Geom2d_Curve)::DownCast(CurvePtr->Copy());
Handle(Geom2d_Circle) Circ = Handle(Geom2d_Circle) Circ =
@ -914,7 +918,8 @@ void GeomLib::SameRange(const Standard_Real Tolerance,
Trsf.SetRotation(P,dU); Trsf.SetRotation(P,dU);
NewCurvePtr->Transform(Trsf) ; NewCurvePtr->Transform(Trsf) ;
} }
else if (CurvePtr->IsKind(STANDARD_TYPE(Geom2d_TrimmedCurve))) { else if (CurvePtr->IsKind(STANDARD_TYPE(Geom2d_TrimmedCurve)))
{
Handle(Geom2d_TrimmedCurve) TC = Handle(Geom2d_TrimmedCurve) TC =
Handle(Geom2d_TrimmedCurve)::DownCast(CurvePtr); Handle(Geom2d_TrimmedCurve)::DownCast(CurvePtr);
GeomLib::SameRange(Tolerance, GeomLib::SameRange(Tolerance,
@ -931,7 +936,8 @@ void GeomLib::SameRange(const Standard_Real Tolerance,
// //
// //
else if (Abs(LastOnCurve - FirstOnCurve) > Precision::PConfusion() || else if (Abs(LastOnCurve - FirstOnCurve) > Precision::PConfusion() ||
Abs(RequestedLast + RequestedFirst) > Precision::PConfusion()) { Abs(RequestedLast + RequestedFirst) > Precision::PConfusion())
{
Handle(Geom2d_TrimmedCurve) TC = Handle(Geom2d_TrimmedCurve) TC =
new Geom2d_TrimmedCurve(CurvePtr,FirstOnCurve,LastOnCurve); new Geom2d_TrimmedCurve(CurvePtr,FirstOnCurve,LastOnCurve);
@ -946,11 +952,13 @@ void GeomLib::SameRange(const Standard_Real Tolerance,
BS->SetKnots(Knots); BS->SetKnots(Knots);
NewCurvePtr = BS; NewCurvePtr = BS;
} }
} }
else { // On segmente le resultat else
{ // On segmente le resultat
Standard_Real Udeb = Max(CurvePtr->FirstParameter(), FirstOnCurve);
Standard_Real Ufin = Min(CurvePtr->LastParameter(), LastOnCurve);
Handle(Geom2d_TrimmedCurve) TC = Handle(Geom2d_TrimmedCurve) TC =
new Geom2d_TrimmedCurve( CurvePtr, FirstOnCurve, LastOnCurve ); new Geom2d_TrimmedCurve( CurvePtr, Udeb, Ufin );
// //
Handle(Geom2d_BSplineCurve) BS = Handle(Geom2d_BSplineCurve) BS =
Geom2dConvert::CurveToBSplineCurve(TC); Geom2dConvert::CurveToBSplineCurve(TC);

View File

@ -0,0 +1,17 @@
puts "========================"
puts "OCC26837"
puts "========================"
puts ""
#################################################
# SameParameter algorithm throws an exception
#################################################
restore [locate_data_file bug26837_e.brep] result
if [catch {sameparameter result} catch_result] {
puts "Faulty : SameParameter algorithm throws an exception"
} else {
puts "OK : SameParameter algorithm works properly"
}
set 2dviewer 1