Salome HOME
0019957: EDF 785 SMESH: Convert Quadratic and Group on GEOM
authoreap <eap@opencascade.com>
Fri, 21 Nov 2008 11:00:25 +0000 (11:00 +0000)
committereap <eap@opencascade.com>
Fri, 21 Nov 2008 11:00:25 +0000 (11:00 +0000)
   add an arg to RemoveFreeElement() and RemoveFreeNode()

src/SMESHDS/SMESHDS_Mesh.cxx
src/SMESHDS/SMESHDS_Mesh.hxx

index da435996b7c69e36c490be34a8e9290cfbb3b7e4..153498bdf326fe2f68a3a303bca8d29d29feac19 100644 (file)
@@ -705,13 +705,15 @@ void SMESHDS_Mesh::RemoveNode(const SMDS_MeshNode * n)
 //function : RemoveFreeNode
 //purpose  : 
 //=======================================================================
-void SMESHDS_Mesh::RemoveFreeNode(const SMDS_MeshNode * n, SMESHDS_SubMesh * subMesh)
+void SMESHDS_Mesh::RemoveFreeNode(const SMDS_MeshNode * n,
+                                  SMESHDS_SubMesh *     subMesh,
+                                  bool                  fromGroups)
 {
   myScript->RemoveNode(n->GetID());
 
   // Rm from group
   // Node can belong to several groups
-  if (!myGroups.empty()) {
+  if (fromGroups && !myGroups.empty()) {
     set<SMESHDS_GroupBase*>::iterator GrIt = myGroups.begin();
     for (; GrIt != myGroups.end(); GrIt++) {
       SMESHDS_Group* group = dynamic_cast<SMESHDS_Group*>(*GrIt);
@@ -754,7 +756,9 @@ void SMESHDS_Mesh::RemoveElement(const SMDS_MeshElement * elt)
 //function : RemoveFreeElement
 //purpose  : 
 //========================================================================
-void SMESHDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elt, SMESHDS_SubMesh * subMesh)
+void SMESHDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elt,
+                                     SMESHDS_SubMesh *        subMesh,
+                                     bool                     fromGroups)
 {
   if (elt->GetType() == SMDSAbs_Node) {
     RemoveFreeNode( static_cast<const SMDS_MeshNode*>(elt), subMesh);
@@ -769,11 +773,13 @@ void SMESHDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elt, SMESHDS_SubMe
 
   // Rm from group
   // Node can belong to several groups
-  set<SMESHDS_GroupBase*>::iterator GrIt = myGroups.begin();
-  for (; GrIt != myGroups.end(); GrIt++) {
-    SMESHDS_Group* group = dynamic_cast<SMESHDS_Group*>(*GrIt);
-    if (group && !group->IsEmpty())
-      group->SMDSGroup().Remove(elt);
+  if ( fromGroups && !myGroups.empty() ) {
+    set<SMESHDS_GroupBase*>::iterator GrIt = myGroups.begin();
+    for (; GrIt != myGroups.end(); GrIt++) {
+      SMESHDS_Group* group = dynamic_cast<SMESHDS_Group*>(*GrIt);
+      if (group && !group->IsEmpty())
+        group->SMDSGroup().Remove(elt);
+    }
   }
 
   // Rm from sub-mesh
index f600112c3c541a7e12a625edbd3674346518194c..f4cc00f12eb933b9cac024bdf29ed31248f8e9ab 100644 (file)
@@ -379,8 +379,8 @@ public:
    *  Methods do not work for meshes with descendants.
    *  Implemented for fast cleaning of meshes.
    */
-  void RemoveFreeNode(const SMDS_MeshNode *, SMESHDS_SubMesh *);
-  void RemoveFreeElement(const SMDS_MeshElement *, SMESHDS_SubMesh *);
+  void RemoveFreeNode   (const SMDS_MeshNode *,    SMESHDS_SubMesh *, bool fromGroups=true);
+  void RemoveFreeElement(const SMDS_MeshElement *, SMESHDS_SubMesh *, bool fromGroups=true);
 
   void ClearMesh();