//=================================================================================
void SMESHGUI_MergeDlg::SelectionIntoArgument()
{
+ if ( myIsBusy )
+ return;
+
if (myEditCurrentArgument == (QWidget*)LineEditMesh)
{
QString aString = "";
LineEditMesh->setText( aString );
+
+ myIsBusy = true; // here selection can change
+
if (myAction == MERGE_NODES) {
SMESH::SetPointRepresentation(true);
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
aViewWindow->SetSelectionMode(CellSelection);
+ myIsBusy = false;
+
// process groups
myGroups.clear();
ListExclude->clear();
myIdPreview->SetPointsLabeled(false);
SMESH::SetPointRepresentation(false);
+ myIsBusy = true; // keep currently selected mesh
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
aViewWindow->SetSelectionMode(ActorSelection);
mySelectionMgr->clearFilters();
+ myIsBusy = false;
GroupCoincident->hide();
GroupEdit->hide();
myMeshOrSubMeshOrGroupFilter = new SMESH_TypeFilter (SMESH::IDSOURCE);
+ myIsBusy = true; // keep currently selected mesh
if (myAction == MERGE_NODES) {
SMESH::SetPointRepresentation(true);
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
if( mySelector->IsSelectionEnabled() )
aViewWindow->SetSelectionMode(CellSelection);
}
+ myIsBusy = false;
GroupCoincident->show();
GroupEdit->show();
break;
}
- SelectionIntoArgument();
+
+ if ( myMesh->_is_nil() )
+ SelectionIntoArgument();
updateControls();
const int minPrefixSize = 4;
// count "smaller" strings with the same prefix
- std::list< _AString >::iterator itLess = itStr; --itLess;
int nbLess = 0;
- for ( ; itLess != _strings.end(); --itLess )
+ std::list< _AString >::iterator itLess = itStr;
+ while ( itLess != _strings.begin() )
+ {
+ --itLess;
if ( strncmp( str, itLess->ToCString(), minPrefixSize ) == 0 )
++nbLess;
else
+ {
+ ++itLess;
break;
- ++itLess;
+ }
+ }
+ // itLess points to the 1st string with same prefix
+
// count "greater" strings with the same prefix
- std::list< _AString >::iterator itMore = itStr;
int nbMore = 0;
+ std::list< _AString >::iterator itMore = itStr;
for ( ; itMore != _strings.end(); ++itMore )
if ( strncmp( str, itMore->ToCString(), minPrefixSize ) == 0 )
++nbMore;
else
break;
- --itMore;
+ // itMore points to the 1st string with greater prefix
+
if ( nbLess + nbMore > 1 ) // ------- ADD a NEW CHILD FAMILY -------------
{
- // look for a maximal prefix length
- // int lessPrefSize = 3, morePrefSize = 3;
- // if ( nbLess > 0 )
- // while( itLess->ToCString()[ lessPrefSize ] == str[ lessPrefSize ] )
- // ++lessPrefSize;
- // if ( nbMore > 0 )
- // while ( itMore->ToCString()[ morePrefSize ] == str[ morePrefSize ] )
- // ++morePrefSize;
- // int prefixSize = 3;
- // if ( nbLess == 0 )
- // prefixSize = morePrefSize;
- // else if ( nbMore == 0 )
- // prefixSize = lessPrefSize;
- // else
- // prefixSize = Min( lessPrefSize, morePrefSize );
int prefixSize = minPrefixSize;
_AString newPrefix ( str, prefixSize );
for ( ; nbMore > 0; --nbMore, ++itStr )
newSubFam._strings.push_back( itStr->ToCString() + prefixSize );
- _strings.erase( itLess, ++itMore );
+ _strings.erase( itLess, itMore );
}
else // too few string to make a family for them
{
lines.push_back( aSMESHGen + " = smeshBuilder.New()" );
if ( isPublished )
- optionalComment = helper + "#";
+ optionalComment = "#";
lines.push_back( optionalComment + aSMESHGen + ".SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations:" );
- lines.push_back( " # multiples meshes built in parallel, complex and numerous mesh edition (performance)" );
+ lines.push_back( " # multiples meshes built in parallel, complex and numerous mesh edition (performance)\n" );
lines.push_back( helper + "aFilterManager = " + aSMESHGen + ".CreateFilterManager()" );
lines.push_back( helper + "aMeasurements = " + aSMESHGen + ".CreateMeasurements()" );