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