0023782: Intersection algorithm produces wrong section curves for the attached faces
[occt.git] / src / Adaptor3d / Adaptor3d_TopolTool.cxx
index b7861f4..cfaa83d 100755 (executable)
@@ -976,6 +976,23 @@ void Adaptor3d_TopolTool::BSplSamplePnts(const Standard_Real theDefl,
   Standard_Boolean bUuniform = Standard_False;
   Standard_Boolean bVuniform = Standard_False;
 
+  //modified by NIZHNY-EMV Mon Jun 10 14:19:04 2013
+  if (nbsu < theNUmin || nbsv < theNVmin) {
+    Standard_Integer aNb;
+    if (nbsu < nbsv) {
+      aNb = (Standard_Integer)(nbsv * ((Standard_Real)theNUmin)/((Standard_Real)nbsu));
+      aNb = Min(aNb, 30);
+      bVuniform = (aNb > nbsv) ? Standard_True : bVuniform;
+      nbsv = bVuniform ? aNb : nbsv;
+    } else {
+      aNb = (Standard_Integer)(nbsu * ((Standard_Real)theNVmin)/((Standard_Real)nbsv));
+      aNb = Min(aNb, 30);
+      bUuniform = (aNb > nbsu) ? Standard_True : bUuniform;
+      nbsu = bUuniform ? aNb : nbsu;
+    }
+  }
+  //modified by NIZHNY-EMV Mon Jun 10 14:19:05 2013
+
   if(nbsu < theNUmin) {
     nbsu = theNUmin;
     bUuniform = Standard_True;
@@ -1070,7 +1087,7 @@ void Adaptor3d_TopolTool::BSplSamplePnts(const Standard_Real theDefl,
 
   anUFlg(1) = Standard_True;
   anUFlg(nbsu) = Standard_True;
-  myNbSamplesU = 2; 
+  //myNbSamplesU = 2; 
   for(i = 1; i <= nbsv; ++i) {
     t1 = aVPars(i);
     j = 1;
@@ -1113,7 +1130,7 @@ void Adaptor3d_TopolTool::BSplSamplePnts(const Standard_Real theDefl,
        if(!ok) {
          j = k - 1;
          anUFlg(j) = Standard_True;
-         ++myNbSamplesU;
+         //++myNbSamplesU;
          break;
        }
        
@@ -1129,6 +1146,12 @@ void Adaptor3d_TopolTool::BSplSamplePnts(const Standard_Real theDefl,
 
     }
   }
+
+  myNbSamplesU = 0;
+  for (i = 1; i <= nbsu; i++)
+    if (anUFlg(i) == Standard_True)
+      myNbSamplesU++;
+  
   if(myNbSamplesU < myMinPnts) {
     if(myNbSamplesU == 2) {
       //"uniform" distribution;
@@ -1149,7 +1172,7 @@ void Adaptor3d_TopolTool::BSplSamplePnts(const Standard_Real theDefl,
       
   aVFlg(1) = Standard_True;
   aVFlg(nbsv) = Standard_True;
-  myNbSamplesV = 2;
+  //myNbSamplesV = 2;
   for(i = 1; i <= nbsu; ++i) {
     t1 = anUPars(i);
     j = 1;
@@ -1191,7 +1214,7 @@ void Adaptor3d_TopolTool::BSplSamplePnts(const Standard_Real theDefl,
        if(!ok) {
          j = k - 1;
          aVFlg(j) = Standard_True;
-         ++myNbSamplesV;
+         //++myNbSamplesV;
          break;
        }
        
@@ -1207,6 +1230,12 @@ void Adaptor3d_TopolTool::BSplSamplePnts(const Standard_Real theDefl,
 
     }
   }
+
+  myNbSamplesV = 0;
+  for (i = 1; i <= nbsv; i++)
+    if (aVFlg(i) == Standard_True)
+      myNbSamplesV++;
+  
   if(myNbSamplesV < myMinPnts) {
     if(myNbSamplesV == 2) {
       //"uniform" distribution;