Salome HOME
new script for testing hypothesis "NbSegments" (PAL8238)
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_HypothesesUtils.cxx
index 619ec75dc4b0c21cdb29596d78387a2a94e15e1f..8f4d0e782ba511a70ec32df4e04a723ab096fede 100644 (file)
@@ -142,9 +142,10 @@ namespace SMESH{
        QString HypsXml = HypsXmlList[ i ];
 
        // Find full path to the resource XML file
-       QString xmlFile = HypsXml + ".xml";
-       xmlFile = resMgr->path("resources", "SMESH", xmlFile);
-
+       QString xmlFile = resMgr->path("resources", "SMESH", HypsXml + ".xml");
+        if ( xmlFile.isEmpty() ) // try PLUGIN resources
+          xmlFile = resMgr->path("resources", HypsXml, HypsXml + ".xml");
+        
        QFile file (xmlFile);
        if (file.exists() && file.open(IO_ReadOnly)) {
          file.close();
@@ -421,10 +422,12 @@ namespace SMESH{
     int res = SMESH::HYP_UNKNOWN_FATAL;
     SUIT_OverrideCursor wc;
 
-    if (IObject->hasReference()) {
-      try {
-       _PTR(Study) aStudy = GetActiveStudyDocument();
-       SMESH_Hypothesis_var anHyp = IObjectToInterface<SMESH_Hypothesis>(IObject);
+    try {
+      _PTR(Study) aStudy = GetActiveStudyDocument();
+      SMESH_Hypothesis_var anHyp = IObjectToInterface<SMESH_Hypothesis>(IObject);
+      if (IObject->hasReference())
+      {
+        if(MYDEBUG) MESSAGE("HAS REFERENCE " << IObject->getEntry());
        _PTR(SObject) aHypSObj = aStudy->FindObjectID(IObject->getReference());
        if (aHypSObj) {
          _PTR(SObject) MorSM = SMESH::GetMeshOrSubmesh(aHypSObj);
@@ -456,20 +459,37 @@ namespace SMESH{
          }
        }
       }
-      catch(const SALOME::SALOME_Exception& S_ex) {
-       wc.suspend();
-       SalomeApp_Tools::QtCatchCorbaException(S_ex);
-       res = SMESH::HYP_UNKNOWN_FATAL;
+      else if (IObject->hasEntry())
+      {
+        if(MYDEBUG) MESSAGE("IObject entry HAS ENTRY " << IObject->getEntry());
+        SObjectList meshList = GetMeshesUsingAlgoOrHypothesis(anHyp);
+        for ( int i = 0; i < meshList.size(); ++i ) {
+          SMESH::SMESH_Mesh_var aMesh = 
+            SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( meshList[ i ]);
+          GEOM::GEOM_Object_var aShape = SMESH::GetShapeOnMeshOrSubMesh( meshList[ i ]);
+          if ( ! aMesh->_is_nil() && !aShape->_is_nil() ) {
+            res = aMesh->RemoveHypothesis(aShape, anHyp);
+            if ( res < SMESH::HYP_UNKNOWN_FATAL )
+              SMESH::ModifiedMesh( meshList[ i ], false);
+            if ( res > SMESH::HYP_OK ) {
+              wc.suspend();
+              processHypothesisStatus( res, anHyp, false );
+              wc.resume();
+            }
+          }
+        }
       }
     }
-    else if (IObject->hasEntry()) {
-      if(MYDEBUG) MESSAGE("IObject entry " << IObject->getEntry());
+    catch(const SALOME::SALOME_Exception& S_ex) {
+      wc.suspend();
+      SalomeApp_Tools::QtCatchCorbaException(S_ex);
+      res = SMESH::HYP_UNKNOWN_FATAL;
     }
     return res < SMESH::HYP_UNKNOWN_FATAL;
   }
 
   bool RemoveHypothesisOrAlgorithmOnMesh (_PTR(SObject) MorSM,
-                                         SMESH::SMESH_Hypothesis_ptr anHyp)
+                                          SMESH::SMESH_Hypothesis_ptr anHyp)
   {
     SALOMEDS::GenericAttribute_var anAttr;
     SALOMEDS::AttributeIOR_var anIOR;
@@ -478,9 +498,9 @@ namespace SMESH{
 
     if (MorSM) {
       try {
-       GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh(MorSM);
-       if (!aShapeObject->_is_nil()) {
-         SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>(MorSM);
+        GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh(MorSM);
+        if (!aShapeObject->_is_nil()) {
+          SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>(MorSM);
          SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>(MorSM);
 
          if (!aSubMesh->_is_nil())