X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_HypothesesUtils.cxx;h=dce31dfb8b638b0256424f7a0f135ad173e84804;hp=9902e04a847eb0acc96c5cb64e0f699465f35c48;hb=7eda9ca931ed2a11cb5e4637e4ffe19f5c061115;hpb=6aea23b893abc82fbeecf5924d0939370c110271 diff --git a/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx b/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx index 9902e04a8..dce31dfb8 100644 --- a/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx +++ b/src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 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 @@ -91,21 +91,25 @@ namespace SMESH QList myListOfHypothesesSets; - void processHypothesisStatus(const int theHypStatus, + void processHypothesisStatus(const int theHypStatus, SMESH::SMESH_Hypothesis_ptr theHyp, - const bool theIsAddition) + const bool theIsAddition, + const char* theError = 0) { if (theHypStatus > SMESH::HYP_OK) { // get Hyp name QString aHypName ("NULL Hypothesis"); if (!CORBA::is_nil(theHyp)) { _PTR(SObject) Shyp = SMESH::FindSObject(theHyp); - if (Shyp) + if (Shyp) { // name in study aHypName = Shyp->GetName().c_str(); - else + } + else { // label in xml file - aHypName = GetHypothesisData(theHyp->GetName())->Label; + CORBA::String_var hypType = theHyp->GetName(); + aHypName = GetHypothesisData( hypType.in() )->Label; + } } // message @@ -116,12 +120,22 @@ namespace SMESH else aMsg = (isFatal ? "SMESH_CANT_RM_HYP" : "SMESH_RM_HYP_WRN"); - aMsg = QObject::tr(aMsg.toLatin1().data()).arg(aHypName) + - QObject::tr(QString("SMESH_HYP_%1").arg(theHypStatus).toLatin1().data()); + aMsg = QObject::tr(aMsg.toLatin1().data()).arg(aHypName); - if ( theHypStatus == SMESH::HYP_HIDDEN_ALGO ) // PAL18501 - aMsg = aMsg.arg( GetHypothesisData(theHyp->GetName())->Dim[0] ); + if ( theError && theError[0] ) + { + aMsg += theError; + } + else + { + aMsg += QObject::tr(QString("SMESH_HYP_%1").arg(theHypStatus).toLatin1().data()); + if ( theHypStatus == SMESH::HYP_HIDDEN_ALGO ) { // PAL18501 + CORBA::String_var hypType = theHyp->GetName(); + if ( HypothesisData* hd = GetHypothesisData( hypType.in() )) + aMsg = aMsg.arg( hd->Dim[0] ); + } + } SUIT_MessageBox::warning(SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), aMsg); @@ -281,20 +295,16 @@ namespace SMESH // fill list of hypotheses/algorithms THypothesisDataMap& pMap = isAlgo ? myAlgorithmsMap : myHypothesesMap; THypothesisDataMap::ConstIterator anIter; - for ( anIter = pMap.begin(); anIter != pMap.end(); anIter++ ) { + for ( anIter = pMap.begin(); anIter != pMap.end(); anIter++ ) + { HypothesisData* aData = anIter.value(); - if(!aData || aData->Label.isEmpty()) continue; - if (( theDim < 0 || aData->Dim.contains( theDim )) && - ( isAlgo || aData->IsAuxOrNeedHyp == isAux ) && - ( aData->Context == "ANY" || aData->Context == context )) + if (( aData && !aData->Label.isEmpty() ) && + ( theDim < 0 || aData->Dim.contains( theDim )) && + ( isAlgo || aData->IsAuxOrNeedHyp == isAux ) && + ( aData->Context == "ANY" || aData->Context == context ) && + ( !checkGeometry || aData->IsNeedGeometry == isNeedGeometry )) { - if (checkGeometry) { - if (aData->IsNeedGeometry == isNeedGeometry) - aHypList.append(anIter.key()); - } - else { - aHypList.append(anIter.key()); - } + aHypList.append(anIter.key()); } } return aHypList; @@ -459,7 +469,7 @@ namespace SMESH // It is used to obtain plugin root dir environment variable // in the SMESHGUI_HypothesisDlg class. Plugin root dir environment // variable is used to display documentation. - aCreator->setProperty(PLUGIN_NAME,aHypData->PluginName); + aCreator->setProperty(SMESH::Plugin_Name(),aHypData->PluginName); } } } @@ -501,10 +511,14 @@ namespace SMESH return SMESH::SMESH_Hypothesis::_nil(); } + bool IsApplicable(const QString& aHypType, GEOM::GEOM_Object_ptr theGeomObject, const bool toCheckAll) { + if ( getenv("NO_LIMIT_ALGO_BY_SHAPE")) // allow a workaround for a case if + return true; // IsApplicable() returns false due to a bug + HypothesisData* aHypData = GetHypothesisData(aHypType); QString aServLib = aHypData->ServerLibName; return SMESHGUI::GetSMESHGen()->IsApplicable( aHypType.toLatin1().data(), @@ -524,7 +538,8 @@ namespace SMESH _PTR(SObject) SM = SMESH::FindSObject(aMesh); GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh(SM); try { - res = aMesh->AddHypothesis(aShapeObject, aHyp); + CORBA::String_var error; + res = aMesh->AddHypothesis(aShapeObject, aHyp, error.out()); if (res < SMESH::HYP_UNKNOWN_FATAL) { _PTR(SObject) aSH = SMESH::FindSObject(aHyp); if (SM && aSH) { @@ -533,7 +548,7 @@ namespace SMESH } if (res > SMESH::HYP_OK) { wc.suspend(); - processHypothesisStatus(res, aHyp, true); + processHypothesisStatus(res, aHyp, true, error.in() ); wc.resume(); } } @@ -558,8 +573,10 @@ namespace SMESH SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather(); _PTR(SObject) SsubM = SMESH::FindSObject(aSubMesh); GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh(SsubM); - if (!aMesh->_is_nil() && SsubM && !aShapeObject->_is_nil()) { - res = aMesh->AddHypothesis(aShapeObject, aHyp); + if (!aMesh->_is_nil() && SsubM && !aShapeObject->_is_nil()) + { + CORBA::String_var error; + res = aMesh->AddHypothesis( aShapeObject, aHyp, error.out() ); if (res < SMESH::HYP_UNKNOWN_FATAL) { _PTR(SObject) meshSO = SMESH::FindSObject(aMesh); if (meshSO) @@ -567,7 +584,7 @@ namespace SMESH } if (res > SMESH::HYP_OK) { wc.suspend(); - processHypothesisStatus(res, aHyp, true); + processHypothesisStatus( res, aHyp, true, error.in() ); wc.resume(); } } @@ -612,7 +629,7 @@ namespace SMESH { SMESH_Hypothesis_var hypo = SMESH_Hypothesis::_narrow( SObjectToObject( aHypObj ) ); SObjectList meshList = GetMeshesUsingAlgoOrHypothesis( hypo ); - for( int i = 0; i < meshList.size(); i++ ) + for( size_t i = 0; i < meshList.size(); i++ ) RemoveHypothesisOrAlgorithmOnMesh( meshList[ i ], hypo ); } } @@ -712,7 +729,7 @@ namespace SMESH QString GetMessageOnAlgoStateErrors(const algo_error_array& errors) { QString resMsg; // PAL14861 = QObject::tr("SMESH_WRN_MISSING_PARAMETERS") + ":\n"; - for ( int i = 0; i < errors.length(); ++i ) { + for ( size_t i = 0; i < errors.length(); ++i ) { const SMESH::AlgoStateError & error = errors[ i ]; const bool hasAlgo = ( strlen( error.algoName ) != 0 ); QString msg;