]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
PostPro 2005 Lot 1 : SP7
authornkv <nkv@opencascade.com>
Wed, 20 Apr 2005 10:56:21 +0000 (10:56 +0000)
committernkv <nkv@opencascade.com>
Wed, 20 Apr 2005 10:56:21 +0000 (10:56 +0000)
T1.5 Merging of Scalar Bars

src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI.h

index d45552c7d0cc198d6502e1bd7f8de2abbe422b1a..851dd70c1e655f0bb74ab8b3a1f2dc17589078be 100644 (file)
@@ -60,7 +60,6 @@
 #include "VisuGUI_StreamLinesDlg.h"
 #include "VisuGUI_EditContainerDlg.h"
 #include "VisuGUI_TimeAnimation.h"
-#include "VisuGUI_ClippingDlg.h"
 
 #include "VisuGUI_Selection.h"
 #include "VisuGUI_NonIsometricDlg.h"
@@ -425,9 +424,9 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
     SALOMEDS::AttributeIOR_var     anIOR;
     
     switch (theCommandID){
-      /* ========================================================================== */
-      /* Import Table from file                                                    */
-      /* ========================================================================== */
+      /* ======================================================================================== */
+      /* Import Table from file                                                                  */
+      /* ======================================================================================== */
     case 199:
       {
        if(checkLock(aStudy)) break;
@@ -435,24 +434,24 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
        break;
       }
 
-      /* ========================================================================== */
-      /* Import Mesh from MED, DAT file                                            */
-      /* ========================================================================== */
+      /* ======================================================================================== */
+      /* Import Mesh from MED, DAT file                                                                  */
+      /* ======================================================================================== */
 
-//    case 111:
-//      {
-//     visuGUI->CopyAndImportFile();
-//     break;
-//      }
+    case 111:
+      {
+       visuGUI->CopyAndImportFile();
+       break;
+      }
     case 112:
       {
        visuGUI->ImportFile();
        break;
       }
 
-      /* ========================================================================== */
-      /* Export results and mesh into a file format                                */
-      /* ========================================================================== */
+      /* ======================================================================================== */
+      /* Export results and mesh into a file format                                              */
+      /* ======================================================================================== */
 
     case 122:
       {
@@ -460,15 +459,15 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
        break;
       }
 
-      /* ========================================================================== */
-      /* Visualization of Results :                                                 */
-      /* 4011 : Scalar Map                                                          */
-      /* 4012 : Deformed Shape                                                      */
-      /* 4013 : Vectors                                                             */
-      /* 4014 : Iso-Surfaces                                                        */
-      /* 4015 : Cut Planes                                                          */
-      /* 4016 : Stream Lines                                                        */
-      /* ========================================================================== */
+     /* ========================================================================== */
+     /* Visualization of Results :                                                 */
+     /* 4011 : Scalar Map                                                          */
+     /* 4012 : Deformed Shape                                                      */
+     /* 4013 : Vectors                                                             */
+     /* 4014 : Iso-Surfaces                                                        */
+     /* 4015 : Cut Planes                                                          */
+     /* 4016 : Stream Lines                                                        */
+     /* ========================================================================== */
 
     case 4011 :
       visuGUI->CreateScalarMap();
@@ -496,47 +495,47 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
       visuGUI->SelectionInfo();
       break;
 
-      /* ========================================================================== */
-      /* Visualization - Wireframe                                                 */
-      /* ========================================================================== */
+      /* ========================================================================================================================= */
+      /* Visualization - Wireframe                                                                                                */
+      /* ========================================================================================================================= */
 
     case 4211 :
       ChangeViewer(1);
       break;
 
-      /* ========================================================================== */
-      /* Visualization - Surface                                                   */
-      /* ========================================================================== */
+      /* ========================================================================================================================= */
+      /* Visualization - Surface                                                                                                  */
+      /* ========================================================================================================================= */
 
     case 4212 :
       ChangeViewer(2);
       break;
 
-      /* ========================================================================== */
-      /* Visualization - Points                                                            */
-      /* ========================================================================== */
+      /* ========================================================================================================================= */
+      /* Visualization - Points                                                                                                           */
+      /* ========================================================================================================================= */
 
     case 4213 :
       ChangeViewer(0);
       break;
 
-      /* ========================================================================== */
-      /* Visualization - Erase                                                     */
-      /* ========================================================================== */
+      /* ========================================================================================================================= */
+      /* Visualization - Erase                                                                                                    */
+      /* ========================================================================================================================= */
 
     case 422 :
       ChangeViewer(-1);
       break;
 
-      /* ========================================================================== */
-      /* Visualization - Global                                                            */
-      /* ========================================================================== */
+      /* ========================================================================================================================= */
+      /* Visualization - Global                                                                                                           */
+      /* ========================================================================================================================= */
 
       //case 423 :
                   
-      /* ========================================================================== */
-      /* Visualization - Partial                                                   */
-      /* ========================================================================== */
+      /* ========================================================================================================================= */
+      /* Visualization - Partial                                                                                                  */
+      /* ========================================================================================================================= */
 
       //case 424 :
 
@@ -553,12 +552,12 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
       /*  POP-UP OBJECTS BROWSER      */
       /* ============================ */
 
-//    case 900 : // Rename object
-//      visuGUI->Rename();
-//      break;
+    case 900 : // Rename object
+      visuGUI->Rename();
+      break;
 
                 // ---------------- For Popup in Viewer
-/*    case 802  : // Erase
+    case 802  : // Erase
     case 902  : // Erase
       visuGUI->ErasePrs();
       break;
@@ -611,7 +610,7 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
     case 908  : // Sweep IsoSurfaces or Cutplanes
       visuGUI->Sweep();
       break;
-*/
+
 /* ======================================================================================== */
 /* Preferences for Scalar Bar                                                               */
 /* ======================================================================================== */
@@ -622,7 +621,7 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
       }
 
 /* ======================================================================================== */
