Salome HOME
#16648 [CEA] RadialQuadrangle algorithm hypothesis change requires a Clear Mesh Data...
[modules/smesh.git] / src / SMESH / SMESH_Pattern.cxx
index b307ba31c334759c7869b2b73ec0beb83d7c857a..182a67ca1063f296b075e74cabe6f6412a866882 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
@@ -38,6 +38,7 @@
 #include "SMESH_Block.hxx"
 #include "SMESH_Mesh.hxx"
 #include "SMESH_MeshAlgos.hxx"
+#include "SMESH_MeshEditor.hxx"
 #include "SMESH_MesherHelper.hxx"
 #include "SMESH_subMesh.hxx"
 
@@ -801,8 +802,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
             ++nbMeduimNodes;
             continue;
           }
-          const SMDS_EdgePosition* epos =
-            static_cast<const SMDS_EdgePosition*>(node->GetPosition());
+          SMDS_EdgePositionPtr epos = node->GetPosition();
           double u = epos->GetUParameter();
           paramNodeMap.insert( make_pair( u, node ));
         }
@@ -929,8 +929,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
         if ( theProject || edgesUVBox.IsOut( p->myInitUV ) )
           p->myInitUV = project( node, projector );
         else {
-          const SMDS_FacePosition* pos =
-            static_cast<const SMDS_FacePosition*>(node->GetPosition());
+          SMDS_FacePositionPtr pos = node->GetPosition();
           p->myInitUV.SetCoord( pos->GetUParameter(), pos->GetVParameter() );
         }
         p->myInitXYZ.SetCoord( p->myInitUV.X(), p->myInitUV.Y(), 0 );
@@ -3288,8 +3287,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*         theMesh,
         const SMDS_MeshNode* node = nIt->next();
         if ( isQuadMesh && SMESH_MeshEditor::IsMedium( node, SMDSAbs_Edge ))
           continue;
-        const SMDS_EdgePosition* epos =
-          static_cast<const SMDS_EdgePosition*>(node->GetPosition());
+        SMDS_EdgePositionPtr epos = node->GetPosition();
         double u = ( epos->GetUParameter() - f ) / ( l - f );
         (*pIt)->myInitXYZ.SetCoord( iCoord, isForward ? u : 1 - u );
       }
@@ -4172,7 +4170,8 @@ bool SMESH_Pattern::MakeMesh(SMESH_Mesh* theMesh,
     createElements( theMesh, nodesVector, myElemPointIDs, myElements );
   }
 
-  aMeshDS->compactMesh();
+  aMeshDS->Modified();
+  aMeshDS->CompactMesh();
 
   if ( myToKeepNodes )
     myOutNodes.swap( nodesVector );