0025890: Intersection algorithm produces curves overlaped
[occt.git] / src / IntPolyh / IntPolyh_Intersection.cxx
old mode 100755 (executable)
new mode 100644 (file)
index c5be347..dc7f440
@@ -1,23 +1,18 @@
 // Created on: 1999-03-03
 // Created by: Fabrice SERVANT
 // Copyright (c) 1999-1999 Matra Datavision
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
 //
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
+// This file is part of Open CASCADE Technology software library.
 //
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
 //
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
-
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
 
 //  modified by Edward AGAPOV (eap) Tue Jan 22 12:29:55 2002 (occ53)
 //  Modified by skv - Thu Sep 25 18:24:29 2003 OCC567
 #include <IntPolyh_StartPoint.hxx>
 #include <IntPolyh_MaillageAffinage.hxx>
 #include <IntPolyh_Couple.hxx>
-
-#ifdef DEB
-  # define MYDEBUG DEB 
-#else
-  # define MYDEBUG 0
-#endif
+#include <IntPolyh_Triangle.hxx>
 
 Standard_Integer MYDISPLAY = 0;
 Standard_Integer MYPRINT   = 0;
 
-# if MYDEBUG
-//  # include "visudebug.hxx"
-# endif
-
-
 IntPolyh_Intersection::IntPolyh_Intersection(const Handle(Adaptor3d_HSurface)& S1,
                                             const Handle(Adaptor3d_HSurface)& S2)
 {
@@ -164,8 +149,8 @@ void IntPolyh_Intersection::Perform() {
   } // start from advanced
 
   // accept result
-  nbsectionlines = TSectionLines.NbSectionLines();
-  nbtangentzones = TTangentZones.NbTangentZones();
+  nbsectionlines = TSectionLines.NbItems();
+  nbtangentzones = TTangentZones.NbItems();
 
   // clean up
   if(aPMaillageStd) delete aPMaillageStd;
@@ -196,7 +181,7 @@ Standard_Integer IntPolyh_Intersection::NbPointsInLine(const Standard_Integer In
 }
 
 
-Standard_Integer IntPolyh_Intersection::NbPointsInTangentZone(const Standard_Integer IndexLine) const {   
+Standard_Integer IntPolyh_Intersection::NbPointsInTangentZone(const Standard_Integer) const {   
   //-- IndexLine--;     (pas implemente) Attention : Tableaux de 0 a n-1 
   // eap
   // return(TTangentZones.NbTangentZones());
@@ -233,7 +218,7 @@ void IntPolyh_Intersection::GetLinePoint(const Standard_Integer Indexl,
 
 
 void IntPolyh_Intersection::GetTangentZonePoint(const Standard_Integer Indexz,
-                                       const Standard_Integer Indexp,
+                                       const Standard_Integer /*Indexp*/,
                                        Standard_Real &x,
                                        Standard_Real &y,
                                        Standard_Real &z,
@@ -247,7 +232,7 @@ void IntPolyh_Intersection::GetTangentZonePoint(const Standard_Integer Indexz,
   const IntPolyh_StartPoint   &sp=TTangentZones[Indexz-1];
   x=sp.X();
   y=sp.Y();
-  z=sp.Y();
+  z=sp.Z();
   u1=sp.U1();
   v1=sp.V1();
   u2=sp.U2();
@@ -293,8 +278,8 @@ Standard_Boolean IntPolyh_Intersection::PerformMaillage
 
   // if too many intersections, consider surfaces parallel (eap)
   if(FinTTC > 200 &&
-     (FinTTC >= theMaillageS->GetArrayOfTriangles(1).NbTriangles() ||
-      FinTTC >= theMaillageS->GetArrayOfTriangles(2).NbTriangles()) ) {
+     (FinTTC >= theMaillageS->GetArrayOfTriangles(1).NbItems() ||
+      FinTTC >= theMaillageS->GetArrayOfTriangles(2).NbItems()) ) {
     return Standard_False;
   }
 
@@ -352,13 +337,15 @@ Standard_Boolean IntPolyh_Intersection::PerformMaillage(IntPolyh_PMaillageAffina
     theMaillageS->SetEnlargeZone( myZone );
   }
 
+  /*
   // if too many intersections, consider surfaces parallel (eap)
   if(FinTTC > 200 &&
      (FinTTC >= theMaillageS->GetArrayOfTriangles(1).NbTriangles() ||
       FinTTC >= theMaillageS->GetArrayOfTriangles(2).NbTriangles()) ) {
     return Standard_False;
   }
-
+  */
+  
   return Standard_True;
 }
 
@@ -388,7 +375,7 @@ void IntPolyh_Intersection::MergeCouples
   anArrays[3] = &anArrayRR;
 
   for (i = 0; i < 4; i++)
-    aNbCouples[i] = anArrays[i]->NbCouples();
+    aNbCouples[i] = anArrays[i]->NbItems();
 
   Standard_Boolean isChanged = Standard_True;
 
@@ -442,7 +429,7 @@ Standard_Boolean IntPolyh_Intersection::PerformStd(IntPolyh_PMaillageAffinage& M
                                                   Standard_Integer&           NbCouples)
 {
   Standard_Boolean isdone = PerformMaillage(MaillageS);
-  NbCouples = (isdone) ? (MaillageS->GetArrayOfCouples().NbCouples()) : 0;
+  NbCouples = (isdone) ? (MaillageS->GetArrayOfCouples().NbItems()) : 0;
   return isdone;
 }
 
@@ -462,10 +449,10 @@ Standard_Boolean IntPolyh_Intersection::PerformAdv(IntPolyh_PMaillageAffinage& M
     isdone = Standard_False; 
 
   if(isdone) {
-    NbCouples = MaillageFF->GetArrayOfCouples().NbCouples() +
-      MaillageFR->GetArrayOfCouples().NbCouples() +
-       MaillageRF->GetArrayOfCouples().NbCouples() +
-         MaillageRR->GetArrayOfCouples().NbCouples();
+    NbCouples = MaillageFF->GetArrayOfCouples().NbItems() +
+      MaillageFR->GetArrayOfCouples().NbItems() +
+       MaillageRF->GetArrayOfCouples().NbItems() +
+         MaillageRR->GetArrayOfCouples().NbItems();
 
     if(NbCouples > 0)
       MergeCouples(MaillageFF->GetArrayOfCouples(),MaillageFR->GetArrayOfCouples(),