]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
VisuGUI_FieldFilter added - selection filter for fields
authorouv <ouv@opencascade.com>
Tue, 28 Nov 2006 08:41:14 +0000 (08:41 +0000)
committerouv <ouv@opencascade.com>
Tue, 28 Nov 2006 08:41:14 +0000 (08:41 +0000)
15 files changed:
src/VISUGUI/Makefile.in
src/VISUGUI/VisuGUI_CutLinesDlg.cxx
src/VISUGUI/VisuGUI_CutPlanesDlg.cxx
src/VISUGUI/VisuGUI_DeformedShapeDlg.cxx
src/VISUGUI/VisuGUI_FieldFilter.cxx [new file with mode: 0644]
src/VISUGUI/VisuGUI_FieldFilter.h [new file with mode: 0644]
src/VISUGUI/VisuGUI_GaussPointsDlg.cxx
src/VISUGUI/VisuGUI_InputPane.cxx
src/VISUGUI/VisuGUI_InputPane.h
src/VISUGUI/VisuGUI_IsoSurfacesDlg.cxx
src/VISUGUI/VisuGUI_Plot3DDlg.cxx
src/VISUGUI/VisuGUI_ScalarBarDlg.cxx
src/VISUGUI/VisuGUI_ScalarMapOnDeformedShapeDlg.cxx
src/VISUGUI/VisuGUI_StreamLinesDlg.cxx
src/VISUGUI/VisuGUI_VectorsDlg.cxx

index a6626b1adfcf7cfa4c69a7aceed705937214a8f8..08c5dceda2369fea1d661b13a2dbb81006b587bb 100644 (file)
@@ -78,7 +78,8 @@ LIB_SRC =     VisuGUI.cxx \
                VisuGUI_Timer.cxx \
                VisuGUI_Slider.cxx \
                VisuGUI_InputPane.cxx \
-               VisuGUI_CacheDlg.cxx
+               VisuGUI_CacheDlg.cxx \
+               VisuGUI_FieldFilter.cxx
 
 LIB_MOC =      VisuGUI.h \
                VisuGUI_Module.h \
index 172dd49a4077fb4de5e7e43449739605964b59c3..c2cb198e0e5d0fd48d7883d897096ed3aa3d199b 100644 (file)
@@ -214,7 +214,7 @@ VisuGUI_CutLinesDlg::VisuGUI_CutLinesDlg (SalomeApp_Module* theModule)
 
   myScalarPane = new VisuGUI_ScalarBarPane(this, false);
   myScalarPane->setMargin( 5 );
-  myInputPane = new VisuGUI_InputPane(theModule, this);
+  myInputPane = new VisuGUI_InputPane(VISU::TCUTLINES, theModule, this);
   myTabBox->addTab(myScalarPane, "Scalar Bar");
   myTabBox->addTab(myInputPane, "Input");
 
index b369535dfc055ac0dc85fa1c28b8b9c59f0e4c00..18de422972740868a423f399ce930fe845e41821 100644 (file)
@@ -485,7 +485,7 @@ VisuGUI_CutPlanesDlg::VisuGUI_CutPlanesDlg (SalomeApp_Module* theModule)
   myTabBox->addTab(myCutPane, "Cut Planes");
   myScalarPane = new VisuGUI_ScalarBarPane(this, false);
   myScalarPane->setMargin(5);
-  myInputPane = new VisuGUI_InputPane(theModule, this);
+  myInputPane = new VisuGUI_InputPane(VISU::TCUTPLANES, theModule, this);
   myTabBox->addTab(myScalarPane, "Scalar Bar");
   myTabBox->addTab(myInputPane, "Input");
 
index 8149ef89bfce4baf81e7d42e45d7d568d554ed1c..e45d8dad9697e5388b63d98ab7c1ce26eaf61b87 100644 (file)
@@ -93,7 +93,7 @@ VisuGUI_DeformedShapeDlg::VisuGUI_DeformedShapeDlg (SalomeApp_Module* theModule)
   // Scalar bar pane
   myScalarPane = new VisuGUI_ScalarBarPane (this, false);
   myScalarPane->setMargin(5);
-  myInputPane = new VisuGUI_InputPane(theModule, this);
+  myInputPane = new VisuGUI_InputPane(VISU::TDEFORMEDSHAPE, theModule, this);
 
   myTabBox->addTab(myScalarPane, tr("SCALAR_BAR_TAB"));
   myTabBox->addTab(myInputPane, tr("INPUT_TAB"));
