1 // SMESH SMESHGUI : GUI for SMESH component
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : SMESH_Swig.cxx
25 // Author : Nicolas REJNERI
30 #include "SMESHGUI_Swig.hxx"
32 #include "Utils_ORB_INIT.hxx"
33 #include "Utils_SINGLETON.hxx"
36 #include "QAD_Application.h"
37 #include "QAD_Desktop.h"
38 #include "QAD_ResourceMgr.h"
40 #include "utilities.h"
42 // Open CASCADE Includes
46 #include <SALOMEconfig.h>
47 #include CORBA_SERVER_HEADER(SMESH_Gen)
48 #include CORBA_SERVER_HEADER(SMESH_Mesh)
49 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
50 #include CORBA_SERVER_HEADER(GEOM_Shape)
52 static CORBA::ORB_var _orb;
54 static char* ObjectToString (CORBA::Object_ptr obj)
56 return _orb->object_to_string(obj);
59 static CORBA::Object_ptr StringToObject (const char* ior)
61 return _orb->string_to_object(ior);
64 SMESH_Swig::SMESH_Swig()
66 MESSAGE("Constructeur");
70 void SMESH_Swig::Init(int studyID)
73 Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "SMESH");
74 SMESH::SMESH_Gen_var CompMesh = SMESH::SMESH_Gen::_narrow(comp);
76 QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
79 if (!resMgr->loadResources( "SMESH", msg ))
83 CORBA::Object_var obj = QAD_Application::getDesktop()->getNameService()->Resolve("/myStudyManager");
84 SALOMEDS::StudyManager_var myStudyMgr = SALOMEDS::StudyManager::_narrow(obj);
85 myStudy = myStudyMgr->GetStudyByID(studyID);
86 myStudyBuilder = myStudy->NewBuilder();
87 SALOMEDS::GenericAttribute_var anAttr;
88 SALOMEDS::AttributeName_var aName;
89 SALOMEDS::AttributePixMap_var aPixmap;
91 SALOMEDS::SComponent_var father = myStudy->FindComponent("MESH");
93 if (father->_is_nil()) {
94 bool aLocked = myStudy->GetProperties()->IsLocked();
95 if (aLocked) myStudy->GetProperties()->SetLocked(false);
96 father = myStudyBuilder->NewComponent("MESH");
97 anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
98 aName = SALOMEDS::AttributeName::_narrow(anAttr);
99 //NRI aName->SetValue(QObject::tr("SMESH_MEN_COMPONENT"));
100 aName->SetValue( QAD_Application::getDesktop()->getComponentUserName( "SMESH" ) );
101 anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
102 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
103 aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
104 myStudyBuilder->DefineComponentInstance(father, CompMesh );
105 if (aLocked) myStudy->GetProperties()->SetLocked(true);
108 mySComponentMesh=father;
111 Tag_HypothesisRoot = 1;
112 Tag_AlgorithmsRoot = 2;
115 Tag_RefOnAppliedHypothesis = 2;
116 Tag_RefOnAppliedAlgorithms = 3;
118 Tag_SubMeshOnVertex = 4;
119 Tag_SubMeshOnEdge = 5;
120 Tag_SubMeshOnFace = 6;
121 Tag_SubMeshOnSolid = 7;
122 Tag_SubMeshOnCompound = 8;
125 SMESH_Swig::~SMESH_Swig()
127 MESSAGE("Destructeur");
131 const char* SMESH_Swig::AddNewMesh(const char* IOR)
133 MESSAGE("AddNewMesh");
134 //Find or Create Hypothesis root
135 SALOMEDS::GenericAttribute_var anAttr;
136 SALOMEDS::AttributeName_var aName;
137 SALOMEDS::AttributeIOR_var anIOR;
138 SALOMEDS::AttributeSelectable_var aSelAttr;
139 SALOMEDS::AttributePixMap_var aPixmap;
141 SALOMEDS::SObject_var HypothesisRoot;
142 ASSERT(!mySComponentMesh->_is_nil());
143 if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) {
144 HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot);
145 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName");
146 aName = SALOMEDS::AttributeName::_narrow(anAttr);
147 aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS"));
148 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap");
149 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
150 aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
151 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable");
152 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
153 aSelAttr->SetSelectable(false);
156 SALOMEDS::SObject_var AlgorithmsRoot;
157 if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) {
158 AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot);
159 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName");
160 aName = SALOMEDS::AttributeName::_narrow(anAttr);
161 aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS"));
162 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
163 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
164 aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
165 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable");
166 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
167 aSelAttr->SetSelectable(false);
171 SALOMEDS::SObject_var newMesh = myStudyBuilder->NewObject(mySComponentMesh);
172 anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributePixMap");
173 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
174 aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
175 anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributeIOR");
176 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
177 anIOR->SetValue(IOR);
178 return SALOMEDS::SObject::_narrow( newMesh )->GetID();
181 const char* SMESH_Swig::AddNewHypothesis(const char* IOR)
183 MESSAGE("AddNewHypothesis");
184 //Find or Create Hypothesis root
185 SALOMEDS::SObject_var HypothesisRoot;
186 SALOMEDS::GenericAttribute_var anAttr;
187 SALOMEDS::AttributeName_var aName;
188 SALOMEDS::AttributeIOR_var anIOR;
189 SALOMEDS::AttributeSelectable_var aSelAttr;
190 SALOMEDS::AttributePixMap_var aPixmap;
192 if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) {
193 HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot);
194 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName");
195 aName = SALOMEDS::AttributeName::_narrow(anAttr);
196 aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS"));
197 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable");
198 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
199 aSelAttr->SetSelectable(false);
200 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap");
201 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
202 aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
204 // Add New Hypothesis
205 SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(HypothesisRoot);
206 anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap");
207 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
208 SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) );
209 QString aType = H->GetName();
210 aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_" + aType );
211 // if ( aType.compare("LocalLength") == 0 )
212 // aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_LENGTH" );
213 // else if ( aType.compare("NumberOfSegments") == 0 )
214 // aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_SEGMENT" );
215 // else if ( aType.compare("MaxElementArea") == 0 )
216 // aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_AREA" );
217 // else if ( aType.compare("MaxElementVolume") == 0 )
218 // aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_VOLUME" );
219 anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR");
220 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
221 anIOR->SetValue(IOR);
222 return SALOMEDS::SObject::_narrow(newHypo)->GetID();
225 const char* SMESH_Swig::AddNewAlgorithms(const char* IOR)
227 MESSAGE("AddNewAlgorithms");
228 //Find or Create Algorithms root
229 SALOMEDS::SObject_var AlgorithmsRoot;
230 SALOMEDS::GenericAttribute_var anAttr;
231 SALOMEDS::AttributeName_var aName;
232 SALOMEDS::AttributeIOR_var anIOR;
233 SALOMEDS::AttributeSelectable_var aSelAttr;
234 SALOMEDS::AttributePixMap_var aPixmap;
236 if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) {
237 AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot);
238 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName");
239 aName = SALOMEDS::AttributeName::_narrow(anAttr);
240 aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS"));
241 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable");
242 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
243 aSelAttr->SetSelectable(false);
244 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
245 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
246 aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
248 // Add New Algorithms
249 SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(AlgorithmsRoot);
250 anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap");
251 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
252 SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) );
253 QString aType = H->GetName();
254 aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_" + aType );
255 // if ( aType.compare("Regular_1D") == 0 )
256 // aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_REGULAR" );
257 // else if ( aType.compare("MEFISTO_2D") == 0 )
258 // aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_MEFISTO" );
259 // else if ( aType.compare("Quadrangle_2D") == 0 )
260 // aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_QUAD" );
261 // else if ( aType.compare("Hexa_3D") == 0 )
262 // aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_HEXA" );
263 anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR");
264 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
265 anIOR->SetValue(IOR);
266 return SALOMEDS::SObject::_narrow(newHypo)->GetID();
269 void SMESH_Swig::SetShape(const char* ShapeEntry, const char* MeshEntry)
271 SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( MeshEntry );
272 SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( ShapeEntry );
274 if ( !SO_MorSM->_is_nil() && !SO_GeomShape->_is_nil() ) {
275 SALOMEDS::SObject_var SO = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnShape);
276 myStudyBuilder->Addreference (SO,SO_GeomShape);
280 void SMESH_Swig::SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char* Hypothesis_Entry)
282 SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry );
283 SALOMEDS::SObject_var SO_Hypothesis = myStudy->FindObjectID( Hypothesis_Entry );
284 SALOMEDS::GenericAttribute_var anAttr;
285 SALOMEDS::AttributeName_var aName;
286 SALOMEDS::AttributeSelectable_var aSelAttr;
287 SALOMEDS::AttributePixMap_var aPixmap;
289 if ( !SO_MorSM->_is_nil() && !SO_Hypothesis->_is_nil() ) {
291 //Find or Create Applied Hypothesis root
292 SALOMEDS::SObject_var AHR;
293 if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedHypothesis, AHR)) {
294 AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedHypothesis);
295 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName");
296 aName = SALOMEDS::AttributeName::_narrow(anAttr);
297 aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS"));
298 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable");
299 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
300 aSelAttr->SetSelectable(false);
301 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap");
302 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
303 aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
305 SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR);
306 myStudyBuilder->Addreference (SO,SO_Hypothesis);
309 void SMESH_Swig::SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char* Algorithms_Entry)
311 SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry );
312 SALOMEDS::SObject_var SO_Algorithms = myStudy->FindObjectID( Algorithms_Entry );
313 SALOMEDS::GenericAttribute_var anAttr;
314 SALOMEDS::AttributeName_var aName;
315 SALOMEDS::AttributeSelectable_var aSelAttr;
316 SALOMEDS::AttributePixMap_var aPixmap;
318 if ( !SO_MorSM->_is_nil() && !SO_Algorithms->_is_nil() ) {
319 //Find or Create Applied Algorithms root
320 SALOMEDS::SObject_var AHR;
321 if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedAlgorithms, AHR)) {
322 AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedAlgorithms);
323 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName");
324 aName = SALOMEDS::AttributeName::_narrow(anAttr);
325 aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS"));
326 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable");
327 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
328 aSelAttr->SetSelectable(false);
329 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap");
330 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
331 aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
333 SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR);
334 myStudyBuilder->Addreference (SO,SO_Algorithms);
338 void SMESH_Swig::UnSetHypothesis(const char* Applied_Hypothesis_Entry )
340 SALOMEDS::SObject_var SO_Applied_Hypothesis = myStudy->FindObjectID( Applied_Hypothesis_Entry );
341 if ( !SO_Applied_Hypothesis->_is_nil() )
342 myStudyBuilder->RemoveObject(SO_Applied_Hypothesis);
346 const char* SMESH_Swig::AddSubMesh(const char* SO_Mesh_Entry, const char* SM_IOR, int ST)
348 SALOMEDS::SObject_var SO_Mesh = myStudy->FindObjectID( SO_Mesh_Entry );
349 if ( !SO_Mesh->_is_nil() ) {
352 Standard_CString Name;
354 if (ST == TopAbs_SOLID) {Tag_Shape = Tag_SubMeshOnSolid; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnSolid"));}
355 else if (ST == TopAbs_FACE) {Tag_Shape = Tag_SubMeshOnFace; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnFace"));}
356 else if (ST == TopAbs_EDGE) {Tag_Shape = Tag_SubMeshOnEdge; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnEdge"));}
357 else if (ST == TopAbs_VERTEX){Tag_Shape = Tag_SubMeshOnVertex; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnVertex"));}
359 Tag_Shape = Tag_SubMeshOnCompound; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnCompound"));
361 SALOMEDS::SObject_var SubmeshesRoot;
362 SALOMEDS::GenericAttribute_var anAttr;
363 SALOMEDS::AttributeName_var aName;
364 SALOMEDS::AttributeIOR_var anIOR;
365 SALOMEDS::AttributeSelectable_var aSelAttr;
366 if (!SO_Mesh->FindSubObject (Tag_Shape,SubmeshesRoot )) {
367 SubmeshesRoot = myStudyBuilder->NewObjectToTag (SO_Mesh, Tag_Shape);
368 anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeName");
369 aName = SALOMEDS::AttributeName::_narrow(anAttr);
370 aName->SetValue(Name);
371 anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeSelectable");
372 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
373 aSelAttr->SetSelectable(false);
375 SALOMEDS::SObject_var SO = myStudyBuilder->NewObject (SubmeshesRoot);
376 anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeIOR");
377 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
378 anIOR->SetValue(SM_IOR);
379 return SALOMEDS::SObject::_narrow( SO )->GetID();
384 const char* SMESH_Swig::AddSubMeshOnShape(const char* Mesh_Entry, const char* GeomShape_Entry,
385 const char* SM_IOR, int ST)
387 SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( GeomShape_Entry );
388 if ( !SO_GeomShape->_is_nil() ) {
389 const char * SM_Entry = AddSubMesh (Mesh_Entry,SM_IOR,ST);
390 SALOMEDS::SObject_var SO_SM = myStudy->FindObjectID( SM_Entry );
391 if ( !SO_SM->_is_nil() ) {
392 SetShape (GeomShape_Entry, SM_Entry);
393 return SALOMEDS::SObject::_narrow( SO_SM )->GetID();
399 void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
401 // SMESH_Actor* Mesh = smeshGUI->ReadScript(aM);
404 void SMESH_Swig::SetName(const char* Entry, const char* Name)
406 SALOMEDS::SObject_var SO = myStudy->FindObjectID( Entry );
407 SALOMEDS::GenericAttribute_var anAttr;
408 SALOMEDS::AttributeName_var aName;
409 if ( !SO->_is_nil() ) {
410 anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeName");
411 aName = SALOMEDS::AttributeName::_narrow(anAttr);
412 aName->SetValue(Name);
417 void SMESH_Swig::setOrb()
420 ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
421 ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
422 _orb = init( 0 , 0 );
424 INFOS("internal error : orb not found");
427 ASSERT(! CORBA::is_nil(_orb));