mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-10 18:51:21 +03:00
0023892: Missing intersection edge between two faces.
Test case for issue CR23892
This commit is contained in:
parent
b6b92d2007
commit
a76ea94c2c
@ -1317,8 +1317,102 @@ void IntPatch_PrmPrmIntersection::Perform (const Handle(Adaptor3d_HSurface)&
|
|||||||
Periods[3] = (Surf2->IsVPeriodic())? Surf2->VPeriod() : 0.;
|
Periods[3] = (Surf2->IsVPeriodic())? Surf2->VPeriod() : 0.;
|
||||||
|
|
||||||
IntSurf_ListIteratorOfListOfPntOn2S IterLOP1(LOfPnts);
|
IntSurf_ListIteratorOfListOfPntOn2S IterLOP1(LOfPnts);
|
||||||
|
if (Surf1->IsUClosed() || Surf1->IsVClosed() ||
|
||||||
|
Surf2->IsUClosed() || Surf2->IsVClosed())
|
||||||
|
{
|
||||||
|
Standard_Real TolPar = Precision::PConfusion();
|
||||||
|
IntSurf_ListOfPntOn2S AdditionalPnts;
|
||||||
|
Standard_Real NewU1, NewV1, NewU2, NewV2;
|
||||||
|
for(; IterLOP1.More(); IterLOP1.Next())
|
||||||
|
{
|
||||||
|
IntSurf_PntOn2S Pnt = IterLOP1.Value();
|
||||||
|
Pnt.Parameters(U1, V1, U2, V2);
|
||||||
|
IntSurf_PntOn2S NewPnt;
|
||||||
|
if (Surf1->IsUClosed())
|
||||||
|
{
|
||||||
|
if (Abs(U1 - Surf1->FirstUParameter()) <= TolPar)
|
||||||
|
{
|
||||||
|
NewU1 = Surf1->LastUParameter();
|
||||||
|
NewPnt.SetValue( NewU1, V1, U2, V2 );
|
||||||
|
AdditionalPnts.Append(NewPnt);
|
||||||
|
}
|
||||||
|
else if (Abs(U1 - Surf1->LastUParameter()) <= TolPar)
|
||||||
|
{
|
||||||
|
NewU1 = Surf1->FirstUParameter();
|
||||||
|
NewPnt.SetValue( NewU1, V1, U2, V2 );
|
||||||
|
AdditionalPnts.Append(NewPnt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Surf1->IsVClosed())
|
||||||
|
{
|
||||||
|
if (Abs(V1 - Surf1->FirstVParameter()) <= TolPar)
|
||||||
|
{
|
||||||
|
NewV1 = Surf1->LastVParameter();
|
||||||
|
NewPnt.SetValue( U1, NewV1, U2, V2 );
|
||||||
|
AdditionalPnts.Append(NewPnt);
|
||||||
|
}
|
||||||
|
else if (Abs(V1 - Surf1->LastVParameter()) <= TolPar)
|
||||||
|
{
|
||||||
|
NewV1 = Surf1->FirstVParameter();
|
||||||
|
NewPnt.SetValue( U1, NewV1, U2, V2 );
|
||||||
|
AdditionalPnts.Append(NewPnt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Surf2->IsUClosed())
|
||||||
|
{
|
||||||
|
if (Abs(U2 - Surf2->FirstUParameter()) <= TolPar)
|
||||||
|
{
|
||||||
|
NewU2 = Surf2->LastUParameter();
|
||||||
|
NewPnt.SetValue( U1, V1, NewU2, V2);
|
||||||
|
AdditionalPnts.Append(NewPnt);
|
||||||
|
}
|
||||||
|
else if (Abs(U2 - Surf2->LastUParameter()) <= TolPar)
|
||||||
|
{
|
||||||
|
NewU2 = Surf2->FirstUParameter();
|
||||||
|
NewPnt.SetValue( U1, V1, NewU2, V2);
|
||||||
|
AdditionalPnts.Append(NewPnt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Surf2->IsVClosed())
|
||||||
|
{
|
||||||
|
if (Abs(V2 - Surf2->FirstVParameter()) <= TolPar)
|
||||||
|
{
|
||||||
|
NewV2 = Surf2->LastVParameter();
|
||||||
|
NewPnt.SetValue( U1, V1, U2, NewV2 );
|
||||||
|
AdditionalPnts.Append(NewPnt);
|
||||||
|
}
|
||||||
|
else if (Abs(V2 - Surf2->LastVParameter()) <= TolPar)
|
||||||
|
{
|
||||||
|
NewV2 = Surf2->FirstVParameter();
|
||||||
|
NewPnt.SetValue( U1, V1, U2, NewV2 );
|
||||||
|
AdditionalPnts.Append(NewPnt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Cut repeated points
|
||||||
|
for (IterLOP1.Initialize(LOfPnts); IterLOP1.More(); IterLOP1.Next())
|
||||||
|
{
|
||||||
|
IntSurf_PntOn2S aPnt = IterLOP1.Value();
|
||||||
|
aPnt.Parameters(U1, V1, U2, V2);
|
||||||
|
IntSurf_ListIteratorOfListOfPntOn2S iter2(AdditionalPnts);
|
||||||
|
while (iter2.More())
|
||||||
|
{
|
||||||
|
IntSurf_PntOn2S aNewPnt = iter2.Value();
|
||||||
|
aNewPnt.Parameters(NewU1, NewV1, NewU2, NewV2);
|
||||||
|
if (Abs(U1 - NewU1) <= TolPar &&
|
||||||
|
Abs(V1 - NewV1) <= TolPar &&
|
||||||
|
Abs(U2 - NewU2) <= TolPar &&
|
||||||
|
Abs(V2 - NewV2) <= TolPar)
|
||||||
|
AdditionalPnts.Remove(iter2);
|
||||||
|
else
|
||||||
|
iter2.Next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for(; IterLOP1.More(); IterLOP1.Next()){
|
LOfPnts.Append(AdditionalPnts);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(IterLOP1.Initialize(LOfPnts); IterLOP1.More(); IterLOP1.Next()){
|
||||||
IntSurf_PntOn2S Pnt = IterLOP1.Value();
|
IntSurf_PntOn2S Pnt = IterLOP1.Value();
|
||||||
Pnt.Parameters(U1, V1, U2, V2);
|
Pnt.Parameters(U1, V1, U2, V2);
|
||||||
if(U1>UmaxLig1) UmaxLig1=U1;
|
if(U1>UmaxLig1) UmaxLig1=U1;
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
puts "TODO OCC23892 ALL: Error : number of surfaces is incorrect. Should be two intersection curves"
|
|
||||||
puts "============"
|
puts "============"
|
||||||
puts "OCC23892"
|
puts "OCC23892"
|
||||||
puts "============"
|
puts "============"
|
||||||
@ -10,16 +9,17 @@ puts ""
|
|||||||
restore [locate_data_file bug23892_fz33] b1
|
restore [locate_data_file bug23892_fz33] b1
|
||||||
restore [locate_data_file bug23892_fz46] b2
|
restore [locate_data_file bug23892_fz46] b2
|
||||||
|
|
||||||
mksurface s1 b1
|
bop b1 b2
|
||||||
mksurface s2 b2
|
bopsection result
|
||||||
|
|
||||||
intersect res s1 s2
|
set nb_v_good 2
|
||||||
decho off
|
set nb_e_good 2
|
||||||
set info [directory]
|
set nb_w_good 0
|
||||||
decho on
|
set nb_f_good 0
|
||||||
set nb [regexp -all {res_} $info]
|
set nb_sh_good 0
|
||||||
if {$nb != 2 } {
|
set nb_sol_good 0
|
||||||
puts "Error : number of surfaces is incorrect. Should be two intersection curves"
|
set nb_compsol_good 0
|
||||||
} else {
|
set nb_compound_good 1
|
||||||
puts "OK : number of surfaces is correct."
|
set nb_shape_good 5
|
||||||
}
|
|
||||||
|
set 2dviewer 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user