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,13 +706,15 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
int aNbUnits = 0;
if (myEditCurrentArgument == (QWidget*)LineEditElements) {
if (myEditCurrentArgument == (QWidget*)LineEditElements)
{
myElementsId = "";
myObjects.clear();
myObjectsNames.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();
SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO );
if ( aMesh->_is_nil() )
@ -721,22 +723,21 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
myActor = SMESH::FindActorByObject( aMesh );
if ( !myActor )
myActor = SMESH::FindActorByEntry( IO->getEntry() );
if ( !myActor && !CheckBoxMesh->isChecked() )
return;
// if ( !myActor && !CheckBoxMesh->isChecked() ) -- elems can be selected by Filter
// return;
if ( !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO )->_is_nil() ) {
if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) {
_PTR(SObject) obj = aStudy->FindObjectID( qPrintable( QString( IO->getEntry() ) ) );
_PTR(GenericAttribute) anAttr;
if ( obj && obj->FindAttribute( anAttr, "AttributeName" ) ) {
_PTR(AttributeName) aNameAttr( anAttr );
myObjects << SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
myObjectsNames << aNameAttr->Value().c_str();
SMESH::SMESH_IDSource_var idSrc = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
if ( _PTR(SObject) obj = SMESH::FindSObject( idSrc ))
{
std::string name = obj->GetName();
if ( !name.empty() )
{
myObjects << idSrc;
myObjectsNames << name.c_str();
myMeshes << aMesh;
}
}
}
}
// MakeGroups is available if there are groups and "Copy"
int aNbGroups = 0;
@ -749,11 +750,11 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
else if ( ActionGroup->checkedId() != MOVE_ELEMS_BUTTON ) {
MakeGroupsCheck->setEnabled(true);
}
if (CheckBoxMesh->isChecked()) {
SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
if (CheckBoxMesh->isChecked()) {
if ( myMeshes.isEmpty() )
return;
SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
}
else {
aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aList.First(), aString);
@ -764,15 +765,13 @@ void SMESHGUI_RotationDlg::SelectionIntoArgument()
myNbOkElements = true;
} else {
}
else // set coordinates by picked nodes
{
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)
anActor = SMESH::FindActorByEntry(IO->getEntry());
if (!anActor && !CheckBoxMesh->isChecked())
return;
aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
@ -1062,8 +1061,10 @@ void SMESHGUI_RotationDlg::setFilters()
tr("NO_MESH_SELECTED"));
return;
}
if ( !myFilterDlg )
if ( !myFilterDlg ) {
myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
connect(myFilterDlg, SIGNAL(Accepted()), SLOT(onFilterAccepted()));
}
QList<int> types;
if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE;
@ -1081,6 +1082,23 @@ void SMESHGUI_RotationDlg::setFilters()
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
// purpose :

View File

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

View File

