mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-10 18:51:21 +03:00
0024633: Incorrect projection of a curve on a surface
Test cases for issue CR24633
This commit is contained in:
parent
0d3bd50c5f
commit
a4f8324b73
@ -1059,14 +1059,59 @@ Handle(Adaptor2d_HCurve2d)
|
|||||||
(pntproj, Surf->Surface(), U0, V0, TolU, TolV) ;
|
(pntproj, Surf->Surface(), U0, V0, TolU, TolV) ;
|
||||||
|
|
||||||
if (aLocateExtPS.IsDone())
|
if (aLocateExtPS.IsDone())
|
||||||
if (aLocateExtPS.SquareDistance() < DistTol3d * DistTol3d) { //OCC217
|
{
|
||||||
//if (aLocateExtPS.SquareDistance() < Tol3d * Tol3d) {
|
if (aLocateExtPS.SquareDistance() < DistTol3d * DistTol3d)
|
||||||
|
{ //OCC217
|
||||||
|
//if (aLocateExtPS.SquareDistance() < Tol3d * Tol3d) {
|
||||||
(aLocateExtPS.Point()).Parameter(U0,V0);
|
(aLocateExtPS.Point()).Parameter(U0,V0);
|
||||||
U1 = U0 + usens*uperiod;
|
U1 = U0 + usens*uperiod;
|
||||||
V1 = V0 + vsens*vperiod;
|
V1 = V0 + vsens*vperiod;
|
||||||
Pts2d(i).SetCoord(U1,V1);
|
Pts2d(i).SetCoord(U1,V1);
|
||||||
myProjIsDone = Standard_True;
|
myProjIsDone = Standard_True;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Extrema_ExtPS aGlobalExtr(pntproj, Surf->Surface(), TolU, TolV);
|
||||||
|
if (aGlobalExtr.IsDone())
|
||||||
|
{
|
||||||
|
Standard_Real LocalMinSqDist = RealLast();
|
||||||
|
Standard_Integer imin = 0;
|
||||||
|
for (Standard_Integer isol = 1; isol <= aGlobalExtr.NbExt(); isol++)
|
||||||
|
{
|
||||||
|
Standard_Real aSqDist = aGlobalExtr.SquareDistance(isol);
|
||||||
|
if (aSqDist < LocalMinSqDist)
|
||||||
|
{
|
||||||
|
LocalMinSqDist = aSqDist;
|
||||||
|
imin = isol;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (LocalMinSqDist < DistTol3d * DistTol3d)
|
||||||
|
{
|
||||||
|
Standard_Real LocalU, LocalV;
|
||||||
|
aGlobalExtr.Point(imin).Parameter(LocalU, LocalV);
|
||||||
|
if (uperiod > 0. && Abs(U0 - LocalU) >= uperiod/2.)
|
||||||
|
{
|
||||||
|
if (LocalU > U0)
|
||||||
|
usens = -1;
|
||||||
|
else
|
||||||
|
usens = 1;
|
||||||
|
}
|
||||||
|
if (vperiod > 0. && Abs(V0 - LocalV) >= vperiod/2.)
|
||||||
|
{
|
||||||
|
if (LocalV > V0)
|
||||||
|
vsens = -1;
|
||||||
|
else
|
||||||
|
vsens = 1;
|
||||||
|
}
|
||||||
|
U0 = LocalU; V0 = LocalV;
|
||||||
|
U1 = U0 + usens*uperiod;
|
||||||
|
V1 = V0 + vsens*vperiod;
|
||||||
|
Pts2d(i).SetCoord(U1,V1);
|
||||||
|
myProjIsDone = Standard_True;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if(!myProjIsDone && uperiod) {
|
if(!myProjIsDone && uperiod) {
|
||||||
Standard_Real Uinf, Usup, Uaux;
|
Standard_Real Uinf, Usup, Uaux;
|
||||||
Uinf = Surf->Surface().FirstUParameter();
|
Uinf = Surf->Surface().FirstUParameter();
|
||||||
|
27
tests/bugs/moddata_3/bug24633_1
Normal file
27
tests/bugs/moddata_3/bug24633_1
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "OCC24633"
|
||||||
|
puts "============"
|
||||||
|
puts ""
|
||||||
|
#######################################################################
|
||||||
|
# Incorrect projection of a curve on a surface
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
restore [locate_data_file bug24633_comp_49.brep] a
|
||||||
|
|
||||||
|
explode a
|
||||||
|
mkcurve c a_1
|
||||||
|
mksurface s a_2
|
||||||
|
pcurve a_2
|
||||||
|
|
||||||
|
project prj c s
|
||||||
|
|
||||||
|
set prj_length [lindex [length prj] end]
|
||||||
|
|
||||||
|
set good_length 7.2662499016218058
|
||||||
|
checkreal "prj_length" ${prj_length} ${good_length} 0.01 0.01
|
||||||
|
|
||||||
|
#v2d2
|
||||||
|
view 1 -2D- 728 20 400 400
|
||||||
|
|
||||||
|
2dfit
|
||||||
|
set only_screen_axo 1
|
27
tests/bugs/moddata_3/bug24633_2
Normal file
27
tests/bugs/moddata_3/bug24633_2
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "OCC24633"
|
||||||
|
puts "============"
|
||||||
|
puts ""
|
||||||
|
#######################################################################
|
||||||
|
# Incorrect projection of a curve on a surface
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
restore [locate_data_file bug24633_comp_50.brep] a
|
||||||
|
|
||||||
|
explode a
|
||||||
|
mkcurve c a_1
|
||||||
|
mksurface s a_2
|
||||||
|
pcurve a_2
|
||||||
|
|
||||||
|
project prj c s
|
||||||
|
|
||||||
|
set prj_length [lindex [length prj] end]
|
||||||
|
|
||||||
|
set good_length 7.2662499016218058
|
||||||
|
checkreal "prj_length" ${prj_length} ${good_length} 0.01 0.01
|
||||||
|
|
||||||
|
#v2d2
|
||||||
|
view 1 -2D- 728 20 400 400
|
||||||
|
|
||||||
|
2dfit
|
||||||
|
set only_screen_axo 1
|
Loading…
x
Reference in New Issue
Block a user