diff --git a/src/VISUGUI/VisuGUI_FieldFilter.cxx b/src/VISUGUI/VisuGUI_FieldFilter.cxx
new file mode 100644 (file)
index 0000000..d1f22c8
--- /dev/null
@@ -0,0 +1,105 @@
+//  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//
+//
+//  File   : VisuGUI_FieldFilter.cxx
+//  Author : Oleg UVAROV
+//  Module : VISU
+
+#include "VisuGUI_FieldFilter.h"
+
+#include "VisuGUI_Tools.h"
+
+#include "VISUConfig.hh"
+#include "VISU_ColoredPrs3dFactory.hh"
+
+#include <SUIT_Session.h>
+
+#include <SalomeApp_Study.h>
+#include <LightApp_DataOwner.h>
+
+using namespace VISU;
+
+VisuGUI_FieldFilter::VisuGUI_FieldFilter( VISU::VISUType theType ) : 
+  myType( theType )
+{
+}
+
+VisuGUI_FieldFilter::~VisuGUI_FieldFilter() 
+{
+}
+
+bool VisuGUI_FieldFilter::isOk( const SUIT_DataOwner* theDataOwner ) const
+{
+  const LightApp_DataOwner* anOwner =
+    dynamic_cast<const LightApp_DataOwner*>( theDataOwner );
+
+  SalomeApp_Study* anAppStudy = dynamic_cast<SalomeApp_Study*>
+    (SUIT_Session::session()->activeApplication()->activeStudy());
+
+  if( anOwner && anAppStudy )
+  {
+    _PTR(Study) aStudy = anAppStudy->studyDS();
+    _PTR(SObject) aSObject = aStudy->FindObjectID( anOwner->entry() );
+    if (!aSObject)
+      return false;
+
+    _PTR(SObject) aRefSO;
+    if( aSObject->ReferencedObject( aRefSO ) )
+      aSObject = aRefSO;
+
+    if( !aSObject )
+      return false;
+
+    _PTR(GenericAttribute) anAttr;
+    if( !aSObject->FindAttribute( anAttr, "AttributeComment" ) )
+      return false;
+
+    _PTR(AttributeComment) aComment( anAttr );
+    string aComm = aComment->Value();
+    QString strIn( aComm.c_str() );
+
+    bool isExist;
+    VISU::Storable::TRestoringMap aMap;
+    VISU::Storable::StrToMap( strIn, aMap );
+    VISU::VISUType aType = ( VISU::VISUType )VISU::Storable::FindValue( aMap, "myType", &isExist ).toInt();
+
+    if( aType == VISU::TFIELD )
+    {
+      VISU::Result_var aResult = FindResult( VISU::GetSObject( aSObject ).in() );
+      QString aMeshName = VISU::getValue( aSObject, "myMeshName" );
+      int anEntity = VISU::getValue( aSObject, "myEntityId" ).toInt();
+      QString aFieldName = VISU::getValue( aSObject, "myName" );
+
+      VISU::ColoredPrs3dHolder::BasicInput anInput;
+      anInput.myResult = aResult;
+      anInput.myMeshName = CORBA::string_dup( aMeshName.latin1() );
+      anInput.myEntity = (VISU::Entity)anEntity;
+      anInput.myFieldName = CORBA::string_dup( aFieldName.latin1() );
+      anInput.myTimeStampNumber = 1;
+
+      size_t isOk = VISU::CheckIsPossible( myType, anInput, true );
+      return isOk > 0;
+    }
+  }
+  return false;
+}
diff --git a/src/VISUGUI/VisuGUI_FieldFilter.h b/src/VISUGUI/VisuGUI_FieldFilter.h
new file mode 100644 (file)
index 0000000..b6816e4
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright (C) 2005  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File   : VisuGUI_FieldFilter.hxx
+//  Author : Oleg UVAROV
+//  Module : VISU
+
+#ifndef VISUGUI_FIELDFILTER_H
+#define VISUGUI_FIELDFILTER_H
+
+#include "VISUConfig.hh"
+
+#include "SUIT_SelectionFilter.h"
+
+class SUIT_DataOwner;
+
+class VisuGUI_FieldFilter : public SUIT_SelectionFilter
+{
+public:
+  VisuGUI_FieldFilter( VISU::VISUType theType );
+  ~VisuGUI_FieldFilter();
+
+  virtual bool     isOk( const SUIT_DataOwner* ) const;
+
+private:
+  VISU::VISUType   myType;
+};
+
+#endif
index 25ea6eb418c6261cd7e847c672c578e60fa85da0..17f0d17208ae21068c1e90109cac0a6db1a3912f 100644 (file)
@@ -566,7 +566,7 @@ VisuGUI_GaussPointsDlg::VisuGUI_GaussPointsDlg(SalomeApp_Module* theModule, bool
   myScalarPane->setMargin(5);
 
   // Input pane
-  myInputPane = new VisuGUI_InputPane(theModule, this);
+  myInputPane = new VisuGUI_InputPane(VISU::TGAUSSPOINTS, theModule, this);
 
   connect( myResultsButton,  SIGNAL( clicked() ),       mySizeBox,    SLOT( onToggleResults() ) );
   connect( myResultsButton,  SIGNAL( toggled( bool ) ), myScalarPane, SLOT( setEnabled( bool ) ) );
index 60612e89ab04da7a24af84d3f9c6b0cba3d48267..abae494732b0db794e5c4788b1aa808d703b4466 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "VisuGUI_InputPane.h"
 
+#include "VisuGUI_FieldFilter.h"
 #include "VisuGUI_Tools.h"
 
 #include "VISU_ColoredPrs3d_i.hh"
 
 using namespace VISU;
 
-VisuGUI_InputPane::VisuGUI_InputPane( SalomeApp_Module* theModule, QWidget* parent ) :
+VisuGUI_InputPane::VisuGUI_InputPane( VISU::VISUType theType, SalomeApp_Module* theModule, QWidget* parent ) :
   QGroupBox( 2, Qt::Horizontal, parent ),
   myModule( theModule )
 {
-  //SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr();
-
   setFrameStyle( QFrame::Box | QFrame::Sunken );
 
-  LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr( myModule );
-  connect( aSelectionMgr, SIGNAL( selectionChanged() ), SLOT( onSelectionChanged() ) );
+  connect( mySelectionMgr, SIGNAL( selectionChanged() ), SLOT( onSelectionChanged() ) );
 
   new QLabel( "Med File : ", this );
   myMedFile = new QLineEdit( this );
@@ -87,6 +85,9 @@ VisuGUI_InputPane::VisuGUI_InputPane( SalomeApp_Module* theModule, QWidget* pare
   new QLabel( "Time Stamp : ", this );
   myTimeStamps = new QComboBox( this );
 
+  myFieldFilter = new VisuGUI_FieldFilter( theType );
+  GetSelectionMgr( theModule )->installFilter( myFieldFilter );
+
   onSelectionChanged();
 
   hide();
@@ -94,6 +95,13 @@ VisuGUI_InputPane::VisuGUI_InputPane( SalomeApp_Module* theModule, QWidget* pare
 
 VisuGUI_InputPane::~VisuGUI_InputPane()
 {
+  GetSelectionMgr( myModule )->removeFilter( myFieldFilter );
+
+  if( myFieldFilter )
+  {
+    delete myFieldFilter;
+    myFieldFilter = 0;
+  }
 }
 
 bool VisuGUI_InputPane::check()
@@ -112,7 +120,7 @@ void VisuGUI_InputPane::clear()
 
 void VisuGUI_InputPane::onSelectionChanged()
 {
-  clear();
+  //clear();
 
   SALOME_ListIO aListIO;
   GetSelectionMgr( myModule )->selectedObjects(aListIO);
@@ -144,6 +152,8 @@ void VisuGUI_InputPane::onSelectionChanged()
     if( !aMedObject )
       return;
 
+    myTimeStamps->clear();
+
     QString anEntityName, aTimeStampName;
 
     _PTR(StudyBuilder) aBuilder = aCStudy->NewBuilder();
index 8adf941aee69340e40bb8ff65e068d895b1e01cc..4a27aebd10be83e113377cb3de13f00336977553 100644 (file)
@@ -36,6 +36,9 @@ class QComboBox;
 class QLineEdit;
 
 class SalomeApp_Module;
+class LightApp_SelectionMgr;
+
+class VisuGUI_FieldFilter;
 
 namespace VISU
 {
@@ -48,7 +51,7 @@ class VisuGUI_InputPane : public QGroupBox
   Q_OBJECT
 
 public:
-  VisuGUI_InputPane( SalomeApp_Module* theModule, QWidget* parent );
+  VisuGUI_InputPane( VISU::VISUType theType, SalomeApp_Module* theModule, QWidget* parent );
   virtual ~VisuGUI_InputPane();
 
 public:
@@ -72,6 +75,9 @@ private:
 
   VISU::Result_var   myResult;
   int                myEntity;
+
+  LightApp_SelectionMgr* mySelectionMgr;
+  VisuGUI_FieldFilter* myFieldFilter;
 };
 
 #endif
index 34156ba5326a54f0fb970a036c78531c4d08edc6..3df2494025e8029c1d493007815d3929f7e4e64a 100644 (file)
@@ -182,7 +182,7 @@ VisuGUI_IsoSurfacesDlg::VisuGUI_IsoSurfacesDlg (SalomeApp_Module* theModule)
   myScalarPane = new VisuGUI_ScalarBarPane(this, false);
   myIsoPane->setScalarBarPane(myScalarPane);
   myScalarPane->setMargin( 5 );
-  myInputPane = new VisuGUI_InputPane(theModule, this);
+  myInputPane = new VisuGUI_InputPane(VISU::TISOSURFACE, theModule, this);
   myTabBox->addTab(myScalarPane, "Scalar Bar");
   myTabBox->addTab(myInputPane, "Input");
 
index b5e3768c0b003d1539f7728700d77319c0528573..bceb5b00ade77516aee2e76bda20f36d0d10f32e 100644 (file)
@@ -559,7 +559,7 @@ VisuGUI_Plot3DDlg::VisuGUI_Plot3DDlg (SalomeApp_Module* theModule)
   myTabBox->addTab(myIsoPane, tr("PLOT3D_TAB_TITLE"));
   myScalarPane = new VisuGUI_ScalarBarPane (this, false);
   myScalarPane->setMargin(5);
-  myInputPane = new VisuGUI_InputPane(theModule, this);
+  myInputPane = new VisuGUI_InputPane(VISU::TPLOT3D, theModule, this);
   myTabBox->addTab(myScalarPane, tr("SCALAR_BAR_TAB_TITLE"));
   myTabBox->addTab(myInputPane, tr("INPUT_TAB_TITLE"));
 
index a3a60f9807295ca2e0c24132161c5fe0047721c7..d3b90db7d089ce207f04384708ab0890f5d4f2d3 100644 (file)
@@ -1086,7 +1086,7 @@ VisuGUI_ScalarBarDlg::VisuGUI_ScalarBarDlg (SalomeApp_Module* theModule, bool Se
   myTabBox = new QTabWidget(this);
   myScalarPane = new VisuGUI_ScalarBarPane(this, SetPref);
   myScalarPane->setMargin( 5 );
-  myInputPane = new VisuGUI_InputPane(theModule, this);
+  myInputPane = new VisuGUI_InputPane(VISU::TSCALARMAP, theModule, this);
   myTabBox->addTab(myScalarPane, "Scalar Bar");
   myTabBox->addTab(myInputPane, "Input");
 
index 90b62a8df0285bcc4e7e9af2996c956e1be1ce89..1d4abdd61c87936c634fc0d81d2429564503a0c2 100644 (file)
@@ -118,7 +118,7 @@ VisuGUI_ScalarMapOnDeformedShapeDlg::VisuGUI_ScalarMapOnDeformedShapeDlg (Salome
   // Scalar bar pane
   myScalarPane = new VisuGUI_ScalarBarPane (this, false);
   myScalarPane->setMargin(5);
-  myInputPane = new VisuGUI_InputPane(theModule, this);
+  myInputPane = new VisuGUI_InputPane(VISU::TSCALARMAPONDEFORMEDSHAPE, theModule, this);
 
   myTabBox->addTab(myScalarPane, tr("SCALAR_BAR_TAB"));
   myTabBox->addTab(myInputPane, tr("INPUT_TAB"));
index 129e96a7b3f2cef3af233576d3675bbf81983e0b..fd98bf6a197162d8793c3b6e3e7668cbd54738f6 100644 (file)
@@ -270,7 +270,7 @@ VisuGUI_StreamLinesDlg::VisuGUI_StreamLinesDlg (SalomeApp_Module* theModule)
   myTabBox->addTab(aTopBox, "Stream Lines");
   myScalarPane = new VisuGUI_ScalarBarPane(this, false);
   myScalarPane->setMargin( 5 );
-  myInputPane = new VisuGUI_InputPane(theModule, this);
+  myInputPane = new VisuGUI_InputPane(VISU::TSTREAMLINES, theModule, this);
   myTabBox->addTab(myScalarPane, "Scalar Bar");
   myTabBox->addTab(myInputPane, "Input");
 
index 8f1a409450ae3b28ef97f141192c7370a38bef05..37614b16d68b2bc226b574a64545d781db60cf60 100644 (file)
@@ -175,7 +175,7 @@ VisuGUI_VectorsDlg::VisuGUI_VectorsDlg (SalomeApp_Module* theModule)
   myTabBox->addTab(aBox, "Vectors");
   myScalarPane = new VisuGUI_ScalarBarPane(this, false);
   myScalarPane->setMargin( 5 );
-  myInputPane = new VisuGUI_InputPane(theModule, this);
+  myInputPane = new VisuGUI_InputPane(VISU::TVECTORS, theModule, this);
   myTabBox->addTab(myScalarPane, "Scalar Bar");  
   myTabBox->addTab(myInputPane, "Input");