-/* Preferences for Sweeping                                                                 */
+/* Preferences for Sweeping                                                               */
 /* ======================================================================================== */
     case 52:
       {
@@ -636,10 +635,12 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
     case 53:
     case 54:
       {
+       bool check = false;
        QMenuData* pp;
-       QMenuItem* item = parent->menuBar()->findItem(theCommandID,&pp);
-       bool check = !pp->isItemChecked(theCommandID);
-       pp->setItemChecked(theCommandID,check);
+       if (parent->menuBar()->findItem(theCommandID,&pp)) {
+         check = !pp->isItemChecked(theCommandID);
+         pp->setItemChecked(theCommandID,check);
+       }
        switch(theCommandID){
        case 53:
          QAD_CONFIG->addSetting( "Visu:BuildResult", check );
@@ -690,14 +691,13 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
                          tr("ERR_NO_MEMORY") + " " + tr(e.what()),
                          tr("VISU_BUT_OK") );
     return false;
-  }
-  catch (std::exception& e) {
+    }
+  catch (std::exception& e){
     INFOS(e.what());
     QAD_MessageBox::warn1(QAD_Application::getDesktop(), tr ("VISU_WARNING"),
                          tr(e.what()),
                          tr("VISU_BUT_OK") );
-  }
-  catch (const SALOME::SALOME_Exception& S_ex) {
+  }catch (const SALOME::SALOME_Exception& S_ex) {
     INFOS("const SALOME::SALOME_Exception& S_ex");
     QtCatchCorbaException(S_ex);
     return false;
@@ -2343,15 +2343,6 @@ void VisuGUI::DeleteViewParams() {
 }
 
 
-//=====================================================================================
-// function : ClippingPlanes()
-// purpose  :
-//=====================================================================================
-void VisuGUI::ClippingPlanes() {
-  //SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog();
-  new VisuGUI_ClippingDlg (QAD_Application::getDesktop(),"",false);
-}
-
 //=====================================================================================
 // function : Sweep()
 // purpose  :
@@ -2701,7 +2692,7 @@ void VisuGUI::DefinePopup( QString & theContext, QString & theParent, QString &
 // function : checkHomoSelection()
 // purpose  : 
 //=====================================================================================
-enum { homoNone=0, homoCurves, homoPresentations, homoPresentable, homoAnimatable, homoOther };
+enum { homoNone=0, homoCurves, homoPresentations, homoPresentable, homoAnimatable, homoTimeStamp, homoOther };
 int VisuGUI::checkHomoSelection()
 {
   int selMode = homoNone;
@@ -2764,6 +2755,8 @@ int VisuGUI::checkHomoSelection()
                  selNext = homoAnimatable; break;
                }
                selNext = homoOther; break;
+             case VISU::TTIMESTAMP:
+               selNext = homoTimeStamp; break;
              default:
                selNext = homoOther;
              }
@@ -2837,6 +2830,9 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri
       if (isVTKViewer) {
        thePopup->insertItem( "Display", visuGUI, SLOT( DisplayManyPrs() ) );
        thePopup->insertItem( "Erase", visuGUI, SLOT( EraseManyPrs () ) );
+       thePopup->insertSeparator();
+       thePopup->insertItem( "Merge Scalar Range", visuGUI, SLOT( MergeScalarBars() ) );
+       thePopup->insertItem( "Use Field Range", visuGUI, SLOT( FreeScalarBars() ) );
       }
     }
     else if ( selMode == homoPresentable ) {
@@ -2844,6 +2840,17 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri
     }
     else if ( selMode == homoAnimatable ) {
       thePopup->insertItem( "Animation...", visuGUI, SLOT( TimeAnimation() ) );
+      if (isVTKViewer) {
+       thePopup->insertSeparator();
+       thePopup->insertItem( "Merge Scalar Range", visuGUI, SLOT( MergeScalarBars() ) );
+       thePopup->insertItem( "Use Field Range", visuGUI, SLOT( FreeScalarBars() ) );
+      }
+    }
+    else if ( selMode == homoTimeStamp ) {
+      if (isVTKViewer) {
+       thePopup->insertItem( "Merge Scalar Range", visuGUI, SLOT( MergeScalarBars() ) );
+       thePopup->insertItem( "Use Field Range", visuGUI, SLOT( FreeScalarBars() ) );
+      }
     }
     return true;
   }
