Salome HOME
Porting to OCCT development version: Standard_PI -> M_PI
[modules/geom.git] / src / GEOMAlgo / GEOMAlgo_BuilderTools.cxx
index 1ecab1312c7b7c0d8599f9c55708af0bde8fdffc..7c147907eb828c1ca71fdb7e1a5f49ea91294600 100755 (executable)
@@ -1,31 +1,31 @@
-//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
-//  This library is free software; you can redistribute it and/or
-//  modify it under the terms of the GNU Lesser General Public
-//  License as published by the Free Software Foundation; either
-//  version 2.1 of the License.
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
 //
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
 //
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File:       GEOMAlgo_BuilderTools.cxx
-// Created:    
-// Author:     Peter KURNEV
-//             <pkv@irinox>
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+
+// File:        GEOMAlgo_BuilderTools.cxx
+// Author:      Peter KURNEV
+
 #include <GEOMAlgo_BuilderTools.ixx>
 
+#include <Basics_OCCTVersion.hxx>
+
 #include <TColStd_Array1OfReal.hxx>
 
 #include <gp_Pnt2d.hxx>
 #include <TopoDS_Edge.hxx>
 #include <TopExp_Explorer.hxx>
 
+#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version
+#include <TopExp.hxx>
+#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
+#endif
+
 #include <BRep_Tool.hxx>
 #include <BRepBndLib.hxx>
 #include <BRepMesh_FastDiscret.hxx>
@@ -60,8 +65,8 @@
 
 static 
   Standard_Integer ComputeProps(const TopoDS_Face& aF,
-                               Standard_Real& aA,
-                               Standard_Real& aV);
+                                Standard_Real& aA,
+                                Standard_Real& aV);
 static
   void BuildTriangulation(const TopoDS_Face& aF);
 
@@ -70,7 +75,7 @@ static
 //purpose  : 
 //=======================================================================
   Standard_Boolean GEOMAlgo_BuilderTools::IsHole(const TopoDS_Shape& aW,
-                                                const TopoDS_Shape& aFace)
+                                                 const TopoDS_Shape& aFace)
 {
   Standard_Boolean bIsHole;
   Standard_Integer i, aNbS;
@@ -96,7 +101,7 @@ static
     const TopoDS_Edge& aE=TopoDS::Edge(aItW.Value());
     aOr=aE.Orientation();
     if (!(aOr==TopAbs_FORWARD || 
-         aOr==TopAbs_REVERSED)) {
+          aOr==TopAbs_REVERSED)) {
       continue;
     }
     //
@@ -168,8 +173,8 @@ static
 //purpose  : 
 //=======================================================================
 Standard_Integer ComputeProps(const TopoDS_Face& aF,
-                             Standard_Real& aA,
-                             Standard_Real& aV)
+                              Standard_Real& aA,
+                              Standard_Real& aV)
 {
   Standard_Integer j, i, i1, i2, aNbNodes, aNbTrigs, n[3];
   Standard_Real aAi, aVi;
@@ -225,7 +230,7 @@ Standard_Integer ComputeProps(const TopoDS_Face& aF,
       Standard_Real aSx, aZx;
       gp_Dir aDN(aVN);
       if (aOr==TopAbs_REVERSED) {
-       aDN.Reverse();
+        aDN.Reverse();
       }
       //
       aSx=aAi*aDN.Z();
@@ -269,11 +274,18 @@ void BuildTriangulation(const TopoDS_Face& aF)
   aDiscret=aCoeff*dMax;
   //
   BRepMesh_FastDiscret aMesher(aDiscret,
-                              aAngle,
-                              aBox,
-                              bWithShare,
-                              Standard_True,
-                              Standard_False,
-                              Standard_True);
+                               aAngle,
+                               aBox,
+                               bWithShare,
+                               Standard_True,
+                               Standard_False,
+                               Standard_True);
+
+#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version
+  TopTools_IndexedDataMapOfShapeListOfShape anAncestors;
+  TopExp::MapShapesAndAncestors(aF, TopAbs_EDGE, TopAbs_FACE, anAncestors);
+  aMesher.Add(aF, anAncestors);
+#else
   aMesher.Add(aF);
+#endif
 }