Salome HOME
0021014: EDF 1583 SMESH: Improvement of the Python Dump for the creation of groups
authoreap <eap@opencascade.com>
Fri, 24 Jun 2011 08:36:34 +0000 (08:36 +0000)
committereap <eap@opencascade.com>
Fri, 24 Jun 2011 08:36:34 +0000 (08:36 +0000)
  icon for SMESH_GroupOnFilter

src/SMESHGUI/SMESHGUI_Utils.cxx
src/SMESH_I/SMESH_Gen_i_1.cxx
src/SMESH_I/SMESH_Mesh_i.cxx

index 638fc47bf6732d1dbdf879acd739581d9735d2d6..89d5d2d934e16de7441633aa05e291615a1ba346 100644 (file)
@@ -27,6 +27,8 @@
 //
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI.h"
+#include "SMESHGUI_Selection.h"
+#include "SMESH_Type.h"
 
 #include <SMDS_MeshNode.hxx>
 #include <SMDS_MeshFace.hxx>
@@ -48,6 +50,8 @@
 #include <gp_XYZ.hxx>
 #include <TColgp_Array1OfXYZ.hxx>
 
+#include CORBA_SERVER_HEADER(SMESH_Group)
+
 namespace SMESH
 {
   SUIT_Desktop*
@@ -279,29 +283,58 @@ namespace SMESH
     _PTR(GenericAttribute) anAttr =
       aBuilder->FindOrCreateAttribute(theSObject,"AttributePixMap");
     _PTR(AttributePixMap) aPixmap = anAttr;
-    if (theIsNotModif) {
-      aPixmap->SetPixMap("ICON_SMESH_TREE_MESH");
-    } else if ( isEmptyMesh ) {
-      aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN");
-    } else {
-      aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_PARTIAL");
-    }
+
+    std::string pmName;
+    if (theIsNotModif)
+      pmName = "ICON_SMESH_TREE_MESH";
+    else if ( isEmptyMesh )
+      pmName = "ICON_SMESH_TREE_MESH_WARN";
+    else
+      pmName = "ICON_SMESH_TREE_MESH_PARTIAL";
+    aPixmap->SetPixMap( pmName );
 
     _PTR(ChildIterator) anIter = aStudy->NewChildIterator(theSObject);
     for (int i = 1; anIter->More(); anIter->Next(), i++) {
       _PTR(SObject) aSObj = anIter->Value();
       if (i >= 4) {
         _PTR(ChildIterator) anIter1 = aStudy->NewChildIterator(aSObj);
-        for ( ; anIter1->More(); anIter1->Next()) {
+        for ( ; anIter1->More(); anIter1->Next())
+        {
           _PTR(SObject) aSObj1 = anIter1->Value();
+
           anAttr = aBuilder->FindOrCreateAttribute(aSObj1, "AttributePixMap");
           aPixmap = anAttr;
-          if (theIsNotModif) {
-            aPixmap->SetPixMap("ICON_SMESH_TREE_MESH");
-          } else if ( isEmptyMesh ) {
-            aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN");
-          } else {
-            aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_PARTIAL");
+
+          std::string entry = aSObj1->GetID();
+          int objType = SMESHGUI_Selection::type( entry.c_str(), aStudy );
+
+          SMESH::SMESH_IDSource_var idSrc = SObjectToInterface<SMESH::SMESH_IDSource>( aSObj1 );
+          if ( !idSrc->_is_nil() )
+          {
+            SMESH::SMESH_GroupOnFilter_var gof =
+              SObjectToInterface<SMESH::SMESH_GroupOnFilter>( aSObj1 );
+            const bool isGroupOnFilter = !gof->_is_nil();
+
+            SMESH::array_of_ElementType_var elemTypes = idSrc->GetTypes();
+            const bool isEmpty = ( elemTypes->length() == 0 );
+
+            if ( isEmpty )
+              aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN");
+            else if ( objType != GROUP )
+              aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
+            else if ( isGroupOnFilter )
+              aPixmap->SetPixMap( "ICON_SMESH_TREE_GROUP_ON_FILTER" );
+            else
+              aPixmap->SetPixMap( "ICON_SMESH_TREE_GROUP" );
+          }
+          else
+          {
+            if ( !theIsNotModif )
+              aPixmap->SetPixMap( pmName );
+            else if ( objType == GROUP )
+              aPixmap->SetPixMap( "ICON_SMESH_TREE_GROUP" );
+            else
+              aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
           }
         }
       }
index 41095815cd0fb06b190b9cd8645a3f86ddcfcf0a..ef41b4c6f2311154c60ac85e38ec29c393929952 100644 (file)
@@ -694,7 +694,12 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr    theStudy
         SetName( aRootSO, aRootNames[aType] );
 
       // Add new group to corresponding sub-tree
-      aGroupSO = publish (theStudy, theGroup, aRootSO, 0, "ICON_SMESH_TREE_GROUP" );
+      SMESH::array_of_ElementType_var elemTypes = theGroup->GetTypes();
+      const int isEmpty = ( elemTypes->length() == 0 );
+      std::string pm[2] = { "ICON_SMESH_TREE_GROUP", "ICON_SMESH_TREE_MESH_WARN" };
+      if ( SMESH::DownCast< SMESH_GroupOnFilter_i* > ( theGroup ))
+        pm[0] = "ICON_SMESH_TREE_GROUP_ON_FILTER";
+      aGroupSO = publish (theStudy, theGroup, aRootSO, 0, pm[isEmpty].c_str() );
     }
     if ( aGroupSO->_is_nil() )
       return aGroupSO._retn();
index 02f391d3fe1f53a333cf8a372b5947a1be556402..045851e12277173329b9e00e8052774b8bca90fc 100644 (file)
@@ -1949,6 +1949,8 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::ConvertToStandalone( SMESH::SMESH_GroupBase
   if ( !aGroupToRem )
     return aGroup._retn();
 
+  const bool isOnFilter = ( SMESH::DownCast< SMESH_GroupOnFilter_i* > ( theGroup ));
+
   int anId = aGroupToRem->GetLocalID();
   if ( !_impl->ConvertToStandalone( anId ) )
     return aGroup._retn();
@@ -1967,15 +1969,29 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::ConvertToStandalone( SMESH::SMESH_GroupBase
     aGroupSO = _gen_i->ObjectToSObject( aStudy, theGroup );
     if ( !aGroupSO->_is_nil() ) {
 
-    // remove reference to geometry
-    SALOMEDS::ChildIterator_var chItr = aStudy->NewChildIterator(aGroupSO);
-    for ( ; chItr->More(); chItr->Next() )
-      // Remove group's child SObject
-      builder->RemoveObject( chItr->Value() );
+      // remove reference to geometry
+      SALOMEDS::ChildIterator_var chItr = aStudy->NewChildIterator(aGroupSO);
+      for ( ; chItr->More(); chItr->Next() )
+        // Remove group's child SObject
+        builder->RemoveObject( chItr->Value() );
 
       // Update Python script
       TPythonDump() << aGroupSO << " = " << _this() << ".ConvertToStandalone( "
                     << aGroupSO << " )";
+
+      // change icon of Group on Filter
+      if ( isOnFilter )
+      {
+        SMESH::array_of_ElementType_var elemTypes = aGroupImpl->GetTypes();
+        const int isEmpty = ( elemTypes->length() == 0 );
+        if ( !isEmpty )
+        {
+          SALOMEDS::GenericAttribute_var anAttr =
+            builder->FindOrCreateAttribute( aGroupSO, "AttributePixMap" );
+          SALOMEDS::AttributePixMap_var pm = SALOMEDS::AttributePixMap::_narrow( anAttr );
+          pm->SetPixMap( "ICON_SMESH_TREE_GROUP" );
+        }
+      }
     }
   }