]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
IPAL9191: Import MED object from MED Component
authorjfa <jfa@opencascade.com>
Mon, 27 Jun 2005 12:25:40 +0000 (12:25 +0000)
committerjfa <jfa@opencascade.com>
Mon, 27 Jun 2005 12:25:40 +0000 (12:25 +0000)
src/VISUGUI/VISU_msg_en.po
src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI.h
src/VISUGUI/VisuGUI_ActionsDef.h
src/VISU_I/VISU_Gen_i.cc
src/VISU_I/VISU_Gen_i.hh
src/VISU_I/VISU_Result_i.cc

index e68d110d4a2978130246c76a82c391bc2b796cae..7b7e1b8f4640eb154739d0049b727e3c72e82867 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PROJECT VERSION\n"
 "POT-Creation-Date: 2002-02-22 16:56:46 CET\n"
-"PO-Revision-Date: 2005-06-15 21:15+0400\n"
+"PO-Revision-Date: 2005-06-27 12:38+0400\n"
 "Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 
@@ -40,8 +40,8 @@ msgid "VisuGUI::MEN_IMPORT_TABLE"
 msgstr "Import table from File"
 
 #msgid "ERR_CANT_BUILD_PRESENTATION"
-msgid "VisuGUI::ERR_CANT_BUILD_PRESENTATION"
-msgstr "Cannot build presentation"
+#msgid "VisuGUI::ERR_CANT_BUILD_PRESENTATION"
+#msgstr "Cannot build presentation"
 
 #msgid "ERR_ERROR_IN_THE_FILE"
 msgid "VisuGUI::ERR_ERROR_IN_THE_FILE"
@@ -251,6 +251,9 @@ msgstr "Global Selection"
 msgid "VisuGUI::MEN_PARTIAL_SELECTION"
 msgstr "Partial Selection"
 
+msgid "VisuGUI::MEN_IMPORT_MED"
+msgstr "Import Structure"
+
 msgid "VisuGUI::DLG_OPACITY_TITLE"
 msgstr "Opacity"
 
index e72154151d386a229a56f0490fb37a26c61aa790..3ab58d0d5ae0dd47b875a9b42db3fcc2b1d00de9 100644 (file)
@@ -267,7 +267,95 @@ OnExportTableToFile()
   if(MYDEBUG) MESSAGE("VisuGUI::OnExportTableToFile()");
 }
 
