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:
parent
d2dfbc4d7d
commit
54f91e0332
@ -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);
|
||||||
|
17
tests/bugs/moddata_3/bug26837
Normal file
17
tests/bugs/moddata_3/bug26837
Normal 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
|
Loading…
x
Reference in New Issue
Block a user