Salome HOME
0021338: EDF 1926 SMESH: New controls and filters
authoreap <eap@opencascade.com>
Mon, 23 Jan 2012 16:13:53 +0000 (16:13 +0000)
committereap <eap@opencascade.com>
Mon, 23 Jan 2012 16:13:53 +0000 (16:13 +0000)
    in SMESH_SubMeshObj::UpdateFunctor() set a part of mesh to eCoincident* functors

src/OBJECT/SMESH_Object.cxx

index f2a83df939398e61668ea0afde87e970fab9846a..1912c9156e91eabdd08f12061a4a28423bcaa9ae 100644 (file)
@@ -842,9 +842,32 @@ int SMESH_SubMeshObj::GetElemDimension( const int theObjId )
 // function : UpdateFunctor
 // purpose  : Update functor in accordance with current mesh
 //=================================================================================
+
 void SMESH_SubMeshObj::UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor )
 {
-  theFunctor->SetMesh( myMeshObj->GetMesh() );
+  if ( SMESH::Controls::CoincidentNodes* cn =
+       dynamic_cast<SMESH::Controls::CoincidentNodes*>(theFunctor.get()) )
+  {
+    TEntityList theResList;
+    GetEntities( SMDSAbs_Node, theResList );
+    TIDSortedNodeSet nodeSet;
+    TEntityList::iterator e = theResList.begin();
+    for ( ; e != theResList.end(); ++e )
+      nodeSet.insert( nodeSet.end(), (const SMDS_MeshNode* ) *e );
+    cn->SetMesh( myMeshObj->GetMesh(), &nodeSet );
+  }
+  else if ( SMESH::Controls::CoincidentElements* ce =
+            dynamic_cast<SMESH::Controls::CoincidentElements*>(theFunctor.get()) )
+  {
+    TEntityList theResList;
+    GetEntities( ce->GetType(), theResList );
+    TIDSortedElemSet elemSet( theResList.begin(), theResList.end() );
+    ce->SetMesh( myMeshObj->GetMesh(), &elemSet );
+  }
+  else
+  {
+    theFunctor->SetMesh( myMeshObj->GetMesh() );
+  }
 }
 
 //=================================================================================
@@ -853,7 +876,7 @@ void SMESH_SubMeshObj::UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunc
 //=================================================================================
 bool SMESH_SubMeshObj::Update( int theIsClear )
 {
-        MESSAGE("SMESH_SubMeshObj::Update " << this)
+  MESSAGE("SMESH_SubMeshObj::Update " << this)
   bool changed = myMeshObj->Update( theIsClear );
   buildPrs(true);
   return changed;