-void 
+/*jfa tmp:void
+VisuGUI::
+OnImportMedField()
+{
+  _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
+  if (CheckLock(aCStudy))
+    return;
+
+  SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
+  SALOME_ListIO aListIO;
+  aSelectionMgr->selectedObjects(aListIO);
+
+  SALOME_ListIteratorOfListIO It (aListIO);
+  QApplication::setOverrideCursor(Qt::waitCursor);
+  for (; It.More(); It.Next()) {
+    Handle(SALOME_InteractiveObject) anIO = It.Value();
+    //SALOMEDS::SObject_var aSObject = GetStudyDocument()->FindObjectID(anIO->getEntry());
+    _PTR(SObject) aSObject = aCStudy->FindObjectID(anIO->getEntry());
+    //if (!aSObject->_is_nil()) {
+    if (aSObject) {
+      CORBA::Object_var anObject = VISU::ClientSObjectToObject(aSObject);
+      if (!CORBA::is_nil(anObject)) {
+       SALOME_MED::MED_var aMED = SALOME_MED::MED::_narrow(anObject);
+       if (!CORBA::is_nil(aMED.in()))
+         GetVisuGen(this)->ClientImportMed(aSObject);
+       SALOME_MED::FIELD_var aField = SALOME_MED::FIELD::_narrow(anObject);
+       if (!CORBA::is_nil(aField.in()))
+         GetVisuGen(this)->ImportMedField(aField);
+      } else {
+       //SALOMEDS::SObject_var aSFather = aSObject->GetFather();
+       _PTR(SObject) aSFather = aSObject->GetFather();
+       //SALOMEDS::GenericAttribute_var anAttr;
+       _PTR(GenericAttribute) anAttr;
+       aSFather->FindAttribute(anAttr, "AttributeName");
+       //SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
+       _PTR(AttributeName) aName (anAttr);
+       std::string aValue = aName->Value();
+       if (strcmp(aValue.c_str(), "MEDFIELD") == 0)
+         GetVisuGen(this)->ClientImportMed(aSObject);
+      }
+    }
+  }
+  updateObjBrowser(true);
+  QApplication::restoreOverrideCursor();
+}*/
+
+void
+VisuGUI::
+OnImportMedField()
+{
+  _PTR(Study) aCStudy = GetCStudy(GetAppStudy(this));
+  if (CheckLock(aCStudy))
+    return;
+  SALOMEDS::Study_var aStudy = GetDSStudy(aCStudy);
+
+  SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
+  SALOME_ListIO aListIO;
+  aSelectionMgr->selectedObjects(aListIO);
+
+  SALOME_ListIteratorOfListIO It (aListIO);
+  QApplication::setOverrideCursor(Qt::waitCursor);
+  for (; It.More(); It.Next()) {
+    Handle(SALOME_InteractiveObject) anIO = It.Value();
+    SALOMEDS::SObject_var aSObject = aStudy->FindObjectID(anIO->getEntry());
+    if (!aSObject->_is_nil()) {
+      CORBA::Object_var anObject = VISU::SObjectToObject(aSObject);
+      if (!CORBA::is_nil(anObject)) {
+       SALOME_MED::MED_var aMED = SALOME_MED::MED::_narrow(anObject);
+       if (!CORBA::is_nil(aMED.in()))
+         GetVisuGen(this)->ImportMed(aSObject);
+       SALOME_MED::FIELD_var aField = SALOME_MED::FIELD::_narrow(anObject);
+       if (!CORBA::is_nil(aField.in()))
+         GetVisuGen(this)->ImportMedField(aField);
+      } else {
+       SALOMEDS::SObject_var aSFather = aSObject->GetFather();
+       SALOMEDS::GenericAttribute_var anAttr;
+       aSFather->FindAttribute(anAttr, "AttributeName");
+       SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
+       CORBA::String_var aValue = aName->Value();
+       if (strcmp(aValue.in(), "MEDFIELD") == 0)
+         GetVisuGen(this)->ImportMed(aSObject);
+      }
+    }
+  }
+  updateObjBrowser(true);
+  QApplication::restoreOverrideCursor();
+}
+
+void
 CreateCurves( SalomeApp_Module* theModule,
              VISU::CutLines_i* thePrs,
              QDialog* theDlg,
@@ -614,7 +702,7 @@ OnDisplayPrs()
   SALOME_ListIO aList;
   SalomeApp_SelectionMgr* mgr = GetSelectionMgr(this);
   mgr->selectedObjects(aList);
-  
+
   Handle(SALOME_InteractiveObject) anIO;
   for ( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) {
     anIO = it.Value();
@@ -1157,7 +1245,7 @@ OnShowTable()
          SO = GetCStudy( GetAppStudy( this ) )->FindObjectID( table->GetObjectEntry() );
        }
       }
-    } 
+    }
   } else {
     // possibly this is Table SObject
     SO = GetCStudy( GetAppStudy( this ) )->FindObjectID( anIO->getEntry() );
@@ -1167,10 +1255,10 @@ OnShowTable()
     return;
 
   VisuGUI_TableDlg* dlg = new VisuGUI_TableDlg( GetDesktop( this ),
-                                              SO, 
-                                              false, 
+                                              SO,
+                                              false,
                                               //SAL2670 Orientation of show tables
-                                              VisuGUI_TableDlg::ttAuto, 
+                                              VisuGUI_TableDlg::ttAuto,
                                               Qt::Vertical );
   dlg->show();
 }
@@ -1410,7 +1498,7 @@ OnCurveProperties()
   SALOME_ListIO aListIO;
   aSelectionMgr->selectedObjects(aListIO);
   if (aListIO.Extent() != 1) return;
-    
+
   SalomeApp_Study* aAppStudy = GetAppStudy(this);
   const Handle(SALOME_InteractiveObject)& anIO = aListIO.First();
   CORBA::Object_var anObject = GetSelectedObj( aAppStudy, anIO->getEntry() );
@@ -1924,6 +2012,10 @@ createActions()
   createAction( VISU_EXPORT_TABLE, tr("MEN_EXPORT_TABLE"), QIconSet(), tr("MEN_EXPORT_TABLE"), "", 0, aParent, false,
                this, SLOT(OnExportTableToFile()));
 
+  createAction( VISU_IMPORT_MED, tr("MEN_IMPORT_MED"), QIconSet(),
+                tr("MEN_IMPORT_MED"), "", 0, aParent, false,
+               this, SLOT(OnImportMedField()));
+
   //aPixmap = aResourceMgr->loadPixmap("VISU",tr(""));
   createAction( VISU_CREATE_PRS, tr("MEN_CREATE_PRS"), QIconSet(), tr("MEN_CREATE_PRS"), "", 0, aParent, false,
                this, SLOT(OnCreateMesh()));
