X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshOp.cxx;h=52920773b97b13cffbbbc363a74c6fc4775f4fe5;hp=b6c53436919659381b67d54b348281e1d3c4cec3;hb=75d0234b452659c44159aaf33ed833af89a0ff4c;hpb=373690534aa482a4daea68f2a5a14fa9de8a9a1b diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.cxx b/src/SMESHGUI/SMESHGUI_MeshOp.cxx index b6c534369..52920773b 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshOp.cxx @@ -200,6 +200,8 @@ bool SMESHGUI_MeshOp::onApply() //================================================================================ void SMESHGUI_MeshOp::startOperation() { + myIgnoreAlgoSelection = false; + if (!myDlg) { myDlg = new SMESHGUI_MeshDlg( myToCreate, myIsMesh ); @@ -260,7 +262,6 @@ void SMESHGUI_MeshOp::startOperation() myDlg->setGeomPopupEnabled(false); selectionDone(); - myIgnoreAlgoSelection = false; myHasConcurrentSubBefore = false; myObjectToSelect.clear(); @@ -637,13 +638,14 @@ void SMESHGUI_MeshOp::selectionDone() { SMESH::SMESH_subMesh_var submeshVar = SMESH::SMESH_subMesh::_narrow( _CAST( SObject,pObj )->GetObject() ); + myIsMesh = submeshVar->_is_nil(); + myDlg->setTitile( myToCreate, myIsMesh ); myDlg->setObjectShown( SMESHGUI_MeshDlg::Mesh, !submeshVar->_is_nil() ); myDlg->setObjectShown( SMESHGUI_MeshDlg::Geom, true ); myDlg->objectWg( SMESHGUI_MeshDlg::Mesh, SMESHGUI_MeshDlg::Btn )->hide(); myDlg->objectWg( SMESHGUI_MeshDlg::Geom, SMESHGUI_MeshDlg::Btn )->hide(); myDlg->updateGeometry(); myDlg->adjustSize(); - myIsMesh = submeshVar->_is_nil(); readMesh(); } else @@ -941,7 +943,6 @@ void SMESHGUI_MeshOp::availableHyps( const int theDim, bool isAux = ( theHypType >= AddHyp ); QStringList aHypTypeNameList = SMESH::GetAvailableHypotheses( isAlgo, theDim, isAux, myIsOnGeometry, !myIsMesh ); - QStringList::const_iterator anIter; GEOM::GEOM_Object_var aGeomVar; QString aCurrentGeomToSelect; if ( !theMeshType.isEmpty() ) { @@ -953,23 +954,50 @@ void SMESHGUI_MeshOp::availableHyps( const int theDim, myHypMapIsApplicable.clear(); } + std::multimap< double, HypothesisData* > sortedHyps; + QStringList::const_iterator anIter; for ( anIter = aHypTypeNameList.begin(); anIter != aHypTypeNameList.end(); ++anIter ) { HypothesisData* aData = SMESH::GetHypothesisData( *anIter ); if ( ( isCompatible ( thePrevAlgoData, aData, theHypType ) && isCompatible ( theNextAlgoData, aData, theHypType ) ) || - ( theMeshType == "ANY" && aData->InputTypes.isEmpty())) { - if ( !theMeshType.isEmpty() && theDim >= SMESH::DIM_2D && + ( theMeshType == "ANY" && aData->InputTypes.isEmpty())) + { + if ( ( !theMeshType.isEmpty() ) && + ( theDim >= SMESH::DIM_2D ) && ( ( theMeshType != "ANY" && !isCompatibleToMeshType( aData, theMeshType )) || - !isCompatibleToGeometry( aData, aCurrentGeomToSelect, aGeomVar ))) + !isCompatibleToGeometry( aData, aCurrentGeomToSelect, aGeomVar ))) continue; + + int groupID = aData->GroupID; + int priority = aData->Priority; + if ( groupID < 0 || groupID > 9 ) groupID = 9; + if ( priority < 0 || priority > 999 ) priority = 999; + + sortedHyps.insert( std::make_pair( groupID + priority * 1e-3, aData )); + } + } + + if ( !sortedHyps.empty() ) + { + HypothesisData* aPrevGroup = SMESH::GetGroupTitle( sortedHyps.rbegin()->second, isAlgo ); + std::multimap< double, HypothesisData* >::iterator key_hyp = sortedHyps.begin(); + for ( ; key_hyp != sortedHyps.end(); ++key_hyp ) + { + HypothesisData* aData = key_hyp->second; + HypothesisData* aGroup = SMESH::GetGroupTitle( aData, isAlgo ); + if ( aPrevGroup != aGroup ) + { + theDataList.append( aGroup ); + theHyps.append( aGroup->Label ); + aPrevGroup = aGroup; + } theDataList.append( aData ); theHyps.append( aData->Label ); } } - if ( !theMeshType.isEmpty() && !aCurrentGeomToSelect.isEmpty() && - myLastGeomToSelect != aCurrentGeomToSelect ) + if ( !theMeshType.isEmpty() && !aCurrentGeomToSelect.isEmpty() ) myLastGeomToSelect = aCurrentGeomToSelect; } @@ -1164,12 +1192,9 @@ void SMESHGUI_MeshOp::initHypCreator( SMESHGUI_GenericHypothesisCreator* theCrea // Set shapes, of mesh and sub-mesh if any // get Entry of the Geom object - QString aGeomEntry = ""; - QString aMeshEntry = ""; - QString anObjEntry = ""; - aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); - aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh ); - anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj ); + QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom ); + QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh ); + QString anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj ); if ( myToCreate && myIsMesh ) aMeshEntry = aGeomEntry; @@ -1214,6 +1239,8 @@ void SMESHGUI_MeshOp::initHypCreator( SMESHGUI_GenericHypothesisCreator* theCrea theCreator->setShapeEntry( aGeomEntry ); if ( aMeshEntry != "" ) theCreator->setMainShapeEntry( aMeshEntry ); + + theCreator->setNoGeomMesh( !myIsOnGeometry && myIsMesh && !myToCreate ); } //================================================================================ @@ -1340,7 +1367,8 @@ void SMESHGUI_MeshOp::createHypothesis(const int theDim, aCreator->create(initParamHyp, aHypName, myDlg, this, SLOT( onHypoCreated( int ) ) ); dialog = true; } - else { + else + { SMESH::SMESH_Hypothesis_var aHyp = SMESH::CreateHypothesis(theTypeName, aHypName, false); aHyp.out(); @@ -2172,6 +2200,7 @@ SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim ) SMESH::CreateHypothesis(aHypName, aHypName, true); aHyp.out(); } + delete aCreator; } QStringList tmpList; _PTR(SComponent) aFather = SMESH::GetActiveStudyDocument()->FindComponent( "SMESH" );