IPAL52943: "Apply and Close" button does not active on symmetry dialog box

Enable work with not shown meshes
This commit is contained in:
eap 2015-11-12 14:46:55 +03:00
parent 7b33b10e89
commit 7a7d7e6e48
8 changed files with 198 additions and 168 deletions

View File

@ -706,34 +706,35 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
int aNbUnits = 0; int aNbUnits = 0;
if (myEditCurrentArgument == (QWidget*)LineEditElements) { if (myEditCurrentArgument == (QWidget*)LineEditElements)
{
myElementsId = ""; myElementsId = "";
myObjects.clear(); myObjects.clear();
myObjectsNames.clear(); myObjectsNames.clear();
myMeshes.clear(); myMeshes.clear();
for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) { for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() )
{
Handle(SALOME_InteractiveObject) IO = it.Value(); Handle(SALOME_InteractiveObject) IO = it.Value();
SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO ); SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO );
if ( aMesh->_is_nil() ) if ( aMesh->_is_nil() )
return; return;
myActor = SMESH::FindActorByObject( aMesh ); myActor = SMESH::FindActorByObject( aMesh );
if ( !myActor ) if ( !myActor )
myActor = SMESH::FindActorByEntry( IO->getEntry() ); myActor = SMESH::FindActorByEntry( IO->getEntry() );
if ( !myActor && !CheckBoxMesh->isChecked() ) // if ( !myActor && !CheckBoxMesh->isChecked() ) -- elems can be selected by Filter
return; // return;
if ( !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO )->_is_nil() ) { SMESH::SMESH_IDSource_var idSrc = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) { if ( _PTR(SObject) obj = SMESH::FindSObject( idSrc ))
_PTR(SObject) obj = aStudy->FindObjectID( qPrintable( QString( IO->getEntry() ) ) ); {
_PTR(GenericAttribute) anAttr; std::string name = obj->GetName();
if ( obj && obj->FindAttribute( anAttr, "AttributeName" ) ) { if ( !name.empty() )
_PTR(AttributeName) aNameAttr( anAttr ); {
myObjects << SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO ); myObjects << idSrc;
myObjectsNames << aNameAttr->Value().c_str(); myObjectsNames << name.c_str();
myMeshes << aMesh; myMeshes << aMesh;
}
} }
} }
} }
@ -749,11 +750,11 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
else if ( ActionGroup->checkedId() != MOVE_ELEMS_BUTTON ) { else if ( ActionGroup->checkedId() != MOVE_ELEMS_BUTTON ) {
MakeGroupsCheck->setEnabled(true); MakeGroupsCheck->setEnabled(true);
} }
if (CheckBoxMesh->isChecked()) {
SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
if (CheckBoxMesh->isChecked()) {
if ( myMeshes.isEmpty() ) if ( myMeshes.isEmpty() )
return; return;
SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
} }
else { else {
aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aList.First(), aString); aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aList.First(), aString);
@ -764,15 +765,13 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
myNbOkElements = true; myNbOkElements = true;
} else { }
else // set coordinates by picked nodes
{
Handle(SALOME_InteractiveObject) IO = aList.First(); Handle(SALOME_InteractiveObject) IO = aList.First();
if ((SMESH::GetMeshByIO(IO))->_is_nil())
return;
SMESH_Actor* anActor = SMESH::FindActorByObject(SMESH::GetMeshByIO(IO)); SMESH_Actor* anActor = SMESH::FindActorByEntry( IO->getEntry() );
if (!anActor) if (!anActor)
anActor = SMESH::FindActorByEntry(IO->getEntry());
if (!anActor && !CheckBoxMesh->isChecked())
return; return;
aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString); aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
@ -1062,8 +1061,10 @@ void SMESHGUI_RotationDlg::setFilters()
tr("NO_MESH_SELECTED")); tr("NO_MESH_SELECTED"));
return; return;
} }
if ( !myFilterDlg ) if ( !myFilterDlg ) {
myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL ); myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
connect(myFilterDlg, SIGNAL(Accepted()), SLOT(onFilterAccepted()));
}
QList<int> types; QList<int> types;
if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE; if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE;
@ -1081,6 +1082,23 @@ void SMESHGUI_RotationDlg::setFilters()
myFilterDlg->show(); myFilterDlg->show();
} }
//=======================================================================
// name : onFilterAccepted()
// Purpose : SLOT. Called when Filter dlg closed with OK button.
// Activate [Apply] if no Actor is available
//=======================================================================
void SMESHGUI_RotationDlg::onFilterAccepted()
{
if ( myMeshes.length() > 0 && !buttonOk->isEnabled() )
{
myElementsId = LineEditElements->text();
QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
myNbOkElements = aListElementsId.count();
buttonOk->setEnabled( myNbOkElements );
buttonApply->setEnabled( myNbOkElements );
}
}
//================================================================================= //=================================================================================
// function : isValid // function : isValid
// purpose : // purpose :

