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