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