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