diff --git a/src/Extrema/Extrema_ExtPElC.cxx b/src/Extrema/Extrema_ExtPElC.cxx index d4d90631c8..a75b3c7815 100644 --- a/src/Extrema/Extrema_ExtPElC.cxx +++ b/src/Extrema/Extrema_ExtPElC.cxx @@ -124,6 +124,13 @@ Method: if (OPp.Magnitude() < Tol) { return; } Standard_Real Usol[2]; Usol[0] = C.XAxis().Direction().AngleWithRef(OPp,Axe); // -M_PI -aAngTol ) + Usol[0] = M_PI; + Usol[1] = Usol[0] + M_PI; Standard_Real myuinf = Uinf; diff --git a/src/QABugs/QABugs_19.cxx b/src/QABugs/QABugs_19.cxx index 110efd98f0..aa405adad2 100755 --- a/src/QABugs/QABugs_19.cxx +++ b/src/QABugs/QABugs_19.cxx @@ -1380,6 +1380,39 @@ static Standard_Integer OCC24086 (Draw_Interpretor& di, Standard_Integer argc, c return 0; } +#include +#include +#include +#include +#include +static Standard_Integer OCC24945 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv) +{ + if (argc != 1) { + di << "Usage: " << argv[0] << " invalid number of arguments" << "\n"; + return 1; + } + + gp_Pnt aP3D( -1725.97, 843.257, -4.22741e-013 ); + gp_Ax2 aAxis( gp_Pnt( 0, 843.257, 0 ), gp_Dir( 0, -1, 0 ), gp::DX() ); + Handle(Geom_Circle) aCircle = new Geom_Circle( aAxis, 1725.9708621929999 ); + GeomAdaptor_Curve aC3D( aCircle ); + + Extrema_ExtPC aExtPC( aP3D, aC3D ); + //Standard_Real aParam = (aExtPC.Point(1)).Parameter(); + gp_Pnt aProj = (aExtPC.Point(1)).Value(); + di << "Projected point: X = " << aProj.X() << "; Y = " << aProj.Y() << "; Z = " << aProj.Z() << "\n"; + + // Result of deviation + gp_Ax2 aCylAxis( gp_Pnt( 0, 2103.87, 0 ), -gp::DY(), -gp::DX() ); + gp_Cylinder aCylinder( aCylAxis, 1890. ); + + Standard_Real aU = 0., aV = 0.; + ElSLib::Parameters( aCylinder, aProj, aU, aV ); + di << "Parameters on cylinder: U = " << aU << "; V = " << aV << "\n"; + + return 0; +} + #include #include #include @@ -2365,5 +2398,6 @@ void QABugs::Commands_19(Draw_Interpretor& theCommands) { theCommands.Add ("OCC24889", "OCC24889", __FILE__, OCC24889, group); theCommands.Add ("OCC23951", "OCC23951", __FILE__, OCC23951, group); theCommands.Add ("OCC24931", "OCC24931", __FILE__, OCC24931, group); + theCommands.Add ("OCC24945", "OCC24945", __FILE__, OCC24945, group); return; } diff --git a/tests/bugs/moddata_3/bug24945 b/tests/bugs/moddata_3/bug24945 new file mode 100644 index 0000000000..5908798a03 --- /dev/null +++ b/tests/bugs/moddata_3/bug24945 @@ -0,0 +1,27 @@ +puts "============" +puts "OCC24945" +puts "============" +puts "" +########################################################################################################## +# Extrema_ExtPElC::Perform does not consider angular tolerance when calculates angle between two vectors +########################################################################################################## + +pload QAcommands + +set info [OCC24945] +regexp {Projected point: +X += +([-0-9.+eE]+); +Y += +([-0-9.+eE]+); +Z += +([-0-9.+eE]+)} $info full aX aY aZ +regexp {Parameters on cylinder: +U += +([-0-9.+eE]+); +V += +([-0-9.+eE]+)} $info full aU aV + +set expected_X -1725.97 +set expected_Y 843.26 +set expected_Z 2.1137e-013 +set expected_U 6.2832 +set expected_V 1260.6 +set tol_abs_dist 1.0e-12 +set tol_rel_dist 0.1 + +checkreal "Point X" ${aX} ${expected_X} ${tol_abs_dist} ${tol_rel_dist} +checkreal "Point Y" ${aY} ${expected_Y} ${tol_abs_dist} ${tol_rel_dist} +checkreal "Point Z" ${aZ} ${expected_Z} ${tol_abs_dist} ${tol_rel_dist} +checkreal "Point U" ${aU} ${expected_U} ${tol_abs_dist} ${tol_rel_dist} +checkreal "Point V" ${aV} ${expected_V} ${tol_abs_dist} ${tol_rel_dist}