Additional changes for the Point 2 of the "20948: EDF 1468 SMESH: Histogram of the quality controls" issue.

This commit is contained in:
rnv 2011-01-21 14:01:49 +00:00
parent ddc98ff4c0
commit 1758d524e7
8 changed files with 254 additions and 151 deletions

View File

@ -533,6 +533,13 @@ SMESH_ActorDef::~SMESH_ActorDef()
{
if(MYDEBUG) MESSAGE("~SMESH_ActorDef - "<<this);
#ifndef DISABLE_PLOT2DVIEWER
if(my2dHistogram) {
SMESH::ProcessIn2DViewers(this,SMESH::RemoveFrom2dViewer);
delete my2dHistogram;
}
#endif
// caught by SMESHGUI::ProcessEvents() static method
this->InvokeEvent( SMESH::DeleteActorEvent, NULL );
@ -617,10 +624,6 @@ SMESH_ActorDef::~SMESH_ActorDef()
myImplicitBoolean->Delete();
myTimeStamp->Delete();
#ifndef DISABLE_PLOT2DVIEWER
if(my2dHistogram)
delete my2dHistogram;
#endif
}
@ -1344,6 +1347,10 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){
if(myIsCellsLabeled)
myCellsLabels->VisibilityOn();
}
#ifndef DISABLE_PLOT2DVIEWER
else
SMESH::ProcessIn2DViewers(this,SMESH::RemoveFrom2dViewer);
#endif
UpdateHighlight();
Modified();
}

View File

@ -21,10 +21,19 @@
//
#include "SMESH_ActorUtils.h"
#include "SMESH_Actor.h"
#include "SUIT_Tools.h"
#include "SUIT_Session.h"
#include "SUIT_ResourceMgr.h"
#include "SalomeApp_Application.h"
#ifndef DISABLE_PLOT2DVIEWER
#include <SPlot2d_ViewModel.h>
#include <SPlot2d_Histogram.h>
#include <Plot2d_ViewManager.h>
#endif
#include "utilities.h"
@ -126,4 +135,49 @@ namespace SMESH
g = ig / 255.;
b = ib / 255.;
}
#ifndef DISABLE_PLOT2DVIEWER
//=======================================================================
/**
Get histogram from the input actor
Repaint/Remove the histogram in/from each opened Plot2D Viewer
*/
//=======================================================================
void ProcessIn2DViewers( SMESH_Actor *theActor, Viewer2dActionType aType ) {
SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication());
if(!anApp || !theActor)
return;
SPlot2d_Histogram* aHistogram = 0;
if(theActor->GetPlot2Histogram())
if(aType == UpdateIn2dViewer)
aHistogram = theActor->UpdatePlot2Histogram();
else
aHistogram = theActor->GetPlot2Histogram();
else
return;
ViewManagerList aViewManagerList;
anApp->viewManagers(SPlot2d_Viewer::Type(), aViewManagerList);
aType = aHistogram->getPointList().empty() ? RemoveFrom2dViewer : aType;
SUIT_ViewManager* aViewManager;
foreach( aViewManager, aViewManagerList ) {
if (Plot2d_ViewManager* aManager = dynamic_cast<Plot2d_ViewManager*>(aViewManager)) {
if (SPlot2d_Viewer* aViewer = dynamic_cast<SPlot2d_Viewer*>(aManager->getViewModel())) {
if (Plot2d_ViewFrame* aViewFrame = aViewer->getActiveViewFrame()) {
if(aType == UpdateIn2dViewer )
aViewFrame->displayObject(aHistogram, true);
else if (aType == RemoveFrom2dViewer)
aViewFrame->eraseObject(aHistogram, true);
}
}
}
}
}
#endif //DISABLE_PLOT2DVIEWER
}

View File

@ -28,6 +28,7 @@
#include <QColor>
class vtkUnstructuredGrid;
class SMESH_Actor;
namespace SMESH
{
@ -71,6 +72,17 @@ SMESHOBJECT_EXPORT
WriteUnstructuredGrid(vtkUnstructuredGrid* theGrid,
const char* theFileName);
#ifndef DISABLE_PLOT2DVIEWER
typedef enum {UpdateIn2dViewer = 0, RemoveFrom2dViewer } Viewer2dActionType;
SMESHOBJECT_EXPORT
void ProcessIn2DViewers( SMESH_Actor* theActor, Viewer2dActionType = UpdateIn2dViewer );
#endif
}
#endif

