X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshOp.cxx;h=c2ec7fcec558eb882f7902497cc97574ab451751;hp=6506d1e0ef64fb5f394f1bc13dfbbd4b75cff5ae;hb=4c65637b3ba0be986e1ce6e952689b2686475b2f;hpb=7c09ac523c981783a2e1a85b575962b3bfe54d47 diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.cxx b/src/SMESHGUI/SMESHGUI_MeshOp.cxx index 6506d1e0e..c2ec7fcec 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshOp.cxx @@ -41,6 +41,7 @@ #include #include #include +#include // SALOME GUI includes #include @@ -688,10 +689,13 @@ void SMESHGUI_MeshOp::selectionDone() myDlg->adjustSize(); readMesh(); } + int curIndex = myDlg->currentMeshType( ); QStringList TypeMeshList; createMeshTypeList( TypeMeshList ); setAvailableMeshType( TypeMeshList ); - setFilteredAlgoData( myMaxShapeDim, myDlg->currentMeshType( )); + curIndex =( curIndex >= TypeMeshList.count() ) ? 0 : curIndex; + myDlg->setCurrentMeshType( curIndex ); + setFilteredAlgoData( myMaxShapeDim, curIndex); } catch ( const SALOME::SALOME_Exception& S_ex ) { @@ -1421,7 +1425,7 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, // check that algorithms of other dimentions are compatible with // the selected one if ( !algoData ) { // all algos becomes available - if (myDlg->currentMeshType() == MT_ANY) + if (myDlg->currentMeshType() == MT_ANY || aDim == SMESH::DIM_1D || aDim == SMESH::DIM_0D) availableHyps( aDim, Algo, anAvailable, myAvailableHypData[ aDim ][ Algo ]); else{ anAvailable.clear(); @@ -2532,33 +2536,40 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI int anCurrentAvailableAlgo = 0; bool isNone = true; switch ( theIndex ) { - case MT_ANY:{ + case MT_ANY: anCompareType = "ANY"; aDim = SMESH::DIM_3D; - } - break; - case MT_TRIANGULAR:{ + break; + case MT_TRIANGULAR: aDim = SMESH::DIM_2D; anCompareType = "TRIA"; - } - break; - case MT_QUADRILATERAL:{ + break; + case MT_QUADRILATERAL: aDim = SMESH::DIM_2D; anCompareType = "QUAD"; - } - break; - case MT_TETRAHEDRAL:{ + break; + case MT_TETRAHEDRAL: aDim = SMESH::DIM_3D; anCompareType = "TETRA"; - } - break; - case MT_HEXAHEDRAL:{ + break; + case MT_HEXAHEDRAL: aDim = SMESH::DIM_3D; anCompareType = "HEXA"; - } - break; + break; default:; } + + bool toCheckIsApplicableToAll = !myIsMesh; + GEOM::GEOM_Object_var aGeomVar; + QString anEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); + if ( _PTR(SObject) so = studyDS()->FindObjectID( anEntry.toLatin1().data() )) + { + CORBA::Object_var obj = _CAST( SObject,so )->GetObject(); + aGeomVar = GEOM::GEOM_Object::_narrow( obj ); + if ( !aGeomVar->_is_nil() && toCheckIsApplicableToAll ) + toCheckIsApplicableToAll = ( aGeomVar->GetType() == GEOM_GROUP ); + } + if ( anCompareType == "ANY" ) { for ( int dim = SMESH::DIM_2D; dim <= SMESH::DIM_3D; dim++ ) @@ -2569,7 +2580,7 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI availableHyps( dim, Algo, anAvailableAlgs, anAvailableAlgsData ); //return current algo in current tab and set new algorithm list HypothesisData* algoCur; - if ( !isNone && !myAvailableHypData[dim][Algo].empty() ){ + if ( !isNone && !myAvailableHypData[dim][Algo].empty() ) { algoCur = myAvailableHypData[dim][Algo].at( currentHyp( dim, Algo ) ); } myAvailableHypData[dim][Algo].clear(); @@ -2577,19 +2588,14 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI for (int i = 0 ; i < anAvailableAlgsData.count(); i++) { HypothesisData* curAlgo = anAvailableAlgsData.at(i); - QString anEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); - GEOM::GEOM_Object_var aGeomVar = GEOM::GEOM_Object::_nil(); - if ( _PTR(SObject) pGeom = studyDS()->FindObjectID( anEntry.toLatin1().data() )) - { - aGeomVar= GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() ); - } if ( aGeomVar->_is_nil() || - ( !aGeomVar->_is_nil() && SMESH::IsApplicable( curAlgo->TypeName, aGeomVar, !myIsMesh ))){ + SMESH::IsApplicable( curAlgo->TypeName, aGeomVar, toCheckIsApplicableToAll )) + { anAvailableAlgs.append( curAlgo->Label ); myAvailableHypData[dim][Algo].append( curAlgo ); } } - if ( !isNone && algoCur ){ + if ( !isNone && algoCur ) { for (int i = 0 ; i < myAvailableHypData[dim][Algo].count(); i++) { HypothesisData* algoAny = myAvailableHypData[dim][Algo].at(i); @@ -2600,7 +2606,7 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI } } } - else if ( !isNone ){ + else if ( !isNone ) { isAvailableChoiceAlgo = true; anCurrentAvailableAlgo = currentHyp( dim, Algo ); } @@ -2654,27 +2660,22 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI QStringList::const_iterator inElemType = algoIn->OutputTypes.begin(); for ( ; inElemType != algoIn->OutputTypes.end(); inElemType++ ) { - if ( *inElemType == anCurrentCompareType ){ + if ( *inElemType == anCurrentCompareType ) { isAvailableAlgo = true; break; } } - if ( isAvailableAlgo || algoIn->OutputTypes.count()==0 ){ - QString anEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); - GEOM::GEOM_Object_var aGeomVar = GEOM::GEOM_Object::_nil(); - if ( _PTR(SObject) pGeom = studyDS()->FindObjectID( anEntry.toLatin1().data() )) - { - aGeomVar= GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() ); - } + if ( isAvailableAlgo || algoIn->OutputTypes.count()==0 ) { if ( aGeomVar->_is_nil() || myMaxShapeDim != dim || - ( !aGeomVar->_is_nil() && SMESH::IsApplicable( algoIn->TypeName, aGeomVar, !myIsMesh ))){ + SMESH::IsApplicable( algoIn->TypeName, aGeomVar, toCheckIsApplicableToAll )) + { anAvailableAlgs.append( algoIn->Label ); myAvailableHypData[dim][Algo].append( algoIn ); myFilteredAlgoData[dim].append( algoIn ); } } //algorithm will be active, if the chosen algorithm available in the current mesh type - if ( !isNoneAlg && isAvailableAlgo && algoIn->Label == anCurrentAlgo ){ + if ( !isNoneAlg && isAvailableAlgo && algoIn->Label == anCurrentAlgo ) { isAvailableChoiceAlgo = true; anCurrentAvailableAlgo = anAvailableAlgs.count() - 1 ; } @@ -2688,21 +2689,20 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI setCurrentHyp( dim, Algo, -1 ); } - int aMaxShapeDim = ( myMaxShapeDim != aDim) ? aDim : myMaxShapeDim; if ( isNone || isReqDisBound ) { - for ( int i = SMESH::DIM_0D; i <= aMaxShapeDim; i++ ) { + for ( int i = SMESH::DIM_0D; i <= myMaxShapeDim; i++ ) { if ( aDim != i ) { myDlg->disableTab( i ); setCurrentHyp(i, Algo, -1); } } } - else if ( !isNone ){ + else if ( !isNone ) { if ( aDim == SMESH::DIM_2D){ myDlg->disableTab( SMESH::DIM_3D ); setCurrentHyp( SMESH::DIM_3D, Algo, -1); } - for ( int i = aMaxShapeDim; i > SMESH::DIM_0D; i-- ) + for ( int i = myMaxShapeDim; i > SMESH::DIM_0D; i-- ) { isReqDisBound = ( currentHyp( i, Algo ) < 0 ) ? true : myAvailableHypData[i][Algo].at( currentHyp( i, Algo ) )->InputTypes.isEmpty(); @@ -2732,7 +2732,7 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI isAvailable = false; if ( HypothesisData* algoDataIn = SMESH::GetHypothesisData( currentHypoSet->current() )) { - for (int i = SMESH::DIM_0D; i <= SMESH::DIM_3D; i++) + for (int i = SMESH::DIM_0D; i <= myMaxShapeDim; i++) { for (int j = 0; j < myAvailableHypData[i][Algo].count(); ++j) { HypothesisData* aCurAlgo = hypData( i, Algo, j );