View Issue Details

IDProjectCategoryView StatusLast Update
0022379CommunityOCCT:Modeling Algorithmspublic2021-08-29 18:52
Reporterszy Assigned Tojgv  
Status assignedResolutionopen 
Target Version7.7.0 
Summary0022379: Patch for Extrema
DescriptionPatch from the Forum
Extrema_ExtPS & Extrema_ExtPElS.
"Jane Hu | reply 2011/01/19 18:56
During solving a bug, I notice that in point Extrema code, tolerance check isn't carried over to details, thus boundary points often can't be found in the U V space. I have following patches to correct it.

Please also see
for the surface that shows the problem. pick points along the boundary curve where u is about 0, and trying to find the u, v for the points, you'll see programs gives a wrong (u,v).

Please refer to the following discussion thread for a detail for the problem.

TagsNo tags attached.
Test case number



2011-04-08 11:46

developer   ~0017201

Dear Sergey!

I see that proposed changes are very strong and comprehensive, but the problem
is not clarified enough. So it is necessary to add more data and, may be, a
script describing the problem.


2011-04-29 15:28

developer   ~0017202

We need at least a script reproducing the bug


2011-08-03 17:39

manager   ~0017900

Dear Julia,
I found some reference to discussion around this bug (see copied text below).
Probably it may help.
"Currently I am looking in a bug which tries to evaluate a point on surface boundary curve for it's u,v parameter.

We are calling Extrema_ExtPS, with TolU and TolV given as Precision::Approximation() = 1x10^-6.

Now there are 2 issues:
1. in function
void Extrema_ExtPElS::Perform(const gp_Pnt& P,
const gp_Torus& S,
const Standard_Real Tol)
Tol was hard coded as 1x10^-7, I am ok with it. However, it only was used for distance tolerance check, where in my particular case, U was -1.2490009027033011e-15, which is close (by Tol) enough to be considered as U=0. If following the original path, U < 0, the U have to be added by 2*PI which is far ourside of the current physical torus, hence the function didn't find u and v and closest point for this point on curve situaction. On the other hand, if I assign it now as U=0, it successfully returns a pair of u,v with closest point within tolerance of the original point.

I intend to change the code this way,
314 if(U1 > -Tol && U1 < 0.) {U1 = 0.;}
315 if (U1 < 0. ) { U1 += 2. * PI; }
also for V1 and V2 in this function.

Is there anyone who also looked into this problem and think it's inproper to do this way? Thanks in advance for your advise.

2. this is also related to tolerance issue:
in Extrema_ExtPS::TreatSolution, it called ElCLib::InPeriod, which uses Standard_Real Eps = Epsilon(period) as tolerance for U and V parameter, where my passed in U is 2.44*10^-15 close to Umin, it's still greater than Eps which is 8.8*10^-16, so it gets to add a period of 6.28 and hence can't find it's U,V because of out of boundary. Here my question is:
is there any reason to use Eps as tolerance instead of passed in TolU and TolV?


2013-07-10 18:12

manager   ~0025018

The patch for OCCT 6.6.0 can be found at

Issue History

Date Modified Username Field Change
2011-04-06 18:37 bugmaster Status closed => assigned
2011-04-06 18:37 bugmaster Resolution suspended => @0@
2011-04-06 19:09 bugmaster Assigned To bugmaster => szy
2011-04-07 11:48 szy Assigned To szy => jgv
2011-04-08 11:38 jgv CC => szy
2011-08-02 11:31 bugmaster Category OCCT:MOA => OCCT:Modeling Algorithms
2011-08-03 17:39 szy Note Added: 0017900
2011-09-21 14:25 szy Fixed in Version EMPTY =>
2011-09-21 14:25 szy Target Version => 6.5.3
2011-09-21 14:25 szy Description Updated
2011-11-25 12:00 szy Description Updated
2012-02-09 09:20 abv Target Version 6.5.3 => 6.5.4
2012-10-23 19:32 abv Target Version 6.5.4 => 6.6.0
2013-03-01 21:37 abv Target Version 6.6.0 => 6.7.0
2013-07-10 18:12 abv Note Added: 0025018
2013-12-21 10:13 abv Target Version 6.7.0 => 6.7.1
2014-04-04 18:27 abv Target Version 6.7.1 => 6.8.0
2014-09-26 10:27 abv Target Version 6.8.0 => 7.1.0
2016-10-28 15:33 msv Target Version 7.1.0 => 7.2.0
2017-07-21 11:34 msv Target Version 7.2.0 => 7.3.0
2017-12-05 17:09 msv Target Version 7.3.0 => 7.4.0
2019-08-12 16:44 msv Target Version 7.4.0 => 7.5.0
2020-09-14 22:55 msv Target Version 7.5.0 => 7.6.0
2021-08-29 18:52 msv Target Version 7.6.0 => 7.7.0