@@ -2305,13 +2397,17 @@ createPopupMenus()
   mgr->setRule( action( VISU_CREATE_PRS ), aRule + " and selcount=1", true );
   mgr->insert( action(  VISU_CREATE_MANY_PRS ), -1, -1, -1 ); // create presentations
   mgr->setRule( action( VISU_CREATE_MANY_PRS ), aRule + " and selcount>1", true );
+
+  aRule = "client='ObjectBrowser' and type='MEDFIELD'";
+  mgr->insert( action(  VISU_IMPORT_MED ), -1, -1, -1 ); // import MED structure
+  mgr->setRule( action( VISU_IMPORT_MED ), aRule, true );
 }
 
 //***************************************************************************
 void VisuGUI::contextMenuPopup( const QString& theClient, QPopupMenu* theMenu, QString& theTitle )
 {
   SalomeApp_Module::contextMenuPopup(theClient, theMenu, theTitle);
-  
+
   SalomeApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
   SALOME_ListIO aListIO;
   aSelectionMgr->selectedObjects(aListIO);
@@ -2326,6 +2422,21 @@ void VisuGUI::contextMenuPopup( const QString& theClient, QPopupMenu* theMenu, Q
     action( VISU_EXPORT_TABLE )->addTo(theMenu);
     theMenu->insertSeparator();
     action( VISU_DELETE )->addTo(theMenu);
+  } else {
+    if (!CORBA::is_nil(anObject)) {
+      SALOME_MED::MED_var aMED = SALOME_MED::MED::_narrow(anObject);
+      if (!CORBA::is_nil(aMED.in())) {
+        action( VISU_IMPORT_MED )->addTo(theMenu);
+      } else {
+       _PTR(SObject) aSFather = SO->GetFather();
+       _PTR(GenericAttribute) anAttr;
+       aSFather->FindAttribute(anAttr, "AttributeName");
+       _PTR(AttributeName) aName (anAttr);
+       std::string aValue = aName->Value();
+       if (strcmp(aValue.c_str(), "MEDFIELD") == 0)
+          action( VISU_IMPORT_MED )->addTo(theMenu);
+      }
+    }
   }
 }
 
index 4c5d475ea2198ca9023c28174d6fa86c72434180..31467af0f8611ba9185458927c71989698f522d0 100644 (file)
@@ -1,28 +1,28 @@
 //  VISU VISUGUI : GUI of VISU component
 //
 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
 //
 //
 //
 //  File   : VisuGUI.h
-//  Author : Laurent CORNABE & Hubert ROLLAND 
+//  Author : Laurent CORNABE & Hubert ROLLAND
 //  Module : VISU
 //  $Header$
 
@@ -72,6 +72,7 @@ protected slots:
   void OnExploreMEDFile();
   void OnImportTableFromFile();
   void OnExportTableToFile();
+  void OnImportMedField();
 
   void OnCreateMesh();
   void OnCreateScalarMap();
index 027f60c1cccb3ad624938d95f82cf91c2984b354..ce67fa8d6444b8e0c7dbb87d0da633e8fedb022e 100644 (file)
@@ -61,5 +61,7 @@
 #define VISU_PARTIAL_SELECTION      4072
 #define VISU_SCALING                4073
 
+#define VISU_IMPORT_MED             4074
+
 
 #endif
index 11ffff01971cb8f75ac337130fd868705091bf2c..0df04a876029bd32e1e299b0cb16bb71c754a8cc 100644 (file)
@@ -404,17 +404,15 @@ namespace VISU{
     return Base_i::GetID();
   }
 
