- if (i >= 4) {
- _PTR(ChildIterator) anIter1 = aStudy->NewChildIterator(aSObj);
- for (; anIter1->More(); anIter1->Next()) {
- _PTR(SObject) aSObj1 = anIter1->Value();
- anAttr = aBuilder->FindOrCreateAttribute(aSObj1, "AttributePixMap");
- aPixmap = anAttr;
- if (theIsRight) {
- aPixmap->SetPixMap("ICON_SMESH_TREE_MESH");
- } else {
- aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN");
- }
- }
+ if ( aSObj->Tag() >= SMESH::Tag_FirstSubMesh )
+ {
+ _PTR(ChildIterator) anIter1 = aStudy->NewChildIterator(aSObj);
+ for ( ; anIter1->More(); anIter1->Next())
+ {
+ _PTR(SObject) aSObj1 = anIter1->Value();
+ _PTR(SObject) aSObjectRef;
+ if (aSObj1->ReferencedObject(aSObjectRef))
+ continue; // reference to an object
+
+ anAttr = aBuilder->FindOrCreateAttribute(aSObj1, "AttributePixMap");
+ aPixmap = anAttr;
+
+ std::string entry = aSObj1->GetID();
+ int objType = SMESHGUI_Selection::type( entry.c_str(), aStudy );
+ if ( objType == SMESH::HYPOTHESIS || objType == SMESH::ALGORITHM )
+ continue;
+
+ 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();
+
+ bool isEmpty = false;
+ if ( !isGroupOnFilter ) // GetTypes() can be very long on GroupOnFilter!
+ {
+ SMESH::array_of_ElementType_var elemTypes = idSrc->GetTypes();
+ 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 // is it necessary?
+ {
+ if ( !theIsNotModif )
+ aPixmap->SetPixMap( pmName );
+ else if ( objType == GROUP )
+ aPixmap->SetPixMap( "ICON_SMESH_TREE_GROUP" );
+ else
+ aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
+ }
+ }