Salome HOME
NRI : First integration.
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_StudyAPI.cxx
diff --git a/src/SMESHGUI/SMESHGUI_StudyAPI.cxx b/src/SMESHGUI/SMESHGUI_StudyAPI.cxx
new file mode 100644 (file)
index 0000000..ff871b1
--- /dev/null
@@ -0,0 +1,691 @@
+using namespace std;
+//  File      : SMESHGUI_StudyAPI.cxx
+//  Created   : Fri May 17 15:23:35 CEST 2002
+//  Author    : Yves FRICAUD 
+//  Project   : SALOME
+//  Module    : SMESH
+//  Copyright : Open CASCADE
+//  $Header: 
+
+#include "SMESHGUI_StudyAPI.h"
+#include "utilities.h"
+#include "Utils_ORB_INIT.hxx"
+#include "Utils_SINGLETON.hxx"
+
+#include "QAD_MessageBox.h"
+#include "QAD_Application.h"
+
+// QT Includes
+#include <qobject.h>
+
+// Open CASCADE Includes
+#include "Standard_CString.hxx"
+
+static CORBA::ORB_var _orb;
+
+// Tags definition 
+long Tag_HypothesisRoot  = 1;
+long Tag_AlgorithmsRoot  = 2;
+
+long Tag_RefOnShape      = 1;
+long Tag_RefOnAppliedHypothesis = 2;
+long Tag_RefOnAppliedAlgorithms = 3;
+
+long Tag_SubMeshOnVertex = 4;
+long Tag_SubMeshOnEdge = 5;
+long Tag_SubMeshOnFace = 6;
+long Tag_SubMeshOnSolid = 7;
+long Tag_SubMeshOnCompound = 8;
+
+
+
+static char* IORToString (CORBA::Object_ptr obj)
+{
+  //  MESSAGE ( " IORToString " << _orb->object_to_string(obj) )
+  return _orb->object_to_string(obj);
+}
+
+CORBA::Object_ptr SMESHGUI_StudyAPI::StringToIOR (const char* IOR)
+{
+  //  MESSAGE ( " StringToIOR " << _orb->string_to_object(IOR) )
+  return _orb->string_to_object(IOR);
+}
+//=======================================================================
+// function :
+// purpose  : Constructor
+//=======================================================================
+SMESHGUI_StudyAPI::SMESHGUI_StudyAPI ()
+{
+}
+
+SMESHGUI_StudyAPI::SMESHGUI_StudyAPI ( SALOMEDS::Study_ptr aStudy,
+                                      SMESH::SMESH_Gen_ptr CompMesh)
+{
+  myStudy = aStudy;
+  myStudyBuilder = aStudy->NewBuilder();
+
+  setOrb();
+
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    QAD_MessageBox::warn1 ( (QWidget*)QAD_Application::getDesktop(),
+                           QObject::tr("WARNING"), 
+                           QObject::tr("WRN_STUDY_LOCKED"),
+                           QObject::tr("BUT_OK") );
+    
+    return;
+  }
+  // NRI
+
+  SALOMEDS::SComponent_var father = aStudy->FindComponent("MESH");
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributeName_var    aName;
+  SALOMEDS::AttributePixMap_var  aPixmap;
+  
+  if (father->_is_nil()) {
+    father = myStudyBuilder->NewComponent("MESH");
+    anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
+    //NRI    aName->SetValue(QObject::tr("SMESH_MEN_COMPONENT"));
+    aName->SetValue( QAD_Application::getDesktop()->getComponentUserName( "SMESH" ) );
+    anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
+    aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+    aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
+  }
+  myStudyBuilder->DefineComponentInstance(father, CompMesh );
+  mySComponentMesh = SALOMEDS::SComponent::_narrow( father );
+}
+
+//=======================================================================
+// function :
+// purpose  : Destructor
+//=======================================================================
+SMESHGUI_StudyAPI::~SMESHGUI_StudyAPI ()
+{
+}
+
+//=======================================================================
+// function :
+// purpose  : Update
+//=======================================================================
+void SMESHGUI_StudyAPI::Update(SMESH::SMESH_Gen_ptr CompMesh)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return;
+  }
+  // NRI
+
+  SALOMEDS::SComponent_var father = myStudy->FindComponent("MESH");
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributeName_var    aName;
+  SALOMEDS::AttributePixMap_var  aPixmap;
+  
+  if (father->_is_nil()) {
+    father = myStudyBuilder->NewComponent("MESH");
+    anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
+    //NRI    aName->SetValue(QObject::tr("SMESH_MEN_COMPONENT"));
+    aName->SetValue( QAD_Application::getDesktop()->getComponentUserName( "SMESH" ) );
+    anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
+    aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+    aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
+  }
+  myStudyBuilder->DefineComponentInstance(father, CompMesh );
+  mySComponentMesh = SALOMEDS::SComponent::_narrow( father );  
+}
+
+//=======================================================================
+// function : AddNewMesh 
+// purpose  :
+//=======================================================================
+
+SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::AddNewMesh (SMESH::SMESH_Mesh_ptr M)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return SALOMEDS::SObject::_nil();
+  }
+  // NRI
+
+  //Find or Create Hypothesis root
+  SALOMEDS::SObject_var             HypothesisRoot;
+  SALOMEDS::GenericAttribute_var    anAttr;
+  SALOMEDS::AttributeName_var       aName;
+  SALOMEDS::AttributeIOR_var        anIOR;
+  SALOMEDS::AttributeSelectable_var aSelAttr;
+  SALOMEDS::AttributePixMap_var     aPixmap;
+
+  if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) {
+    HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName");
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
+    aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS"));
+    anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap");
+    aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+    aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
+    anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable");
+    aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
+    aSelAttr->SetSelectable(false);
+  }
+
+  SALOMEDS::SObject_var AlgorithmsRoot;
+  if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) {
+    AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName");
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
+    aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS"));
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
+    aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+    aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable");
+    aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
+    aSelAttr->SetSelectable(false);
+  }
+
+  // Add New Mesh
+  SALOMEDS::SObject_var newMesh = myStudyBuilder->NewObject(mySComponentMesh);
+  anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributePixMap");
+  aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+  aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
+  anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributeIOR");
+  anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+  anIOR->SetValue(IORToString(M));
+  return SALOMEDS::SObject::_narrow( newMesh );
+}
+
+
+//=======================================================================
+// function : SetShape
+// purpose  :
+//=======================================================================
+void SMESHGUI_StudyAPI::SetShape (SALOMEDS::SObject_ptr SO_MorSM, 
+                                 SALOMEDS::SObject_ptr SO_GeomShape )
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return;
+  }
+  // NRI
+  SALOMEDS::SObject_var SO = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnShape);
+  myStudyBuilder->Addreference (SO,SO_GeomShape);
+}
+  
+//=======================================================================
+// function : GetShapeOnMeshOrSubMesh
+// purpose  :
+//=======================================================================
+GEOM::GEOM_Shape_ptr SMESHGUI_StudyAPI::GetShapeOnMeshOrSubMesh(SALOMEDS::SObject_ptr SO_Mesh_Or_SubMesh)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return GEOM::GEOM_Shape::_nil();
+  }
+  // NRI
+
+  GEOM::GEOM_Shape_var Shape;
+  SALOMEDS::SObject_var aSO, aGeom;
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributeIOR_var     anIOR;
+  if ( SO_Mesh_Or_SubMesh->FindSubObject( Tag_RefOnShape, aSO ) ) {
+    if ( aSO->ReferencedObject(aGeom) ) {
+      if (aGeom->FindAttribute(anAttr, "AttributeIOR")) {
+        anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+       return GEOM::GEOM_Shape::_narrow( _orb->string_to_object(anIOR->Value()) );
+      }
+    }
+  }
+  return GEOM::GEOM_Shape::_nil();
+}
+
+//=======================================================================
+// function : AddNewHypothesis 
+// purpose  :
+//=======================================================================
+SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::AddNewHypothesis  (SMESH::SMESH_Hypothesis_ptr H)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return SALOMEDS::SObject::_nil();
+  }
+  // NRI
+
+  //Find or Create Hypothesis root
+  SALOMEDS::SObject_var             HypothesisRoot;
+  SALOMEDS::GenericAttribute_var    anAttr;
+  SALOMEDS::AttributeName_var       aName;
+  SALOMEDS::AttributeIOR_var        anIOR;
+  SALOMEDS::AttributeSelectable_var aSelAttr;
+  SALOMEDS::AttributePixMap_var     aPixmap;
+
+  if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) {
+    HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName");
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
+    aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS"));
+    anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable");
+    aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
+    aSelAttr->SetSelectable(false);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap");
+    aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+    aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
+  }
+  // Add New Hypothesis
+  SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(HypothesisRoot);
+  anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap");
+  aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+  QString aType = H->GetName();
+  MESSAGE ( " aType " << aType )
+  aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_" + aType );
+  //    if ( aType.compare("LocalLength") == 0 )
+  //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_LENGTH" );
+  //    else if ( aType.compare("NumberOfSegments") == 0 )
+  //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_SEGMENT" );
+  //    else if ( aType.compare("MaxElementArea") == 0 )
+  //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_AREA" );
+  //    else if ( aType.compare("MaxElementVolume") == 0 )
+  //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_VOLUME" );
+  anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR");
+  anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+  anIOR->SetValue(IORToString(H));
+  return SALOMEDS::SObject::_narrow(newHypo);
+}  
+
+//=======================================================================
+// function : AddNewAlgorithms 
+// purpose  :
+//=======================================================================
+SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::AddNewAlgorithms  (SMESH::SMESH_Hypothesis_ptr H)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return SALOMEDS::SObject::_nil();
+  }
+  // NRI
+
+  //Find or Create Algorithms root
+  SALOMEDS::SObject_var             AlgorithmsRoot;
+  SALOMEDS::GenericAttribute_var    anAttr;
+  SALOMEDS::AttributeName_var       aName;
+  SALOMEDS::AttributeIOR_var        anIOR;
+  SALOMEDS::AttributeSelectable_var aSelAttr;
+  SALOMEDS::AttributePixMap_var     aPixmap;
+
+  if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) {
+    AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName");
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
+    aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS"));
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable");
+    aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
+    aSelAttr->SetSelectable(false);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
+    aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+    aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
+  }
+  // Add New Algorithms
+  SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(AlgorithmsRoot);
+  anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap");
+  aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+  QString aType = H->GetName();
+  //  if ( aType.compare("Regular_1D") == 0 )
+  aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_" + aType );
+  //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_REGULAR" );
+  //    else if ( aType.compare("MEFISTO_2D") == 0 )
+  //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_MEFISTO" );
+  //    else if ( aType.compare("Quadrangle_2D") == 0 )
+  //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_QUAD" );
+  //    else if ( aType.compare("Hexa_3D") == 0 )
+  //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_HEXA" );
+  anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR");
+  anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+  anIOR->SetValue(IORToString(H));
+  return SALOMEDS::SObject::_narrow(newHypo);
+}  
+
+
+//=======================================================================
+// function : AddSubMeshOnShape
+// purpose  :
+//=======================================================================
+SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::AddSubMeshOnShape (SALOMEDS::SObject_ptr SO_Mesh, 
+                                                           SMESH::SMESH_subMesh_ptr SM, 
+                                                           GEOM::shape_type ST)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return SALOMEDS::SObject::_nil();
+  }
+  // NRI
+
+  long Tag_Shape ;
+  Standard_CString Name;
+
+  if      (ST == GEOM::SOLID) {Tag_Shape = Tag_SubMeshOnSolid;    Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnSolid"));}
+  else if (ST == GEOM::FACE)  {Tag_Shape = Tag_SubMeshOnFace;     Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnFace"));}
+  else if (ST == GEOM::EDGE)  {Tag_Shape = Tag_SubMeshOnEdge;     Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnEdge"));}
+  else if (ST == GEOM::VERTEX){Tag_Shape = Tag_SubMeshOnVertex;   Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnVertex"));}
+  else {
+    Tag_Shape = Tag_SubMeshOnCompound; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnCompound"));
+  }
+
+  SALOMEDS::SObject_var              SubmeshesRoot;
+  SALOMEDS::GenericAttribute_var     anAttr;
+  SALOMEDS::AttributeName_var        aName;
+  SALOMEDS::AttributeIOR_var         anIOR;
+  SALOMEDS::AttributeSelectable_var  aSelAttr;
+
+  if (!SO_Mesh->FindSubObject (Tag_Shape,SubmeshesRoot )) {
+    SubmeshesRoot = myStudyBuilder->NewObjectToTag (SO_Mesh, Tag_Shape);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeName");
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
+    aName->SetValue(Name);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeSelectable");
+    aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
+    aSelAttr->SetSelectable(false);
+  }
+  SALOMEDS::SObject_var SO = myStudyBuilder->NewObject (SubmeshesRoot);
+  anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeIOR");
+  anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+  anIOR->SetValue(IORToString(SM));
+  return SALOMEDS::SObject::_narrow( SO );
+}
+
+//=======================================================================
+// function : AddSubMeshOnShape 
+// purpose  :
+//=======================================================================
+SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::AddSubMeshOnShape (SALOMEDS::SObject_ptr SO_Mesh, 
+                                                           SALOMEDS::SObject_ptr SO_GeomShape, 
+                                                           SMESH::SMESH_subMesh_ptr SM,
+                                                           GEOM::shape_type ST)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return SALOMEDS::SObject::_nil();
+  }
+  // NRI
+
+  SALOMEDS::SObject_var SO_SM = AddSubMeshOnShape (SO_Mesh,SM,ST);
+  SetShape (SO_SM,SO_GeomShape);
+  //  SetShapeOnSubMesh (SO_SM,SO_GeomShape);
+  return SALOMEDS::SObject::_narrow( SO_SM );
+}
+
+
+//=======================================================================
+// function : SetHypothesis 
+// purpose  : 
+//=======================================================================
+void SMESHGUI_StudyAPI::SetHypothesis     (SALOMEDS::SObject_ptr SO_MorSM, 
+                                          SALOMEDS::SObject_ptr SO_Hypothesis)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return;
+  }
+  // NRI
+
+  //Find or Create Applied Hypothesis root
+  SALOMEDS::SObject_var             AHR;
+  SALOMEDS::GenericAttribute_var    anAttr;
+  SALOMEDS::AttributeName_var       aName;
+  SALOMEDS::AttributeSelectable_var aSelAttr;
+  SALOMEDS::AttributePixMap_var     aPixmap;
+
+  if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedHypothesis, AHR)) {
+    AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedHypothesis);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName");
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
+    aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS"));
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable");
+    aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
+    aSelAttr->SetSelectable(false);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap");
+    aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+    aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
+  }
+  SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR);
+  myStudyBuilder->Addreference (SO,SO_Hypothesis);
+}   
+
+//=======================================================================
+// function : SetAlgorithms 
+// purpose  : 
+//=======================================================================
+void SMESHGUI_StudyAPI::SetAlgorithms     (SALOMEDS::SObject_ptr SO_MorSM, 
+                                          SALOMEDS::SObject_ptr SO_Algorithms)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return;
+  }
+  // NRI
+
+  //Find or Create Applied Algorithms root
+  SALOMEDS::SObject_var             AHR;
+  SALOMEDS::GenericAttribute_var    anAttr;
+  SALOMEDS::AttributeName_var       aName;
+  SALOMEDS::AttributeSelectable_var aSelAttr;
+  SALOMEDS::AttributePixMap_var     aPixmap;
+
+  if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedAlgorithms, AHR)) {
+    AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedAlgorithms);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName");
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
+    aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS"));
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable");
+    aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
+    aSelAttr->SetSelectable(false);
+    anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap");
+    aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+    aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
+  }
+  SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR);
+  myStudyBuilder->Addreference (SO,SO_Algorithms);
+}   
+
+
+//=======================================================================
+// function :
+// purpose  : 
+//=======================================================================
+SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::FindMesh       (SMESH::SMESH_Mesh_ptr M)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return SALOMEDS::SObject::_nil();
+  }
+  // NRI
+  return SALOMEDS::SObject::_narrow( myStudy->FindObjectIOR (IORToString(M)) );
+}   
+
+//=======================================================================
+// function :
+// purpose  : 
+//=======================================================================
+SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::FindHypothesisOrAlgorithms (SMESH::SMESH_Hypothesis_ptr H)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return SALOMEDS::SObject::_nil();
+  }
+  // NRI
+  return SALOMEDS::SObject::_narrow( myStudy->FindObjectIOR (IORToString(H)) );
+} 
+  
+
+//=======================================================================
+// function :
+// purpose  : 
+//=======================================================================
+SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::FindSubMesh    (SMESH::SMESH_subMesh_ptr SM)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return SALOMEDS::SObject::_nil();
+  }
+  // NRI
+  return SALOMEDS::SObject::_narrow( myStudy->FindObjectIOR (IORToString(SM)) );
+}   
+
+void SMESHGUI_StudyAPI::setOrb()
+{
+  try {
+    ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
+    ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
+    _orb = init( 0 , 0 );
+  } catch (...) {
+    INFOS("internal error : orb not found");
+    _orb = 0;
+  }
+  ASSERT(! CORBA::is_nil(_orb));
+}
+
+//=======================================================================
+// function :
+// purpose  : 
+//=======================================================================
+void SMESHGUI_StudyAPI::SetTagHypothesisRoot()
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return;
+  }
+  // NRI
+  SALOMEDS::ChildIterator_var it = myStudy->NewChildIterator(mySComponentMesh);
+  int i = 0;
+  for (; it->More();it->Next()) {
+  i++;
+  }
+  Tag_HypothesisRoot = i++;
+}
+
+//=======================================================================
+// function :
+// purpose  : 
+//=======================================================================
+void SMESHGUI_StudyAPI::SetName( SALOMEDS::SObject_ptr SO, const char* Name )
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return;
+  }
+  // NRI
+
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributeName_var    aName;
+  anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeName");
+  aName = SALOMEDS::AttributeName::_narrow(anAttr);
+  aName->SetValue(Name);
+}
+
+//=======================================================================
+// function :
+// purpose  : 
+//=======================================================================
+void SMESHGUI_StudyAPI::UnSetHypothesis    (SALOMEDS::SObject_ptr SO_Applied_Hypothesis)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return;
+  }
+  // NRI
+  myStudyBuilder->RemoveObject(SO_Applied_Hypothesis);
+}
+
+//=======================================================================
+// function :
+// purpose  : 
+//=======================================================================
+void SMESHGUI_StudyAPI::UnSetAlgorithm      (SALOMEDS::SObject_ptr SO_Applied_Algorithm)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return;
+  }
+  // NRI
+  myStudyBuilder->RemoveObject(SO_Applied_Algorithm);
+}
+
+//=======================================================================
+// function :
+// purpose  : 
+//=======================================================================
+SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::GetMeshOrSubmesh  (SALOMEDS::SObject_ptr SO)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return SALOMEDS::SObject::_nil();
+  }
+  // NRI
+
+  SALOMEDS::SObject_var MorSM,SB;
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributeName_var    aName;
+  SALOMEDS::AttributeIOR_var     anIOR;
+  
+  if (SO->FindAttribute(anAttr, "AttributeIOR")) {
+    anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+    GEOM::GEOM_Shape_var Shape = GEOM::GEOM_Shape::_narrow( _orb->string_to_object(anIOR->Value()) );
+    if (!Shape->_is_nil()) {
+      //It s a shape
+      MorSM = SO->GetFather();
+      //      MESSAGE ( " MorSM  shape " << MorSM->GetID() )
+      return SALOMEDS::SObject::_narrow( MorSM);
+    }
+  }
+  
+  if (SO->ReferencedObject(SB)) {
+    //It's Reference on Hypothesis or Algorithm
+    MorSM = SO->GetFather()->GetFather();
+    //    MESSAGE ( " MorSM reference " << MorSM->GetID() )
+    return SALOMEDS::SObject::_narrow( MorSM);
+  }
+  // It's  SMESH_MEN_APPLIED_HYPOTHESIS or SMESH_MEN_APPLIED_ALGORITHMS or SubMeshesOnFace etc...
+  MorSM = SO->GetFather();
+  //  MESSAGE ( " MorSM  banniere " << MorSM->GetID() )
+  return SALOMEDS::SObject::_narrow( MorSM);
+}
+
+void SMESHGUI_StudyAPI::ModifiedMesh( SALOMEDS::SObject_ptr MorSM, bool right)
+{
+  // NRI : Temporary added
+  if ( myStudy->GetProperties()->IsLocked() ) {
+    return ;
+  }
+  // NRI
+
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributePixMap_var  aPixmap;
+  
+  anAttr = myStudyBuilder->FindOrCreateAttribute(MorSM, "AttributePixMap");
+  aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+  if (right) {
+    aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
+  } else {
+    aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_WARN" );
+  }
+  
+  int i = 1;
+  SALOMEDS::ChildIterator_var it = myStudy->NewChildIterator(MorSM);
+  for (; it->More();it->Next()) {
+    SALOMEDS::SObject_var Obj = it->Value();
+    if ( i >= 4 ) {
+      int j = 1;
+      SALOMEDS::ChildIterator_var it1 = myStudy->NewChildIterator(Obj);
+      for (; it1->More();it1->Next()) {
+       SALOMEDS::SObject_var Obj1 = it1->Value();
+       anAttr = myStudyBuilder->FindOrCreateAttribute(Obj1, "AttributePixMap");
+       aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
+       if (right) {
+         aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
+       } else {
+         aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_WARN" );
+       }
+      }
+    }
+    i++;
+  }
+}