X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_RevolutionDlg.cxx;h=355e01ec3f5d695d38dabb8b13b1b8325d190a31;hb=586cf75e22889d19a66bc5c73b4e5e90d626c6d1;hp=15119eca4fff895c1e3e26bb76da3807abbafe21;hpb=3443420a18b6f6fee4fe826191acd7512772e477;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx b/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx index 15119eca4..355e01ec3 100644 --- a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx @@ -50,6 +50,7 @@ #include #include #include +#include #include #include @@ -71,7 +72,6 @@ #include #include #include -#include #include #include @@ -92,7 +92,8 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule ) mySMESHGUI( theModule ), mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ), myVectorDefinition(NONE_SELECT), - myFilterDlg( 0 ) + myFilterDlg( 0 ), + mySelectedObject(SMESH::SMESH_IDSource::_nil()) { mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI )); @@ -214,7 +215,7 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule ) SpinBox_Angle = new SMESHGUI_SpinBox(GroupAngleBox); TextLabelNbSteps = new QLabel(tr("SMESH_NUMBEROFSTEPS"), GroupAngleBox); - SpinBox_NbSteps = new QSpinBox(GroupAngleBox); + SpinBox_NbSteps = new SalomeApp_IntSpinBox(GroupAngleBox); GroupAngleLayout->addWidget(RadioButton3, 0, 0); GroupAngleLayout->addWidget(RadioButton4, 0, 1); @@ -350,6 +351,8 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule ) connect(SpinBox_Tolerance, SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation())); connect(CheckBoxPreview, SIGNAL(toggled(bool)), this, SLOT(onDisplaySimulation(bool))); + connect(SpinBox_Angle, SIGNAL(textChanged(const QString&)), this, SLOT(onAngleTextChange(const QString&))); + ConstructorsClicked(0); SelectionIntoArgument(); } @@ -462,10 +465,13 @@ void SMESHGUI_RevolutionDlg::ConstructorsClicked (int constructorId) // function : ClickOnApply() // purpose : //================================================================================= -void SMESHGUI_RevolutionDlg::ClickOnApply() +bool SMESHGUI_RevolutionDlg::ClickOnApply() { if (mySMESHGUI->isActiveStudyLocked()) - return; + return false; + + if (!isValid()) + return false; if (myNbOkElements && IsAxisOk()) { QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts); @@ -492,16 +498,49 @@ void SMESHGUI_RevolutionDlg::ClickOnApply() if ( GroupAngle->checkedId() == 1 ) anAngle = anAngle/aNbSteps; + QStringList aParameters; + aParameters << SpinBox_X->text(); + aParameters << SpinBox_Y->text(); + aParameters << SpinBox_Z->text(); + aParameters << SpinBox_DX->text(); + aParameters << SpinBox_DY->text(); + aParameters << SpinBox_DZ->text(); + aParameters << SpinBox_Angle->text(); + aParameters << SpinBox_NbSteps->text(); + aParameters << SpinBox_Tolerance->text(); + try { SUIT_OverrideCursor aWaitCursor; SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) - SMESH::ListOfGroups_var groups = - aMeshEditor->RotationSweepMakeGroups(anElementsId.inout(), anAxis, - anAngle, aNbSteps, aTolerance); - else - aMeshEditor->RotationSweep(anElementsId.inout(), anAxis, anAngle, aNbSteps, aTolerance); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) { + if( CheckBoxMesh->isChecked() ) { + if( GetConstructorId() == 0 ) + SMESH::ListOfGroups_var groups = + aMeshEditor->RotationSweepObject1DMakeGroups(mySelectedObject, anAxis, + anAngle, aNbSteps, aTolerance); + else + SMESH::ListOfGroups_var groups = + aMeshEditor->RotationSweepObject2DMakeGroups(mySelectedObject, anAxis, + anAngle, aNbSteps, aTolerance); + } + else + SMESH::ListOfGroups_var groups = + aMeshEditor->RotationSweepMakeGroups(anElementsId.inout(), anAxis, + anAngle, aNbSteps, aTolerance); + } + else { + if( CheckBoxMesh->isChecked() ) { + if( GetConstructorId() == 0 ) + aMeshEditor->RotationSweepObject1D(mySelectedObject, anAxis, anAngle, aNbSteps, aTolerance); + else + aMeshEditor->RotationSweepObject2D(mySelectedObject, anAxis, anAngle, aNbSteps, aTolerance); + } + else + aMeshEditor->RotationSweep(anElementsId.inout(), anAxis, anAngle, aNbSteps, aTolerance); + } + + myMesh->SetParameters( SMESHGUI::JoinObjectParameters(aParameters) ); } catch (...) { } @@ -510,8 +549,11 @@ void SMESHGUI_RevolutionDlg::ClickOnApply() mySMESHGUI->updateObjBrowser(true); // new groups may appear Init(false); ConstructorsClicked(GetConstructorId()); + mySelectedObject = SMESH::SMESH_IDSource::_nil(); SelectionIntoArgument(); } + + return true; } //================================================================================= @@ -520,8 +562,8 @@ void SMESHGUI_RevolutionDlg::ClickOnApply() //================================================================================= void SMESHGUI_RevolutionDlg::ClickOnOk() { - ClickOnApply(); - ClickOnCancel(); + if( ClickOnApply() ) + ClickOnCancel(); } //================================================================================= @@ -567,6 +609,19 @@ void SMESHGUI_RevolutionDlg::ClickOnHelp() } } +//======================================================================= +// function : onAngleTextChange() +// purpose : +//======================================================================= +void SMESHGUI_RevolutionDlg::onAngleTextChange (const QString& theNewText) +{ + bool isNumber; + SpinBox_Angle->text().toDouble( &isNumber ); + if( !isNumber ) + RadioButton3->setChecked( true ); + RadioButton4->setEnabled( isNumber ); +} + //======================================================================= // function : onTextChange() // purpose : @@ -677,77 +732,18 @@ void SMESHGUI_RevolutionDlg::SelectionIntoArgument() } if (CheckBoxMesh->isChecked()) { - int aConstructorId = GetConstructorId(); - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - if (!SMESH::IObjectToInterface(IO)->_is_nil()) { //MESH - // get IDs from mesh - SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh(); - if (!aSMDSMesh) - return; - - if (aConstructorId == 0) { - SMDS_EdgeIteratorPtr anIter = aSMDSMesh->edgesIterator(); - - while (anIter->more()) { - const SMDS_MeshEdge * edge = anIter->next(); - if (edge) { - myElementsId += QString(" %1").arg(edge->GetID()); - aNbUnits++; - } - } - } else if (aConstructorId == 1) { - SMDS_FaceIteratorPtr anIter = aSMDSMesh->facesIterator(); - while (anIter->more()) { - const SMDS_MeshFace * face = anIter->next(); - if (face) { - myElementsId += QString(" %1").arg(face->GetID()); - aNbUnits++; - } - } - } - } else if (!SMESH::IObjectToInterface(IO)->_is_nil()) { //SUBMESH - // get submesh - SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface(IO); - - // get IDs from submesh - SMESH::long_array_var anElementsIds = new SMESH::long_array; - if (aConstructorId == 0) - anElementsIds = aSubMesh->GetElementsByType(SMESH::EDGE); - else if (aConstructorId == 1) - anElementsIds = aSubMesh->GetElementsByType(SMESH::FACE); - - 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(IO); - if (aGroup->_is_nil()) - return; - - if ((aConstructorId == 0 && aGroup->GetType()!= SMESH::EDGE) || - (aConstructorId == 1 && aGroup->GetType()!= SMESH::FACE)) - 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(); - } + if (!SMESH::IObjectToInterface(IO)->_is_nil()) + mySelectedObject = SMESH::IObjectToInterface(IO); + else + return; } else { aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString); myElementsId = aString; + if (aNbUnits < 1) + return; } - - if (aNbUnits < 1) - return; - myNbOkElements = true; } else { @@ -1073,11 +1069,20 @@ void SMESHGUI_RevolutionDlg::onDisplaySimulation(bool toDisplayPreview) try { SUIT_OverrideCursor aWaitCursor; SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditPreviewer(); - aMeshEditor->RotationSweep(anElementsId.inout(), - anAxis, - anAngle, - aNbSteps, - aTolerance); + if( CheckBoxMesh->isChecked() ) { + if( GetConstructorId() == 0 ) + aMeshEditor->RotationSweepObject1D(mySelectedObject, anAxis, + anAngle, aNbSteps, aTolerance); + else + aMeshEditor->RotationSweepObject2D(mySelectedObject, anAxis, + anAngle, aNbSteps, aTolerance); + } + else + aMeshEditor->RotationSweep(anElementsId.inout(), + anAxis, + anAngle, + aNbSteps, + aTolerance); SMESH::MeshPreviewStruct_var aMeshPreviewStruct = aMeshEditor->GetPreviewData(); mySimulation->SetData(aMeshPreviewStruct._retn()); } catch (...) {} @@ -1154,3 +1159,31 @@ void SMESHGUI_RevolutionDlg::setFilters() myFilterDlg->show(); } + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool SMESHGUI_RevolutionDlg::isValid() +{ + QString msg; + bool ok = true; + ok = SpinBox_X->isValid( msg, true ) && ok; + ok = SpinBox_Y->isValid( msg, true ) && ok; + ok = SpinBox_Z->isValid( msg, true ) && ok; + ok = SpinBox_DX->isValid( msg, true ) && ok; + ok = SpinBox_DY->isValid( msg, true ) && ok; + ok = SpinBox_DZ->isValid( msg, true ) && ok; + ok = SpinBox_Angle->isValid( msg, true ) && ok; + ok = SpinBox_NbSteps->isValid( msg, true ) && ok; + ok = SpinBox_Tolerance->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; +}