@ -743,13 +743,15 @@ void SMESHGUI_ScaleDlg::SelectionIntoArgument()
int aNbUnits = 0;
if (myEditCurrentArgument == (QWidget*)LineEditElements) {
if (myEditCurrentArgument == (QWidget*)LineEditElements)
{
myElementsId = "";
myObjects.clear();
myObjectsNames.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();
SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO );
if ( aMesh->_is_nil() )
@ -758,22 +760,21 @@ void SMESHGUI_ScaleDlg::SelectionIntoArgument()
myActor = SMESH::FindActorByObject( aMesh );
if ( !myActor )
myActor = SMESH::FindActorByEntry( IO->getEntry() );
if ( !myActor && !CheckBoxMesh->isChecked() )
return;
// if ( !myActor && !CheckBoxMesh->isChecked() ) -- elems can be selected by Filter
// return;
if ( !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO )->_is_nil() ) {
if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) {
_PTR(SObject) obj = aStudy->FindObjectID( qPrintable( QString( IO->getEntry() ) ) );
_PTR(GenericAttribute) anAttr;
if ( obj && obj->FindAttribute( anAttr, "AttributeName" ) ) {
_PTR(AttributeName) aNameAttr( anAttr );
myObjects << SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
myObjectsNames << aNameAttr->Value().c_str();
SMESH::SMESH_IDSource_var idSrc = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
if ( _PTR(SObject) obj = SMESH::FindSObject( idSrc ))
{
std::string name = obj->GetName();
if ( !name.empty() )
{
myObjects << idSrc;
myObjectsNames << name.c_str();
myMeshes << aMesh;
}
}
}
}
// MakeGroups is available if there are groups and "Copy"
int aNbGroups = 0;
@ -789,50 +790,11 @@ void SMESHGUI_ScaleDlg::SelectionIntoArgument()
}
if (CheckBoxMesh->isChecked()) {
SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
if (myMeshes.isEmpty())
return;
// get IDs from mesh
/*
SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh();
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++;
SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
}
}
} 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 {
else {
aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aList.First(), aString);
myElementsId = aString;
if (aNbUnits < 1)
@ -840,15 +802,14 @@ void SMESHGUI_ScaleDlg::SelectionIntoArgument()
}
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)
anActor = SMESH::FindActorByEntry(IO->getEntry());
if (!anActor && !CheckBoxMesh->isChecked())
return;
aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
@ -1106,13 +1067,13 @@ void SMESHGUI_ScaleDlg::keyPressEvent( QKeyEvent* e )
void SMESHGUI_ScaleDlg::setFilters()
{
if ( myMeshes.isEmpty() ) {
SUIT_MessageBox::critical(this,
tr("SMESH_ERROR"),
tr("NO_MESH_SELECTED"));
SUIT_MessageBox::critical(this, tr("SMESH_ERROR"), tr("NO_MESH_SELECTED"));
return;
}
if ( !myFilterDlg )
if ( !myFilterDlg ) {
myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
connect(myFilterDlg, SIGNAL(Accepted()), SLOT(onFilterAccepted()));
}
QList<int> types;
if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE;
@ -1130,6 +1091,23 @@ void SMESHGUI_ScaleDlg::setFilters()
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
// purpose :

View File

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

View File

@ -765,38 +765,38 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument()
int aNbUnits = 0;
if (myEditCurrentArgument == (QWidget*)LineEditElements) {
if (myEditCurrentArgument == (QWidget*)LineEditElements)
{
myElementsId = "";
myObjects.clear();
myObjectsNames.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();
SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO );
if ( aMesh->_is_nil() )
return;
continue;
myActor = SMESH::FindActorByObject( aMesh );
if ( !myActor )
myActor = SMESH::FindActorByEntry( IO->getEntry() );
if ( !myActor && !CheckBoxMesh->isChecked() )
return;
// if ( !myActor && !CheckBoxMesh->isChecked() ) -- elems can be selected by Filter
// return;
if ( !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO )->_is_nil() ) {
if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) {
_PTR(SObject) obj = aStudy->FindObjectID( qPrintable( QString( IO->getEntry() ) ) );
_PTR(GenericAttribute) anAttr;
if ( obj && obj->FindAttribute( anAttr, "AttributeName" ) ) {
_PTR(AttributeName) aNameAttr( anAttr );
myObjects << SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
myObjectsNames << aNameAttr->Value().c_str();
SMESH::SMESH_IDSource_var idSrc = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
if ( _PTR(SObject) obj = SMESH::FindSObject( idSrc ))
{
std::string name = obj->GetName();
if ( !name.empty() )
{
myObjects << idSrc;
myObjectsNames << name.c_str();
myMeshes << aMesh;
}
}
}
}
// MakeGroups is available if there are groups and "Copy"
int aNbGroups = 0;
@ -810,31 +810,26 @@ void SMESHGUI_SymmetryDlg::SelectionIntoArgument()
else if ( ActionGroup->checkedId() != MOVE_ELEMS_BUTTON ) {
MakeGroupsCheck->setEnabled(true);
}
if (CheckBoxMesh->isChecked()) {
SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
if (CheckBoxMesh->isChecked()) {
if ( myObjects.isEmpty() )
return;
// get IDs from mesh
// get IDs from submesh
// get IDs from smesh group
} else {
SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
}
else {
aNbUnits = SMESH::GetNameOfSelectedElements( mySelector, aList.First(), aString);
myElementsId = aString;
if (aNbUnits < 1)
return;
}
myNbOkElements = true;
} else {
}
else // set coordinates by a picked node
{
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)
anActor = SMESH::FindActorByEntry(IO->getEntry());
if (!anActor && !CheckBoxMesh->isChecked())
return;
aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
@ -1127,13 +1122,13 @@ void SMESHGUI_SymmetryDlg::keyPressEvent( QKeyEvent* e )
void SMESHGUI_SymmetryDlg::setFilters()
{
if ( myMeshes.isEmpty() ) {
SUIT_MessageBox::critical(this,
tr("SMESH_ERROR"),
tr("NO_MESH_SELECTED"));
SUIT_MessageBox::critical(this, tr("SMESH_ERROR"), tr("NO_MESH_SELECTED"));
return;
}
if ( !myFilterDlg )
if ( !myFilterDlg ) {
myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
connect(myFilterDlg, SIGNAL(Accepted()), SLOT(onFilterAccepted()));
}
QList<int> types;
if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE;
@ -1151,6 +1146,23 @@ void SMESHGUI_SymmetryDlg::setFilters()
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
// purpose :

View File

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

View File

@ -772,13 +772,15 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
return;
int aNbUnits = 0;
if (myEditCurrentArgument == (QWidget*)LineEditElements) {
if (myEditCurrentArgument == (QWidget*)LineEditElements)
{
myElementsId = "";
myObjects.clear();
myObjectsNames.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();
SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( IO );
if ( aMesh->_is_nil() )
@ -788,22 +790,21 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
if ( !anActor )
anActor = SMESH::FindActorByEntry( IO->getEntry() );
if ( !anActor && !CheckBoxMesh->isChecked() )
return;
// if ( !anActor && !CheckBoxMesh->isChecked() ) -- elems can be selected by Filter
// return;
if ( !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO )->_is_nil() ) {
if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) {
_PTR(SObject) obj = aStudy->FindObjectID( qPrintable( QString( IO->getEntry() ) ) );
_PTR(GenericAttribute) anAttr;
if ( obj && obj->FindAttribute( anAttr, "AttributeName" ) ) {
_PTR(AttributeName) aNameAttr( anAttr );
myObjects << SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
myObjectsNames << aNameAttr->Value().c_str();
SMESH::SMESH_IDSource_var idSrc = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
if ( _PTR(SObject) obj = SMESH::FindSObject( idSrc ))
{
std::string name = obj->GetName();
if ( !name.empty() )
{
myObjects << idSrc;
myObjectsNames << name.c_str();
myMeshes << aMesh;
}
}
}
if ( anActor )
myActor = anActor;
}
@ -821,10 +822,11 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
}
if (CheckBoxMesh->isChecked()) {
SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
if (myMeshes.isEmpty())
return;
} else {
SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
}
else {
aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aList.First(), aString);
myElementsId = aString;
if (aNbUnits < 1)
@ -832,16 +834,15 @@ void SMESHGUI_TranslationDlg::SelectionIntoArgument()
}
myNbOkElements = true;
} else {
}
else // set coordinates by a picked node
{
Handle(SALOME_InteractiveObject) IO = aList.First();
if ((SMESH::GetMeshByIO(IO))->_is_nil())
SMESH_Actor* anActor = SMESH::FindActorByEntry( IO->getEntry() );
if (!anActor)
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);
if (aNbUnits != 1)
return;
@ -1100,13 +1101,13 @@ void SMESHGUI_TranslationDlg::keyPressEvent( QKeyEvent* e )
void SMESHGUI_TranslationDlg::setFilters()
{
if ( myMeshes.isEmpty() ) {
SUIT_MessageBox::critical(this,
tr("SMESH_ERROR"),
tr("NO_MESH_SELECTED"));
SUIT_MessageBox::critical(this, tr("SMESH_ERROR"), tr("NO_MESH_SELECTED"));
return;
}
if ( !myFilterDlg )
if ( !myFilterDlg ) {
myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
connect(myFilterDlg, SIGNAL(Accepted()), SLOT(onFilterAccepted()));
}
QList<int> types;
if ( myMeshes[0]->NbEdges() ) types << SMESH::EDGE;
@ -1124,6 +1125,23 @@ void SMESHGUI_TranslationDlg::setFilters()
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
// purpose :

View File

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