@@ -3035,9 +3042,6 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri
              thePopup->insertItem("Sweep", visuGUI, SLOT(Sweep()));
              
            }
-
-            thePopup->insertItem("Clipping planes", visuGUI, SLOT(ClippingPlanes()));
-
            if (isVTKViewer) {
              if ( theParent == "Viewer" && 
                   ( aType == VISU::TMESH      || 
@@ -3113,6 +3117,13 @@ bool VisuGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* thePopup, const QStri
        case VISU::TFIELD:
          if ((getValue(aSObject, "myNbTimeStamps").toLong() > 1) && isVTKViewer)
            thePopup->insertItem( "Animation...", visuGUI, SLOT( TimeAnimation() ) );
+         if (isVTKViewer) {
+           if ( thePopup->count() > 0 ) {
+             thePopup->insertSeparator();
+           }
+           thePopup->insertItem( "Merge Scalar Range", visuGUI, SLOT( MergeScalarBars() ) );
+           thePopup->insertItem( "Use Field Range", visuGUI, SLOT( FreeScalarBars() ) );
+         }
          break;
        case VISU::TTIMESTAMP: {
          int aNunComponent = VISU::Storable::FindValue(aMap,"myNumComponent",&isExist).toInt();
@@ -3702,6 +3713,218 @@ try {
   return false; 
 }
 
+// ======================================================================================== 
+// GetPrs3dList: find list of presentations for the given object
+// ======================================================================================== 
+std::vector<VISU::Prs3d_i*> VisuGUI::GetPrs3dList(const Handle(SALOME_InteractiveObject)& theIO) {
+  std::vector<VISU::Prs3d_i*> aList;
+  if (!theIO.IsNull() && theIO->hasEntry()) {
+    SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+    SALOMEDS::SObject_var aSObject = aStudy->FindObjectID( theIO->getEntry() );
+    aList = GetPrs3dList(aSObject);
+  }
+  return aList;
+}
+
+std::vector<VISU::Prs3d_i*> VisuGUI::GetPrs3dList(SALOMEDS::SObject_ptr theObject) {
+  std::vector<VISU::Prs3d_i*> aList; int k = 0;
+  if( !theObject->_is_nil() ) {
+    CORBA::Object_var aCORBAObject = VISU::SObjectToObject(theObject);
+    if ( !CORBA::is_nil( aCORBAObject ) ) {
+      VISU::Base_var aVisuObj = VISU::Base::_narrow( aCORBAObject );
+      if ( !CORBA::is_nil( aVisuObj ) ) {
+       VISU::VISUType aType = aVisuObj->GetType();
+       switch( aType ) {
+       case VISU::TSCALARMAP:
+       case VISU::TISOSURFACE:
+       case VISU::TDEFORMEDSHAPE:
+       case VISU::TCUTPLANES:
+       case VISU::TCUTLINES:
+       case VISU::TVECTORS:
+       case VISU::TSTREAMLINES:
+         {
+           PortableServer::ServantBase_var aServant = VISU::GetServant(aCORBAObject);
+           if (aServant.in()) {
+             VISU::Prs3d_i* aPrsObject = dynamic_cast<VISU::Prs3d_i*>(aServant.in());
+             aList.resize(k+1); aList[k] = aPrsObject; k++;
+           }
+         }
+         break;
+       case VISU::TFIELD:
+         {
+           SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+           SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator(theObject);
+           SALOMEDS::SObject_var aTimeStamp;
+           anIter->Next(); // First is reference on support
+           for(;anIter->More();anIter->Next()) {
+             aTimeStamp = anIter->Value();
+             if (aTimeStamp->_is_nil()) continue;
+             std::vector<VISU::Prs3d_i*> aSubList = GetPrs3dList(aTimeStamp);
+             if (!aSubList.empty()) {
+               int n = aSubList.size();
+               aList.resize(k+n);
+               for (int i = 0; i < n; i++)
+                 { aList[k] = aSubList[i]; k++; }
+             }
+           }
+         }
+         break;
+       }
+      }
+    }
+    else {
+      SALOMEDS::GenericAttribute_var anAttr;
+      if ( theObject->FindAttribute( anAttr, "AttributeComment") ) {
+       SALOMEDS::AttributeComment_var aComment = SALOMEDS::AttributeComment::_narrow( anAttr );
+       string aComm = aComment->Value();
+       QString strIn( aComm.c_str() );
+       VISU::Storable::TRestoringMap pMap;
+       VISU::Storable::StrToMap( strIn, pMap );
+       bool isExist;
+       VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue(pMap,"myType",&isExist).toInt();
+       if( isExist ) {
+         switch ( aType ) {
+         case VISU::TFIELD:
+           {
+             SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+             SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator(theObject);
+             SALOMEDS::SObject_var aTimeStamp;
+             anIter->Next(); // First is reference on support
+             for(;anIter->More();anIter->Next()) {
+               aTimeStamp = anIter->Value();
+               if (aTimeStamp->_is_nil()) continue;
+               std::vector<VISU::Prs3d_i*> aSubList = GetPrs3dList(aTimeStamp);
+               if (!aSubList.empty()) {
+                 int n = aSubList.size();
+                 aList.resize(k+n);
+                 for (int i = 0; i < n; i++)
+                   { aList[k] = aSubList[i]; k++; }
+               }
+             }
+           }
+           break;
+         case VISU::TTIMESTAMP:
+           {
+             SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
+             SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator(theObject);
+             SALOMEDS::SObject_var aPrs;
+             for(;anIter->More();anIter->Next()) {
+               aPrs = anIter->Value();
+               if (aPrs->_is_nil()) continue;
+               std::vector<VISU::Prs3d_i*> aSubList = GetPrs3dList(aPrs);
+               if (!aSubList.empty()) {
+                 int n = aSubList.size();
+                 aList.resize(k+n);
+                 for (int i = 0; i < n; i++)
+                   { aList[k] = aSubList[i]; k++; }
+               }
+             }
+           }
+           break;
+         }
+       }
+      }
+    }
+  }
+  return aList;
+}
+
+// ======================================================================================== 
+// Merge Scalar Bars 
+// ======================================================================================== 
+void VisuGUI::MergeScalarBars(){
+  SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection());
+  SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
+
+  // first find the bounds
+  double aMin, aMax; bool first = true;
+  for ( ; It.More(); It.Next() ) {
+    Handle(SALOME_InteractiveObject)& anIO = It.Value();
+    std::vector<VISU::Prs3d_i*> aPrsList = GetPrs3dList(anIO);
+    if (!aPrsList.empty()) {
+      for (int i = 0, n = aPrsList.size(); i < n; i++) {
+       VISU::Prs3d_i* aPrsObject = aPrsList[i];
+       if(aPrsObject){
+         VISU::ScalarMap_i* aScalar = dynamic_cast<VISU::ScalarMap_i*>(aPrsObject);
+         if (aScalar) {
+           if (first) {
+             first = false;
+             aMin = aScalar->GetMin(); aMax = aScalar->GetMax();
+           }
+           else {
+             if (aScalar->GetMin() < aMin) aMin = aScalar->GetMin();
+             if (aScalar->GetMax() > aMax) aMax = aScalar->GetMax();
+           }
+         }
+       }
+      }
+    }
+  }
+
+  // set the computed range to every selected ScalarMap
+  bool update = false;
+  for (It.Initialize(Sel->StoredIObjects()); It.More(); It.Next() ) {
+    Handle(SALOME_InteractiveObject)& anIO = It.Value();
+    std::vector<VISU::Prs3d_i*> aPrsList = GetPrs3dList(anIO);
+    if (!aPrsList.empty()) {
+      for (int i = 0, n = aPrsList.size(); i < n; i++) {
+       VISU::Prs3d_i* aPrsObject = aPrsList[i];
+       if(aPrsObject){
+         VISU::ScalarMap_i* aScalar = dynamic_cast<VISU::ScalarMap_i*>(aPrsObject);
+         if (aScalar) {
+           aScalar->SetRange(aMin, aMax);
+           RecreateActor(aScalar);
+           update = true;
+         }
+       }
+      }
+    }
+  }
+  if (update) {
+    if (VTKViewer_ViewFrame* vf = GetVtkViewFrame()) {
+      if ( vf->getRenderer()->GetActors()->GetNumberOfItems () > 0 ) {
+       vf->getRenderer()->ResetCameraClippingRange();
+       vf->Repaint(); 
+      }
+    }
+  }
+}
+
+// ======================================================================================== 
+// Un-Merge Scalar Bars 
+// ======================================================================================== 
+void VisuGUI::FreeScalarBars(){
+  SALOME_Selection* Sel = SALOME_Selection::Selection(QAD_Application::getDesktop()->getActiveStudy()->getSelection());
+  SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
+
+  // restore the source range for every ScalarMap
+  bool update = false;
+  for ( ; It.More(); It.Next() ) {
+    Handle(SALOME_InteractiveObject)& anIO = It.Value();
+    std::vector<VISU::Prs3d_i*> aPrsList = GetPrs3dList(anIO);
+    if (!aPrsList.empty()) {
+      for (int i = 0, n = aPrsList.size(); i < n; i++) {
+       VISU::Prs3d_i* aPrsObject = aPrsList[i];
+       if(aPrsObject){
+         VISU::ScalarMap_i* aScalar = dynamic_cast<VISU::ScalarMap_i*>(aPrsObject);
+         if (aScalar) {
+           aScalar->SetSourceRange();
+           RecreateActor(aScalar);
+           update = true;
+         }
+       }
+      }
+    }
+  }
+  if (update) {
+    if (VTKViewer_ViewFrame* vf = GetVtkViewFrame()) {
+      if ( vf->getRenderer()->GetActors()->GetNumberOfItems () > 0 ) {
+       vf->getRenderer()->ResetCameraClippingRange();
+       vf->Repaint(); 
+      }
+    }
+  }
+}
 
 
 /* ======================================================================================== */
index 813f13e75bdbdded853b5ccd93a53e00edd81cab..017ab39c9c5438ab7fd61926bedc29357e3fe1b7 100644 (file)
@@ -160,6 +160,8 @@ class VisuGUI : public SALOMEGUI{
   static void ErasePrs(VISU::Prs3d_i* thePrs);
   
   static VISU::Prs3d_i* GetSelectedPrs3d(Handle(SALOME_InteractiveObject)* theIO = NULL);
+  static std::vector<VISU::Prs3d_i*> GetPrs3dList(const Handle(SALOME_InteractiveObject)& theIO);
+  static std::vector<VISU::Prs3d_i*> GetPrs3dList(SALOMEDS::SObject_ptr theObject);
   static void RecreateActor(VISU::Prs3d_i* thePrs);
   static void CreateActor(VISU::Prs3d_i* thePrs);
   static VISU_Actor* GetActor(VISU::Prs3d_i* thePrs, VTKViewer_ViewFrame* theViewFrame = NULL);
@@ -250,6 +252,9 @@ public slots:
   void PlotData();
   void CurveProperties();
   void ClearContainer();
+
+  void MergeScalarBars();
+  void FreeScalarBars();
   
   void SaveViewParams();
   void RestoreViewParams();
@@ -258,7 +263,6 @@ public slots:
   void Rename();
   void RenameTable();
   void RenameContainer();
-  void ClippingPlanes();
   void Sweep();
   void TimeAnimation();