View File

@ -89,6 +89,7 @@
#include <SMESH_Client.hxx>
#include <SMESH_Actor.h>
#include <SMESH_ScalarBarActor.h>
#include <SMESH_ActorUtils.h>
#include <SMESH_TypeFilter.hxx>
#include "SMESH_ControlsDef.hxx"
@ -1407,7 +1408,12 @@
return;
SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
SUIT_ViewManager* vm = anApp->activeViewManager();
ViewManagerList aViewMenegers = anApp->viewManagers();
ViewManagerList::const_iterator it = aViewMenegers.begin();
for( ; it != aViewMenegers.end(); it++) {
SUIT_ViewManager* vm = *it;
int nbSf = vm ? vm->getViewsCount() : 0;
SALOME_ListIteratorOfListIO It(selected);
@ -1494,6 +1500,8 @@
} /* listSO back loop */
} /* IObject->hasEntry() */
} /* more/next */
} /* aViewMenegers list loop */
aStudyBuilder->CommitCommand();
/* Clear any previous selection */
@ -4132,6 +4140,16 @@ bool SMESHGUI::activateModule( SUIT_Study* study )
updateObjBrowser(); // objects can be removed
}
// get all view currently opened in the study and connect their signals to
// the corresponding slots of the class.
SUIT_Desktop* aDesk = study->application()->desktop();
if ( aDesk ) {
QList<SUIT_ViewWindow*> wndList = aDesk->windows();
SUIT_ViewWindow* wnd;
foreach ( wnd, wndList )
connectView( wnd );
}
return res;
}
@ -4228,8 +4246,15 @@ void SMESHGUI::viewManagers( QStringList& list ) const
void SMESHGUI::onViewManagerActivated( SUIT_ViewManager* mgr )
{
if ( dynamic_cast<SVTK_ViewManager*>( mgr ) )
if ( dynamic_cast<SVTK_ViewManager*>( mgr ) ) {
SMESH::UpdateSelectionProp( this );
QVector<SUIT_ViewWindow*> aViews = mgr->getViews();
for(int i = 0; i < aViews.count() ; i++){
SUIT_ViewWindow *sf = aViews[i];
connectView( sf );
}
}
}
void SMESHGUI::onViewManagerRemoved( SUIT_ViewManager* theViewManager )
@ -5677,3 +5702,34 @@ void SMESHGUI::onHypothesisEdit( int result )
SMESHGUI::Modified();
updateObjBrowser( true );
}
/*!
\brief Signal handler closing(SUIT_ViewWindow*) of a view
\param pview view being closed
*/
void SMESHGUI::onViewClosed( SUIT_ViewWindow* pview ) {
#ifndef DISABLE_PLOT2DVIEWER
//Crear all Plot2d Viewers if need.
SMESH::ClearPlot2Viewers(pview);
#endif
}
/*!
\brief Connects or disconnects signals about activating and cloning view on the module slots
\param pview view which is connected/disconnected
*/
void SMESHGUI::connectView( const SUIT_ViewWindow* pview ) {
if(!pview)
return;
SUIT_ViewManager* viewMgr = pview->getViewManager();
if ( viewMgr ) {
disconnect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ),
this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) );
connect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ),
this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) );
}
}

View File

@ -152,6 +152,8 @@ public slots:
virtual bool deactivateModule( SUIT_Study* );
virtual bool activateModule( SUIT_Study* );
virtual void studyClosed( SUIT_Study* );
void onViewClosed( SUIT_ViewWindow* );
private slots:
void OnGUIEvent();
@ -197,6 +199,9 @@ private:
const int pId,
const QString& param );
void connectView( const SUIT_ViewWindow* );
private :
static SMESH::SMESH_Gen_var myComponentSMESH;
QDialog* myActiveDialogBox;

View File

@ -33,6 +33,7 @@
#include "SMESHGUI_Utils.h"
#include <SMESH_Actor.h>
#include <SMESH_ActorUtils.h>
#include <SMESH_ScalarBarActor.h>
#include <SMESH_ControlsDef.hxx>

View File

