X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshOp.cxx;h=fb05a84714bb3b3d10a2456575ec55ac7d59dd33;hp=1ec62d78e99c8d81e5f160b428a5654f27cc991f;hb=18dade91d06a5b9964bb5604dbfdbc0ff4deef0a;hpb=859219d5983802ba196ba7882eedbde09dc87be7 diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.cxx b/src/SMESHGUI/SMESHGUI_MeshOp.cxx index 1ec62d78e..fb05a8471 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshOp.cxx @@ -88,10 +88,10 @@ //================================================================================ SMESHGUI_MeshOp::SMESHGUI_MeshOp( const bool theToCreate, const bool theIsMesh ) : SMESHGUI_SelectionOp(), - myToCreate( theToCreate ), - myIsMesh( theIsMesh ), myDlg( 0 ), myShapeByMeshOp( 0 ), + myToCreate( theToCreate ), + myIsMesh( theIsMesh ), myHypoSet( 0 ) { if ( GeometryGUI::GetGeomGen()->_is_nil() )// check that GEOM_Gen exists @@ -206,11 +206,11 @@ void SMESHGUI_MeshOp::startOperation() for ( int i = SMESH::DIM_0D; i <= SMESH::DIM_3D; i++ ) { connect( myDlg->tab( i ), SIGNAL( createHyp( const int, const int ) ), - this, SLOT( onCreateHyp( const int, const int ) ) ); + this, SLOT( onCreateHyp( const int, const int ) ) ); connect( myDlg->tab( i ), SIGNAL( editHyp( const int, const int ) ), - this, SLOT( onEditHyp( const int, const int ) ) ); + this, SLOT( onEditHyp( const int, const int ) ) ); connect( myDlg->tab( i ), SIGNAL( selectAlgo( const int ) ), - this, SLOT( onAlgoSelected( const int ) ) ); + this, SLOT( onAlgoSelected( const int ) ) ); } connect( myDlg, SIGNAL( hypoSet( const QString& )), SLOT( onHypoSet( const QString& ))); connect( myDlg, SIGNAL( geomSelectionByMesh( bool )), SLOT( onGeomSelectionByMesh( bool ))); @@ -576,7 +576,7 @@ void SMESHGUI_MeshOp::selectionDone() if (aSeq->length() > 0) { shapeDim = -1; - for (int iss = 0; iss < aSeq->length() && shapeDim < 3; iss++) { + for ( CORBA::ULong iss = 0; iss < aSeq->length() && shapeDim < 3; iss++) { GEOM::GEOM_Object_var aGeomVar = aSeq[iss]; switch ( aGeomVar->GetShapeType() ) { case GEOM::SOLID: shapeDim = 3; break; @@ -1500,30 +1500,23 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, // check that tab enabled of one less dimension if ( aDim > SMESH::DIM_0D ) { - if ( isAccessibleDim( aDim - 1 ) ) { - if ( algoData && myIsOnGeometry ) { - for (int i = aDim - 1; i >= SMESH::DIM_0D; i--) { - if ( isAccessibleDim( i ) ) { + if ( myIsOnGeometry ) { + QString anCompareType = currentMeshTypeName(myDlg->currentMeshType()); + bool is2dtype = ( anCompareType == "QUAD" ) || ( anCompareType == "TRIA" ); + int dim = is2dtype ? SMESH::DIM_2D : SMESH::DIM_3D; + dim = ( myMaxShapeDim < dim ) ? myMaxShapeDim : dim; + for (int i = dim; i >= SMESH::DIM_0D; i--) { + if ( i != aDim ) { + if ( algoData && algoData->InputTypes.isEmpty() ) { myDlg->disableTab( i ); setCurrentHyp(i, Algo, -1); } + else { + myDlg->enableTab( i ); + } } } } - if ( algoData && myIsOnGeometry && !algoData->InputTypes.isEmpty() ) { - myDlg->enableTab( aDim - 1 ); - } - if ( !algoData ) { - if ( aDim != SMESH::DIM_2D || ( aDim == SMESH::DIM_2D && - currentHyp( SMESH::DIM_2D, Algo ) < 0) ) { - for (int i = aDim - 1; i >= SMESH::DIM_0D; i--) - myDlg->enableTab( i ); - } - else { - for (int i = aDim - 1; i >= SMESH::DIM_0D; i--) - myDlg->disableTab( i ); - } - } } int algoDim = aDim; @@ -1539,10 +1532,6 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, bool noCompatible = false; for ( ; dim * dir <= lastDim * dir; dim += dir) { - HypothesisData* nextAlgo = 0; - if ( myMaxShapeDim == SMESH::DIM_3D && a3DAlgo && dim == SMESH::DIM_2D ) { - nextAlgo = a3DAlgo; - } if ( !isAccessibleDim( dim )) continue; if ( noCompatible ) { // the selected algo has no compatible ones @@ -1552,14 +1541,13 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, algoByDim[ dim ] = 0; continue; } + HypothesisData* nextAlgo = 0; + if ( myMaxShapeDim == SMESH::DIM_3D && a3DAlgo && dim == SMESH::DIM_2D ) { + nextAlgo = a3DAlgo; + } // get currently selected algo int algoIndex = currentHyp( dim, Algo ); HypothesisData* curAlgo = hypData( dim, Algo, algoIndex ); - if ( curAlgo ) { // some algo selected - if ( !isCompatible( prevAlgo, curAlgo, Algo )) - curAlgo = 0; - } - // set new available algoritms QString anCompareType = currentMeshTypeName(myDlg->currentMeshType()); QString anCurrentCompareType = ""; @@ -1569,13 +1557,15 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, anCurrentCompareType = (anCompareType == "HEXA" || anCompareType == "QUAD") ? "QUAD" : "TRIA"; nextAlgo = 0; } + + // set new available algoritms availableHyps( dim, Algo, anAvailable, myAvailableHypData[dim][Algo], prevAlgo, nextAlgo, anCurrentCompareType); HypothesisData* soleCompatible = 0; if ( anAvailable.count() == 1 ) soleCompatible = myAvailableHypData[dim][Algo][0]; myDlg->tab( dim )->setAvailableHyps( Algo, anAvailable ); noCompatible = anAvailable.isEmpty(); - algoIndex = myAvailableHypData[dim][Algo].indexOf( curAlgo ); + algoIndex = myAvailableHypData[dim][Algo].indexOf( curAlgo ); if ( !isSubmesh && algoIndex < 0 && soleCompatible && !forward && dim != SMESH::DIM_0D) { // select the sole compatible algo algoIndex = myAvailableHypData[dim][Algo].indexOf( soleCompatible ); @@ -1585,11 +1575,12 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, // remember current algo prevAlgo = algoByDim[ dim ] = hypData( dim, Algo, algoIndex ); } - if ( myMaxShapeDim == SMESH::DIM_3D && forward && algoDim == SMESH::DIM_1D ) { - algoDim = SMESH::DIM_3D; - forward = -1; - a3DAlgo = prevAlgo; - continue; + if ( myMaxShapeDim == SMESH::DIM_3D && forward && algoDim == SMESH::DIM_1D ) + { + algoDim = SMESH::DIM_3D; + forward = -1; + a3DAlgo = prevAlgo; + continue; } } @@ -2264,6 +2255,9 @@ void SMESHGUI_MeshOp::readMesh() { // get hypotheses existingHyps( dim, hypType, pObj, anExisting, myObjHyps[ dim ][ hypType ] ); + if ( myObjHyps[ dim ][ hypType ].count() == 0 ) { + setCurrentHyp( dim, hypType, -1 ); + } for ( int i = 0, nb = myObjHyps[ dim ][ hypType ].count(); i < nb; ++i ) { // find index of required hypothesis among existing ones for this dimension and type @@ -2379,7 +2373,7 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess ) // First, remove old algos in order to avoid messages on algorithm hiding for ( int dim = aDim; dim <= SMESH::DIM_3D; dim++ ) { - if ( isAccessibleDim( dim ) && myObjHyps[ dim ][ Algo ].count() > 0 ) + if ( /*isAccessibleDim( dim ) &&*/ myObjHyps[ dim ][ Algo ].count() > 0 ) { SMESH::SMESH_Hypothesis_var anOldAlgo = myObjHyps[ dim ][ Algo ].first().first; SMESH::SMESH_Hypothesis_var anAlgoVar = getAlgo( dim ); @@ -2667,7 +2661,7 @@ void SMESHGUI_MeshOp::onAlgoSetByMeshType( const int theTabIndex, const int theI * \param theIndex - Index of current type of mesh */ //================================================================================ -void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theIndex) +void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theIndex ) { QStringList anAvailableAlgs; QString anCompareType = currentMeshTypeName( theIndex ); @@ -2685,7 +2679,7 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI anCurrentAvailableAlgo = -1; isNone = currentHyp( dim, Algo ) < 0; //return current algo in current tab and set new algorithm list - HypothesisData* algoCur; + HypothesisData* algoCur = 0; if ( !isNone && !myAvailableHypData[dim][Algo].empty() ) { algoCur = myAvailableHypData[dim][Algo].at( currentHyp( dim, Algo ) ); } @@ -2703,8 +2697,6 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI setCurrentHyp( dim, Algo, anCurrentAvailableAlgo ); if ( anCurrentAvailableAlgo > -1 ) isReqDisBound = algoCur->InputTypes.isEmpty(); - else if ( dim != SMESH::DIM_3D && currentHyp( SMESH::DIM_3D, Algo ) >= 0 ) - isReqDisBound = true; if ( isReqDisBound ) { aReqDim = dim; break; @@ -2717,8 +2709,8 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI } else for ( int i = SMESH::DIM_0D; i <= SMESH::DIM_3D; i++ ) { - if ( i > myMaxShapeDim || ( isReqDisBound && i < aReqDim ) ) myDlg->disableTab( i ); - else myDlg->enableTab( i ); + if ( i > myMaxShapeDim || ( isReqDisBound && i != aReqDim ) ) myDlg->disableTab( i ); + else myDlg->enableTab( i ); } myDlg->setCurrentTab( theTabIndex ); } @@ -2755,40 +2747,32 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI setCurrentHyp( dim, Algo, anCurrentAvailableAlgo ); } - if ( isNone || isReqDisBound ) { - for ( int i = SMESH::DIM_0D; i <= myMaxShapeDim; i++ ) { - if ( aDim != i ) { - myDlg->disableTab( i ); - } - } - } - else if ( !isNone ) { - if ( aDim == SMESH::DIM_2D) { - myDlg->disableTab( SMESH::DIM_3D ); - setCurrentHyp( SMESH::DIM_3D, Algo, -1); - } - for ( int i = myMaxShapeDim; i > SMESH::DIM_0D; i-- ) { - bool isNoneAlg = currentHyp( i, Algo ) < 0; - if ( !isNoneAlg ) - isReqDisBound = myAvailableHypData[i][Algo].at( currentHyp( i, Algo ) )->InputTypes.isEmpty(); - else - isReqDisBound = true; - if ( isReqDisBound && isNoneAlg ) { - for (int j = i - 1; j >= SMESH::DIM_0D; j--) { - if ( j < aDim && currentHyp( j+1, Algo ) < 0 ) { - myDlg->disableTab( j ); - setCurrentHyp( j , Algo, -1 ); - } + for ( int i = myMaxShapeDim; i >= SMESH::DIM_0D; i-- ) { + bool isNoneAlg = currentHyp( i, Algo ) < 0; + if ( !isNoneAlg ) + isReqDisBound = myAvailableHypData[i][Algo].at( currentHyp( i, Algo ) )->InputTypes.isEmpty(); + else + isReqDisBound = true; + if ( isReqDisBound && !isNoneAlg && i <= aDim) { + for (int j = myMaxShapeDim; j >= SMESH::DIM_0D; j--) { + if ( currentHyp( j, Algo ) < 0 ) { + myDlg->disableTab( j ); + setCurrentHyp( j , Algo, -1 ); } - break; - } - else if ( isNoneAlg ) { - myDlg->disableTab( i ); } + break; + } + else { + myDlg->enableTab( i ); } } - myDlg->enableTab( aDim ); - myDlg->setCurrentTab( aDim ); + if ( aDim == SMESH::DIM_2D) { + myDlg->disableTab( SMESH::DIM_3D ); + setCurrentHyp( SMESH::DIM_3D, Algo, -1); + } + + int currentTab = ( theTabIndex <= aDim ) ? theTabIndex : aDim; + myDlg->setCurrentTab( currentTab ); } THypDataList anAvailableAlgsData; QStringList aHypothesesSetsList = SMESH::GetHypothesesSets( aDim );