1 //=============================================================================
4 // Copyright : EDF 2001
5 //=============================================================================
10 #include "Utils_ORB_INIT.hxx"
11 #include "Utils_SINGLETON.hxx"
12 #include "utilities.h"
14 #include "SALOME_Selection.h"
15 #include "SALOME_InteractiveObject.hxx"
16 #include "SALOMEGUI_QtCatchCorbaException.hxx"
18 #include "QAD_MessageBox.h"
19 #include "QAD_Tools.h"
20 #include "QAD_FileDlg.h"
23 #include <qinputdialog.h>
25 //VRV: porting on Qt 3.0.5
26 #if QT_VERSION >= 0x030005
27 #include <qlineedit.h>
29 //VRV: porting on Qt 3.0.5
31 static CORBA::ORB_var _orb;
33 //=============================================================================
37 //=============================================================================
38 bool MedGUI::OnGUIEvent (int theCommandID, QAD_Desktop* parent)
42 QAD_Study* myActiveStudy = parent->getActiveStudy();
43 SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
44 SALOME_NamingService* myNameService = parent->getNameService();
47 QStringList filtersList ;
49 filtersList.append( tr("MED_MEN_IMPORT_MED") );
50 filtersList.append( tr("MED_MEN_ALL_FILES") ) ;
58 MESSAGE("command " << theCommandID << " activated");
60 QString myStudyName = myActiveStudy->getTitle();
62 int myStudyId = myActiveStudy->getStudyId();
65 Engines::Med_Gen_ptr medgen = InitMedGen(parent);
67 // Selection du Fichier
68 file = QAD_FileDlg::getFileName(parent,
74 // Selection du Maillage
79 meshName = QInputDialog::getText( QString( tr("MED_INF_MESHNAME") ),
81 //VRV: porting on Qt 3.0.5
82 #if QT_VERSION >= 0x030005
85 //VRV: porting on Qt 3.0.5
87 if ( ! meshName.isEmpty())
91 medgen->readMeshInFile(file.latin1(),myStudyName,meshName);
92 if (myActiveStudy->getStudyDocument()->GetProperties()->IsLocked()) {
93 QAD_MessageBox::warn1 ((QWidget*)QAD_Application::getDesktop(),
94 QObject::tr("WRN_WARNING"),
95 QObject::tr("WRN_STUDY_LOCKED"),
96 QObject::tr("BUT_OK"));
99 catch (const SALOME::SALOME_Exception & S_ex)
101 QtCatchCorbaException(S_ex);
104 myActiveStudy->updateObjBrowser();
112 MESSAGE("command " << theCommandID << " activated");
114 QString myStudyName = myActiveStudy->getTitle();
116 int myStudyId = myActiveStudy->getStudyId();
119 Engines::Med_Gen_ptr medgen = InitMedGen(parent);
121 // Selection du Fichier
122 file = QAD_FileDlg::getFileName(parent,
125 tr("MED_MEN_IMPORT"),
128 // Selection du Maillage
129 if (!file.isEmpty() )
133 fieldName = QInputDialog::getText(
134 QString( tr("MED_INF_FIELDNAME") ), QString::null,
135 //VRV: porting on Qt 3.0.5
136 #if QT_VERSION >= 0x030005
139 //VRV: porting on Qt 3.0.5
141 if ( ! fieldName.isEmpty())
145 medgen->readFieldInFile(file.latin1(),myStudyName,fieldName,-1,-1);
146 if (myActiveStudy->getStudyDocument()->GetProperties()->IsLocked()) {
147 QAD_MessageBox::warn1 ((QWidget*)QAD_Application::getDesktop(),
148 QObject::tr("WRN_WARNING"),
149 QObject::tr("WRN_STUDY_LOCKED"),
150 QObject::tr("BUT_OK"));
153 catch (const SALOME::SALOME_Exception & S_ex)
155 QtCatchCorbaException(S_ex);
158 myActiveStudy->updateObjBrowser();
166 MESSAGE("command " << theCommandID << " activated");
168 QString myStudyName = myActiveStudy->getTitle();
169 int myStudyId = myActiveStudy->getStudyId();
172 Engines::Med_Gen_ptr medgen = InitMedGen(parent);
174 // Selection du Fichier
175 file = QAD_FileDlg::getFileName(parent,
178 tr("MED_MEN_IMPORT"),
180 if (!file.isEmpty() )
185 medgen->readStructFile(file.latin1(),myStudyName);
186 if (myActiveStudy->getStudyDocument()->GetProperties()->IsLocked()) {
187 QAD_MessageBox::warn1 ((QWidget*)QAD_Application::getDesktop(),
188 QObject::tr("WRN_WARNING"),
189 QObject::tr("WRN_STUDY_LOCKED"),
190 QObject::tr("BUT_OK"));
193 catch (const SALOME::SALOME_Exception & S_ex)
195 QtCatchCorbaException(S_ex);
197 myActiveStudy->updateObjBrowser();
204 //Handle(SMESH_TypeFilter) aMeshFilter = new SMESH_TypeFilter( MESH );
205 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
206 //Sel->AddFilter(aMeshFilter) ;
208 int nbSel = Sel->IObjectCount();
211 SMESH::SMESH_Mesh_var aM;
212 SALOME_MED::MESH_var aMesh;
213 Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
214 if ( IObject->hasEntry() )
216 SALOMEDS::SObject_var aMorSM = aStudy->FindObjectID( IObject->getEntry() );
217 if ( !aMorSM->_is_nil() )
219 SALOMEDS::GenericAttribute_var anAttr;
220 SALOMEDS::AttributeIOR_var anIOR;
221 if (aMorSM->FindAttribute(anAttr, "AttributeIOR"))
223 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
224 aMesh = SALOME_MED::MESH::_narrow( _orb->string_to_object(anIOR->Value()) );
225 if ( aMesh->_is_nil() )
227 aM = SMESH::SMESH_Mesh::_narrow(_orb->string_to_object(anIOR->Value()));
230 QAD_MessageBox::warn1
231 ( QAD_Application::getDesktop(),
232 tr ("MED_WRN_WARNING"),
233 tr ("MED_INF_NOTIMPL"),
237 aMesh = aM->GetMEDMesh();
238 if ( aMesh->_is_nil() )
240 QAD_MessageBox::warn1
241 ( QAD_Application::getDesktop(),
242 tr ("MED_WRN_WARNING"),
243 tr ("MED_INF_NOTIMPL"),
249 //Sel->ClearFilters() ;
253 QAD_MessageBox::warn1
254 ( QAD_Application::getDesktop(),
255 tr ("MED_WRN_WARNING"),
256 tr ("MED_INF_NOIOR"),
268 //Handle(SMESH_TypeFilter) aSubMeshFilter = new SMESH_TypeFilter( SUBMESH );
269 SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
270 //Sel->AddFilter(aSubMeshFilter) ;
272 int nbSel = Sel->IObjectCount();
275 SMESH::SMESH_subMesh_var aSubM;
276 SALOME_MED::FAMILY_var aFam;
277 Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
278 if ( IObject->hasEntry() )
280 SALOMEDS::SObject_var aMorSM = aStudy->FindObjectID( IObject->getEntry() );
281 if ( !aMorSM->_is_nil() )
283 SALOMEDS::GenericAttribute_var anAttr;
284 SALOMEDS::AttributeIOR_var anIOR;
285 if (aMorSM->FindAttribute(anAttr, "AttributeIOR"))
287 anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
288 aSubM = SMESH::SMESH_subMesh::_narrow( _orb->string_to_object(anIOR->Value()) );
289 if ( aSubM->_is_nil() )
291 aFam=SALOME_MED::FAMILY::_narrow( _orb->string_to_object(anIOR->Value()));
292 if ( aFam->_is_nil() )
294 QAD_MessageBox::warn1
295 ( QAD_Application::getDesktop(),
296 tr ("MED_WRN_WARNING"),
297 tr ("MED_INF_NOTIMPL"),
305 DumpSubMesh( aSubM );
306 //Sel->ClearFilters() ;
311 QAD_MessageBox::warn1
312 ( QAD_Application::getDesktop(),
313 tr ("MED_WRN_WARNING"),
328 //=============================================================================
332 //=============================================================================
333 bool MedGUI::OnMousePress (QMouseEvent* pe ,
335 QAD_StudyFrame* studyFrame)
337 MESSAGE("MedGUI::OnMousePress");
341 //=============================================================================
345 //=============================================================================
346 bool MedGUI::OnMouseMove (QMouseEvent* pe ,
348 QAD_StudyFrame* studyFrame)
350 // MESSAGE("MedGUI::OnMouseMouve");
354 //=============================================================================
358 //=============================================================================
359 bool MedGUI::OnKeyPress (QKeyEvent* pe,
361 QAD_StudyFrame* studyFrame)
363 MESSAGE("MedGUI::OnKeyPress");
367 //=============================================================================
371 //=============================================================================
372 bool MedGUI::SetSettings (QAD_Desktop* parent)
374 MESSAGE("MedGUI::SetSettings");
378 //=============================================================================
382 //=============================================================================
383 bool MedGUI::CustomPopup ( QAD_Desktop* parent,
385 const QString & theContext,
386 const QString & theParent,
387 const QString & theObject )
389 MESSAGE("MedGUI::CustomPopup");
393 //=============================================================================
397 //=============================================================================
398 void MedGUI::ActiveStudyChanged( QAD_Desktop* parent )
402 //=============================================================================
406 //=============================================================================
407 void MedGUI::DefinePopup( QString & theContext, QString & theParent, QString & theObject )
413 //=============================================================================
417 //=============================================================================
418 bool MedGUI::DumpMesh( SALOME_MED::MESH_var MEDMesh)
421 if ( MEDMesh->_is_nil() )
426 //SALOME_MED::MESH_var MEDMesh = aMesh->GetMEDMesh();
427 string name = MEDMesh->getName();
430 int dim = MEDMesh->getMeshDimension();
432 int dim2 = MEDMesh->getSpaceDimension();
435 int k = MEDMesh->getNumberOfNodes() ;
437 Engines::double_array_var coords = MEDMesh->getCoordinates( SALOME_MED::MED_FULL_INTERLACE );
443 MESSAGE ( " Coordinates X = " << coords[i] << " Y = " << coords[i+1] << " Z = " << coords[i+2] );
444 i = i + 3; // Only for triangles
448 MESSAGE ( " Coordinates X = " << coords[i] << " Y = " << coords[i+1] );
454 int nbfam=MEDMesh->getNumberOfFamilies(SALOME_MED::MED_NODE);
456 SALOME_MED::Family_array_var Families=MEDMesh->getFamilies(SALOME_MED::MED_NODE) ;
458 for (k=0; k < nbfam; k++) {
460 string nomFam=Families[k]->getName();
462 int identfam=Families[k]->getIdentifier();
464 int nbelemnts=Families[k]->getNumberOfElements(SALOME_MED::MED_NONE);
466 Engines::long_array_var tabnoeuds=Families[k]->getNumber(SALOME_MED::MED_NONE);
467 for (int l=0;l<tabnoeuds->length();l++)
468 SCRUTE(tabnoeuds[l]);
472 // SALOME_MED::FAMILY_ptr Family=MEDMesh->getFamily(SALOME_MED::MED_NODE,1) ;
474 // string nomFam=Family->getName();
476 // int identfam=Family->getIdentifier();
478 // Engines::long_array_var tabnoeuds=Family->getNumber(SALOME_MED::MED_NONE);
479 // for (int l=0;l<tabnoeuds->length();l++)
480 // SCRUTE(tabnoeuds[l]);
485 //=============================================================================
489 //=============================================================================
490 bool MedGUI::DumpSubMesh( SMESH::SMESH_subMesh_ptr aSubMesh )
492 if ( aSubMesh->_is_nil() )
495 SALOME_MED::FAMILY_var Fam = aSubMesh->GetFamily();
496 if ( Fam->_is_nil() )
499 Engines::long_array_var tabnoeuds=Fam->getNumber(SALOME_MED::MED_NONE);
500 for (int l=0;l<tabnoeuds->length();l++)
501 SCRUTE(tabnoeuds[l]);
505 //=============================================================================
509 //=============================================================================
510 bool MedGUI::DumpSubMesh( SALOME_MED::FAMILY_var Fam )
513 if ( Fam->_is_nil() )
516 Engines::long_array_var tabnoeuds=Fam->getNumber(SALOME_MED::MED_NONE);
517 for (int l=0;l<tabnoeuds->length();l++)
518 SCRUTE(tabnoeuds[l]);
523 //=============================================================================
527 //=============================================================================
528 Engines::Med_Gen_ptr MedGUI::InitMedGen(QAD_Desktop* parent)
530 Engines::Component_var comp =
531 parent->getEngine("FactoryServer", "Med");
532 MESSAGE("_________________________________________");
533 Engines::Med_Gen_var clr = Engines::Med_Gen::_narrow(comp);
534 ASSERT(!CORBA::is_nil(clr));
538 //=============================================================================
542 //=============================================================================
543 void MedGUI::setOrb()
546 ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
547 ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
548 _orb = init( 0 , 0 );
550 INFOS("internal error : orb not found");
553 ASSERT(! CORBA::is_nil(_orb));
556 //=============================================================================
560 //=============================================================================
563 bool OnGUIEvent(int theCommandID, QAD_Desktop* parent)
565 return MedGUI::OnGUIEvent(theCommandID, parent);
568 bool OnKeyPress (QKeyEvent* pe,
570 QAD_StudyFrame* studyFrame)
572 return MedGUI::OnKeyPress (pe, parent, studyFrame);
575 bool OnMousePress (QMouseEvent* pe,
577 QAD_StudyFrame* studyFrame)
579 return MedGUI::OnMousePress (pe, parent, studyFrame);
582 bool OnMouseMove (QMouseEvent* pe,
584 QAD_StudyFrame* studyFrame)
586 return MedGUI::OnMouseMove (pe, parent, studyFrame);
589 bool SetSettings ( QAD_Desktop* parent )
591 return MedGUI::SetSettings( parent );
594 bool customPopup ( QAD_Desktop* parent,
596 const QString & theContext,
597 const QString & theParent,
598 const QString & theObject )
600 return MedGUI::CustomPopup( parent, popup, theContext,
601 theParent, theObject );
604 void definePopup ( QString & theContext, QString & theParent, QString & theObject )
606 MedGUI::DefinePopup( theContext, theParent, theObject );
609 bool activeStudyChanged ( QAD_Desktop* parent )
611 MedGUI::ActiveStudyChanged( parent );