View File

@ -135,6 +135,7 @@ private:
protected slots: protected slots:
virtual void onDisplaySimulation( bool ); virtual void onDisplaySimulation( bool );
virtual void reject(); virtual void reject();
void onFilterAccepted();
private slots: private slots:
void ClickOnOk(); void ClickOnOk();

View File

@ -743,38 +743,39 @@ void SMESHGUI_ScaleDlg::SelectionIntoArgument()
int aNbUnits = 0; int aNbUnits = 0;
if (myEditCurrentArgument == (QWidget*)LineEditElements) { if (myEditCurrentArgument == (QWidget*)LineEditElements)
{
myElementsId = ""; myElementsId = "";
myObjects.clear(); myObjects.clear();
myObjectsNames.clear(); myObjectsNames.clear();
myMeshes.clear(); myMeshes.clear();
for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) { for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() )
{
Handle(SALOME_InteractiveObject) IO = it.Value(); Handle(SALOME_InteractiveObject) IO = it.Value();
SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO ); SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO );
if ( aMesh->_is_nil() ) if ( aMesh->_is_nil() )
return; return;
myActor = SMESH::FindActorByObject( aMesh ); myActor = SMESH::FindActorByObject( aMesh );
if ( !myActor ) if ( !myActor )
myActor = SMESH::FindActorByEntry( IO->getEntry() ); myActor = SMESH::FindActorByEntry( IO->getEntry() );
if ( !myActor && !CheckBoxMesh->isChecked() ) // if ( !myActor && !CheckBoxMesh->isChecked() ) -- elems can be selected by Filter
return; // return;
if ( !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO )->_is_nil() ) { SMESH::SMESH_IDSource_var idSrc = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) { if ( _PTR(SObject) obj = SMESH::FindSObject( idSrc ))
_PTR(SObject) obj = aStudy->FindObjectID( qPrintable( QString( IO->getEntry() ) ) ); {
_PTR(GenericAttribute) anAttr; std::string name = obj->GetName();
if ( obj && obj->FindAttribute( anAttr, "AttributeName" ) ) { if ( !name.empty() )
_PTR(AttributeName) aNameAttr( anAttr ); {
myObjects << SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO ); myObjects << idSrc;
myObjectsNames << aNameAttr->Value().c_str(); myObjectsNames << name.c_str();
myMeshes << aMesh; myMeshes << aMesh;
}
} }
} }
} }
// MakeGroups is available if there are groups and "Copy" // MakeGroups is available if there are groups and "Copy"
int aNbGroups = 0; int aNbGroups = 0;
for ( int i = 0; i < myMeshes.count(); i++ ) for ( int i = 0; i < myMeshes.count(); i++ )
@ -789,50 +790,11 @@ void SMESHGUI_ScaleDlg::SelectionIntoArgument()
} }
if (CheckBoxMesh->isChecked()) { if (CheckBoxMesh->isChecked()) {
SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
if (myMeshes.isEmpty()) if (myMeshes.isEmpty())
return; return;
// get IDs from mesh SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
/* }
SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh(); else {
if (!aSMDSMesh)
return;
for (int i = aSMDSMesh->MinElementID(); i <= aSMDSMesh->MaxElementID(); i++) {
const SMDS_MeshElement * e = aSMDSMesh->FindElement(i);
if (e) {
myElementsId += QString(" %1").arg(i);
aNbUnits++;
}
}
} else if (!SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO)->_is_nil()) { //SUBMESH
// get submesh
SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO);
// get IDs from submesh
SMESH::long_array_var anElementsIds = new SMESH::long_array;
anElementsIds = aSubMesh->GetElementsId();
for (int i = 0; i < anElementsIds->length(); i++) {
myElementsId += QString(" %1").arg(anElementsIds[i]);
}
aNbUnits = anElementsIds->length();
} else { // GROUP
// get smesh group
SMESH::SMESH_GroupBase_var aGroup =
SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO);
if (aGroup->_is_nil())
return;
// get IDs from smesh group
SMESH::long_array_var anElementsIds = new SMESH::long_array;
anElementsIds = aGroup->GetListOfID();
for (int i = 0; i < anElementsIds->length(); i++) {
myElementsId += QString(" %1").arg(anElementsIds[i]);
}
aNbUnits = anElementsIds->length();
}
*/
} else {
aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aList.First(), aString); aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aList.First(), aString);
myElementsId = aString; myElementsId = aString;
if (aNbUnits < 1) if (aNbUnits < 1)
@ -840,15 +802,14 @@ void SMESHGUI_ScaleDlg::SelectionIntoArgument()
} }
myNbOkElements = true; myNbOkElements = true;
} else {
Handle(SALOME_InteractiveObject) IO = aList.First();
if ((SMESH::GetMeshByIO(IO))->_is_nil())
return;
SMESH_Actor* anActor = SMESH::FindActorByObject(SMESH::GetMeshByIO(IO)); }
else // set coordinates by a picked node
{
Handle(SALOME_InteractiveObject) IO = aList.First();
SMESH_Actor* anActor = SMESH::FindActorByEntry( IO->getEntry() );
if (!anActor) if (!anActor)
anActor = SMESH::FindActorByEntry(IO->getEntry());
if (!anActor && !CheckBoxMesh->isChecked())
return; return;
aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString); aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
@ -1105,14 +1066,14 @@ void SMESHGUI_ScaleDlg::keyPressEvent( QKeyEvent* e )
//================================================================================= //=================================================================================
void SMESHGUI_ScaleDlg::setFilters() void SMESHGUI_ScaleDlg::setFilters()
{ {
if(myMeshes.isEmpty()) { if ( myMeshes.isEmpty() ) {
SUIT_MessageBox::critical(this, SUIT_MessageBox::critical(this, tr("SMESH_ERROR"), tr("NO_MESH_SELECTED"));
tr("SMESH_ERROR"), return;
tr("NO_MESH_SELECTED"));
return;
} }
if ( !myFilterDlg ) if ( !myFilterDlg ) {
myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL ); myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
connect(myFilterDlg, SIGNAL(Accepted()), SLOT(onFilterAccepted()));
}
QList<int> types; QList<int> types;
if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE; if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE;
@ -1130,6 +1091,23 @@ void SMESHGUI_ScaleDlg::setFilters()
myFilterDlg->show(); myFilterDlg->show();
} }
//=======================================================================
// name : onFilterAccepted()
// Purpose : SLOT. Called when Filter dlg closed with OK button.
// Activate [Apply] if no Actor is available
//=======================================================================
void SMESHGUI_ScaleDlg::onFilterAccepted()
{
if ( myMeshes.length() > 0 && !buttonOk->isEnabled() )
{
myElementsId = LineEditElements->text();
QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
myNbOkElements = aListElementsId.count();
buttonOk->setEnabled ( myNbOkElements );
buttonApply->setEnabled( myNbOkElements );
}
}
//================================================================================= //=================================================================================
// function : isValid // function : isValid
// purpose : // purpose :

