mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0024037: Wrong result done by General Fuse algorithm
Do not calculate the angle between same edges in WireSplitter algorithm and set it to 2*PI. Adding test cases for this fix Correction of test case
This commit is contained in:
@@ -342,12 +342,13 @@ void Path (const GeomAdaptor_Surface& aGAS,
|
||||
Standard_Integer i, j, aNb, aNbj;
|
||||
Standard_Real aTol, anAngleIn, anAngleOut, anAngle, aMinAngle;
|
||||
Standard_Real aTol2D, aTol2D2;
|
||||
Standard_Real aTol2, aD2;
|
||||
Standard_Real aTol2, aD2, aTwoPI;
|
||||
Standard_Boolean anIsSameV2d, anIsSameV, anIsFound, anIsOut, anIsNotPassed;
|
||||
TopoDS_Vertex aVb;
|
||||
TopoDS_Edge aEOutb;
|
||||
BOPAlgo_ListIteratorOfListOfEdgeInfo anIt;
|
||||
//
|
||||
aTwoPI = M_PI + M_PI;
|
||||
aTol=1.e-7;
|
||||
//
|
||||
// append block
|
||||
@@ -527,26 +528,29 @@ void Path (const GeomAdaptor_Surface& aGAS,
|
||||
break;
|
||||
}
|
||||
//
|
||||
// Look for minimal angle and make the choice.
|
||||
gp_Pnt2d aP2Dx;
|
||||
//
|
||||
aP2Dx=Coord2dVf(aE, myFace);
|
||||
//
|
||||
aD2=aP2Dx.SquareDistance(aPb);
|
||||
if (aD2 > aTol2D2){
|
||||
continue;
|
||||
}
|
||||
//
|
||||
//
|
||||
anAngleOut=anEI.Angle();
|
||||
//
|
||||
if(bRecomputeAngle) {
|
||||
if(aCurIndexE <= aRecomputedAngles.Length()) {
|
||||
anAngleOut = aRecomputedAngles.Value(aCurIndexE);
|
||||
if (aE.IsSame(aEOuta)) {
|
||||
anAngle = aTwoPI;
|
||||
} else {
|
||||
// Look for minimal angle and make the choice.
|
||||
gp_Pnt2d aP2Dx;
|
||||
//
|
||||
aP2Dx=Coord2dVf(aE, myFace);
|
||||
//
|
||||
aD2=aP2Dx.SquareDistance(aPb);
|
||||
if (aD2 > aTol2D2){
|
||||
continue;
|
||||
}
|
||||
//
|
||||
//
|
||||
anAngleOut=anEI.Angle();
|
||||
//
|
||||
if(bRecomputeAngle) {
|
||||
if(aCurIndexE <= aRecomputedAngles.Length()) {
|
||||
anAngleOut = aRecomputedAngles.Value(aCurIndexE);
|
||||
}
|
||||
}
|
||||
anAngle=ClockWiseAngle(anAngleIn, anAngleOut);
|
||||
}
|
||||
|
||||
anAngle=ClockWiseAngle(anAngleIn, anAngleOut);
|
||||
if (anAngle < aMinAngle) {
|
||||
aMinAngle=anAngle;
|
||||
pEdgeInfo=&anEI;
|
||||
|
33
tests/bugs/modalg_5/bug24037_1
Executable file
33
tests/bugs/modalg_5/bug24037_1
Executable file
@@ -0,0 +1,33 @@
|
||||
puts "================"
|
||||
puts "OCC24037"
|
||||
puts "================"
|
||||
puts ""
|
||||
#######################################################################
|
||||
# Wrong result done by General Fuse algorithm
|
||||
#######################################################################
|
||||
|
||||
restore [locate_data_file bug24037_coude_sain.brep] b1
|
||||
restore [locate_data_file bug24037_plans_bloc.brep] b2
|
||||
|
||||
bclearobjects
|
||||
bcleartools
|
||||
baddcompound b1
|
||||
baddcompound b2
|
||||
bfillds
|
||||
bbuild result
|
||||
|
||||
nbshapes result -t
|
||||
#the number of solids should be 12 instead of 2
|
||||
|
||||
set nbsh_t 1
|
||||
set nb_v_good 52
|
||||
set nb_e_good 105
|
||||
set nb_w_good 76
|
||||
set nb_f_good 70
|
||||
set nb_sh_good 12
|
||||
set nb_sol_good 12
|
||||
set nb_compsol_good 0
|
||||
set nb_compound_good 1
|
||||
set nb_shape_good 328
|
||||
|
||||
set 3dviewer 1
|
38
tests/bugs/modalg_5/bug24037_2
Executable file
38
tests/bugs/modalg_5/bug24037_2
Executable file
@@ -0,0 +1,38 @@
|
||||
puts "================"
|
||||
puts "OCC24037"
|
||||
puts "================"
|
||||
puts ""
|
||||
#######################################################################
|
||||
# Wrong result done by General Fuse algorithm
|
||||
#######################################################################
|
||||
|
||||
restore [locate_data_file bug24037_coude_sain.brep] b1
|
||||
restore [locate_data_file bug24037_plans_bloc.brep] b2
|
||||
|
||||
explode b1 so
|
||||
copy b1_1 b1
|
||||
explode b2 f
|
||||
copy b2_3 b2
|
||||
don b1 b2
|
||||
bclearobjects
|
||||
bcleartools
|
||||
baddobjects b1
|
||||
baddtools b2
|
||||
bfillds
|
||||
bbuild result
|
||||
|
||||
nbshapes result -t
|
||||
#the number of solids should be 2 instead of 1
|
||||
|
||||
set nbsh_t 1
|
||||
set nb_v_good 16
|
||||
set nb_e_good 24
|
||||
set nb_w_good 13
|
||||
set nb_f_good 12
|
||||
set nb_sh_good 2
|
||||
set nb_sol_good 2
|
||||
set nb_compsol_good 0
|
||||
set nb_compound_good 1
|
||||
set nb_shape_good 70
|
||||
|
||||
set 3dviewer 1
|
Reference in New Issue
Block a user