X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_InitMeshDlg.cxx;h=68a7375033b8b6bbe0aa7daad00a085aeb47c184;hp=ac34a76c77560ac3b9c5eb2b27bb3be0ed21d621;hb=c9be7f0ec93cabbfbbe9d958a2756e2335ae2e5e;hpb=c3bf92bd87b770fd81631a3853f7f5bb1ac6a4e8 diff --git a/src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx b/src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx index ac34a76c7..68a737503 100644 --- a/src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_InitMeshDlg.cxx @@ -26,10 +26,14 @@ // Module : SMESH // $Header$ -using namespace std; #include "SMESHGUI_InitMeshDlg.h" + #include "SMESHGUI.h" -#include "SALOME_ListIteratorOfListIO.hxx" +#include "SMESHGUI_Utils.h" +#include "SMESHGUI_SMESHGenUtils.h" +#include "SMESHGUI_HypothesesUtils.h" + +#include "GEOMBase.h" #include "QAD_Application.h" #include "QAD_Desktop.h" @@ -37,6 +41,9 @@ using namespace std; #include "QAD_WaitCursor.h" #include "QAD_Operation.h" +#include "SALOME_ListIteratorOfListIO.hxx" +#include "SALOMEGUI_QtCatchCorbaException.hxx" + #include "utilities.h" // QT Includes @@ -47,6 +54,30 @@ using namespace std; #include #include +using namespace std; + +namespace SMESH{ + SMESH::SMESH_Mesh_var InitMesh(GEOM::GEOM_Object_ptr theShapeObject, + const char* theMeshName) + { + SMESH::SMESH_Mesh_var aMesh; + try { + SMESH::SMESH_Gen_var aSMESHGen = SMESH::GetSMESHGen(); + if ( !aSMESHGen->_is_nil() && !theShapeObject->_is_nil() ) { + aMesh = aSMESHGen->CreateMesh( theShapeObject ); + if ( !aMesh->_is_nil() ) { + SALOMEDS::SObject_var aMeshSObject = SMESH::FindSObject( aMesh.in() ); + SMESH::SetName( aMeshSObject, theMeshName ); + } + } + } + catch( const SALOME::SALOME_Exception& S_ex ) { + QtCatchCorbaException( S_ex ); + } + return aMesh._retn(); + } +} + //================================================================================= // class : SMESHGUI_InitMeshDlg() // purpose : Constructs a SMESHGUI_InitMeshDlg which is a child of 'parent', with the @@ -88,6 +119,7 @@ SMESHGUI_InitMeshDlg::SMESHGUI_InitMeshDlg( QWidget* parent, const char* name, S SelectButtonC1A1->setToggleButton( FALSE ); GroupC1Layout->addWidget( SelectButtonC1A1, 1, 1 ); LineEditC1A1 = new QLineEdit( GroupC1, "LineEditC1A1" ); + LineEditC1A1->setReadOnly( true ); GroupC1Layout->addWidget( LineEditC1A1, 1, 2 ); TextLabelC1A1Hyp = new QLabel( tr( "SMESH_OBJECT_HYPOTHESIS" ), GroupC1, "TextLabelC1A1Hyp" ); @@ -96,6 +128,7 @@ SMESHGUI_InitMeshDlg::SMESHGUI_InitMeshDlg( QWidget* parent, const char* name, S SelectButtonC1A1Hyp->setPixmap( image0 ); GroupC1Layout->addWidget( SelectButtonC1A1Hyp, 2, 1 ); LineEditC1A1Hyp = new QLineEdit( GroupC1, "LineEditC1A1Hyp" ); + LineEditC1A1Hyp->setReadOnly( true ); GroupC1Layout->addWidget( LineEditC1A1Hyp, 2, 2 ); TextLabelC1A1Algo = new QLabel( tr( "SMESH_OBJECT_ALGORITHM" ), GroupC1, "TextLabelC1A1Algo" ); @@ -104,6 +137,7 @@ SMESHGUI_InitMeshDlg::SMESHGUI_InitMeshDlg( QWidget* parent, const char* name, S SelectButtonC1A1Algo->setPixmap( image0 ); GroupC1Layout->addWidget( SelectButtonC1A1Algo, 3, 1 ); LineEditC1A1Algo = new QLineEdit( GroupC1, "LineEditC1A1Algo" ); + LineEditC1A1Algo->setReadOnly( true ); GroupC1Layout->addWidget( LineEditC1A1Algo, 3, 2 ); SMESHGUI_InitMeshDlgLayout->addWidget( GroupC1, 1, 0 ); @@ -182,7 +216,7 @@ void SMESHGUI_InitMeshDlg::Init( SALOME_Selection* Sel ) this->move( x, y ) ; this->show() ; - LineEdit_NameMesh->setText( tr( "SMESH_OBJECT_MESH" ) ); + LineEdit_NameMesh->setText( GetDefaultMeshName() ); LineEdit_NameMesh->setFocus() ; myEditCurrentArgument = LineEditC1A1 ; mySelection->ClearFilters() ; @@ -210,6 +244,9 @@ void SMESHGUI_InitMeshDlg::ClickOnOk() //================================================================================= bool SMESHGUI_InitMeshDlg::ClickOnApply() { + if (mySMESHGUI->ActiveStudyLocked()) + return false; + QString myNameMesh = LineEdit_NameMesh->text().stripWhiteSpace(); if ( myNameMesh.isEmpty() ) { QAD_MessageBox::warn1( this, tr( "SMESH_WRN_WARNING" ), tr( "SMESH_WRN_EMPTY_NAME" ), tr( "SMESH_BUT_OK" ) ); @@ -227,18 +264,18 @@ bool SMESHGUI_InitMeshDlg::ClickOnApply() op->start(); // create mesh - SMESH::SMESH_Mesh_var aMesh = mySMESHGUI->InitMesh( myGeomShape, myNameMesh ) ; + SMESH::SMESH_Mesh_var aMesh = SMESH::InitMesh( myGeomShape, myNameMesh ) ; if ( !aMesh->_is_nil() ) { // assign hypotheses for( int i = 0; i < HypoList.count(); i++ ) { - SALOMEDS::SObject_var aHypSO = mySMESHGUI->GetStudy()->FindObjectID( HypoList[i] ); + SALOMEDS::SObject_var aHypSO = SMESH::GetActiveStudyDocument()->FindObjectID( HypoList[i] ); if ( !aHypSO->_is_nil() ) { CORBA::Object_var anObject = aHypSO->GetObject(); if ( !CORBA::is_nil( anObject ) ) { SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( anObject ); if ( !aHyp->_is_nil() ) { - if ( !mySMESHGUI->AddHypothesisOnMesh( aMesh, aHyp ) ) { + if ( !SMESH::AddHypothesisOnMesh( aMesh, aHyp ) ) { // abort transaction op->abort(); return false; @@ -249,13 +286,13 @@ bool SMESHGUI_InitMeshDlg::ClickOnApply() } // assign algorithms for( int i = 0; i < AlgoList.count(); i++ ) { - SALOMEDS::SObject_var aHypSO = mySMESHGUI->GetStudy()->FindObjectID( AlgoList[i] ); + SALOMEDS::SObject_var aHypSO = SMESH::GetActiveStudyDocument()->FindObjectID( AlgoList[i] ); if ( !aHypSO->_is_nil() ) { CORBA::Object_var anObject = aHypSO->GetObject(); if ( !CORBA::is_nil( anObject ) ) { SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( anObject ); if ( !aHyp->_is_nil() ) { - if ( !mySMESHGUI->AddAlgorithmOnMesh( aMesh, aHyp ) ) { + if ( !SMESH::AddHypothesisOnMesh( aMesh, aHyp ) ) { // abort transaction op->abort(); return false; @@ -267,6 +304,7 @@ bool SMESHGUI_InitMeshDlg::ClickOnApply() } // commit transaction op->finish(); + LineEdit_NameMesh->setText( GetDefaultMeshName() ); return true; } @@ -289,21 +327,24 @@ void SMESHGUI_InitMeshDlg::SelectionIntoArgument() { QString aString = ""; - int nbSel = mySMESHGUI->GetNameOfSelectedIObjects(mySelection, aString) ; + int nbSel = SMESH::GetNameOfSelectedIObjects( mySelection, aString ); - if ( myEditCurrentArgument == LineEditC1A1 ) { + if ( myEditCurrentArgument == LineEditC1A1 ) + { // geom shape - if ( nbSel != 1 ) { - myGeomShape = GEOM::GEOM_Shape::_nil(); + if ( nbSel != 1 ) + { + myGeomShape = GEOM::GEOM_Object::_nil(); aString = ""; } - else { - Standard_Boolean testResult ; + else + { Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject() ; - myGeomShape = mySMESHGUI->ConvertIOinGEOMShape(IO, testResult) ; - if( !testResult ) { - myGeomShape = GEOM::GEOM_Shape::_nil(); - aString = ""; + myGeomShape = SMESH::IObjectToInterface( IO ) ; + if ( myGeomShape->_is_nil() || !GEOMBase::IsShape( myGeomShape ) ) + { + myGeomShape = GEOM::GEOM_Object::_nil(); + aString = ""; } } } @@ -432,7 +473,26 @@ void SMESHGUI_InitMeshDlg::UpdateControlState() buttonApply->setEnabled( isEnabled ); } +//================================================================================= +// function : GetDefaultMeshName() +// purpose : Generates default mesh name(Mesh_1, Mesh_2, etc.) +//================================================================================= +QString SMESHGUI_InitMeshDlg::GetDefaultMeshName() +{ + SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument(); + int aNumber = 0; + QString aMeshName; + SALOMEDS::SObject_var obj; + + do + { + aMeshName = QString(tr("SMESH_OBJECT_MESH")) +"_"+QString::number(++aNumber); + obj = aStudy->FindObject(aMeshName); + } + while (!obj->_is_nil()); + return aMeshName; +}