Salome HOME
Fix SALOME_TESTS/Grids/smesh/imps_09/K0
[modules/smesh.git] / src / SMESHUtils / SMESH_Delaunay.cxx
index 85f03a65ef3991984fc791aaf28323f37e8b1cfe..8ae5f1761a41089737828165354d6c0d61d8311c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019  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
@@ -32,6 +32,8 @@
 #include <BRepAdaptor_Surface.hxx>
 #include <BRepMesh_Delaun.hxx>
 
+#include <Basics_OCCTVersion.hxx>
+
 //================================================================================
 /*!
  * \brief Construct a Delaunay triangulation of given boundary nodes
@@ -82,7 +84,11 @@ SMESH_Delaunay::SMESH_Delaunay(const std::vector< const UVPtStructVec* > & bound
   _bndNodes.resize( nbP );
 
   // fill boundary points
+#if OCC_VERSION_LARGE <= 0x07030000
   BRepMesh::Array1OfVertexOfDelaun bndVert( 1, 1 + nbP );
+#else
+  IMeshData::Array1OfVertexOfDelaun bndVert( 1, 1 + nbP );
+#endif
   BRepMesh_Vertex v( 0, 0, BRepMesh_Frontier );
   for ( size_t iW = 0; iW < boundaryNodes.size(); ++iW )
   {
@@ -198,6 +204,12 @@ const BRepMesh_Triangle* SMESH_Delaunay::FindTriangle( const gp_XY&
                                            bc[0], bc[1] );
     if ( bc[0] >= 0 && bc[1] >= 0 && bc[0] + bc[1] <= 1 )
     {
+      if ( _triaDS->GetNode( nodeIDs[0] ).Movability() != BRepMesh_Frontier ||
+           _triaDS->GetNode( nodeIDs[1] ).Movability() != BRepMesh_Frontier ||
+           _triaDS->GetNode( nodeIDs[2] ).Movability() != BRepMesh_Frontier )
+      {
+        return 0;
+      }
       bc[2] = 1 - bc[0] - bc[1];
       triaNodes[0] = nodeIDs[0] - 1;
       triaNodes[1] = nodeIDs[1] - 1;
@@ -212,7 +224,11 @@ const BRepMesh_Triangle* SMESH_Delaunay::FindTriangle( const gp_XY&
     gp_XY seg = uv - gc;
 
     tria->Edges( linkIDs, ori );
+#if OCC_VERSION_LARGE <= 0x07030000
     int triaID = _triaDS->IndexOf( *tria );
+#else
+    int triaID = tria - & ( _triaDS->GetElement( 0 ));
+#endif
     tria = 0;
 
     for ( int i = 0; i < 3; ++i )
@@ -256,8 +272,13 @@ const BRepMesh_Triangle* SMESH_Delaunay::GetTriangleNear( int iBndNode )
 {
   int nodeIDs[3];
   int nbNbNodes = _bndNodes.size();
+#if OCC_VERSION_LARGE <= 0x07030000
   const BRepMesh::ListOfInteger & linkIds = _triaDS->LinksConnectedTo( iBndNode + 1 );
   BRepMesh::ListOfInteger::const_iterator iLink = linkIds.cbegin();
+#else
+  const IMeshData::ListOfInteger & linkIds = _triaDS->LinksConnectedTo( iBndNode + 1 );
+  IMeshData::ListOfInteger::const_iterator iLink = linkIds.cbegin();
+#endif
   for ( ; iLink != linkIds.cend(); ++iLink )
   {
     const BRepMesh_PairOfIndex & triaIds = _triaDS->ElementsConnectedTo( *iLink );