From a6fa2d85619591f128032f2d36edf62b57ba02ed Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 24 Jun 2011 08:36:34 +0000 Subject: [PATCH] 0021014: EDF 1583 SMESH: Improvement of the Python Dump for the creation of groups icon for SMESH_GroupOnFilter --- src/SMESHGUI/SMESHGUI_Utils.cxx | 61 +++++++++++++++++++++++++-------- src/SMESH_I/SMESH_Gen_i_1.cxx | 7 +++- src/SMESH_I/SMESH_Mesh_i.cxx | 26 +++++++++++--- 3 files changed, 74 insertions(+), 20 deletions(-) diff --git a/src/SMESHGUI/SMESHGUI_Utils.cxx b/src/SMESHGUI/SMESHGUI_Utils.cxx index 638fc47bf..89d5d2d93 100644 --- a/src/SMESHGUI/SMESHGUI_Utils.cxx +++ b/src/SMESHGUI/SMESHGUI_Utils.cxx @@ -27,6 +27,8 @@ // #include "SMESHGUI_Utils.h" #include "SMESHGUI.h" +#include "SMESHGUI_Selection.h" +#include "SMESH_Type.h" #include #include @@ -48,6 +50,8 @@ #include #include +#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( aSObj1 ); + if ( !idSrc->_is_nil() ) + { + SMESH::SMESH_GroupOnFilter_var gof = + SObjectToInterface( 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" ); } } } diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 41095815c..ef41b4c6f 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -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(); diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 02f391d3f..045851e12 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -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" ); + } + } } } -- 2.39.2