X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_ExtrusionDlg.cxx;h=b2ce8081247929be459920d71c0eb749f99a6e10;hp=e1fe9721e5d6b703184a5e5a2369692a8935c714;hb=bbd637f1323572d6977c72f404142bc5bfb70787;hpb=2e540667d898905b64fd791a81a37cd6e34bc85f diff --git a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx index e1fe9721e..b2ce80812 100644 --- a/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx @@ -44,6 +44,7 @@ #include #include #include +#include #include #include @@ -51,6 +52,8 @@ #include #include +#include + // OCCT includes #include #include @@ -64,7 +67,6 @@ #include #include #include -#include #include #include #include @@ -85,7 +87,8 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule) : QDialog( SMESH::GetDesktop( theModule ) ), mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) + mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ), + mySelectedObject(SMESH::SMESH_IDSource::_nil()) { QPixmap image0 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_EDGE"))); QPixmap image1 (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_DLG_TRIANGLE"))); @@ -124,7 +127,7 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule) GroupButtonsLayout->setSpacing(SPACING); GroupButtonsLayout->setMargin(MARGIN); - buttonOk = new QPushButton(tr("SMESH_BUT_OK"), GroupButtons); + buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), GroupButtons); buttonOk->setAutoDefault(true); buttonOk->setDefault(true); buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons); @@ -148,6 +151,8 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule) GroupArgumentsLayout->setSpacing(SPACING); GroupArgumentsLayout->setMargin(MARGIN); + myIdValidator = new SMESHGUI_IdValidator(this); + // Controls for elements selection TextLabelElements = new QLabel(tr("SMESH_ID_ELEMENTS"), GroupArguments); @@ -155,7 +160,7 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule) SelectElementsButton->setIcon(image2); LineEditElements = new QLineEdit(GroupArguments); - LineEditElements->setValidator(new SMESHGUI_IdValidator(this)); + LineEditElements->setValidator(myIdValidator); // Control for the whole mesh selection CheckBoxMesh = new QCheckBox(tr("SMESH_SELECT_WHOLE_MESH"), GroupArguments); @@ -174,7 +179,7 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule) // Controls for nb. steps defining TextLabelNbSteps = new QLabel(tr("SMESH_NUMBEROFSTEPS"), GroupArguments); - SpinBox_NbSteps = new QSpinBox(GroupArguments); + SpinBox_NbSteps = new SalomeApp_IntSpinBox(GroupArguments); // CheckBox for groups generation MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments); @@ -356,6 +361,9 @@ bool SMESHGUI_ExtrusionDlg::ClickOnApply() if (mySMESHGUI->isActiveStudyLocked()) return false; + if (!isValid()) + return false; + if (myNbOkElements) { SMESH::DirStruct aVector; @@ -365,17 +373,42 @@ bool SMESHGUI_ExtrusionDlg::ClickOnApply() long aNbSteps = (long)SpinBox_NbSteps->value(); + QStringList aParameters; + aParameters << SpinBox_Dx->text(); + aParameters << SpinBox_Dy->text(); + aParameters << SpinBox_Dz->text(); + aParameters << SpinBox_NbSteps->text(); + try { + SUIT_OverrideCursor aWaitCursor; SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::WaitCursor); - if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) - SMESH::ListOfGroups_var groups = - aMeshEditor->ExtrusionSweepMakeGroups(myElementsId.inout(), aVector, aNbSteps); - else - aMeshEditor->ExtrusionSweep(myElementsId.inout(), aVector, aNbSteps); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) { + if( CheckBoxMesh->isChecked() ) { + if( GetConstructorId() == 0 ) + SMESH::ListOfGroups_var groups = + aMeshEditor->ExtrusionSweepObject1DMakeGroups(mySelectedObject, aVector, aNbSteps); + else + SMESH::ListOfGroups_var groups = + aMeshEditor->ExtrusionSweepObject2DMakeGroups(mySelectedObject, aVector, aNbSteps); + } + else + SMESH::ListOfGroups_var groups = + aMeshEditor->ExtrusionSweepMakeGroups(myElementsId.inout(), aVector, aNbSteps); + } + else { + if( CheckBoxMesh->isChecked() ) { + if( GetConstructorId() == 0 ) + aMeshEditor->ExtrusionSweepObject1D(mySelectedObject, aVector, aNbSteps); + else + aMeshEditor->ExtrusionSweepObject2D(mySelectedObject, aVector, aNbSteps); + } + else + aMeshEditor->ExtrusionSweep(myElementsId.inout(), aVector, aNbSteps); + } + + myMesh->SetParameters( SMESHGUI::JoinObjectParameters(aParameters) ); - QApplication::restoreOverrideCursor(); } catch (...) { } @@ -384,6 +417,7 @@ bool SMESHGUI_ExtrusionDlg::ClickOnApply() mySMESHGUI->updateObjBrowser(true); // new groups may appear Init(false); ConstructorsClicked(GetConstructorId()); + mySelectedObject = SMESH::SMESH_IDSource::_nil(); SelectionIntoArgument(); } return true; @@ -547,41 +581,21 @@ void SMESHGUI_ExtrusionDlg::SelectionIntoArgument() } if (CheckBoxMesh->isChecked()) { - SMESH::ElementType neededType = GetConstructorId() ? SMESH::FACE : SMESH::EDGE; - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - SMESH::SMESH_Mesh_var mesh = SMESH::IObjectToInterface(IO); - - if (!mesh->_is_nil()) { //MESH - // get elements from mesh - myElementsId = mesh->GetElementsByType(neededType); - aNbElements = myElementsId->length(); - } else { - SMESH::SMESH_subMesh_var aSubMesh = - SMESH::IObjectToInterface(IO); - - if (!aSubMesh->_is_nil()) { //SUBMESH - // get IDs from submesh - myElementsId = aSubMesh->GetElementsByType(neededType); - aNbElements = myElementsId->length(); - } else { - SMESH::SMESH_GroupBase_var aGroup = - SMESH::IObjectToInterface(IO); - - if (!aGroup->_is_nil() && aGroup->GetType() == neededType) { // GROUP - // get IDs from smesh group - myElementsId = aGroup->GetListOfID(); - aNbElements = myElementsId->length(); - } - } - } + if (!SMESH::IObjectToInterface(IO)->_is_nil()) + mySelectedObject = SMESH::IObjectToInterface(IO); + else + return; } else { // get indices of selcted elements TColStd_IndexedMapOfInteger aMapIndex; mySelector->GetIndex(IO,aMapIndex); aNbElements = aMapIndex.Extent(); + if (aNbElements < 1) + return; + myElementsId = new SMESH::long_array; myElementsId->length( aNbElements ); aString = ""; @@ -589,9 +603,6 @@ void SMESHGUI_ExtrusionDlg::SelectionIntoArgument() aString += QString(" %1").arg( myElementsId[ i ] = aMapIndex( i+1 ) ); } - if (aNbElements < 1) - return; - myNbOkElements = true; } @@ -707,6 +718,7 @@ void SMESHGUI_ExtrusionDlg::onSelectMesh (bool toSelectMesh) aViewWindow->SetSelectionMode(ActorSelection); mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); LineEditElements->setReadOnly(true); + LineEditElements->setValidator(0); } else { int aConstructorId = GetConstructorId(); if (aConstructorId == 0) @@ -721,6 +733,7 @@ void SMESHGUI_ExtrusionDlg::onSelectMesh (bool toSelectMesh) } LineEditElements->setReadOnly(false); + LineEditElements->setValidator(myIdValidator); onTextChange(LineEditElements->text()); } @@ -751,3 +764,26 @@ void SMESHGUI_ExtrusionDlg::keyPressEvent( QKeyEvent* e ) ClickOnHelp(); } } + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool SMESHGUI_ExtrusionDlg::isValid() +{ + QString msg; + bool ok = true; + ok = SpinBox_Dx->isValid( msg, true ) && ok; + ok = SpinBox_Dy->isValid( msg, true ) && ok; + ok = SpinBox_Dz->isValid( msg, true ) && ok; + ok = SpinBox_NbSteps->isValid( msg, true ) && ok; + + if( !ok ) { + QString str( tr( "SMESH_INCORRECT_INPUT" ) ); + if ( !msg.isEmpty() ) + str += "\n" + msg; + SUIT_MessageBox::critical( this, tr( "SMESH_ERROR" ), str ); + return false; + } + return true; +}