Salome HOME
6ed39d3c8ccfc70d3c9f1fd6a0c6d14bc9b0a499
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_Swig.cxx
1 //  SMESH SMESHGUI : GUI for SMESH component
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
6 //  This library is free software; you can redistribute it and/or 
7 //  modify it under the terms of the GNU Lesser General Public 
8 //  License as published by the Free Software Foundation; either 
9 //  version 2.1 of the License. 
10 // 
11 //  This library is distributed in the hope that it will be useful, 
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
14 //  Lesser General Public License for more details. 
15 // 
16 //  You should have received a copy of the GNU Lesser General Public 
17 //  License along with this library; if not, write to the Free Software 
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : SMESH_Swig.cxx
25 //  Author : Nicolas REJNERI
26 //  Module : SMESH
27 //  $Header$
28
29 using namespace std;
30 #include "SMESHGUI_Swig.hxx"
31
32 #include "Utils_ORB_INIT.hxx"
33 #include "Utils_SINGLETON.hxx"
34
35 #include <SMESHGUI.h>
36 #include <SMESHGUI_GEOMGenUtils.h>
37
38 // SALOME Includes
39 #include "SUIT_ResourceMgr.h"
40 #include "SUIT_Session.h"
41
42 #include "SalomeApp_Application.h"
43
44 #include "utilities.h"
45
46 // Open CASCADE Includes
47 #include <TopoDS.hxx>
48
49 // IDL Headers
50 #include <SALOMEconfig.h>
51 #include CORBA_SERVER_HEADER(SMESH_Gen)
52 #include CORBA_SERVER_HEADER(SMESH_Mesh)
53 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
54
55 static CORBA::ORB_var _orb;
56
57 static char* ObjectToString (CORBA::Object_ptr obj)
58 {
59   return _orb->object_to_string(obj);
60 }
61
62 static CORBA::Object_ptr StringToObject (const char* ior)
63 {
64   return _orb->string_to_object(ior);
65 }
66
67 SMESH_Swig::SMESH_Swig()
68 {
69   MESSAGE("Constructeur");
70   setOrb();
71 }
72
73 void SMESH_Swig::Init(int studyID)
74 {
75   MESSAGE("Init");
76   SMESH::SMESH_Gen_var CompMesh = SMESHGUI::GetSMESHGen();
77   GEOM::GEOM_Gen_var CompGeom = SMESH::GetGEOMGen();
78
79   SUIT_ResourceMgr* resMgr = SMESHGUI::resourceMgr();
80   if ( resMgr ) {
81     resMgr->loadLanguage( QString::null, "en" );
82     /*QString msg;
83     if (!resMgr->loadResources( "SMESH", msg ))
84       MESSAGE ( msg )*/
85   }
86
87   SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
88   if( !app )
89     return;
90
91   CORBA::Object_var obj = app->namingService()->Resolve("/myStudyManager");
92   SALOMEDS::StudyManager_var myStudyMgr = SALOMEDS::StudyManager::_narrow(obj);
93   myStudy = myStudyMgr->GetStudyByID(studyID);
94
95   CompMesh->SetCurrentStudy( myStudy.in() ); 
96
97   myStudyBuilder = myStudy->NewBuilder();
98   SALOMEDS::GenericAttribute_var anAttr;
99   SALOMEDS::AttributeName_var    aName;
100   SALOMEDS::AttributePixMap_var  aPixmap;
101
102   // See return value of SMESH::SMESH_Gen::ComponentDataType()
103   SALOMEDS::SComponent_var father = myStudy->FindComponent("SMESH");
104
105   if (father->_is_nil()) {
106     bool aLocked = myStudy->GetProperties()->IsLocked();
107     if (aLocked) myStudy->GetProperties()->SetLocked(false);
108     father = myStudyBuilder->NewComponent("SMESH");
109     anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
110     aName = SALOMEDS::AttributeName::_narrow(anAttr);
111     //NRI    aName->SetValue(QObject::tr("SMESH_MEN_COMPONENT"));
112     aName->SetValue( SMESHGUI::GetSMESHGUI()->moduleName() );
113     anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
114     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
115     aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
116     myStudyBuilder->DefineComponentInstance(father, CompMesh );
117     if (aLocked) myStudy->GetProperties()->SetLocked(true);
118   }
119   mySComponentMesh = SALOMEDS::SComponent::_narrow( father );
120
121   // Tags definition 
122   Tag_HypothesisRoot  = 1;
123   Tag_AlgorithmsRoot  = 2;
124   
125   Tag_RefOnShape      = 1;
126   Tag_RefOnAppliedHypothesis = 2;
127   Tag_RefOnAppliedAlgorithms = 3;
128   
129   Tag_SubMeshOnVertex = 4;
130   Tag_SubMeshOnEdge = 5;
131   Tag_SubMeshOnFace = 6;
132   Tag_SubMeshOnSolid = 7;
133   Tag_SubMeshOnCompound = 8;
134 }
135
136 SMESH_Swig::~SMESH_Swig()
137 {
138   MESSAGE("Destructeur");
139 }
140
141
142 const char* SMESH_Swig::AddNewMesh(const char* IOR)
143 {
144   MESSAGE("AddNewMesh");
145
146   // VSR: added temporarily - to be removed - objects are published automatically by engine
147   SALOMEDS::SObject_var SO = myStudy->FindObjectIOR( IOR );
148   if ( !SO->_is_nil() )
149     return SO->GetID();
150
151   //Find or Create Hypothesis root
152   SALOMEDS::GenericAttribute_var    anAttr;
153   SALOMEDS::AttributeName_var       aName;
154   SALOMEDS::AttributeIOR_var        anIOR;
155   SALOMEDS::AttributeSelectable_var aSelAttr;
156   SALOMEDS::AttributePixMap_var     aPixmap;
157
158   SALOMEDS::SObject_var HypothesisRoot;
159   if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) {
160     HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot);
161     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName");
162     aName = SALOMEDS::AttributeName::_narrow(anAttr);
163     aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS"));
164     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap");
165     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
166     aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
167     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable");
168     aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
169     aSelAttr->SetSelectable(false);
170   }
171
172   SALOMEDS::SObject_var AlgorithmsRoot;
173   if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) {
174     AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot);
175     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName");
176     aName = SALOMEDS::AttributeName::_narrow(anAttr);
177     aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS"));
178     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
179     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
180     aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
181     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable");
182     aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
183     aSelAttr->SetSelectable(false);
184   }
185
186   // Add New Mesh
187   SALOMEDS::SObject_var newMesh = myStudyBuilder->NewObject(mySComponentMesh);
188   anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributePixMap");
189   aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
190   aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
191   anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributeIOR");
192   anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
193   anIOR->SetValue(IOR);
194   return SALOMEDS::SObject::_narrow( newMesh )->GetID();
195 }
196
197 const char* SMESH_Swig::AddNewHypothesis(const char* IOR)
198 {
199   MESSAGE("AddNewHypothesis");
200
201   // VSR: added temporarily - to be removed - objects are published automatically by engine
202   SALOMEDS::SObject_var SO = myStudy->FindObjectIOR( IOR );
203   if ( !SO->_is_nil() )
204     return SO->GetID();
205
206   //Find or Create Hypothesis root
207   SALOMEDS::SObject_var             HypothesisRoot;
208   SALOMEDS::GenericAttribute_var    anAttr;
209   SALOMEDS::AttributeName_var       aName;
210   SALOMEDS::AttributeIOR_var        anIOR;
211   SALOMEDS::AttributeSelectable_var aSelAttr;
212   SALOMEDS::AttributePixMap_var     aPixmap;
213
214   if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) {
215     HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot);
216     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName");
217     aName = SALOMEDS::AttributeName::_narrow(anAttr);
218     aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS"));
219     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable");
220     aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
221     aSelAttr->SetSelectable(false);
222     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap");
223     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
224     aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
225   }
226   // Add New Hypothesis
227   SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(HypothesisRoot);
228   anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap");
229   aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
230   SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) );
231   QString aType = H->GetName();
232   aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_" + aType );
233 //    if ( aType.compare("LocalLength") == 0 )
234 //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_LENGTH" );
235 //    else if ( aType.compare("NumberOfSegments") == 0 )
236 //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_SEGMENT" );
237 //    else if ( aType.compare("MaxElementArea") == 0 )
238 //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_AREA" );
239 //    else if ( aType.compare("MaxElementVolume") == 0 )
240 //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_VOLUME" );
241   anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR");
242   anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
243   anIOR->SetValue(IOR);
244   return SALOMEDS::SObject::_narrow(newHypo)->GetID();
245 }
246
247 const char* SMESH_Swig::AddNewAlgorithms(const char* IOR)
248 {
249   MESSAGE("AddNewAlgorithms");
250
251   // VSR: added temporarily - to be removed - objects are published automatically by engine
252   SALOMEDS::SObject_var SO = myStudy->FindObjectIOR( IOR );
253   if ( !SO->_is_nil() )
254     return SO->GetID();
255
256   //Find or Create Algorithms root
257   SALOMEDS::SObject_var             AlgorithmsRoot;
258   SALOMEDS::GenericAttribute_var    anAttr;
259   SALOMEDS::AttributeName_var       aName;
260   SALOMEDS::AttributeIOR_var        anIOR;
261   SALOMEDS::AttributeSelectable_var aSelAttr;
262   SALOMEDS::AttributePixMap_var     aPixmap;
263
264   if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) {
265     AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot);
266     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName");
267     aName = SALOMEDS::AttributeName::_narrow(anAttr);
268     aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS"));
269     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable");
270     aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
271     aSelAttr->SetSelectable(false);
272     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
273     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
274     aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
275   }
276   // Add New Algorithms
277   SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(AlgorithmsRoot);
278   anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap");
279   aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
280   SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) );
281   QString aType = H->GetName();
282   aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_" + aType );
283 //    if ( aType.compare("Regular_1D") == 0 )
284 //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_REGULAR" );
285 //    else if ( aType.compare("MEFISTO_2D") == 0 )
286 //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_MEFISTO" );
287 //    else if ( aType.compare("Quadrangle_2D") == 0 )
288 //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_QUAD" );
289 //    else if ( aType.compare("Hexa_3D") == 0 )
290 //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_HEXA" );
291   anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR");
292   anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
293   anIOR->SetValue(IOR);
294   return SALOMEDS::SObject::_narrow(newHypo)->GetID();
295 }
296
297 void SMESH_Swig::SetShape(const char* ShapeEntry, const char* MeshEntry)
298 {
299   SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( MeshEntry );
300   SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( ShapeEntry );
301
302   if ( !SO_MorSM->_is_nil() && !SO_GeomShape->_is_nil() ) {
303     SALOMEDS::SObject_var SO = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnShape);
304     myStudyBuilder->Addreference (SO,SO_GeomShape);
305   }
306 }
307
308 void SMESH_Swig::SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char* Hypothesis_Entry)
309 {
310   SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry );
311   SALOMEDS::SObject_var SO_Hypothesis = myStudy->FindObjectID( Hypothesis_Entry );
312   SALOMEDS::GenericAttribute_var    anAttr;
313   SALOMEDS::AttributeName_var       aName;
314   SALOMEDS::AttributeSelectable_var aSelAttr;
315   SALOMEDS::AttributePixMap_var     aPixmap;
316
317   if ( !SO_MorSM->_is_nil() && !SO_Hypothesis->_is_nil() ) {
318     
319     //Find or Create Applied Hypothesis root
320     SALOMEDS::SObject_var AHR;
321     if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedHypothesis, AHR)) {
322       AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedHypothesis);
323       anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName");
324       aName = SALOMEDS::AttributeName::_narrow(anAttr);
325       aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS"));
326       anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable");
327       aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
328       aSelAttr->SetSelectable(false);
329       anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap");
330       aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
331       aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
332     }
333     SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR);
334     myStudyBuilder->Addreference (SO,SO_Hypothesis);
335   }
336 }
337 void SMESH_Swig::SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char* Algorithms_Entry)
338 {
339   SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry );
340   SALOMEDS::SObject_var SO_Algorithms = myStudy->FindObjectID( Algorithms_Entry );
341   SALOMEDS::GenericAttribute_var    anAttr;
342   SALOMEDS::AttributeName_var       aName;
343   SALOMEDS::AttributeSelectable_var aSelAttr;
344   SALOMEDS::AttributePixMap_var     aPixmap;
345
346   if ( !SO_MorSM->_is_nil() && !SO_Algorithms->_is_nil() ) {
347     //Find or Create Applied Algorithms root
348     SALOMEDS::SObject_var AHR;
349     if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedAlgorithms, AHR)) {
350       AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedAlgorithms);
351       anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName");
352       aName = SALOMEDS::AttributeName::_narrow(anAttr);
353       aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS"));
354       anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable");
355       aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
356       aSelAttr->SetSelectable(false);
357       anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap");
358       aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
359       aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
360     }
361     SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR);
362     myStudyBuilder->Addreference (SO,SO_Algorithms);
363   }
364 }
365
366 void SMESH_Swig::UnSetHypothesis(const char* Applied_Hypothesis_Entry )
367 {
368   SALOMEDS::SObject_var SO_Applied_Hypothesis = myStudy->FindObjectID( Applied_Hypothesis_Entry );
369   if ( !SO_Applied_Hypothesis->_is_nil() )
370     myStudyBuilder->RemoveObject(SO_Applied_Hypothesis);
371 }
372
373
374 const char* SMESH_Swig::AddSubMesh(const char* SO_Mesh_Entry, const char* SM_IOR, int ST)
375 {
376   SALOMEDS::SObject_var SO_Mesh = myStudy->FindObjectID( SO_Mesh_Entry );
377   if ( !SO_Mesh->_is_nil() ) {
378
379     long Tag_Shape ;
380     Standard_CString Name;
381     
382     if      (ST == TopAbs_SOLID) {Tag_Shape = Tag_SubMeshOnSolid;    Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnSolid"));}
383     else if (ST == TopAbs_FACE)  {Tag_Shape = Tag_SubMeshOnFace;     Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnFace"));}
384     else if (ST == TopAbs_EDGE)  {Tag_Shape = Tag_SubMeshOnEdge;     Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnEdge"));}
385     else if (ST == TopAbs_VERTEX){Tag_Shape = Tag_SubMeshOnVertex;   Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnVertex"));}
386     else {
387       Tag_Shape = Tag_SubMeshOnCompound; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnCompound"));
388     }
389     SALOMEDS::SObject_var SubmeshesRoot;
390     SALOMEDS::GenericAttribute_var        anAttr;
391     SALOMEDS::AttributeName_var           aName;
392     SALOMEDS::AttributeIOR_var            anIOR;
393     SALOMEDS::AttributeSelectable_var     aSelAttr;
394     if (!SO_Mesh->FindSubObject (Tag_Shape,SubmeshesRoot )) {
395       SubmeshesRoot = myStudyBuilder->NewObjectToTag (SO_Mesh, Tag_Shape);
396       anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeName");
397       aName = SALOMEDS::AttributeName::_narrow(anAttr);
398       aName->SetValue(Name);
399       anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeSelectable");
400       aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
401       aSelAttr->SetSelectable(false);
402     }
403
404     free(Name);
405
406     SALOMEDS::SObject_var SO = myStudyBuilder->NewObject (SubmeshesRoot);
407     anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeIOR");
408     anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
409     anIOR->SetValue(SM_IOR);
410     return SALOMEDS::SObject::_narrow( SO )->GetID();
411   }
412   return "";
413 }
414
415 const char* SMESH_Swig::AddSubMeshOnShape(const char* Mesh_Entry, const char* GeomShape_Entry, 
416                                              const char* SM_IOR, int ST)
417 {
418   SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( GeomShape_Entry );
419   if ( !SO_GeomShape->_is_nil() ) {
420     const char * SM_Entry = AddSubMesh (Mesh_Entry,SM_IOR,ST);
421     SALOMEDS::SObject_var SO_SM = myStudy->FindObjectID( SM_Entry );
422     if ( !SO_SM->_is_nil() ) {
423       SetShape (GeomShape_Entry, SM_Entry);
424       return SALOMEDS::SObject::_narrow( SO_SM )->GetID();
425     }
426   }
427   return "";
428 }
429
430 void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
431 {
432   //  SMESH_Actor* Mesh = smeshGUI->ReadScript(aM);
433 }
434
435 void SMESH_Swig::SetName(const char* Entry, const char* Name)
436 {
437   SALOMEDS::SObject_var SO = myStudy->FindObjectID( Entry );
438   SALOMEDS::GenericAttribute_var anAttr;
439   SALOMEDS::AttributeName_var    aName;
440   if ( !SO->_is_nil() )  {
441     anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeName");
442     aName = SALOMEDS::AttributeName::_narrow(anAttr);
443     aName->SetValue(Name);
444   }
445 }
446
447
448 void SMESH_Swig::setOrb()
449 {
450   try {
451     ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
452     ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
453     _orb = init( 0 , 0 );
454   } catch (...) {
455     INFOS("internal error : orb not found");
456     _orb = 0;
457   }
458   ASSERT(! CORBA::is_nil(_orb));
459 }