mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-06 18:26:22 +03:00
0026098: The result of General Fuse operation is self-interfered shape
class BOPTools_AlgoTools method static Standard_Real IntersectCurves2d(const gp_Pnt& aPV, const TopoDS_Face& aF, const Handle(Geom_Surface)& aS, const TopoDS_Edge& aE1, const TopoDS_Edge& aE2) Check the validity of the 2d intersection before applying the result. Test case for issue CR26098
This commit is contained in:
parent
75d1222c2f
commit
681cfe76b0
@ -610,7 +610,7 @@ Standard_Real IntersectCurves2d(const gp_Pnt& aPV,
|
|||||||
const TopoDS_Edge& aE1,
|
const TopoDS_Edge& aE1,
|
||||||
const TopoDS_Edge& aE2)
|
const TopoDS_Edge& aE2)
|
||||||
{
|
{
|
||||||
Standard_Real aDist, aD, aT11, aT12, aT21, aT22, aTol2d;
|
Standard_Real aDist, aD, aT11, aT12, aT21, aT22, aTol2d, aT1, aT2;
|
||||||
Standard_Integer j, aNbPnt;
|
Standard_Integer j, aNbPnt;
|
||||||
Geom2dInt_GInter aInter;
|
Geom2dInt_GInter aInter;
|
||||||
gp_Pnt aP;
|
gp_Pnt aP;
|
||||||
@ -639,7 +639,17 @@ Standard_Real IntersectCurves2d(const gp_Pnt& aPV,
|
|||||||
if (aNbPnt) {
|
if (aNbPnt) {
|
||||||
aDist = -Precision::Infinite();
|
aDist = -Precision::Infinite();
|
||||||
for (j = 1; j <= aNbPnt; ++j) {
|
for (j = 1; j <= aNbPnt; ++j) {
|
||||||
aP2D = aInter.Point(j).Value();
|
const IntRes2d_IntersectionPoint& aPoint = aInter.Point(j);
|
||||||
|
//
|
||||||
|
aT1 = aPoint.ParamOnFirst();
|
||||||
|
aT2 = aPoint.ParamOnSecond();
|
||||||
|
//
|
||||||
|
if ((aT1 < aT11 || aT1 > aT12) ||
|
||||||
|
(aT2 < aT21 || aT2 > aT22)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
aP2D = aPoint.Value();
|
||||||
aS->D0(aP2D.X(), aP2D.Y(), aP);
|
aS->D0(aP2D.X(), aP2D.Y(), aP);
|
||||||
aD=aPV.SquareDistance(aP);
|
aD=aPV.SquareDistance(aP);
|
||||||
if (aD > aDist) {
|
if (aD > aDist) {
|
||||||
|
44
tests/bugs/modalg_6/bug26098
Executable file
44
tests/bugs/modalg_6/bug26098
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "OCC26098"
|
||||||
|
puts "============"
|
||||||
|
puts ""
|
||||||
|
###############################
|
||||||
|
## The result of General Fuse operation is self-interfered shape
|
||||||
|
###############################
|
||||||
|
|
||||||
|
restore [locate_data_file bug26098_c.brep ] c
|
||||||
|
|
||||||
|
explode c
|
||||||
|
|
||||||
|
bclearobjects
|
||||||
|
bcleartools
|
||||||
|
baddobjects c_1
|
||||||
|
baddtools c_2 c_3 c_4 c_5
|
||||||
|
|
||||||
|
bfillds
|
||||||
|
bbuild result
|
||||||
|
|
||||||
|
set info [bopcheck result]
|
||||||
|
|
||||||
|
if { [regexp "This shape seems to be OK" ${info}] != 1 } {
|
||||||
|
puts "Error : The result of General Fuse operation is self-interfered shape"
|
||||||
|
}
|
||||||
|
|
||||||
|
set square 173.444
|
||||||
|
|
||||||
|
set nbshapes_expected "
|
||||||
|
Number of shapes in shape
|
||||||
|
VERTEX : 230
|
||||||
|
EDGE : 400
|
||||||
|
WIRE : 196
|
||||||
|
FACE : 185
|
||||||
|
SHELL : 20
|
||||||
|
SOLID : 20
|
||||||
|
COMPSOLID : 0
|
||||||
|
COMPOUND : 1
|
||||||
|
SHAPE : 1052
|
||||||
|
"
|
||||||
|
|
||||||
|
checknbshapes result -ref ${nbshapes_expected} -t -m "Result obtained by General Fuse operator"
|
||||||
|
|
||||||
|
set 3dviewer 1
|
Loading…
x
Reference in New Issue
Block a user