0025847: Wrong result obtained by General Fuse operator.
authorpkv <pkv@opencascade.com>
Thu, 26 Feb 2015 10:39:13 +0000 (13:39 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 26 Feb 2015 10:40:16 +0000 (13:40 +0300)
I. New features:
   No new features.

II. Changes:
II.1. class  BOPAlgo_PaveFiller
- method:
 void BOPAlgo_PaveFiller::PerformEE()
 has been changed.
 Intended set of VE interferences has been refined
 to avoid unwanted overlaps of pave blocks

- method:
 void BOPAlgo_PaveFiller::ForceInterfVE(const Standard_Integer nV,
                                       Handle(BOPDS_PaveBlock)& aPB,
                                       BOPDS_MapOfPaveBlock& aMPBToUpdate)
 The initialization of increment of VE interferences has been added.

- method:
 Standard_Boolean BOPAlgo_PaveFiller::ForceInterfVF
  (const Standard_Integer nV,
   const Standard_Integer nF)
 The initialization of increment of VF interferences has been added.

III. Modified entities:
 packages:
 BOPAlgo

Test case for issue CR25847

src/BOPAlgo/BOPAlgo_PaveFiller_3.cxx
src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx
tests/bugs/modalg_5/bug25847 [new file with mode: 0755]

index bbafce4..dffce44 100644 (file)
@@ -534,6 +534,20 @@ void BOPAlgo_PaveFiller::PerformEE()
   //=========================================
   // post treatment
   //=========================================
+  {
+    Standard_Integer aNbV;
+    Handle(BOPDS_PaveBlock) aPB1, aPB2;
+    //
+    aNbV=aMVCPB.Extent();
+    for (i=1; i<=aNbV; ++i) {
+      const BOPDS_CoupleOfPaveBlocks& aCPB=aMVCPB.FindFromIndex(i);
+      aCPB.PaveBlocks(aPB1, aPB2); 
+      //
+      aMPBToUpdate.Remove(aPB1);
+      aMPBToUpdate.Remove(aPB2);
+    }
+  }
+  //
   aItPB.Initialize(aMPBToUpdate);
   for (; aItPB.More(); aItPB.Next()) {
     Handle(BOPDS_PaveBlock) aPB=aItPB.Value();
@@ -917,6 +931,7 @@ void BOPAlgo_PaveFiller::ForceInterfVE(const Standard_Integer nV,
     aT=aProjector.LowerDistanceParameter();
     //
     BOPDS_VectorOfInterfVE& aVEs=myDS->InterfVE();
+    aVEs.SetIncrement(10);
     BOPDS_InterfVE& aVE=aVEs.Append1();
     aVE.SetIndices(nV, nE);
     aVE.SetParameter(aT);
index 785b53d..9a1f5b6 100644 (file)
@@ -640,6 +640,7 @@ Standard_Boolean BOPAlgo_PaveFiller::ForceInterfVF
     BRep_Builder aBB;
     //
     BOPDS_VectorOfInterfVF& aVFs=myDS->InterfVF();
+    aVFs.SetIncrement(10);
     BOPDS_InterfVF& aVF=aVFs.Append1();
     aVF.SetIndices(nV, nF);
     aVF.SetUV(U, V);
diff --git a/tests/bugs/modalg_5/bug25847 b/tests/bugs/modalg_5/bug25847
new file mode 100755 (executable)
index 0000000..5f704ac
--- /dev/null
@@ -0,0 +1,37 @@
+puts "============"
+puts "OCC25847"
+puts "============"
+puts ""
+###############################
+## Wrong result obtained by General Fuse operator.
+###############################
+
+restore [locate_data_file bug25847_face_96.brep ] b1
+restore [locate_data_file bug25847_face_294.brep] b2
+restore [locate_data_file bug25847_face_533.brep] b3
+restore [locate_data_file bug25847_face_535.brep] b4
+
+bclearobjects
+bcleartools
+baddobjects b1 b2 b3 b4
+bfillds
+bbuild result
+
+set square 3912.59
+
+set nbshapes_expected "
+Number of shapes in shape
+ VERTEX    : 100
+ EDGE      : 108
+ WIRE      : 10
+ FACE      : 9
+ SHELL     : 0
+ SOLID     : 0
+ COMPSOLID : 0
+ COMPOUND  : 1
+ SHAPE     : 228
+"
+checknbshapes result ${nbshapes_expected} 1 "Result obtained by General Fuse operator"
+
+set 3dviewer 1