Salome HOME
This commit was generated by cvs2git to track changes on a CVS vendor
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_StudyAPI.cxx
1 using namespace std;
2 //  File      : SMESHGUI_StudyAPI.cxx
3 //  Created   : Fri May 17 15:23:35 CEST 2002
4 //  Author    : Yves FRICAUD 
5 //  Project   : SALOME
6 //  Module    : SMESH
7 //  Copyright : Open CASCADE
8 //  $Header: 
9
10 #include "SMESHGUI_StudyAPI.h"
11 #include "utilities.h"
12 #include "Utils_ORB_INIT.hxx"
13 #include "Utils_SINGLETON.hxx"
14
15 #include "QAD_MessageBox.h"
16 #include "QAD_Desktop.h"
17 #include "QAD_Application.h"
18
19 // QT Includes
20 #include <qobject.h>
21
22 // Open CASCADE Includes
23 #include "Standard_CString.hxx"
24
25 static CORBA::ORB_var _orb;
26
27 // Tags definition 
28 long Tag_HypothesisRoot  = 1;
29 long Tag_AlgorithmsRoot  = 2;
30
31 long Tag_RefOnShape      = 1;
32 long Tag_RefOnAppliedHypothesis = 2;
33 long Tag_RefOnAppliedAlgorithms = 3;
34
35 long Tag_SubMeshOnVertex = 4;
36 long Tag_SubMeshOnEdge = 5;
37 long Tag_SubMeshOnFace = 6;
38 long Tag_SubMeshOnSolid = 7;
39 long Tag_SubMeshOnCompound = 8;
40
41
42
43 static char* IORToString (CORBA::Object_ptr obj)
44 {
45   //  MESSAGE ( " IORToString " << _orb->object_to_string(obj) )
46   return _orb->object_to_string(obj);
47 }
48
49 CORBA::Object_ptr SMESHGUI_StudyAPI::StringToIOR (const char* IOR)
50 {
51   //  MESSAGE ( " StringToIOR " << _orb->string_to_object(IOR) )
52   return _orb->string_to_object(IOR);
53 }
54 //=======================================================================
55 // function :
56 // purpose  : Constructor
57 //=======================================================================
58 SMESHGUI_StudyAPI::SMESHGUI_StudyAPI ()
59 {
60 }
61
62 SMESHGUI_StudyAPI::SMESHGUI_StudyAPI ( SALOMEDS::Study_ptr aStudy,
63                                        SMESH::SMESH_Gen_ptr CompMesh)
64 {
65   myStudy = aStudy;
66   myStudyBuilder = aStudy->NewBuilder();
67
68   setOrb();
69
70   // NRI : Temporary added
71   if ( myStudy->GetProperties()->IsLocked() ) {
72     QAD_MessageBox::warn1 ( (QWidget*)QAD_Application::getDesktop(),
73                             QObject::tr("WARNING"), 
74                             QObject::tr("WRN_STUDY_LOCKED"),
75                             QObject::tr("BUT_OK") );
76     
77     return;
78   }
79   // NRI
80
81   SALOMEDS::SComponent_var father = aStudy->FindComponent("MESH");
82   SALOMEDS::GenericAttribute_var anAttr;
83   SALOMEDS::AttributeName_var    aName;
84   SALOMEDS::AttributePixMap_var  aPixmap;
85   
86   if (father->_is_nil()) {
87     father = myStudyBuilder->NewComponent("MESH");
88     anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
89     aName = SALOMEDS::AttributeName::_narrow(anAttr);
90     //NRI    aName->SetValue(QObject::tr("SMESH_MEN_COMPONENT"));
91     aName->SetValue( QAD_Application::getDesktop()->getComponentUserName( "SMESH" ) );
92     anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
93     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
94     aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
95   }
96   myStudyBuilder->DefineComponentInstance(father, CompMesh );
97   mySComponentMesh = SALOMEDS::SComponent::_narrow( father );
98 }
99
100 //=======================================================================
101 // function :
102 // purpose  : Destructor
103 //=======================================================================
104 SMESHGUI_StudyAPI::~SMESHGUI_StudyAPI ()
105 {
106 }
107
108 //=======================================================================
109 // function :
110 // purpose  : Update
111 //=======================================================================
112 void SMESHGUI_StudyAPI::Update(SMESH::SMESH_Gen_ptr CompMesh)
113 {
114   // NRI : Temporary added
115   if ( myStudy->GetProperties()->IsLocked() ) {
116     return;
117   }
118   // NRI
119
120   SALOMEDS::SComponent_var father = myStudy->FindComponent("MESH");
121   SALOMEDS::GenericAttribute_var anAttr;
122   SALOMEDS::AttributeName_var    aName;
123   SALOMEDS::AttributePixMap_var  aPixmap;
124   
125   if (father->_is_nil()) {
126     father = myStudyBuilder->NewComponent("MESH");
127     anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
128     aName = SALOMEDS::AttributeName::_narrow(anAttr);
129     //NRI    aName->SetValue(QObject::tr("SMESH_MEN_COMPONENT"));
130     aName->SetValue( QAD_Application::getDesktop()->getComponentUserName( "SMESH" ) );
131     anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
132     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
133     aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
134   }
135   myStudyBuilder->DefineComponentInstance(father, CompMesh );
136   mySComponentMesh = SALOMEDS::SComponent::_narrow( father );  
137 }
138
139 //=======================================================================
140 // function : AddNewMesh 
141 // purpose  :
142 //=======================================================================
143
144 SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::AddNewMesh (SMESH::SMESH_Mesh_ptr M)
145 {
146   // NRI : Temporary added
147   if ( myStudy->GetProperties()->IsLocked() ) {
148     return SALOMEDS::SObject::_nil();
149   }
150   // NRI
151
152   //Find or Create Hypothesis root
153   SALOMEDS::SObject_var             HypothesisRoot;
154   SALOMEDS::GenericAttribute_var    anAttr;
155   SALOMEDS::AttributeName_var       aName;
156   SALOMEDS::AttributeIOR_var        anIOR;
157   SALOMEDS::AttributeSelectable_var aSelAttr;
158   SALOMEDS::AttributePixMap_var     aPixmap;
159
160   if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) {
161     HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot);
162     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName");
163     aName = SALOMEDS::AttributeName::_narrow(anAttr);
164     aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS"));
165     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap");
166     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
167     aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
168     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable");
169     aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
170     aSelAttr->SetSelectable(false);
171   }
172
173   SALOMEDS::SObject_var AlgorithmsRoot;
174   if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) {
175     AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot);
176     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName");
177     aName = SALOMEDS::AttributeName::_narrow(anAttr);
178     aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS"));
179     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
180     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
181     aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
182     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable");
183     aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
184     aSelAttr->SetSelectable(false);
185   }
186
187   // Add New Mesh
188   SALOMEDS::SObject_var newMesh = myStudyBuilder->NewObject(mySComponentMesh);
189   anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributePixMap");
190   aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
191   aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
192   anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributeIOR");
193   anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
194   anIOR->SetValue(IORToString(M));
195   return SALOMEDS::SObject::_narrow( newMesh );
196 }
197
198
199 //=======================================================================
200 // function : SetShape
201 // purpose  :
202 //=======================================================================
203 void SMESHGUI_StudyAPI::SetShape (SALOMEDS::SObject_ptr SO_MorSM, 
204                                   SALOMEDS::SObject_ptr SO_GeomShape )
205 {
206   // NRI : Temporary added
207   if ( myStudy->GetProperties()->IsLocked() ) {
208     return;
209   }
210   // NRI
211   SALOMEDS::SObject_var SO = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnShape);
212   myStudyBuilder->Addreference (SO,SO_GeomShape);
213 }
214   
215 //=======================================================================
216 // function : GetShapeOnMeshOrSubMesh
217 // purpose  :
218 //=======================================================================
219 GEOM::GEOM_Shape_ptr SMESHGUI_StudyAPI::GetShapeOnMeshOrSubMesh(SALOMEDS::SObject_ptr SO_Mesh_Or_SubMesh)
220 {
221   // NRI : Temporary added
222   if ( myStudy->GetProperties()->IsLocked() ) {
223     return GEOM::GEOM_Shape::_nil();
224   }
225   // NRI
226
227   GEOM::GEOM_Shape_var Shape;
228   SALOMEDS::SObject_var aSO, aGeom;
229   SALOMEDS::GenericAttribute_var anAttr;
230   SALOMEDS::AttributeIOR_var     anIOR;
231   if ( SO_Mesh_Or_SubMesh->FindSubObject( Tag_RefOnShape, aSO ) ) {
232     if ( aSO->ReferencedObject(aGeom) ) {
233       if (aGeom->FindAttribute(anAttr, "AttributeIOR")) {
234         anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
235         return GEOM::GEOM_Shape::_narrow( _orb->string_to_object(anIOR->Value()) );
236       }
237     }
238   }
239   return GEOM::GEOM_Shape::_nil();
240 }
241
242 //=======================================================================
243 // function : AddNewHypothesis 
244 // purpose  :
245 //=======================================================================
246 SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::AddNewHypothesis  (SMESH::SMESH_Hypothesis_ptr H)
247 {
248   // NRI : Temporary added
249   if ( myStudy->GetProperties()->IsLocked() ) {
250     return SALOMEDS::SObject::_nil();
251   }
252   // NRI
253
254   //Find or Create Hypothesis root
255   SALOMEDS::SObject_var             HypothesisRoot;
256   SALOMEDS::GenericAttribute_var    anAttr;
257   SALOMEDS::AttributeName_var       aName;
258   SALOMEDS::AttributeIOR_var        anIOR;
259   SALOMEDS::AttributeSelectable_var aSelAttr;
260   SALOMEDS::AttributePixMap_var     aPixmap;
261
262   if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) {
263     HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot);
264     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName");
265     aName = SALOMEDS::AttributeName::_narrow(anAttr);
266     aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS"));
267     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable");
268     aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
269     aSelAttr->SetSelectable(false);
270     anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap");
271     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
272     aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
273   }
274   // Add New Hypothesis
275   SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(HypothesisRoot);
276   anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap");
277   aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
278   QString aType = H->GetName();
279   MESSAGE ( " aType " << aType )
280   aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_" + aType );
281   //    if ( aType.compare("LocalLength") == 0 )
282   //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_LENGTH" );
283   //    else if ( aType.compare("NumberOfSegments") == 0 )
284   //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_SEGMENT" );
285   //    else if ( aType.compare("MaxElementArea") == 0 )
286   //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_AREA" );
287   //    else if ( aType.compare("MaxElementVolume") == 0 )
288   //      aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_VOLUME" );
289   anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR");
290   anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
291   anIOR->SetValue(IORToString(H));
292   return SALOMEDS::SObject::_narrow(newHypo);
293 }  
294
295 //=======================================================================
296 // function : AddNewAlgorithms 
297 // purpose  :
298 //=======================================================================
299 SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::AddNewAlgorithms  (SMESH::SMESH_Hypothesis_ptr H)
300 {
301   // NRI : Temporary added
302   if ( myStudy->GetProperties()->IsLocked() ) {
303     return SALOMEDS::SObject::_nil();
304   }
305   // NRI
306
307   //Find or Create Algorithms root
308   SALOMEDS::SObject_var             AlgorithmsRoot;
309   SALOMEDS::GenericAttribute_var    anAttr;
310   SALOMEDS::AttributeName_var       aName;
311   SALOMEDS::AttributeIOR_var        anIOR;
312   SALOMEDS::AttributeSelectable_var aSelAttr;
313   SALOMEDS::AttributePixMap_var     aPixmap;
314
315   if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) {
316     AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot);
317     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName");
318     aName = SALOMEDS::AttributeName::_narrow(anAttr);
319     aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS"));
320     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable");
321     aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
322     aSelAttr->SetSelectable(false);
323     anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
324     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
325     aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
326   }
327   // Add New Algorithms
328   SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(AlgorithmsRoot);
329   anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap");
330   aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
331   QString aType = H->GetName();
332   //  if ( aType.compare("Regular_1D") == 0 )
333   aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_" + aType );
334   //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_REGULAR" );
335   //    else if ( aType.compare("MEFISTO_2D") == 0 )
336   //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_MEFISTO" );
337   //    else if ( aType.compare("Quadrangle_2D") == 0 )
338   //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_QUAD" );
339   //    else if ( aType.compare("Hexa_3D") == 0 )
340   //      aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_HEXA" );
341   anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR");
342   anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
343   anIOR->SetValue(IORToString(H));
344   return SALOMEDS::SObject::_narrow(newHypo);
345 }  
346
347
348 //=======================================================================
349 // function : AddSubMeshOnShape
350 // purpose  :
351 //=======================================================================
352 SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::AddSubMeshOnShape (SALOMEDS::SObject_ptr SO_Mesh, 
353                                                             SMESH::SMESH_subMesh_ptr SM, 
354                                                             GEOM::shape_type ST)
355 {
356   // NRI : Temporary added
357   if ( myStudy->GetProperties()->IsLocked() ) {
358     return SALOMEDS::SObject::_nil();
359   }
360   // NRI
361
362   long Tag_Shape ;
363   Standard_CString Name;
364
365   if      (ST == GEOM::SOLID) {Tag_Shape = Tag_SubMeshOnSolid;    Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnSolid"));}
366   else if (ST == GEOM::FACE)  {Tag_Shape = Tag_SubMeshOnFace;     Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnFace"));}
367   else if (ST == GEOM::EDGE)  {Tag_Shape = Tag_SubMeshOnEdge;     Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnEdge"));}
368   else if (ST == GEOM::VERTEX){Tag_Shape = Tag_SubMeshOnVertex;   Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnVertex"));}
369   else {
370     Tag_Shape = Tag_SubMeshOnCompound; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnCompound"));
371   }
372
373   SALOMEDS::SObject_var              SubmeshesRoot;
374   SALOMEDS::GenericAttribute_var     anAttr;
375   SALOMEDS::AttributeName_var        aName;
376   SALOMEDS::AttributeIOR_var         anIOR;
377   SALOMEDS::AttributeSelectable_var  aSelAttr;
378
379   if (!SO_Mesh->FindSubObject (Tag_Shape,SubmeshesRoot )) {
380     SubmeshesRoot = myStudyBuilder->NewObjectToTag (SO_Mesh, Tag_Shape);
381     anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeName");
382     aName = SALOMEDS::AttributeName::_narrow(anAttr);
383     aName->SetValue(Name);
384     anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeSelectable");
385     aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
386     aSelAttr->SetSelectable(false);
387   }
388   SALOMEDS::SObject_var SO = myStudyBuilder->NewObject (SubmeshesRoot);
389   anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeIOR");
390   anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
391   anIOR->SetValue(IORToString(SM));
392   return SALOMEDS::SObject::_narrow( SO );
393 }
394
395 //=======================================================================
396 // function : AddSubMeshOnShape 
397 // purpose  :
398 //=======================================================================
399 SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::AddSubMeshOnShape (SALOMEDS::SObject_ptr SO_Mesh, 
400                                                             SALOMEDS::SObject_ptr SO_GeomShape, 
401                                                             SMESH::SMESH_subMesh_ptr SM,
402                                                             GEOM::shape_type ST)
403 {
404   // NRI : Temporary added
405   if ( myStudy->GetProperties()->IsLocked() ) {
406     return SALOMEDS::SObject::_nil();
407   }
408   // NRI
409
410   SALOMEDS::SObject_var SO_SM = AddSubMeshOnShape (SO_Mesh,SM,ST);
411   SetShape (SO_SM,SO_GeomShape);
412   //  SetShapeOnSubMesh (SO_SM,SO_GeomShape);
413   return SALOMEDS::SObject::_narrow( SO_SM );
414 }
415
416
417 //=======================================================================
418 // function : SetHypothesis 
419 // purpose  : 
420 //=======================================================================
421 void SMESHGUI_StudyAPI::SetHypothesis     (SALOMEDS::SObject_ptr SO_MorSM, 
422                                            SALOMEDS::SObject_ptr SO_Hypothesis)
423 {
424   // NRI : Temporary added
425   if ( myStudy->GetProperties()->IsLocked() ) {
426     return;
427   }
428   // NRI
429
430   //Find or Create Applied Hypothesis root
431   SALOMEDS::SObject_var             AHR;
432   SALOMEDS::GenericAttribute_var    anAttr;
433   SALOMEDS::AttributeName_var       aName;
434   SALOMEDS::AttributeSelectable_var aSelAttr;
435   SALOMEDS::AttributePixMap_var     aPixmap;
436
437   if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedHypothesis, AHR)) {
438     AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedHypothesis);
439     anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName");
440     aName = SALOMEDS::AttributeName::_narrow(anAttr);
441     aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS"));
442     anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable");
443     aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
444     aSelAttr->SetSelectable(false);
445     anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap");
446     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
447     aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
448   }
449   SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR);
450   myStudyBuilder->Addreference (SO,SO_Hypothesis);
451 }   
452
453 //=======================================================================
454 // function : SetAlgorithms 
455 // purpose  : 
456 //=======================================================================
457 void SMESHGUI_StudyAPI::SetAlgorithms     (SALOMEDS::SObject_ptr SO_MorSM, 
458                                            SALOMEDS::SObject_ptr SO_Algorithms)
459 {
460   // NRI : Temporary added
461   if ( myStudy->GetProperties()->IsLocked() ) {
462     return;
463   }
464   // NRI
465
466   //Find or Create Applied Algorithms root
467   SALOMEDS::SObject_var             AHR;
468   SALOMEDS::GenericAttribute_var    anAttr;
469   SALOMEDS::AttributeName_var       aName;
470   SALOMEDS::AttributeSelectable_var aSelAttr;
471   SALOMEDS::AttributePixMap_var     aPixmap;
472
473   if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedAlgorithms, AHR)) {
474     AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedAlgorithms);
475     anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName");
476     aName = SALOMEDS::AttributeName::_narrow(anAttr);
477     aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS"));
478     anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable");
479     aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
480     aSelAttr->SetSelectable(false);
481     anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap");
482     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
483     aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
484   }
485   SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR);
486   myStudyBuilder->Addreference (SO,SO_Algorithms);
487 }   
488
489
490 //=======================================================================
491 // function :
492 // purpose  : 
493 //=======================================================================
494 SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::FindMesh       (SMESH::SMESH_Mesh_ptr M)
495 {
496   // NRI : Temporary added
497   if ( myStudy->GetProperties()->IsLocked() ) {
498     return SALOMEDS::SObject::_nil();
499   }
500   // NRI
501   return SALOMEDS::SObject::_narrow( myStudy->FindObjectIOR (IORToString(M)) );
502 }   
503
504 //=======================================================================
505 // function :
506 // purpose  : 
507 //=======================================================================
508 SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::FindHypothesisOrAlgorithms (SMESH::SMESH_Hypothesis_ptr H)
509 {
510   // NRI : Temporary added
511   if ( myStudy->GetProperties()->IsLocked() ) {
512     return SALOMEDS::SObject::_nil();
513   }
514   // NRI
515   return SALOMEDS::SObject::_narrow( myStudy->FindObjectIOR (IORToString(H)) );
516
517   
518
519 //=======================================================================
520 // function :
521 // purpose  : 
522 //=======================================================================
523 SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::FindSubMesh    (SMESH::SMESH_subMesh_ptr SM)
524 {
525   // NRI : Temporary added
526   if ( myStudy->GetProperties()->IsLocked() ) {
527     return SALOMEDS::SObject::_nil();
528   }
529   // NRI
530   return SALOMEDS::SObject::_narrow( myStudy->FindObjectIOR (IORToString(SM)) );
531 }   
532  
533
534 void SMESHGUI_StudyAPI::setOrb()
535 {
536   try {
537     ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
538     ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
539     _orb = init( 0 , 0 );
540   } catch (...) {
541     INFOS("internal error : orb not found");
542     _orb = 0;
543   }
544   ASSERT(! CORBA::is_nil(_orb));
545 }
546
547 //=======================================================================
548 // function :
549 // purpose  : 
550 //=======================================================================
551 void SMESHGUI_StudyAPI::SetTagHypothesisRoot()
552 {
553   // NRI : Temporary added
554   if ( myStudy->GetProperties()->IsLocked() ) {
555     return;
556   }
557   // NRI
558   SALOMEDS::ChildIterator_var it = myStudy->NewChildIterator(mySComponentMesh);
559   int i = 0;
560   for (; it->More();it->Next()) {
561   i++;
562   }
563   Tag_HypothesisRoot = i++;
564 }
565
566 //=======================================================================
567 // function :
568 // purpose  : 
569 //=======================================================================
570 void SMESHGUI_StudyAPI::SetName( SALOMEDS::SObject_ptr SO, const char* Name )
571 {
572   // NRI : Temporary added
573   if ( myStudy->GetProperties()->IsLocked() ) {
574     return;
575   }
576   // NRI
577
578   SALOMEDS::GenericAttribute_var anAttr;
579   SALOMEDS::AttributeName_var    aName;
580   anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeName");
581   aName = SALOMEDS::AttributeName::_narrow(anAttr);
582   aName->SetValue(Name);
583 }
584
585 //=======================================================================
586 // function :
587 // purpose  : 
588 //=======================================================================
589 void SMESHGUI_StudyAPI::UnSetHypothesis    (SALOMEDS::SObject_ptr SO_Applied_Hypothesis)
590 {
591   // NRI : Temporary added
592   if ( myStudy->GetProperties()->IsLocked() ) {
593     return;
594   }
595   // NRI
596   myStudyBuilder->RemoveObject(SO_Applied_Hypothesis);
597 }
598
599 //=======================================================================
600 // function :
601 // purpose  : 
602 //=======================================================================
603 void SMESHGUI_StudyAPI::UnSetAlgorithm      (SALOMEDS::SObject_ptr SO_Applied_Algorithm)
604 {
605   // NRI : Temporary added
606   if ( myStudy->GetProperties()->IsLocked() ) {
607     return;
608   }
609   // NRI
610   myStudyBuilder->RemoveObject(SO_Applied_Algorithm);
611 }
612
613 //=======================================================================
614 // function :
615 // purpose  : 
616 //=======================================================================
617 SALOMEDS::SObject_ptr SMESHGUI_StudyAPI::GetMeshOrSubmesh  (SALOMEDS::SObject_ptr SO)
618 {
619   // NRI : Temporary added
620   if ( myStudy->GetProperties()->IsLocked() ) {
621     return SALOMEDS::SObject::_nil();
622   }
623   // NRI
624
625   SALOMEDS::SObject_var MorSM,SB;
626   SALOMEDS::GenericAttribute_var anAttr;
627   SALOMEDS::AttributeName_var    aName;
628   SALOMEDS::AttributeIOR_var     anIOR;
629   
630   if (SO->FindAttribute(anAttr, "AttributeIOR")) {
631     anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
632     GEOM::GEOM_Shape_var Shape = GEOM::GEOM_Shape::_narrow( _orb->string_to_object(anIOR->Value()) );
633     if (!Shape->_is_nil()) {
634       //It s a shape
635       MorSM = SO->GetFather();
636       //      MESSAGE ( " MorSM  shape " << MorSM->GetID() )
637       return SALOMEDS::SObject::_narrow( MorSM);
638     }
639   }
640   
641   if (SO->ReferencedObject(SB)) {
642     //It's Reference on Hypothesis or Algorithm
643     MorSM = SO->GetFather()->GetFather();
644     //    MESSAGE ( " MorSM reference " << MorSM->GetID() )
645     return SALOMEDS::SObject::_narrow( MorSM);
646   }
647   // It's  SMESH_MEN_APPLIED_HYPOTHESIS or SMESH_MEN_APPLIED_ALGORITHMS or SubMeshesOnFace etc...
648   MorSM = SO->GetFather();
649   //  MESSAGE ( " MorSM  banniere " << MorSM->GetID() )
650   return SALOMEDS::SObject::_narrow( MorSM);
651 }
652
653 void SMESHGUI_StudyAPI::ModifiedMesh( SALOMEDS::SObject_ptr MorSM, bool right)
654 {
655   // NRI : Temporary added
656   if ( myStudy->GetProperties()->IsLocked() ) {
657     return ;
658   }
659   // NRI
660
661   SALOMEDS::GenericAttribute_var anAttr;
662   SALOMEDS::AttributePixMap_var  aPixmap;
663   
664   anAttr = myStudyBuilder->FindOrCreateAttribute(MorSM, "AttributePixMap");
665   aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
666   if (right) {
667     aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
668   } else {
669     aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_WARN" );
670   }
671   
672   int i = 1;
673   SALOMEDS::ChildIterator_var it = myStudy->NewChildIterator(MorSM);
674   for (; it->More();it->Next()) {
675     SALOMEDS::SObject_var Obj = it->Value();
676     if ( i >= 4 ) {
677       int j = 1;
678       SALOMEDS::ChildIterator_var it1 = myStudy->NewChildIterator(Obj);
679       for (; it1->More();it1->Next()) {
680         SALOMEDS::SObject_var Obj1 = it1->Value();
681         anAttr = myStudyBuilder->FindOrCreateAttribute(Obj1, "AttributePixMap");
682         aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
683         if (right) {
684           aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
685         } else {
686           aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_WARN" );
687         }
688       }
689     }
690     i++;
691   }
692 }