X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MG_ADAPTDRIVER.cxx;h=627b3ded2bf8f210b1184376b6580d87770cea35;hb=64f450dfd133e2dcec792369d3e07a8255633597;hp=fc1496380c1b6462edd792630a65e42ce29ac4e4;hpb=48406860a1183b61dcc5d57b454a0325cb01084d;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.cxx b/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.cxx index fc1496380..627b3ded2 100644 --- a/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.cxx +++ b/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.cxx @@ -1,7 +1,4 @@ -// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2020-2021 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -19,231 +16,75 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : SMESHGUI_MG_ADAPTDRIVER.cxx #include "SMESHGUI_MG_ADAPTDRIVER.h" -#include "SUIT_Desktop.h" -#include "SUIT_Application.h" -#include "SUIT_Session.h" - -#include "SalomeApp_Application.h" -#include "SalomeApp_Module.h" -#include "SalomeApp_Study.h" - -#include "SMESH_Comment.hxx" -#include "SMESH_Actor.h" #include "SMESHGUI.h" -#include "SMESHGUI_FilterDlg.h" -#include "SMESHGUI_Selection.h" -#include -#include "SMESHGUI_IdValidator.h" -#include "SMESHGUI_Utils.h" -#include "SMESHGUI_MeshEditPreview.h" #include "SMESHGUI_VTKUtils.h" -#include -#include -#include -#include -#include -#include "SMESHGUI_SpinBox.h" +#include "SMESHGUI_MeshUtils.h" +#include "SMESH_TryCatch.hxx" #include -#include -#include +#include +#include +#include +#include #include -#include -#include -#include "SMESHGUI_MeshUtils.h" +#include - -#include -#include -#include -#include -#include -#include -#include #include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -// SALOME KERNEL includes -#include -#include -#include -#include -#include "SalomeApp_Tools.h" -#include -#include -#include +#include -#include +// SALOME KERNEL includes const int SPACING = 6; // layout spacing const int MARGIN = 9; // layout margin -SALOME_ListIO mySelected; - - -//================================================================ -// Function : firstIObject -// Purpose : Return the first selected object in the selected object list -//================================================================ -Handle(SALOME_InteractiveObject) firstIObject() -{ - const SALOME_ListIO& aList = selectedIO(); - return aList.Extent() > 0 ? aList.First() : Handle(SALOME_InteractiveObject)(); -} -//================================================================ -// Function : selectedIO -// Return the list of selected SALOME_InteractiveObject's -//================================================================ -const SALOME_ListIO& selectedIO() -{ - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* > ( SUIT_Session::session()->activeApplication() ); - LightApp_SelectionMgr* aSelectionMgr = app->selectionMgr(); - if( aSelectionMgr ) - { - aSelectionMgr->selectedObjects( mySelected ); - for (SALOME_ListIteratorOfListIO it (mySelected); it.More(); it.Next()) - SCRUTE(it.Value()->getEntry()); - }; - return mySelected; -} -//================================================================ -// Function : getStudy -// Returne un pointeur sur l'etude active -//================================================================ -_PTR(Study) getStudy() -{ - static _PTR(Study) _study; - if(!_study) - _study = SalomeApp_Application::getStudy(); - return _study; -} - -bool createAndPublishMed(QString fileName) -{ - - SMESH::DriverMED_ReadStatus res; - SMESH::mesh_array_var aMeshes = new SMESH::mesh_array; - // SMESHGUI aGui; - - aMeshes = SMESHGUI::GetSMESHGen()->CreateMeshesFromMED( fileName.toUtf8().constData(), res ); - _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshes[0] ); - _PTR(Study) aStudy = SMESH::getStudy(); - QStringList anEntryList; - // bool isEmpty; - if ( aMeshSO ) - { - _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); - _PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( aMeshSO, "AttributePixMap" ); - aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" ); - anEntryList.append( aMeshSO->GetID().c_str() ); - } - else - { - // isEmpty = true; - return false; - } - SMESHGUI::GetSMESHGUI()->updateObjBrowser(); - - // browse to the published meshes - if( LightApp_Application* anApp = - dynamic_cast( SUIT_Session::session()->activeApplication() ) ) - anApp->browseObjects( anEntryList ); - return true; -} -bool createMgAdaptObject(MgAdapt *myMgAdapt ) -{ - // SMESH::SMESH_Mesh_var newMesh = SMESHGUI::GetSMESHGen()->CreateEmptyMesh(); - - // _PTR(SObject) aHypothesis; - _PTR(Study) aStudy = SMESH::getStudy(); - QStringList anEntryList; - _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); - _PTR(SComponent) mgadapt = aStudy->FindComponent("MG-ADAPT"); - _PTR(GenericAttribute) ga; - if (!aBuilder->FindAttribute(mgadapt, ga, "AttributeName") ) - { - mgadapt = aBuilder->NewComponent("MG-ADAPT"); - _PTR(AttributeName) Name = aBuilder->FindOrCreateAttribute(mgadapt, "AttributeName"); - Name->SetValue("MG-ADAPT"); - _PTR(AttributePixMap) myPixmap = aBuilder->FindOrCreateAttribute( mgadapt, "AttributePixMap" ); - myPixmap->SetPixMap( "ICON_MG_ADAPT" ); - anEntryList.append( mgadapt->GetID().c_str() ); - } - - _PTR(SObject) obj = aBuilder->NewObject(mgadapt); - _PTR(AttributeName) myName = aBuilder->FindOrCreateAttribute(obj, "AttributeName"); - myName->SetValue("hypo"); - _PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( obj, "AttributePixMap" ); - aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" ); - anEntryList.append( obj->GetID().c_str() ); - - SMESHGUI::GetSMESHGUI()->updateObjBrowser(); - - // // browse to the published meshes - if( LightApp_Application* anApp = - dynamic_cast( SUIT_Session::session()->activeApplication() ) ) - anApp->browseObjects( anEntryList ); - return true; -} - - -// MG ADAPT UTILS -//================================================================ -// Function : IObjectCount -// Return the number of selected objects -//================================================================ -int IObjectCount() -{ - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - LightApp_SelectionMgr* aSelectionMgr = app->selectionMgr(); - if( aSelectionMgr ) - { - aSelectionMgr->selectedObjects( mySelected ); - SCRUTE(mySelected.Extent()); - return mySelected.Extent(); - } - return 0; -} - +// bool createMgAdaptObject(MgAdapt *myMgAdapt ) +// { +// // SMESH::SMESH_Mesh_var newMesh = SMESHGUI::GetSMESHGen()->CreateEmptyMesh(); + +// // _PTR(SObject) aHypothesis; +// _PTR(Study) aStudy = SMESH::getStudy(); +// QStringList anEntryList; +// _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); +// _PTR(SComponent) mgadapt = aStudy->FindComponent("MG-ADAPT"); +// _PTR(GenericAttribute) ga; +// if (!aBuilder->FindAttribute(mgadapt, ga, "AttributeName") ) +// { +// mgadapt = aBuilder->NewComponent("MG-ADAPT"); +// _PTR(AttributeName) Name = aBuilder->FindOrCreateAttribute(mgadapt, "AttributeName"); +// Name->SetValue("MG-ADAPT"); +// _PTR(AttributePixMap) myPixmap = aBuilder->FindOrCreateAttribute( mgadapt, "AttributePixMap" ); +// myPixmap->SetPixMap( "ICON_MG_ADAPT" ); +// anEntryList.append( mgadapt->GetID().c_str() ); +// } + +// _PTR(SObject) obj = aBuilder->NewObject(mgadapt); +// _PTR(AttributeName) myName = aBuilder->FindOrCreateAttribute(obj, "AttributeName"); +// myName->SetValue("hypo"); +// _PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( obj, "AttributePixMap" ); +// aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" ); +// anEntryList.append( obj->GetID().c_str() ); + +// SMESHGUI::GetSMESHGUI()->updateObjBrowser(); + +// // // browse to the published meshes +// if( LightApp_Application* anApp = +// dynamic_cast( SUIT_Session::session()->activeApplication() ) ) +// anApp->browseObjects( anEntryList ); +// return true; +// } SMESHGUI_MG_ADAPTDRIVER::SMESHGUI_MG_ADAPTDRIVER( SMESHGUI* theModule, SMESH::MG_ADAPT_ptr myModel, bool isCreation ) - : mySMESHGUI( theModule ), - myFilterDlg(0), - myIsApplyAndClose( false ), - SMESHGUI_MgAdaptDlg((SalomeApp_Module*)theModule, myModel, SMESHGUI::desktop(), isCreation) + : SMESHGUI_MgAdaptDlg((SalomeApp_Module*)theModule, myModel, SMESHGUI::desktop(), isCreation), + mySMESHGUI( theModule ), + myIsApplyAndClose( false ) { - resMgr = resourceMgr(); + //resMgr = mySMESHGUI->resourceMgr(); selMgr = selectionMgr(); @@ -252,10 +93,10 @@ SMESHGUI_MG_ADAPTDRIVER::SMESHGUI_MG_ADAPTDRIVER( SMESHGUI* theModule, SMESH::MG connect(myArgs, SIGNAL(toExportMED(const char*)), this, SLOT(exportMED(const char*))); } -SUIT_ResourceMgr* SMESHGUI_MG_ADAPTDRIVER::resourceMgr() -{ - return dynamic_cast( SUIT_Session::session()->resourceMgr() ); -} +// SUIT_ResourceMgr* SMESHGUI_MG_ADAPTDRIVER::resourceMgr() +// { +// return dynamic_cast( SUIT_Session::session()->resourceMgr() ); +// } LightApp_SelectionMgr* SMESHGUI_MG_ADAPTDRIVER::selectionMgr() { @@ -271,9 +112,9 @@ void SMESHGUI_MG_ADAPTDRIVER::updateSelection() disconnect( selMgr, 0, this, 0 ); selMgr->clearFilters(); - SMESH::SetPointRepresentation( true ); + SMESH::SetPointRepresentation( false ); if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() ) - aViewWindow->SetSelectionMode( ActorSelection ); + aViewWindow->SetSelectionMode( ActorSelection ); if (myArgs->aBrowser->isChecked()) { connect( selMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( selectionChanged() )); @@ -297,19 +138,19 @@ void SMESHGUI_MG_ADAPTDRIVER::selectionChanged() { myMesh = mesh; - mySelectedObject = SMESH::IObjectToInterface( IO ); - if ( mySelectedObject->_is_nil() ) - return; + SMESH::SMESH_IDSource_var sSelectedObj = SMESH::IObjectToInterface( IO ); + if ( sSelectedObj->_is_nil() ) + return; } else - return; + return; SMESH::GetNameOfSelectedIObjects( selMgr, aString ); if ( aString.isEmpty() ) aString = " "; else aString = aString.trimmed(); - bool ok = !aString.isEmpty(); + //bool ok = !aString.isEmpty(); if ( !mesh->_is_nil() ) { myArgs->aBrowserObject->setText( aString ); @@ -351,10 +192,9 @@ void SMESHGUI_MG_ADAPTDRIVER::PushOnOK() // std::cout << "SMESHGUI_MG_ADAPTDRIVER::PushOnOK ret : " <compute(); - errStr = getModel()->getErrMsg(); - std::string msg = err == 0 ? " ok" : std::string("Not ok \n")+CORBA::string_dup(errStr) ; - } - catch (const std::exception& e) + int err = 1; + std::string errStr; + SMESH_TRY; { - std::cerr<compute(); + err = 0; + errStr = SMESH::toStdStr( getModel()->getErrMsg() ); } - return err == 0? true: false; -} + SMESH_CATCH( SMESH::returnError ); -//================================================================================= -// function : Init() -// purpose : -//================================================================================= -void SMESHGUI_MG_ADAPTDRIVER::Init (bool ResetControls) -{ - myBusy = false; - - if ( ResetControls ) + std::string msg = " ok"; + if ( !errStr.empty() || err != 0 ) { - myLineEditElements->clear(); - myNbOkElements = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - //~myActor = 0; - myMesh = SMESH::SMESH_Mesh::_nil(); - - myIdSourceCheck->setChecked(true); - - onConstructor( 0 ); + msg = "Not ok \n" + errStr + "\n"; + std::cerr << msg; + err = 1; } - + return err == 0; } - -//======================================================================= -//function : onConstructor -//purpose : switch operation mode -//======================================================================= - -void SMESHGUI_MG_ADAPTDRIVER::onConstructor( int withGeom ) -{ - - myGeomLabel ->setVisible( withGeom ); - myGeomNameEdit ->setVisible( withGeom ); - myReuseHypCheck ->setVisible( withGeom ); - myCopyElementsCheck->setVisible( withGeom ); - myFilterBtn ->setVisible( !withGeom ); - myIdSourceCheck ->setVisible( !withGeom ); - - if ( !withGeom ) - myMeshNameEdit->setText( SMESH::UniqueMeshName("Mesh")); - -} - -//~void SMESHGUI_MG_ADAPTDRIVER::onSelectIdSource( bool ) -//~{} +#undef SMESH_CAUGHT +#define SMESH_CAUGHT //================================================================================= // function : enterEvent() @@ -499,82 +304,6 @@ void SMESHGUI_MG_ADAPTDRIVER::PushOnHelp() } -//======================================================================= -//function : getErrorMsg -//purpose : Return an error message and entries of invalid smesh object -//======================================================================= - -QString SMESHGUI_MG_ADAPTDRIVER::getErrorMsg( SMESH::string_array_var theInvalidEntries, - QStringList & theEntriesToBrowse ) -{ - - if ( theInvalidEntries->length() == 0 ) - return tr("OPERATION_FAILED"); - - // theInvalidEntries - SObject's that hold geometry objects whose - // counterparts are not found in the newGeometry, followed by SObject's - // holding mesh sub-objects that are invalid because they depend on a not found - // preceding sub-shape - - QString msg = tr("SUBSHAPES_NOT_FOUND_MSG") + "\n"; - - QString objString; - for ( CORBA::ULong i = 0; i < theInvalidEntries->length(); ++i ) - { - _PTR(SObject) so = SMESH::getStudy()->FindObjectID( theInvalidEntries[i].in() ); - - int objType = SMESHGUI_Selection::type( theInvalidEntries[i].in() ); - if ( objType < 0 ) // geom object - { - objString += "\n"; - if ( so ) - objString += so->GetName().c_str(); - else - objString += theInvalidEntries[i].in(); // it's something like "FACE #2" - } - else // smesh object - { - theEntriesToBrowse.push_back( theInvalidEntries[i].in() ); - - objString += "\n "; - switch ( objType ) { - case SMESH::MESH: - objString += tr("SMESH_MESH"); - break; - case SMESH::HYPOTHESIS: - objString += tr("SMESH_HYPOTHESIS"); - break; - case SMESH::ALGORITHM: - objString += tr("SMESH_ALGORITHM"); - break; - case SMESH::SUBMESH_VERTEX: - case SMESH::SUBMESH_EDGE: - case SMESH::SUBMESH_FACE: - case SMESH::SUBMESH_SOLID: - case SMESH::SUBMESH_COMPOUND: - case SMESH::SUBMESH: - objString += tr("SMESH_SUBMESH"); - break; - case SMESH::GROUP: - objString += tr("SMESH_GROUP"); - break; - default: - ; - } - objString += " \""; - if ( so ) - objString += so->GetName().c_str(); - objString += "\" ("; - objString += theInvalidEntries[i].in(); - objString += ")"; - } - } - if ( !objString.isEmpty() ) - msg += objString; - - return msg; -} - //================================================================================= // function : isValid // purpose : @@ -588,15 +317,16 @@ bool SMESHGUI_MG_ADAPTDRIVER::isValid() bool SMESHGUI_MG_ADAPTDRIVER::createMeshInObjectBrowser() { - QString filename(getModel()->getMedFileOut()); + QString filename( SMESH::toQStr( getModel()->getMedFileOut() )); QStringList errors; QStringList anEntryList; bool isEmpty = false; - bool ok = false; + // bool ok = false; SMESH::SMESH_Gen_var SMESH_Gen_ptr = SMESHGUI::GetSMESHGen(); - if (!SMESH_Gen_ptr) { - std::cerr << "Could not retrieve SMESH_Gen_ptr" << std::endl; - throw SALOME_Exception(LOCALIZED("Could not retrieve SMESH::GetSMESHGen()")); + if ( SMESH_Gen_ptr->_is_nil() ) { + QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"), + QObject::tr("Could not retrieve SMESH_Gen_ptr") ); + return false; } SMESH::mesh_array_var aMeshes = new SMESH::mesh_array; aMeshes->length( 1 ); // one mesh only @@ -625,21 +355,21 @@ bool SMESHGUI_MG_ADAPTDRIVER::createMeshInObjectBrowser() SMESHGUI::GetSMESHGUI()->updateObjBrowser(); // browse to the published meshes if( LightApp_Application* anApp = - dynamic_cast( SUIT_Session::session()->activeApplication() ) ) - anApp->browseObjects( anEntryList ); + dynamic_cast( SUIT_Session::session()->activeApplication() ) ) + anApp->browseObjects( anEntryList ); // show Error message box if there were errors if ( errors.count() > 0 ) { SUIT_MessageBox::critical( SMESHGUI::desktop(), - QObject::tr( "SMESH_ERROR" ), - QObject::tr( "SMESH_IMPORT_ERRORS" ) + "\n" + errors.join( "\n" ) ); + QObject::tr( "SMESH_ERROR" ), + QObject::tr( "SMESH_IMPORT_ERRORS" ) + "\n" + errors.join( "\n" ) ); } // show warning message box, if some imported mesh is empty if ( isEmpty ) { SUIT_MessageBox::warning( SMESHGUI::desktop(), - QObject::tr( "SMESH_WRN_WARNING" ), - QObject::tr( "SMESH_DRS_SOME_EMPTY" ) ); + QObject::tr( "SMESH_WRN_WARNING" ), + QObject::tr( "SMESH_DRS_SOME_EMPTY" ) ); } return true; } @@ -652,7 +382,8 @@ bool SMESHGUI_MG_ADAPTDRIVER::createMeshInObjectBrowser() void SMESHGUI_MG_ADAPTDRIVER::setIsApplyAndClose( const bool theFlag ) { myIsApplyAndClose = theFlag; -}//================================================================ +} +//================================================================ // function : isApplyAndClose // Purpose : Get value of the flag indicating that the dialog is // accepted by Apply & Close button @@ -668,16 +399,12 @@ bool SMESHGUI_MG_ADAPTDRIVER::isApplyAndClose() const //================================================================================= void SMESHGUI_MG_ADAPTDRIVER::deactivateActiveDialog() { - if (ConstructorsBox->isEnabled()) - { - ConstructorsBox->setEnabled(false); - GroupArguments->setEnabled(false); - GroupButtons->setEnabled(false); - mySMESHGUI->ResetState(); - mySMESHGUI->SetActiveDialogBox(0); - if ( selMgr ) - selMgr->removeFilter( myIdSourceFilter ); - } + // if (isEnabled()) + // { + // mySMESHGUI->ResetState(); + // mySMESHGUI->SetActiveDialogBox(0); + // setEnabled( false ); + // } } //================================================================================= @@ -699,60 +426,3 @@ void SMESHGUI_MG_ADAPTDRIVER::activateThisDialog() // SelectionIntoArgument(); } - -//================================================================================= -// function : setFilters() -// purpose : SLOT. Called when "Filter" button pressed. -//================================================================================= -void SMESHGUI_MG_ADAPTDRIVER::setFilters() -{ - if(myMesh->_is_nil()) - { - SUIT_MessageBox::critical(this, - tr("SMESH_ERROR"), - tr("NO_MESH_SELECTED")); - return; - } - if ( !myFilterDlg ) - myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL ); - - QList types; - if ( myMesh->NbEdges() ) types << SMESH::EDGE; - if ( myMesh->NbFaces() ) types << SMESH::FACE; - if ( myMesh->NbVolumes() ) types << SMESH::VOLUME; - if ( myMesh->NbBalls() ) types << SMESH::BALL; - if ( myMesh->Nb0DElements()) types << SMESH::ELEM0D; - if ( types.count() > 1 ) types << SMESH::ALL; - - myFilterDlg->Init( types ); - myFilterDlg->SetSelection(); - myFilterDlg->SetMesh( myMesh ); - myFilterDlg->SetSourceWg( myLineEditElements ); - - myFilterDlg->show(); -} - -//================================================================================= -// function : onOpenView() -// purpose : -//================================================================================= -void SMESHGUI_MG_ADAPTDRIVER::onOpenView() -{ - if ( mySelector ) { - SMESH::SetPointRepresentation(false); - } - else { - mySelector = SMESH::GetViewWindow( mySMESHGUI )->GetSelector(); - activateThisDialog(); - } -} - -//================================================================================= -// function : onCloseView() -// purpose : -//================================================================================= -void SMESHGUI_MG_ADAPTDRIVER::onCloseView() -{ - deactivateActiveDialog(); - mySelector = 0; -}