View File

@ -131,6 +131,7 @@ private:
protected slots: protected slots:
virtual void onDisplaySimulation( bool ); virtual void onDisplaySimulation( bool );
virtual void reject(); virtual void reject();
void onFilterAccepted();
private slots: private slots:
void ConstructorsClicked( int ); void ConstructorsClicked( int );

View File

@ -765,44 +765,44 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument()
int aNbUnits = 0; int aNbUnits = 0;
if (myEditCurrentArgument == (QWidget*)LineEditElements) { if (myEditCurrentArgument == (QWidget*)LineEditElements)
{
myElementsId = ""; myElementsId = "";
myObjects.clear(); myObjects.clear();
myObjectsNames.clear(); myObjectsNames.clear();
myMeshes.clear(); myMeshes.clear();
for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) { for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() )
{
Handle(SALOME_InteractiveObject) IO = it.Value(); Handle(SALOME_InteractiveObject) IO = it.Value();
SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO ); SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO );
if( aMesh->_is_nil() ) if ( aMesh->_is_nil() )
return; continue;
myActor = SMESH::FindActorByObject( aMesh ); myActor = SMESH::FindActorByObject( aMesh );
if ( !myActor ) if ( !myActor )
myActor = SMESH::FindActorByEntry( IO->getEntry() ); myActor = SMESH::FindActorByEntry( IO->getEntry() );
if ( !myActor && !CheckBoxMesh->isChecked() ) // if ( !myActor && !CheckBoxMesh->isChecked() ) -- elems can be selected by Filter
return; // return;
if ( !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO )->_is_nil() ) { SMESH::SMESH_IDSource_var idSrc = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) { if ( _PTR(SObject) obj = SMESH::FindSObject( idSrc ))
_PTR(SObject) obj = aStudy->FindObjectID( qPrintable( QString( IO->getEntry() ) ) ); {
_PTR(GenericAttribute) anAttr; std::string name = obj->GetName();
if ( obj && obj->FindAttribute( anAttr, "AttributeName" ) ) { if ( !name.empty() )
_PTR(AttributeName) aNameAttr( anAttr ); {
myObjects << SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO ); myObjects << idSrc;
myObjectsNames << aNameAttr->Value().c_str(); myObjectsNames << name.c_str();
myMeshes << aMesh; myMeshes << aMesh;
}
} }
} }
} }
// MakeGroups is available if there are groups and "Copy" // MakeGroups is available if there are groups and "Copy"
int aNbGroups = 0; int aNbGroups = 0;
for ( int i = 0; i < myMeshes.count(); i++ ) for ( int i = 0; i < myMeshes.count(); i++ )
aNbGroups += myMeshes[i]->NbGroups(); aNbGroups += myMeshes[i]->NbGroups();
if ( aNbGroups == 0 ) { if ( aNbGroups == 0 ) {
MakeGroupsCheck->setChecked(false); MakeGroupsCheck->setChecked(false);
MakeGroupsCheck->setEnabled(false); MakeGroupsCheck->setEnabled(false);
@ -810,31 +810,26 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument()
else if ( ActionGroup->checkedId() != MOVE_ELEMS_BUTTON ) { else if ( ActionGroup->checkedId() != MOVE_ELEMS_BUTTON ) {
MakeGroupsCheck->setEnabled(true); MakeGroupsCheck->setEnabled(true);
} }
if (CheckBoxMesh->isChecked()) {
SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
if (CheckBoxMesh->isChecked()) {
if ( myObjects.isEmpty() ) if ( myObjects.isEmpty() )
return; return;
// get IDs from mesh SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
// get IDs from submesh }
// get IDs from smesh group else {
} else {
aNbUnits = SMESH::GetNameOfSelectedElements( mySelector, aList.First(), aString); aNbUnits = SMESH::GetNameOfSelectedElements( mySelector, aList.First(), aString);
myElementsId = aString; myElementsId = aString;
if (aNbUnits < 1) if (aNbUnits < 1)
return; return;
} }
myNbOkElements = true; myNbOkElements = true;
} else { }
else // set coordinates by a picked node
{
Handle(SALOME_InteractiveObject) IO = aList.First(); Handle(SALOME_InteractiveObject) IO = aList.First();
if ((SMESH::GetMeshByIO(IO))->_is_nil())
return;
SMESH_Actor* anActor = SMESH::FindActorByObject(SMESH::GetMeshByIO(IO)); SMESH_Actor* anActor = SMESH::FindActorByEntry( IO->getEntry() );
if (!anActor) if (!anActor)
anActor = SMESH::FindActorByEntry(IO->getEntry());
if (!anActor && !CheckBoxMesh->isChecked())
return; return;
aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString); aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
@ -1126,14 +1121,14 @@ void SMESHGUI_SymmetryDlg::keyPressEvent( QKeyEvent* e )
//================================================================================= //=================================================================================
void SMESHGUI_SymmetryDlg::setFilters() void SMESHGUI_SymmetryDlg::setFilters()
{ {
if(myMeshes.isEmpty()) { if ( myMeshes.isEmpty() ) {
SUIT_MessageBox::critical(this, SUIT_MessageBox::critical(this, tr("SMESH_ERROR"), tr("NO_MESH_SELECTED"));
tr("SMESH_ERROR"), return;
tr("NO_MESH_SELECTED"));
return;
} }
if ( !myFilterDlg ) if ( !myFilterDlg ) {
myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL ); myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
connect(myFilterDlg, SIGNAL(Accepted()), SLOT(onFilterAccepted()));
}
QList<int> types; QList<int> types;
if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE; if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE;
@ -1151,6 +1146,23 @@ void SMESHGUI_SymmetryDlg::setFilters()
myFilterDlg->show(); myFilterDlg->show();
} }
//=======================================================================
// name : onFilterAccepted()
// Purpose : SLOT. Called when Filter dlg closed with OK button.
// Activate [Apply] if no Actor is available
//=======================================================================
void SMESHGUI_SymmetryDlg::onFilterAccepted()
{
if ( myMeshes.length() > 0 && !buttonOk->isEnabled() )
{
myElementsId = LineEditElements->text();
QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
myNbOkElements = aListElementsId.count();
buttonOk->setEnabled( myNbOkElements );
buttonApply->setEnabled( myNbOkElements );
}
}
//================================================================================= //=================================================================================
// function : isValid // function : isValid
// purpose : // purpose :

