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 father = myStudyBuilder->NewComponent("MESH");
95 anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
96 aName = SALOMEDS::AttributeName::_narrow(anAttr);
97 aName->SetValue(QObject::tr("SMESH_MEN_COMPONENT"));
98 anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
99 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
100 aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
102 myStudyBuilder->DefineComponentInstance(father, CompMesh );
103 mySComponentMesh = SALOMEDS::SComponent::_narrow( father );
106 Tag_HypothesisRoot = 1;
107 Tag_AlgorithmsRoot = 2;
110 Tag_RefOnAppliedHypothesis = 2;
111 Tag_RefOnAppliedAlgorithms = 3;
113 Tag_SubMeshOnVertex = 4;
114 Tag_SubMeshOnEdge = 5;
115 Tag_SubMeshOnFace = 6;
116 Tag_SubMeshOnSolid = 7;
117 Tag_SubMeshOnCompound = 8;
120 SMESH_Swig::~SMESH_Swig()
122 MESSAGE("Destructeur");
126 const char* SMESH_Swig::AddNewMesh(const char* IOR)
128 MESSAGE("AddNewMesh");
129 //Find or Create Hypothesis root
130 SALOMEDS::GenericAttribute_var anAttr;
131 SALOMEDS::AttributeName_var aName;
132 SALOMEDS::AttributeIOR_var anIOR;
133 SALOMEDS::AttributeSelectable_var aSelAttr;
134 SALOMEDS::AttributePixMap_var aPixmap;
136 SALOMEDS::SObject_var HypothesisRoot;
137 if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) {
138 HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot);
139 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName");
140 aName = SALOMEDS::AttributeName::_narrow(anAttr);
141 aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS"));
142 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap");
143 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
144 aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
145 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable");
146 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
147 aSelAttr->SetSelectable(false);
150 SALOMEDS::SObject_var AlgorithmsRoot;
151 if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) {
152 AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot);
153 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName");
154 aName = SALOMEDS::AttributeName::_narrow(anAttr);
155 aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS"));
156 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
157 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
158 aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
159 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable");
160 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
161 aSelAttr->SetSelectable(false);
165 SALOMEDS::SObject_var newMesh = myStudyBuilder->NewObject(mySComponentMesh);
166 anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributePixMap");
167 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
168 aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" );
169 anAttr = myStudyBuilder->FindOrCreateAttribute(newMesh, "AttributeIOR");
170 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
171 anIOR->SetValue(IOR);
172 return SALOMEDS::SObject::_narrow( newMesh )->GetID();
175 const char* SMESH_Swig::AddNewHypothesis(const char* IOR)
177 MESSAGE("AddNewHypothesis");
178 //Find or Create Hypothesis root
179 SALOMEDS::SObject_var HypothesisRoot;
180 SALOMEDS::GenericAttribute_var anAttr;
181 SALOMEDS::AttributeName_var aName;
182 SALOMEDS::AttributeIOR_var anIOR;
183 SALOMEDS::AttributeSelectable_var aSelAttr;
184 SALOMEDS::AttributePixMap_var aPixmap;
186 if (!mySComponentMesh->FindSubObject (Tag_HypothesisRoot, HypothesisRoot)) {
187 HypothesisRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot);
188 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeName");
189 aName = SALOMEDS::AttributeName::_narrow(anAttr);
190 aName->SetValue(QObject::tr("SMESH_MEN_HYPOTHESIS"));
191 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable");
192 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
193 aSelAttr->SetSelectable(false);
194 anAttr = myStudyBuilder->FindOrCreateAttribute(HypothesisRoot, "AttributePixMap");
195 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
196 aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
198 // Add New Hypothesis
199 SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(HypothesisRoot);
200 anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap");
201 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
202 SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) );
203 QString aType = H->GetName();
204 aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_" + aType );
205 // if ( aType.compare("LocalLength") == 0 )
206 // aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_LENGTH" );
207 // else if ( aType.compare("NumberOfSegments") == 0 )
208 // aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_SEGMENT" );
209 // else if ( aType.compare("MaxElementArea") == 0 )
210 // aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_AREA" );
211 // else if ( aType.compare("MaxElementVolume") == 0 )
212 // aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO_VOLUME" );
213 anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR");
214 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
215 anIOR->SetValue(IOR);
216 return SALOMEDS::SObject::_narrow(newHypo)->GetID();
219 const char* SMESH_Swig::AddNewAlgorithms(const char* IOR)
221 MESSAGE("AddNewAlgorithms");
222 //Find or Create Algorithms root
223 SALOMEDS::SObject_var AlgorithmsRoot;
224 SALOMEDS::GenericAttribute_var anAttr;
225 SALOMEDS::AttributeName_var aName;
226 SALOMEDS::AttributeIOR_var anIOR;
227 SALOMEDS::AttributeSelectable_var aSelAttr;
228 SALOMEDS::AttributePixMap_var aPixmap;
230 if (!mySComponentMesh->FindSubObject (Tag_AlgorithmsRoot, AlgorithmsRoot)) {
231 AlgorithmsRoot = myStudyBuilder->NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot);
232 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeName");
233 aName = SALOMEDS::AttributeName::_narrow(anAttr);
234 aName->SetValue(QObject::tr("SMESH_MEN_ALGORITHMS"));
235 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable");
236 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
237 aSelAttr->SetSelectable(false);
238 anAttr = myStudyBuilder->FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
239 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
240 aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
242 // Add New Algorithms
243 SALOMEDS::SObject_var newHypo = myStudyBuilder->NewObject(AlgorithmsRoot);
244 anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributePixMap");
245 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
246 SMESH::SMESH_Hypothesis_var H = SMESH::SMESH_Hypothesis::_narrow( StringToObject(IOR) );
247 QString aType = H->GetName();
248 aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_" + aType );
249 // if ( aType.compare("Regular_1D") == 0 )
250 // aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_REGULAR" );
251 // else if ( aType.compare("MEFISTO_2D") == 0 )
252 // aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_MEFISTO" );
253 // else if ( aType.compare("Quadrangle_2D") == 0 )
254 // aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_QUAD" );
255 // else if ( aType.compare("Hexa_3D") == 0 )
256 // aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO_HEXA" );
257 anAttr = myStudyBuilder->FindOrCreateAttribute(newHypo, "AttributeIOR");
258 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
259 anIOR->SetValue(IOR);
260 return SALOMEDS::SObject::_narrow(newHypo)->GetID();
263 void SMESH_Swig::SetShape(const char* ShapeEntry, const char* MeshEntry)
265 SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( MeshEntry );
266 SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( ShapeEntry );
268 if ( !SO_MorSM->_is_nil() && !SO_GeomShape->_is_nil() ) {
269 SALOMEDS::SObject_var SO = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnShape);
270 myStudyBuilder->Addreference (SO,SO_GeomShape);
274 void SMESH_Swig::SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char* Hypothesis_Entry)
276 SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry );
277 SALOMEDS::SObject_var SO_Hypothesis = myStudy->FindObjectID( Hypothesis_Entry );
278 SALOMEDS::GenericAttribute_var anAttr;
279 SALOMEDS::AttributeName_var aName;
280 SALOMEDS::AttributeSelectable_var aSelAttr;
281 SALOMEDS::AttributePixMap_var aPixmap;
283 if ( !SO_MorSM->_is_nil() && !SO_Hypothesis->_is_nil() ) {
285 //Find or Create Applied Hypothesis root
286 SALOMEDS::SObject_var AHR;
287 if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedHypothesis, AHR)) {
288 AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedHypothesis);
289 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName");
290 aName = SALOMEDS::AttributeName::_narrow(anAttr);
291 aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS"));
292 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable");
293 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
294 aSelAttr->SetSelectable(false);
295 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap");
296 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
297 aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
299 SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR);
300 myStudyBuilder->Addreference (SO,SO_Hypothesis);
303 void SMESH_Swig::SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char* Algorithms_Entry)
305 SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry );
306 SALOMEDS::SObject_var SO_Algorithms = myStudy->FindObjectID( Algorithms_Entry );
307 SALOMEDS::GenericAttribute_var anAttr;
308 SALOMEDS::AttributeName_var aName;
309 SALOMEDS::AttributeSelectable_var aSelAttr;
310 SALOMEDS::AttributePixMap_var aPixmap;
312 if ( !SO_MorSM->_is_nil() && !SO_Algorithms->_is_nil() ) {
313 //Find or Create Applied Algorithms root
314 SALOMEDS::SObject_var AHR;
315 if (!SO_MorSM->FindSubObject (Tag_RefOnAppliedAlgorithms, AHR)) {
316 AHR = myStudyBuilder->NewObjectToTag (SO_MorSM, Tag_RefOnAppliedAlgorithms);
317 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeName");
318 aName = SALOMEDS::AttributeName::_narrow(anAttr);
319 aName->SetValue(QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS"));
320 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributeSelectable");
321 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
322 aSelAttr->SetSelectable(false);
323 anAttr = myStudyBuilder->FindOrCreateAttribute(AHR, "AttributePixMap");
324 aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
325 aPixmap->SetPixMap( "ICON_SMESH_TREE_ALGO" );
327 SALOMEDS::SObject_var SO = myStudyBuilder->NewObject(AHR);
328 myStudyBuilder->Addreference (SO,SO_Algorithms);
332 void SMESH_Swig::UnSetHypothesis(const char* Applied_Hypothesis_Entry )
334 SALOMEDS::SObject_var SO_Applied_Hypothesis = myStudy->FindObjectID( Applied_Hypothesis_Entry );
335 if ( !SO_Applied_Hypothesis->_is_nil() )
336 myStudyBuilder->RemoveObject(SO_Applied_Hypothesis);
340 const char* SMESH_Swig::AddSubMesh(const char* SO_Mesh_Entry, const char* SM_IOR, int ST)
342 SALOMEDS::SObject_var SO_Mesh = myStudy->FindObjectID( SO_Mesh_Entry );
343 if ( !SO_Mesh->_is_nil() ) {
346 Standard_CString Name;
348 if (ST == TopAbs_SOLID) {Tag_Shape = Tag_SubMeshOnSolid; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnSolid"));}
349 else if (ST == TopAbs_FACE) {Tag_Shape = Tag_SubMeshOnFace; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnFace"));}
350 else if (ST == TopAbs_EDGE) {Tag_Shape = Tag_SubMeshOnEdge; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnEdge"));}
351 else if (ST == TopAbs_VERTEX){Tag_Shape = Tag_SubMeshOnVertex; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnVertex"));}
353 Tag_Shape = Tag_SubMeshOnCompound; Name = strdup(QObject::tr("SMESH_MEN_SubMeshesOnCompound"));
355 SALOMEDS::SObject_var SubmeshesRoot;
356 SALOMEDS::GenericAttribute_var anAttr;
357 SALOMEDS::AttributeName_var aName;
358 SALOMEDS::AttributeIOR_var anIOR;
359 SALOMEDS::AttributeSelectable_var aSelAttr;
360 if (!SO_Mesh->FindSubObject (Tag_Shape,SubmeshesRoot )) {
361 SubmeshesRoot = myStudyBuilder->NewObjectToTag (SO_Mesh, Tag_Shape);
362 anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeName");
363 aName = SALOMEDS::AttributeName::_narrow(anAttr);
364 aName->SetValue(Name);
365 anAttr = myStudyBuilder->FindOrCreateAttribute(SubmeshesRoot, "AttributeSelectable");
366 aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
367 aSelAttr->SetSelectable(false);
369 SALOMEDS::SObject_var SO = myStudyBuilder->NewObject (SubmeshesRoot);
370 anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeIOR");
371 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
372 anIOR->SetValue(SM_IOR);
373 return SALOMEDS::SObject::_narrow( SO )->GetID();
378 const char* SMESH_Swig::AddSubMeshOnShape(const char* Mesh_Entry, const char* GeomShape_Entry,
379 const char* SM_IOR, int ST)
381 SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( GeomShape_Entry );
382 if ( !SO_GeomShape->_is_nil() ) {
383 const char * SM_Entry = AddSubMesh (Mesh_Entry,SM_IOR,ST);
384 SALOMEDS::SObject_var SO_SM = myStudy->FindObjectID( SM_Entry );
385 if ( !SO_SM->_is_nil() ) {
386 SetShape (GeomShape_Entry, SM_Entry);
387 return SALOMEDS::SObject::_narrow( SO_SM )->GetID();
393 void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
395 // SMESH_Actor* Mesh = smeshGUI->ReadScript(aM);
398 void SMESH_Swig::SetName(const char* Entry, const char* Name)
400 SALOMEDS::SObject_var SO = myStudy->FindObjectID( Entry );
401 SALOMEDS::GenericAttribute_var anAttr;
402 SALOMEDS::AttributeName_var aName;
403 if ( !SO->_is_nil() ) {
404 anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeName");
405 aName = SALOMEDS::AttributeName::_narrow(anAttr);
406 aName->SetValue(Name);
411 void SMESH_Swig::setOrb()
414 ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
415 ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
416 _orb = init( 0 , 0 );
418 INFOS("internal error : orb not found");
421 ASSERT(! CORBA::is_nil(_orb));