#include <Geom_Surface.hxx>
#include <BOPCol_IndexedMapOfShape.hxx>
#include <BOPTools.hxx>
+#include <BRepClass_FaceClassifier.hxx>
static
//xt
}
//
+ {
+ //check the point with classifier
+ Standard_Real u,v;
+ u = u2 + du;
+ v = v2 + dv;
+ if (aBAS.IsUPeriodic()) {
+ aUPeriod = aBAS.UPeriod();
+ if ((UMax - UMin - 2*aDelta) > aUPeriod) {
+ if ((u > (UMin + aDelta + aUPeriod)) ||
+ (u < (UMax - aDelta - aUPeriod))) {
+ BRepClass_FaceClassifier aClassifier;
+ aClassifier.Perform(aF, gp_Pnt2d(u, v), aDelta);
+ TopAbs_State Status = aClassifier.State();
+ if (Status == TopAbs_OUT) {
+ du += (u > (UMin + aDelta + aUPeriod)) ? -aUPeriod : aUPeriod;
+ }
+ }
+ }
+ }
+ //
+ u = u2 + du;
+ if (aBAS.IsVPeriodic()) {
+ Standard_Real aVPeriod = aBAS.VPeriod();
+ if ((VMax - VMin - 2*aDelta) > aVPeriod) {
+ if ((v > (VMin + aDelta + aVPeriod)) ||
+ (v < (VMax - aDelta - aVPeriod))) {
+ BRepClass_FaceClassifier aClassifier;
+ aClassifier.Perform(aF, gp_Pnt2d(u, v), aDelta);
+ TopAbs_State Status = aClassifier.State();
+ if (Status == TopAbs_OUT) {
+ dv += (v > (VMin + aDelta + aVPeriod)) ? -aVPeriod : aVPeriod;
+ }
+ }
+ }
+ }
+ }
// Translation if necessary
Handle(Geom2d_Curve) aC2Dx=aC2D;
--- /dev/null
+puts "============"
+puts "OCC24798"
+puts "============"
+puts ""
+######################################################
+# Boolean operation CUT produces incorrect result
+######################################################
+
+restore [locate_data_file bug24798_r1_cut.brep] b1
+restore [locate_data_file bug24798_rectBranch.brep] b2
+
+bop b1 b2
+bopcut result
+
+set square 1826.15
+
+# Analysis of "nbshapes res"
+set nb_v_good 44
+set nb_e_good 67
+set nb_w_good 29
+set nb_f_good 22
+set nb_sh_good 1
+set nb_sol_good 1
+set nb_compsol_good 0
+set nb_compound_good 1
+set nb_shape_good 165
+
+set 2dviewer 1