-  void VISU_Gen_i::SetCurrentStudy(SALOMEDS::Study_ptr theStudy)
+  void VISU_Gen_i::SetCurrentStudy (SALOMEDS::Study_ptr theStudy)
   {
     if (!CORBA::is_nil(theStudy))
     {
       CORBA::String_var aName = theStudy->Name();
       QString aStudyName (aName.in());
-      MESSAGE("VISU_Gen_i::SetCurrentStudy - StudyId = " <<
-             theStudy->StudyId() << "; Name = '" << aName.in() << "'");
+      MESSAGE("StudyId = " << theStudy->StudyId() << "; Name = '" << aName.in() << "'");
       myStudyDocument = SALOMEDS::Study::_duplicate(theStudy);
 
-      MESSAGE("Find application for study : " << aName.in());
       bool isActive = false;
       SUIT_Session* aSession = SUIT_Session::session();
       QPtrList<SUIT_Application> anApplications = aSession->applications();
@@ -433,12 +431,13 @@ namespace VISU{
        }
       }
       if (!isActive) {
+        MESSAGE("!!! anApp->onLoadDoc(aName.in()) !!!");
         // Has to be loaded in an empty or in a new application
         SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>(aFirstApp);
        anApp->onLoadDoc(aName.in());
       }
     } else {
-      MESSAGE("VISU_Gen_i::SetCurrentStudy : CORBA::is_nil(theStudy)");
+      MESSAGE("CORBA::is_nil(theStudy)");
     }
   }
 
@@ -496,31 +495,39 @@ namespace VISU{
     return aResult._retn();
   }
 
-  Result_ptr VISU_Gen_i::ImportMed(SALOMEDS::SObject_ptr theMedSObject){
-    if(myStudyDocument->GetProperties()->IsLocked())
+  Result_ptr VISU_Gen_i::ClientImportMed (_PTR(SObject) theMedSObject)
+  {
+    SALOMEDS::SObject_ptr aMedSObject = GetSObject(theMedSObject);
+    return ImportMed(aMedSObject);
+  }
+
+  Result_ptr VISU_Gen_i::ImportMed (SALOMEDS::SObject_ptr theMedSObject)
+  {
+    if (myStudyDocument->GetProperties()->IsLocked())
       return Result::_nil();
     Mutex mt(myMutex);
     Result_i* pResult = new Result_i(myStudyDocument,
                                     Result_i::eComponent,
                                     Result_i::eImportMed);
-    if(pResult->Create(theMedSObject) != NULL)
+    if (pResult->Create(theMedSObject) != NULL) {
       return pResult->_this();
-    else{
+    } else {
       pResult->_remove_ref();
       return VISU::Result::_nil();
     }
   }
 
-  Result_ptr VISU_Gen_i::ImportMedField(SALOME_MED::FIELD_ptr theField){
-    if(myStudyDocument->GetProperties()->IsLocked())
+  Result_ptr VISU_Gen_i::ImportMedField (SALOME_MED::FIELD_ptr theField)
+  {
+    if (myStudyDocument->GetProperties()->IsLocked())
       return Result::_nil();
     Mutex mt(myMutex);
     Result_i* pResult = new Result_i(myStudyDocument,
                                     Result_i::eComponent,
                                     Result_i::eImportMedField);
-    if(pResult->Create(theField) != NULL)
+    if (pResult->Create(theField) != NULL) {
       return pResult->_this();
-    else{
+    } else {
       pResult->_remove_ref();
       return VISU::Result::_nil();
     }
index 77584d64f7ce32191575373dabdf671f9722a7a3..edd59e269db0d72e52da72d4e3a085d2849a006c 100644 (file)
@@ -48,6 +48,8 @@ namespace VISU{
     virtual Result_ptr ImportMed(SALOMEDS::SObject_ptr theMedSObject);
     virtual Result_ptr ImportMedField(SALOME_MED::FIELD_ptr theField);
 
+    Result_ptr ClientImportMed (_PTR(SObject) theMedSObject);
+
     //Create Presentation Of Submeshes
     virtual Mesh_ptr MeshOnEntity(Result_ptr theResult, const char* theMeshName, VISU::Entity theEntity);
     virtual Mesh_ptr FamilyMeshOnEntity(Result_ptr theResult, const char* theMeshName,
index db8750d1a157340e4ef8e59bc3fc29713a74d623..9d55e786a2c03f9b577e76ae7ae2a433a197a10e 100644 (file)
@@ -115,7 +115,9 @@ void CreateReference(SALOMEDS::Study_ptr theStudyDocument,
   aStudyBuilder->Addreference(newObj,aRefSObj);
 }
 
-string GetComponentDataType(SALOMEDS::SObject_ptr theSObject){
+string GetComponentDataType (SALOMEDS::SObject_ptr theSObject)
+{
+  SALOMEDS::Study_var aStudy = theSObject->GetStudy();
   SALOMEDS::SComponent_var aCompRefSObj = theSObject->GetFatherComponent();
   CORBA::String_var aDataType = aCompRefSObj->ComponentDataType();
   return aDataType.in();