View File

@ -139,6 +139,7 @@ private:
protected slots: protected slots:
virtual void onDisplaySimulation( bool ); virtual void onDisplaySimulation( bool );
virtual void reject(); virtual void reject();
void onFilterAccepted();
private slots: private slots:
void ConstructorsClicked( int ); void ConstructorsClicked( int );

View File

@ -772,13 +772,15 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
return; return;
int aNbUnits = 0; int aNbUnits = 0;
if (myEditCurrentArgument == (QWidget*)LineEditElements) { if (myEditCurrentArgument == (QWidget*)LineEditElements)
{
myElementsId = ""; myElementsId = "";
myObjects.clear(); myObjects.clear();
myObjectsNames.clear(); myObjectsNames.clear();
myMeshes.clear(); myMeshes.clear();
for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) { for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() )
{
Handle(SALOME_InteractiveObject) IO = it.Value(); Handle(SALOME_InteractiveObject) IO = it.Value();
SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO ); SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO );
if ( aMesh->_is_nil() ) if ( aMesh->_is_nil() )
@ -788,25 +790,24 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
if ( !anActor ) if ( !anActor )
anActor = SMESH::FindActorByEntry( IO->getEntry() ); anActor = SMESH::FindActorByEntry( IO->getEntry() );
if ( !anActor && !CheckBoxMesh->isChecked() ) // if ( !anActor && !CheckBoxMesh->isChecked() ) -- elems can be selected by Filter
return; // return;
if ( !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO )->_is_nil() ) { SMESH::SMESH_IDSource_var idSrc = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) { if ( _PTR(SObject) obj = SMESH::FindSObject( idSrc ))
_PTR(SObject) obj = aStudy->FindObjectID( qPrintable( QString( IO->getEntry() ) ) ); {
_PTR(GenericAttribute) anAttr; std::string name = obj->GetName();
if ( obj && obj->FindAttribute( anAttr, "AttributeName" ) ) { if ( !name.empty() )
_PTR(AttributeName) aNameAttr( anAttr ); {
myObjects << SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO ); myObjects << idSrc;
myObjectsNames << aNameAttr->Value().c_str(); myObjectsNames << name.c_str();
myMeshes << aMesh; myMeshes << aMesh;
}
} }
} }
if ( anActor )
myActor = anActor; myActor = anActor;
} }
// MakeGroups is available if there are groups and "Copy" // MakeGroups is available if there are groups and "Copy"
int aNbGroups = 0; int aNbGroups = 0;
for ( int i = 0; i < myMeshes.count(); i++ ) for ( int i = 0; i < myMeshes.count(); i++ )
@ -821,10 +822,11 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
} }
if (CheckBoxMesh->isChecked()) { if (CheckBoxMesh->isChecked()) {
SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
if (myMeshes.isEmpty()) if (myMeshes.isEmpty())
return; return;
} else { SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
}
else {
aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aList.First(), aString); aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aList.First(), aString);
myElementsId = aString; myElementsId = aString;
if (aNbUnits < 1) if (aNbUnits < 1)
@ -832,16 +834,15 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
} }
myNbOkElements = true; myNbOkElements = true;
} else { }
else // set coordinates by a picked node
{
Handle(SALOME_InteractiveObject) IO = aList.First(); Handle(SALOME_InteractiveObject) IO = aList.First();
if ((SMESH::GetMeshByIO(IO))->_is_nil())
SMESH_Actor* anActor = SMESH::FindActorByEntry( IO->getEntry() );
if (!anActor)
return; return;
SMESH_Actor* anActor = SMESH::FindActorByObject(SMESH::GetMeshByIO(IO));
if (!anActor)
anActor = SMESH::FindActorByEntry(IO->getEntry());
if (!anActor && !CheckBoxMesh->isChecked())
return;
aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString); aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
if (aNbUnits != 1) if (aNbUnits != 1)
return; return;
@ -1099,14 +1100,14 @@ void SMESHGUI_TranslationDlg::keyPressEvent( QKeyEvent* e )
//================================================================================= //=================================================================================
void SMESHGUI_TranslationDlg::setFilters() void SMESHGUI_TranslationDlg::setFilters()
{ {
if(myMeshes.isEmpty()) { if ( myMeshes.isEmpty() ) {
SUIT_MessageBox::critical(this, SUIT_MessageBox::critical(this, tr("SMESH_ERROR"), tr("NO_MESH_SELECTED"));
tr("SMESH_ERROR"), return;
tr("NO_MESH_SELECTED"));
return;
} }
if ( !myFilterDlg ) if ( !myFilterDlg ) {
myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL ); myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
connect(myFilterDlg, SIGNAL(Accepted()), SLOT(onFilterAccepted()));
}
QList<int> types; QList<int> types;
if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE; if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE;
@ -1124,6 +1125,23 @@ void SMESHGUI_TranslationDlg::setFilters()
myFilterDlg->show(); myFilterDlg->show();
} }
//=======================================================================
// name : onFilterAccepted()
// Purpose : SLOT. Called when Filter dlg closed with OK button.
// Activate [Apply] if no Actor is available
//=======================================================================
void SMESHGUI_TranslationDlg::onFilterAccepted()
{
if ( myMeshes.length() > 0 && !buttonOk->isEnabled() )
{
myElementsId = LineEditElements->text();
QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
myNbOkElements = aListElementsId.count();
buttonOk->setEnabled( myNbOkElements );
buttonApply->setEnabled( myNbOkElements );
}
}
//================================================================================= //=================================================================================
// function : isValid // function : isValid
// purpose : // purpose :

View File

@ -133,6 +133,7 @@ private:
protected slots: protected slots:
virtual void onDisplaySimulation( bool ); virtual void onDisplaySimulation( bool );
virtual void reject(); virtual void reject();
void onFilterAccepted();
private slots: private slots:
void ConstructorsClicked( int ); void ConstructorsClicked( int );