Salome HOME
NRI : First integration.
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_Swig.cxx
diff --git a/src/SMESHGUI/SMESHGUI_Swig.cxx b/src/SMESHGUI/SMESHGUI_Swig.cxx
new file mode 100644 (file)
index 0000000..b571990
--- /dev/null
@@ -0,0 +1,405 @@
+using namespace std;
+//  File      : SMESH_Swig.cxx
+//  Created   : Mon Jun 17 13:41:43 2002
+//  Author    : Nicolas REJNERI
+
+//  Project   : SALOME
+//  Module    : SMESH
+//  Copyright : Open CASCADE 2002
+//  $Header$
+
+
+#include "SMESHGUI_Swig.hxx"
+
+#include "Utils_ORB_INIT.hxx"
+#include "Utils_SINGLETON.hxx"
+
+// SALOME Includes
+#include "QAD_Application.h"
+#include "QAD_Desktop.h"
+#include "QAD_ResourceMgr.h"
+
+#include "utilities.h"
+
+// Open CASCADE Includes
+#include <TopoDS.hxx>
+
+// IDL Headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Gen)
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_Hypothesis)
+#include CORBA_SERVER_HEADER(GEOM_Shape)
+
+static CORBA::ORB_var _orb;
+
+static char* ObjectToString (CORBA::Object_ptr obj)
+{
+  return _orb->object_to_string(obj);
+}
+
+static CORBA::Object_ptr StringToObject (const char* ior)
+{
+  return _orb->string_to_object(ior);
+}
+
+SMESH_Swig::SMESH_Swig()
+{
+  MESSAGE("Constructeur");
+  setOrb();
+}
+
+void SMESH_Swig::Init(int studyID)
+{
+  MESSAGE("Init");
+  Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "SMESH");
+  SMESH::SMESH_Gen_var CompMesh = SMESH::SMESH_Gen::_narrow(comp);
+
+  QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
+  if ( resMgr ) {
+    QString msg;
+    if (!resMgr->loadResources( "SMESH", msg ))
+      MESSAGE ( msg )
+  }
+
+  CORBA::Object_var obj = QAD_Application::getDesktop()->getNameService()->Resolve("/myStudyManager");
+  SALOMEDS::StudyManager_var myStudyMgr = SALOMEDS::StudyManager::_narrow(obj);
+  myStudy = myStudyMgr->GetStudyByID(studyID);
+  myStudyBuilder = myStudy->NewBuilder();
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributeName_var    aName;
+  SALOMEDS::AttributePixMap_var  aPixmap;
+
+  SALOMEDS::SComponent_var father = myStudy->FindComponent("MESH");
+  
+  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 );
+
+  // Tags definition 
+  Tag_HypothesisRoot  = 1;
+  Tag_AlgorithmsRoot  = 2;
+  
+  Tag_RefOnShape      = 1;
+  Tag_RefOnAppliedHypothesis = 2;
+  Tag_RefOnAppliedAlgorithms = 3;
+  
+  Tag_SubMeshOnVertex = 4;
+  Tag_SubMeshOnEdge = 5;
+  Tag_SubMeshOnFace = 6;
+  Tag_SubMeshOnSolid = 7;
+  Tag_SubMeshOnCompound = 8;
+}
+
+SMESH_Swig::~SMESH_Swig()
+{
+  MESSAGE("Destructeur");
+}
+
+
+const char* SMESH_Swig::AddNewMesh(const char* IOR)
+{
+  MESSAGE("AddNewMesh");
+  //Find or Create Hypothesis root
+  SALOMEDS::GenericAttribute_var    anAttr;
+  SALOMEDS::AttributeName_var       aName;
+  SALOMEDS::AttributeIOR_var        anIOR;
+  SALOMEDS::AttributeSelectable_var aSelAttr;
+  SALOMEDS::AttributePixMap_var     aPixmap;
+
+  SALOMEDS::SObject_var HypothesisRoot;
+  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(IOR);
+  return SALOMEDS::SObject::_narrow( newMesh )->GetID();
+}
+
+const char* SMESH_Swig::AddNewHypothesis(const char* IOR)
+{
+  MESSAGE("AddNewHypothesis");
+  //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);
+  SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) );
+  QString aType = H->GetName();
+  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(IOR);
+  return SALOMEDS::SObject::_narrow(newHypo)->GetID();
+}
+
+const char* SMESH_Swig::AddNewAlgorithms(const char* IOR)
+{
+  MESSAGE("AddNewAlgorithms");
+  //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);
+  SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) );
+  QString aType = H->GetName();
+  aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_" + aType );
+//    if ( aType.compare("Regular_1D") == 0 )
+//      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(IOR);
+  return SALOMEDS::SObject::_narrow(newHypo)->GetID();
+}
+
+void SMESH_Swig::SetShape(const char* ShapeEntry, const char* MeshEntry)
+{
+  SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( MeshEntry );
+  SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( ShapeEntry );
+
+  if ( !SO_MorSM->_is_nil() && !SO_GeomShape->_is_nil() ) {
+    SALOMEDS::SObject_var SO = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnShape);
+    myStudyBuilder->Addreference (SO,SO_GeomShape);
+  }
+}
+
+void SMESH_Swig::SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char* Hypothesis_Entry)
+{
+  SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry );
+  SALOMEDS::SObject_var SO_Hypothesis = myStudy->FindObjectID( Hypothesis_Entry );
+  SALOMEDS::GenericAttribute_var    anAttr;
+  SALOMEDS::AttributeName_var       aName;
+  SALOMEDS::AttributeSelectable_var aSelAttr;
+  SALOMEDS::AttributePixMap_var     aPixmap;
+
+  if ( !SO_MorSM->_is_nil() && !SO_Hypothesis->_is_nil() ) {
+    
+    //Find or Create Applied Hypothesis root
+    SALOMEDS::SObject_var AHR;
+    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);
+  }
+}
+void SMESH_Swig::SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char* Algorithms_Entry)
+{
+  SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry );
+  SALOMEDS::SObject_var SO_Algorithms = myStudy->FindObjectID( Algorithms_Entry );
+  SALOMEDS::GenericAttribute_var    anAttr;
+  SALOMEDS::AttributeName_var       aName;
+  SALOMEDS::AttributeSelectable_var aSelAttr;
+  SALOMEDS::AttributePixMap_var     aPixmap;
+
+  if ( !SO_MorSM->_is_nil() && !SO_Algorithms->_is_nil() ) {
+    //Find or Create Applied Algorithms root
+    SALOMEDS::SObject_var AHR;
+    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);
+  }
+}
+
+void SMESH_Swig::UnSetHypothesis(const char* Applied_Hypothesis_Entry )
+{
+  SALOMEDS::SObject_var SO_Applied_Hypothesis = myStudy->FindObjectID( Applied_Hypothesis_Entry );
+  if ( !SO_Applied_Hypothesis->_is_nil() )
+    myStudyBuilder->RemoveObject(SO_Applied_Hypothesis);
+}
+
+
+const char* SMESH_Swig::AddSubMesh(const char* SO_Mesh_Entry, const char* SM_IOR, int ST)
+{
+  SALOMEDS::SObject_var SO_Mesh = myStudy->FindObjectID( SO_Mesh_Entry );
+  if ( !SO_Mesh->_is_nil() ) {
+
+    long Tag_Shape ;
+    Standard_CString Name;
+    
+    if      (ST == TopAbs_SOLID) {Tag_Shape = Tag_SubMeshOnSolid;    Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnSolid"));}
+    else if (ST == TopAbs_FACE)  {Tag_Shape = Tag_SubMeshOnFace;     Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnFace"));}
+    else if (ST == TopAbs_EDGE)  {Tag_Shape = Tag_SubMeshOnEdge;     Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnEdge"));}
+    else if (ST == TopAbs_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(SM_IOR);
+    return SALOMEDS::SObject::_narrow( SO )->GetID();
+  }
+  return "";
+}
+
+const char* SMESH_Swig::AddSubMeshOnShape(const char* Mesh_Entry, const char* GeomShape_Entry, 
+                                            const char* SM_IOR, int ST)
+{
+  SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( GeomShape_Entry );
+  if ( !SO_GeomShape->_is_nil() ) {
+    const char * SM_Entry = AddSubMesh (Mesh_Entry,SM_IOR,ST);
+    SALOMEDS::SObject_var SO_SM = myStudy->FindObjectID( SM_Entry );
+    if ( !SO_SM->_is_nil() ) {
+      SetShape (GeomShape_Entry, SM_Entry);
+      return SALOMEDS::SObject::_narrow( SO_SM )->GetID();
+    }
+  }
+  return "";
+}
+
+void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
+{
+  //  SMESH_Actor* Mesh = smeshGUI->ReadScript(aM);
+}
+
+void SMESH_Swig::SetName(const char* Entry, const char* Name)
+{
+  SALOMEDS::SObject_var SO = myStudy->FindObjectID( Entry );
+  SALOMEDS::GenericAttribute_var anAttr;
+  SALOMEDS::AttributeName_var    aName;
+  if ( !SO->_is_nil() )  {
+    anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeName");
+    aName = SALOMEDS::AttributeName::_narrow(anAttr);
+    aName->SetValue(Name);
+  }
+}
+
+
+void SMESH_Swig::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));
+}