From 42a135c4a72eda961055d1ce9cf6082b5c2968d8 Mon Sep 17 00:00:00 2001 From: jfa Date: Tue, 21 May 2024 17:06:26 +0100 Subject: [PATCH] [bos #41485] Fixed memory error, possibly related to this issue. Fixed updating of mesh and group icons in the object browser. --- doc/gui/images/groups_in_OB.png | Bin 4474 -> 7632 bytes doc/gui/images/image88.gif | Bin 6873 -> 0 bytes doc/gui/images/image88.jpg | Bin 9536 -> 12030 bytes doc/gui/images/image89.jpg | Bin 0 -> 9536 bytes doc/gui/input/constructing_meshes.rst | 4 ++ src/SMESHDS/SMESHDS_Script.cxx | 3 +- src/SMESHGUI/SMESHGUI.cxx | 27 +++++----- src/SMESH_I/SMESH_Gen_i.cxx | 27 +++++----- src/SMESH_I/SMESH_Gen_i.hxx | 4 +- src/SMESH_I/SMESH_Gen_i_1.cxx | 58 ++++++++++++++------ src/SMESH_I/SMESH_Group_i.cxx | 75 +++++++++++++++++--------- src/SMESH_I/SMESH_Mesh_i.cxx | 12 ++++- 12 files changed, 137 insertions(+), 73 deletions(-) delete mode 100644 doc/gui/images/image88.gif mode change 100644 => 100755 doc/gui/images/image88.jpg create mode 100644 doc/gui/images/image89.jpg diff --git a/doc/gui/images/groups_in_OB.png b/doc/gui/images/groups_in_OB.png index 1ffb96a6b4b301d5f4000605ac9a1ebb495c52ff..c68ed37b3aa5c39c9690bbd55bf6175fcf0adbca 100644 GIT binary patch literal 7632 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 diff --git a/doc/gui/images/image88.gif b/doc/gui/images/image88.gif deleted file mode 100644 index 553656d25ca0c4b08e935d0355e07768fb64c47f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6873 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 diff --git a/doc/gui/images/image89.jpg b/doc/gui/images/image89.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9499ab2198d9b4d62513bcd7ca2448f3f12ff128 GIT binary patch literal 9536 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 literal 0 HcmV?d00001 diff --git a/doc/gui/input/constructing_meshes.rst b/doc/gui/input/constructing_meshes.rst index 923ecf929..fcebdb368 100644 --- a/doc/gui/input/constructing_meshes.rst +++ b/doc/gui/input/constructing_meshes.rst @@ -210,6 +210,10 @@ When the Preview dialog is closed, the question about the storage of temporarily These elements can be kept in the mesh. +Since the mesh, its submesh(es) and group(s) are now not empty, their **Object Browser** icons will be updated accordingly. + + .. image:: ../images/image89.jpg + :align: center .. _submesh_order_anchor: diff --git a/src/SMESHDS/SMESHDS_Script.cxx b/src/SMESHDS/SMESHDS_Script.cxx index f1e484397..450a69bca 100644 --- a/src/SMESHDS/SMESHDS_Script.cxx +++ b/src/SMESHDS/SMESHDS_Script.cxx @@ -35,7 +35,8 @@ using namespace std; //purpose : //======================================================================= SMESHDS_Script::SMESHDS_Script(bool theIsEmbeddedMode): - myIsEmbeddedMode(theIsEmbeddedMode) + myIsEmbeddedMode(theIsEmbeddedMode), + myIsModified(true) { //cerr << "=========================== myIsEmbeddedMode " << myIsEmbeddedMode << endl; } diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index fe6d17ac6..29487f6e0 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -410,9 +410,6 @@ namespace { _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshes[i] ); if ( aMeshSO ) { - _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); - _PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( aMeshSO, "AttributePixMap" ); - aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" ); if ( theCommandID == SMESHOp::OpImportUNV ) // mesh names aren't taken from the file for UNV import SMESH::SetName( aMeshSO, QFileInfo(filename).fileName() ); @@ -607,7 +604,7 @@ namespace { format = "CGNS"; notSupportedElemTypes.push_back( SMESH::Entity_Ball ); - } + } else if ( isGMF ) { format = "GMF"; @@ -707,7 +704,7 @@ namespace checkBoxes << QObject::tr( "CGNS_EXPORT_ELEMS_BY_TYPE" ) << QObject::tr("STRUCTUREDCGNS"); SalomeApp_CheckFileDlg* fd = new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true ); - + fd->setWindowTitle( aTitle ); fd->setNameFilter( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" ); @@ -717,18 +714,18 @@ namespace SMESHGUI_FileValidator* fv = new SMESHGUI_FileValidator( fd ); fd->setValidator( fv ); fd->SetChecked( option, 0 ); - + if ( fd->exec() ) { aFilename = fd->selectedFile(); - structureCGNS = fd->IsChecked( 1 ); + structureCGNS = fd->IsChecked( 1 ); } toOverwrite = fv->isOverwrite( aFilename ); option = fd->IsChecked( 0 ); SMESHGUI::resourceMgr()->setValue("SMESH", theOptionResource, option ); toCreateGroups = option; - + delete fd; } else if ( isUNV || isDAT ) // Export to [ UNV | DAT ] - one option @@ -768,11 +765,11 @@ namespace QStringList filters; aFilterMap.insert( QObject::tr( "STL_ASCII_FILES_FILTER" ) + " (*.stl)", 1 ); aFilterMap.insert( QObject::tr( "STL_BIN_FILES_FILTER" ) + " (*.stl)", 0 ); - + QMap::const_iterator it = aFilterMap.begin(); for ( ; it != aFilterMap.end(); ++it ) - filters.push_back( it.key() ); - + filters.push_back( it.key() ); + SUIT_FileDlg* fd = new SUIT_FileDlg( SMESHGUI::desktop(), false, true, true ); fd->setWindowTitle( aTitle ); fd->setNameFilters( filters ); @@ -1031,7 +1028,7 @@ namespace aFilename.toUtf8().data(), toOverwrite && aMeshIndex == 0, toCreateGroups ); - else + else aMeshItem->ExportStructuredCGNS( aMeshOrGroup, aFilename.toUtf8().data(), toOverwrite && aMeshIndex == 0 ); @@ -1069,11 +1066,11 @@ namespace SUIT_MessageBox::warning(SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), QObject::tr("SMESH_EXPORT_FAILED") + SalomeApp_Tools::ExceptionToString(S_ex)); - } + } else SUIT_MessageBox::warning(SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), - SalomeApp_Tools::ExceptionToString(S_ex)); + SalomeApp_Tools::ExceptionToString(S_ex)); wc.resume(); } } @@ -4196,7 +4193,7 @@ void SMESHGUI::createSMESHAction( const int id, const QString& po_id, const QStr pix = resMgr->loadPixmap( "SMESH", tr( QString( "ICON_%1" ).arg( po_id ).toLatin1().data() ), false ); if ( !pix.isNull() ) icon = QIcon( pix ); - + QString tooltip = tr( QString( "TOP_%1" ).arg( po_id ).toLatin1().data() ), menu = tr( QString( "MEN_%1" ).arg( po_id ).toLatin1().data() ), status_bar = tr( QString( "STB_%1" ).arg( po_id ).toLatin1().data() ); diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index 1c78a2526..942aacd57 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -1401,12 +1401,15 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromUNV( const char* theFileName checkFileReadable( theFileName ); SMESH::SMESH_Mesh_var aMesh = createMesh(); + string aFileName; + // publish mesh in the study if ( CanPublishInStudy( aMesh ) ) { SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder(); aStudyBuilder->NewCommand(); // There is a transaction - SALOMEDS::SObject_wrap aSO = PublishMesh( aMesh.in(), aFileName.c_str() ); + SALOMEDS::SObject_wrap aSO = + PublishMesh( aMesh.in(), aFileName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED" ); aStudyBuilder->CommitCommand(); if ( !aSO->_is_nil() ) { // Update Python script @@ -1438,13 +1441,6 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* { checkFileReadable( theFileName ); -#ifdef WIN32 - char bname[ _MAX_FNAME ]; - _splitpath( theFileName, NULL, NULL, bname, NULL ); - string aFileName = bname; -#else - string aFileName = basename( const_cast( theFileName )); -#endif // Retrieve mesh names from the file DriverMED_R_SMESHDS_Mesh myReader; myReader.SetFile( theFileName ); @@ -1481,7 +1477,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* // publish mesh in the study SALOMEDS::SObject_wrap aSO; if ( CanPublishInStudy( mesh ) ) - aSO = PublishMesh( mesh.in(), meshName.c_str() ); + aSO = PublishMesh( mesh.in(), meshName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED" ); // Python Dump if ( !aSO->_is_nil() ) { @@ -1529,7 +1525,7 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromSTL( const char* theFileName checkFileReadable( theFileName ); SMESH::SMESH_Mesh_var aMesh = createMesh(); - //string aFileName; + #ifdef WIN32 char bname[ _MAX_FNAME ]; _splitpath( theFileName, NULL, NULL, bname, NULL ); @@ -1537,11 +1533,13 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromSTL( const char* theFileName #else string aFileName = basename( const_cast(theFileName) ); #endif + // publish mesh in the study if ( CanPublishInStudy( aMesh ) ) { SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder(); aStudyBuilder->NewCommand(); // There is a transaction - SALOMEDS::SObject_wrap aSO = PublishInStudy( SALOMEDS::SObject::_nil(), aMesh.in(), aFileName.c_str() ); + SALOMEDS::SObject_wrap aSO = + PublishMesh( aMesh.in(), aFileName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED" ); aStudyBuilder->CommitCommand(); if ( !aSO->_is_nil() ) { // Update Python script @@ -1616,7 +1614,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromCGNS( const char* // publish mesh in the study SALOMEDS::SObject_wrap aSO; if ( CanPublishInStudy( mesh ) ) - aSO = PublishMesh( mesh.in(), meshName.c_str() ); + aSO = PublishMesh( mesh.in(), meshName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED" ); // Python Dump if ( !aSO->_is_nil() ) { @@ -1667,7 +1665,8 @@ SMESH_Gen_i::CreateMeshesFromGMF( const char* theFileName, if ( CanPublishInStudy( aMesh ) ) { SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder(); aStudyBuilder->NewCommand(); // There is a transaction - SALOMEDS::SObject_wrap aSO = PublishInStudy( SALOMEDS::SObject::_nil(), aMesh.in(), aFileName.c_str() ); + SALOMEDS::SObject_wrap aSO = + PublishMesh( aMesh.in(), aFileName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED" ); aStudyBuilder->CommitCommand(); if ( !aSO->_is_nil() ) { // Update Python script @@ -1737,7 +1736,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMESHIO(const char* theFileName, // publish mesh in the study SALOMEDS::SObject_wrap aSO; if (CanPublishInStudy(mesh)) - aSO = PublishMesh(mesh.in(), meshName.c_str()); + aSO = PublishMesh(mesh.in(), meshName.c_str(), "ICON_SMESH_TREE_MESH_IMPORTED"); // Save SO to use in a python dump sobjects.emplace_back(aSO); diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index 1b3af8ad5..3236fb1b6 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -524,7 +524,8 @@ public: // publishing methods SALOMEDS::SComponent_ptr PublishComponent(); SALOMEDS::SObject_ptr PublishMesh (SMESH::SMESH_Mesh_ptr theMesh, - const char* theName = 0); + const char* theName = 0, + const char* thePixMap = 0); SALOMEDS::SObject_ptr PublishHypothesis (SMESH::SMESH_Hypothesis_ptr theHyp, const char* theName = 0); SALOMEDS::SObject_ptr PublishSubMesh (SMESH::SMESH_Mesh_ptr theMesh, @@ -536,6 +537,7 @@ public: GEOM::GEOM_Object_ptr theShapeObject, const char* theName = 0); void UpdateIcons(SMESH::SMESH_Mesh_ptr theMesh); + void UpdateGroupIcon(SMESH::SMESH_GroupBase_ptr theGroup); void HighLightInvalid(CORBA::Object_ptr theObject, bool isInvalid); bool IsInvalid(SALOMEDS::SObject_ptr theObject); bool AddHypothesisToShape(SMESH::SMESH_Mesh_ptr theMesh, diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 0d2ff3d6f..18cde4fee 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -607,7 +607,8 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent() //======================================================================= SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SMESH::SMESH_Mesh_ptr theMesh, - const char* theName) + const char* theName, + const char* thePixMap) { if ( !myIsEnablePublish ) return SALOMEDS::SObject::_nil(); @@ -631,7 +632,8 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SMESH::SMESH_Mesh_ptr theMesh, else aTag++; - aMeshSO = publish( theMesh, father, aTag, "ICON_SMESH_TREE_MESH_WARN" ); + aMeshSO = publish( theMesh, father, aTag, + thePixMap ? thePixMap : "ICON_SMESH_TREE_MESH_WARN" ); if ( aMeshSO->_is_nil() ) return aMeshSO._retn(); } @@ -977,18 +979,13 @@ void SMESH_Gen_i::UpdateIcons( SMESH::SMESH_Mesh_ptr theMesh ) if ( idSrc->_is_nil() ) continue; - SMESH::SMESH_GroupBase_var grp = SMESH::SMESH_GroupBase::_narrow( obj ); - SMESH::SMESH_GroupOnFilter_var gof = SMESH::SMESH_GroupOnFilter::_narrow( obj ); - const bool isGroup = !grp->_is_nil(); - const bool isGroupOnFilter = !gof->_is_nil(); - bool isEmpty = ( mesh_i->NbNodes() == 0 ); if ( !isEmpty ) { - if ( isGroupOnFilter ) // GetTypes() can be very long on GroupOnFilter! - { - SMESH::smIdType_array_var nbByType = mesh_i->GetNbElementsByType(); - isEmpty = ( nbByType[ grp->GetType() ] == 0 ); + SMESH::SMESH_GroupBase_var grp = SMESH::SMESH_GroupBase::_narrow( obj ); + if ( !grp->_is_nil() ) { + UpdateGroupIcon(grp); + continue; } else { @@ -1013,17 +1010,46 @@ void SMESH_Gen_i::UpdateIcons( SMESH::SMESH_Mesh_ptr theMesh ) if ( isEmpty ) SetPixMap( so, "ICON_SMESH_TREE_MESH_WARN"); - else if ( !isGroup ) - SetPixMap( so, "ICON_SMESH_TREE_MESH" ); - else if ( isGroupOnFilter ) - SetPixMap( so, "ICON_SMESH_TREE_GROUP_ON_FILTER" ); else - SetPixMap( so, "ICON_SMESH_TREE_GROUP" ); + SetPixMap( so, "ICON_SMESH_TREE_MESH" ); } // loop on sub-meshes or groups } // loop on roots } +//======================================================================= +//function : UpdateGroupIcon +//purpose : update icon of a group +//======================================================================= + +void SMESH_Gen_i::UpdateGroupIcon( SMESH::SMESH_GroupBase_ptr theGroup ) +{ + SALOMEDS::SObject_wrap so = ObjectToSObject( theGroup ); + if ( so->_is_nil() ) + return; + + SMESH::SMESH_GroupOnFilter_var gof = SMESH::SMESH_GroupOnFilter::_narrow( theGroup ); + const bool isGroupOnFilter = !gof->_is_nil(); + + bool isEmpty = false; + if ( isGroupOnFilter ) // GetTypes() can be very long on GroupOnFilter! + { + SMESH::smIdType_array_var nbByType = theGroup->GetMesh()->GetNbElementsByType(); + isEmpty = ( nbByType[ theGroup->GetType() ] == 0 ); + } + else + { + isEmpty = ( theGroup->Size() == 0 ); + } + + if ( isEmpty ) + SetPixMap( so, "ICON_SMESH_TREE_MESH_WARN"); + else if ( isGroupOnFilter ) + SetPixMap( so, "ICON_SMESH_TREE_GROUP_ON_FILTER" ); + else + SetPixMap( so, "ICON_SMESH_TREE_GROUP" ); +} + //======================================================================= //function : HighLightInvalid //purpose : change font color of a object in the Object Browser diff --git a/src/SMESH_I/SMESH_Group_i.cxx b/src/SMESH_I/SMESH_Group_i.cxx index ddc625907..c9ff26339 100644 --- a/src/SMESH_I/SMESH_Group_i.cxx +++ b/src/SMESH_I/SMESH_Group_i.cxx @@ -261,16 +261,19 @@ void SMESH_Group_i::Clear() if ( myPreMeshInfo ) myPreMeshInfo->FullLoadFromFile(); + SMESH::SMESH_Group_var me = _this(); + // Update Python script - SMESH::TPythonDump() << SMESH::SMESH_Group_var(_this()) << ".Clear()"; + SMESH::TPythonDump() << me << ".Clear()"; // Clear the group SMESHDS_Group* aGroupDS = dynamic_cast( GetGroupDS() ); if (aGroupDS) { aGroupDS->Clear(); - return; + SMESH_Gen_i* aGen = GetMeshServant()->GetGen(); + aGen->UpdateGroupIcon(me); + Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion } - Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion } //============================================================================= @@ -301,20 +304,28 @@ SMESH::smIdType SMESH_Group_i::Add( const SMESH::smIdType_array& theIDs ) if ( myPreMeshInfo ) myPreMeshInfo->FullLoadFromFile(); + SMESH::SMESH_Group_var me = _this(); + // Update Python script - SMESH::TPythonDump() << "nbAdd = " << SMESH::SMESH_Group_var(_this()) << ".Add( " << theIDs << " )"; + SMESH::TPythonDump() << "nbAdd = " << me << ".Add( " << theIDs << " )"; // Add elements to the group SMESHDS_Group* aGroupDS = dynamic_cast( GetGroupDS() ); if (aGroupDS) { + bool wasEmpty = aGroupDS->IsEmpty(); int nbAdd = 0; for ( CORBA::ULong i = 0; i < theIDs.length(); i++) { int anID = (int) theIDs[i]; if ( aGroupDS->Add( anID )) nbAdd++; } - if ( nbAdd ) + if ( nbAdd ) { Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion + if (wasEmpty) { + SMESH_Gen_i* aGen = GetMeshServant()->GetGen(); + aGen->UpdateGroupIcon(me); + } + } return nbAdd; } MESSAGE("attempt to add elements to a vague group"); @@ -332,9 +343,10 @@ SMESH::smIdType SMESH_Group_i::Remove( const SMESH::smIdType_array& theIDs ) if ( myPreMeshInfo ) myPreMeshInfo->FullLoadFromFile(); + SMESH::SMESH_Group_var me = _this(); + // Update Python script - SMESH::TPythonDump() << "nbDel = " << SMESH::SMESH_Group_var(_this()) - << ".Remove( " << theIDs << " )"; + SMESH::TPythonDump() << "nbDel = " << me << ".Remove( " << theIDs << " )"; // Remove elements from the group SMESHDS_Group* aGroupDS = dynamic_cast( GetGroupDS() ); @@ -345,8 +357,13 @@ SMESH::smIdType SMESH_Group_i::Remove( const SMESH::smIdType_array& theIDs ) if ( aGroupDS->Remove( anID )) nbDel++; } - if ( nbDel ) + if ( nbDel ) { Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion + if (aGroupDS->IsEmpty()) { + SMESH_Gen_i* aGen = GetMeshServant()->GetGen(); + aGen->UpdateGroupIcon(me); + } + } return nbDel; } MESSAGE("attempt to remove elements from a vague group"); @@ -361,24 +378,27 @@ SMESH::smIdType SMESH_Group_i::Remove( const SMESH::smIdType_array& theIDs ) typedef bool (SMESHDS_Group::*TFunChangeGroup)(const smIdType); -CORBA::Long -ChangeByPredicate( SMESH::Predicate_i* thePredicate, - SMESHDS_GroupBase* theGroupBase, - SMESH::NotifyerAndWaiter* theGroupImpl, - TFunChangeGroup theFun) +CORBA::Long ChangeByPredicate( SMESH::Predicate_i* thePredicate, + SMESHDS_GroupBase* theGroupBase, + SMESH_GroupBase_i* theGroup, + TFunChangeGroup theFun) { CORBA::Long aNb = 0; - if(SMESHDS_Group* aGroupDS = dynamic_cast(theGroupBase)){ + if (SMESHDS_Group* aGroupDS = dynamic_cast(theGroupBase)) { SMESH::Controls::Filter::TIdSequence aSequence; const SMDS_Mesh* aMesh = theGroupBase->GetMesh(); SMESH::Filter_i::GetElementsId(thePredicate,aMesh,aSequence); CORBA::Long i = 0, iEnd = aSequence.size(); - for(; i < iEnd; i++) - if((aGroupDS->*theFun)(aSequence[i])) + for (; i < iEnd; i++) + if ((aGroupDS->*theFun)(aSequence[i])) aNb++; - if ( aNb ) - theGroupImpl->Modified(); + if ( aNb ) { + theGroup->Modified(); + SMESH_Gen_i* aGen = theGroup->GetMeshServant()->GetGen(); + SMESH::SMESH_GroupBase_var aGroup = theGroup->_this(); + aGen->UpdateGroupIcon(aGroup); + } return aNb; } return aNb; @@ -428,11 +448,16 @@ SMESH::smIdType SMESH_Group_i::AddFrom( SMESH::SMESH_IDSource_ptr theSource ) aGroupDS->SMDSGroup().Add( elemIt->next() ); } + SMESH::SMESH_Group_var me = _this(); + // Update Python script - pd << "nbAdd = " << SMESH::SMESH_Group_var(_this()) << ".AddFrom( " << theSource << " )"; + pd << "nbAdd = " << me << ".AddFrom( " << theSource << " )"; - if ( prevNb != Size() ) + if ( prevNb != Size() ) { + SMESH_Gen_i* aGen = GetMeshServant()->GetGen(); + aGen->UpdateGroupIcon(me); Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion + } return Size() - prevNb; } @@ -830,17 +855,18 @@ void SMESH_GroupOnFilter_i::SetFilter(SMESH::Filter_ptr theFilter) myFilter->SetMesh( SMESH::SMESH_Mesh::_nil() ); // to UnRegister() the mesh } + SMESH_Gen_i* aGen = GetMeshServant()->GetGen(); + SMESH::SMESH_GroupOnFilter_var me = _this(); + if ( SMESHDS_GroupOnFilter* grDS = dynamic_cast< SMESHDS_GroupOnFilter*>( GetGroupDS() )) { grDS->SetPredicate( GetPredicate( myFilter )); + aGen->UpdateGroupIcon(me); Modified(); // notify dependent Filter with FT_BelongToMeshGroup criterion } - SMESH::SMESH_GroupOnFilter_var me = _this(); - // mark the group valid after edition - GetMeshServant()->GetGen()->HighLightInvalid( me, false ); - + aGen->HighLightInvalid( me, false ); SMESH::TPythonDump()<< me <<".SetFilter( "<< theFilter <<" )"; } @@ -1078,4 +1104,3 @@ void SMESH_GroupOnFilter_i::OnBaseObjModified(NotifyerAndWaiter* /*filter*/, boo if ( SMESHDS_GroupOnFilter* grDS = dynamic_cast< SMESHDS_GroupOnFilter*>( GetGroupDS() )) grDS->SetPredicate( GetPredicate( myFilter )); // group resets its cache } - diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 7f732ae9c..b12b05895 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -1414,6 +1414,9 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::IntersectGroups( SMESH::SMESH_GroupBase_ptr resGroupDS->SMDSGroup().Add( e ); } } + + GetGen()->UpdateGroupIcon(aResGrp); + // Update Python script pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var(_this()) << ".IntersectGroups( " << theGroup1 << ", " << theGroup2 << ", '" << theName << "')"; @@ -1500,6 +1503,8 @@ SMESH_Mesh_i::IntersectListOfGroups(const SMESH::ListOfGroups& theGroups, resGroupDS->SMDSGroup().Add( e ); } + GetGen()->UpdateGroupIcon(aResGrp); + // Update Python script pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var( _this() ) << ".IntersectListOfGroups( " << theGroups << ", '" << theName << "' )"; @@ -1561,6 +1566,9 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGr resGroupDS->SMDSGroup().Add( e ); } } + + GetGen()->UpdateGroupIcon(aResGrp); + // Update Python script pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var(_this()) << ".CutGroups( " << theGroup1 << ", " << theGroup2 << ", '" << theName << "')"; @@ -1661,6 +1669,8 @@ SMESH_Mesh_i::CutListOfGroups(const SMESH::ListOfGroups& theMainGroups, resGroupDS->SMDSGroup().Add( e ); } + GetGen()->UpdateGroupIcon(aResGrp); + // Update Python script pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var( _this() ) << ".CutListOfGroups( " << theMainGroups << ", " @@ -4576,7 +4586,7 @@ void SMESH_Mesh_i::ExportStructuredCGNS( SMESH::SMESH_IDSource_ptr meshPart, meshName = name.in(); } SMESH_TRY; - + SMESH::SMESH_Mesh_var mesh = meshPart->GetMesh(); SMESH_Mesh_i* mesh_i = SMESH::DownCast( mesh ); mesh_i->Load(); -- 2.39.2