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