0026619: Tolerances of operands are modified using bop
[occt.git] / src / BOPAlgo / BOPAlgo_PaveFiller_4.cxx
index c43f8ba..902f525 100644 (file)
@@ -54,7 +54,7 @@ class BOPAlgo_VertexFace : public BOPAlgo_Algo {
   BOPAlgo_VertexFace() : 
     BOPAlgo_Algo(),
     myIV(-1), myIF(-1), myIVx(-1), 
-    myFlag(-1), myT1(-1.),  myT2(-1.) {
+    myFlag(-1), myT1(-1.),  myT2(-1.), myTolVNew(-1.) {
   }
   //
   virtual ~BOPAlgo_VertexFace(){
@@ -102,6 +102,10 @@ class BOPAlgo_VertexFace : public BOPAlgo_Algo {
     aT2=myT2;
   }
   //
+  Standard_Real VertexNewTolerance()const {
+    return myTolVNew;
+  }
+  //
   void SetContext(const Handle(IntTools_Context)& aContext) {
     myContext=aContext;
   }
@@ -112,7 +116,7 @@ class BOPAlgo_VertexFace : public BOPAlgo_Algo {
   //
   virtual void Perform() {
     BOPAlgo_Algo::UserBreak();
-    myFlag=myContext->ComputeVF(myV, myF, myT1, myT2);
+    myFlag=myContext->ComputeVF(myV, myF, myT1, myT2, myTolVNew);
   }
   //
  protected:
@@ -122,6 +126,7 @@ class BOPAlgo_VertexFace : public BOPAlgo_Algo {
   Standard_Integer myFlag;
   Standard_Real myT1;
   Standard_Real myT2;
+  Standard_Real myTolVNew;
   TopoDS_Vertex myV;
   TopoDS_Face myF;
   Handle(IntTools_Context) myContext;
@@ -149,8 +154,7 @@ void BOPAlgo_PaveFiller::PerformVF()
 {
   Standard_Boolean bJustAdd;
   Standard_Integer iSize, nV, nF, nVSD, iFlag, nVx, aNbVF, k;
-  Standard_Real aT1, aT2, aTolF, aTolV;
-  BRep_Builder aBB;
+  Standard_Real aT1, aT2;
   BOPAlgo_VectorOfVertexFace aVVF; 
   //
   myErrorStatus=0;
@@ -214,27 +218,25 @@ void BOPAlgo_PaveFiller::PerformVF()
       //
       aVertexFace.Indices(nV, nF, nVx);
       aVertexFace.Parameters(aT1, aT2);
-      const TopoDS_Vertex& aV=aVertexFace.Vertex();
-      const TopoDS_Face& aF=aVertexFace.Face();
       // 1
       BOPDS_InterfVF& aVF=aVFs.Append1();
       aVF.SetIndices(nVx, nF);
       aVF.SetUV(aT1, aT2);
       // 2
       myDS->AddInterf(nVx, nF);
-      // 3
+      //
+      // 3 update vertex V/F if necessary
+      Standard_Real aTolVNew = aVertexFace.VertexNewTolerance();
+      nVx=UpdateVertex(nVx, aTolVNew);
+      //
+      // 4
+      if (myDS->IsNewShape(nVx)) {
+        aVF.SetIndexNew(nVx);
+      }
+      // 5 update FaceInfo
       BOPDS_FaceInfo& aFI=myDS->ChangeFaceInfo(nF);
       BOPCol_MapOfInteger& aMVIn=aFI.ChangeVerticesIn();
       aMVIn.Add(nVx);
-      // 4
-      aTolV = BRep_Tool::Tolerance(aV);
-      aTolF = BRep_Tool::Tolerance(aF);
-      if (aTolV < aTolF) {
-        aBB.UpdateVertex(aV, aTolF);
-        BOPDS_ShapeInfo& aSIV = myDS->ChangeShapeInfo(nVx);
-        Bnd_Box& aBoxV = aSIV.ChangeBox();
-        BRepBndLib::Add(aV, aBoxV);
-      }
     }//for (k=0; k < aNbVF; ++k) {
   }// if (iSize) {
   else {
@@ -252,7 +254,7 @@ void BOPAlgo_PaveFiller::PerformVF()
 void BOPAlgo_PaveFiller::TreatVerticesEE()
 {
   Standard_Integer i, aNbS,aNbEEs, nF, nV, iFlag;
-  Standard_Real aT1, aT2;
+  Standard_Real aT1, aT2, dummy;
   BOPCol_ListIteratorOfListOfInteger aItLI;
   Handle(NCollection_BaseAllocator) aAllocator;
   //
@@ -313,7 +315,7 @@ void BOPAlgo_PaveFiller::TreatVerticesEE()
     if (!aMVOn.Contains(nV)) {
       const TopoDS_Vertex& aV=(*(TopoDS_Vertex *)(&myDS->Shape(nV))); 
       const TopoDS_Face& aF=(*(TopoDS_Face *)(&myDS->Shape(nF))); 
-      iFlag=myContext->ComputeVF(aV, aF, aT1, aT2);
+      iFlag = myContext->ComputeVF(aV, aF, aT1, aT2, dummy);
       if (!iFlag) {
         // 1
         BOPDS_InterfVF& aVF=aVFs.Append1();