@ -57,12 +57,6 @@
#include <SalomeApp_Application.h>
#include <SalomeApp_Study.h>
#ifndef DISABLE_PLOT2DVIEWER
#include <SPlot2d_ViewModel.h>
#include <SPlot2d_Histogram.h>
#include <Plot2d_ViewManager.h>
#endif
// SALOME KERNEL includes
#include <utilities.h>
@ -659,9 +653,6 @@ namespace SMESH
VISUAL_OBJ_CONT.erase(aKey);
}
}
#ifndef DISABLE_PLOT2DVIEWER
ProcessIn2DViewers(theActor,RemoveFrom2dViewer);
#endif
theActor->Delete();
vtkWnd->Repaint();
}
@ -1315,42 +1306,29 @@ namespace SMESH
}
#ifndef DISABLE_PLOT2DVIEWER
//=======================================================================
/**
Get histogram from the input actor
Repaint/Remove the histogram in/from each opened Plot2D Viewer
//================================================================================
/*!
* \brief Find all SMESH_Actor's in the View Window.
* If actor constains Plot2d_Histogram object remove it from each Plot2d Viewer.
*/
//=======================================================================
void ProcessIn2DViewers( SMESH_Actor *theActor, Viewer2dActionType aType ) {
SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication());
//================================================================================
if(!anApp || !theActor)
return;
SPlot2d_Histogram* aHistogram = 0;
if(theActor->GetPlot2Histogram())
aHistogram = theActor->UpdatePlot2Histogram();
else
return;
ViewManagerList aViewManagerList;
anApp->viewManagers(SPlot2d_Viewer::Type(), aViewManagerList);
aType = aHistogram->getPointList().empty() ? RemoveFrom2dViewer : aType;
SUIT_ViewManager* aViewManager;
foreach( aViewManager, aViewManagerList ) {
if (Plot2d_ViewManager* aManager = dynamic_cast<Plot2d_ViewManager*>(aViewManager)) {
if (SPlot2d_Viewer* aViewer = dynamic_cast<SPlot2d_Viewer*>(aManager->getViewModel())) {
if (Plot2d_ViewFrame* aViewFrame = aViewer->getActiveViewFrame()) {
if(aType == UpdateIn2dViewer )
aViewFrame->displayObject(aHistogram, true);
else if (aType == RemoveFrom2dViewer)
aViewFrame->eraseObject(aHistogram, true);
void ClearPlot2Viewers( SUIT_ViewWindow* theWindow ) {
if(SVTK_ViewWindow* aViewWindow = GetVtkViewWindow(theWindow)){
vtkRenderer *aRenderer = aViewWindow->getRenderer();
VTK::ActorCollectionCopy aCopy(aRenderer->GetActors());
vtkActorCollection *aCollection = aCopy.GetActors();
aCollection->InitTraversal();
while(vtkActor *anAct = aCollection->GetNextActor()){
if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
if(anActor->hasIO() && anActor->GetPlot2Histogram() ){
ProcessIn2DViewers(anActor,RemoveFrom2dViewer);
}
}
}
}
}
#endif //DISABLE_PLOT2DVIEWER
#endif
} // end of namespace SMESH

View File

@ -40,11 +40,6 @@
#include <SALOME_InteractiveObject.hxx>
#include <VTKViewer_Filter.h>
#ifndef DISABLE_PLOT2DVIEWER
class SPlot2d_Histogram;
#endif
class TColStd_IndexedMapOfInteger;
class SALOMEDSClient_Study;
@ -196,6 +191,11 @@ SMESHGUI_EXPORT
SMESHGUI_EXPORT
void SetControlsPrecision( const long );
#ifndef DISABLE_PLOT2DVIEWER
SMESHGUI_EXPORT
void ClearPlot2Viewers( SUIT_ViewWindow* theWindow );
#endif
//----------------------------------------------------------------------------
SMESHGUI_EXPORT
bool ComputeClippingPlaneParameters( std::list<vtkActor*> theActorList,
@ -203,16 +203,6 @@ SMESHGUI_EXPORT
vtkFloatingPointType theDist,
vtkFloatingPointType theBounds[6],
vtkFloatingPointType theOrigin[3] );
#ifndef DISABLE_PLOT2DVIEWER
typedef enum {UpdateIn2dViewer = 0, RemoveFrom2dViewer } Viewer2dActionType;
SMESHGUI_EXPORT
void ProcessIn2DViewers( SMESH_Actor* theActor, Viewer2dActionType = UpdateIn2dViewer );
#endif
};
#endif // SMESHGUI_VTKUTILS_H