//
#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"
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
+
}
#include <SMESH_Client.hxx>
#include <SMESH_Actor.h>
#include <SMESH_ScalarBarActor.h>
+#include <SMESH_ActorUtils.h>
#include <SMESH_TypeFilter.hxx>
#include "SMESH_ControlsDef.hxx"
return;
SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
- SUIT_ViewManager* vm = anApp->activeViewManager();
- int nbSf = vm ? vm->getViewsCount() : 0;
- SALOME_ListIteratorOfListIO It(selected);
-
- aStudyBuilder->NewCommand(); // There is a transaction
- for( ; It.More(); It.Next()){ // loop on selected IO's
- Handle(SALOME_InteractiveObject) IObject = It.Value();
- if(IObject->hasEntry()) {
- _PTR(SObject) aSO = aStudy->FindObjectID(IObject->getEntry());
-
- // disable removal of "SMESH" component object
- if(aSO->FindAttribute(anAttr, "AttributeIOR")){
- anIOR = anAttr;
- if ( engineIOR() == anIOR->Value().c_str() )
- continue;
- }
- //Check the referenced object
- _PTR(SObject) aRefSObject;
- if ( aSO && aSO->ReferencedObject( aRefSObject ) )
- aSO = aRefSObject; // Delete main Object instead of reference
-
- // put the whole hierarchy of sub-objects of the selected SO into a list and
- // then treat them all starting from the deepest objects (at list back)
-
- std::list< _PTR(SObject) > listSO;
- listSO.push_back( aSO );
- std::list< _PTR(SObject) >::iterator itSO = listSO.begin();
- for ( ; itSO != listSO.end(); ++itSO ) {
- _PTR(ChildIterator) it = aStudy->NewChildIterator( *itSO );
- for (it->InitEx(false); it->More(); it->Next())
- listSO.push_back( it->Value() );
- }
-
- // treat SO's in the list starting from the back
-
- std::list< _PTR(SObject) >::reverse_iterator ritSO = listSO.rbegin();
- for ( ; ritSO != listSO.rend(); ++ritSO ) {
- _PTR(SObject) SO = *ritSO;
- if ( !SO ) continue;
- std::string anEntry = SO->GetID();
-
- /** Erase graphical object **/
- if(SO->FindAttribute(anAttr, "AttributeIOR") && vm ){
- QVector<SUIT_ViewWindow*> aViews = vm->getViews();
- for(int i = 0; i < nbSf; i++){
- SUIT_ViewWindow *sf = aViews[i];
- if(SMESH_Actor* anActor = SMESH::FindActorByEntry(sf,anEntry.c_str())){
- SMESH::RemoveActor(sf,anActor);
- }
- }
- }
-
- /** Remove an object from data structures **/
- SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH::SObjectToObject( SO ));
- SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( SMESH::SObjectToObject( SO ));
- if ( !aGroup->_is_nil() ) { // DELETE GROUP
- SMESH::SMESH_Mesh_var aMesh = aGroup->GetMesh();
- aMesh->RemoveGroup( aGroup );
- }
- else if ( !aSubMesh->_is_nil() ) { // DELETE SUBMESH
- SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather();
- aMesh->RemoveSubMesh( aSubMesh );
+ 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;
- _PTR(SObject) aMeshSO = SMESH::FindSObject(aMesh);
- if (aMeshSO)
- SMESH::ModifiedMesh(aMeshSO, false, aMesh->NbNodes()==0);
- }
- else {
- IObject = new SALOME_InteractiveObject
- ( anEntry.c_str(), engineIOR().toLatin1().data(), SO->GetName().c_str() );
- QString objType = CheckTypeObject(IObject);
- if ( objType == "Hypothesis" || objType == "Algorithm" ) {// DELETE HYPOTHESIS
- SMESH::RemoveHypothesisOrAlgorithmOnMesh(IObject);
- aStudyBuilder->RemoveObjectWithChildren( SO );
- }
- else {// default action: remove SObject from the study
- // san - it's no use opening a transaction here until UNDO/REDO is provided in SMESH
- //SUIT_Operation *op = new SALOMEGUI_ImportOperation(myActiveStudy);
- //op->start();
- aStudyBuilder->RemoveObjectWithChildren( SO );
- //op->finish();
- }
- }
- } /* listSO back loop */
- } /* IObject->hasEntry() */
- } /* more/next */
+ SALOME_ListIteratorOfListIO It(selected);
+
+ aStudyBuilder->NewCommand(); // There is a transaction
+ for( ; It.More(); It.Next()){ // loop on selected IO's
+ Handle(SALOME_InteractiveObject) IObject = It.Value();
+ if(IObject->hasEntry()) {
+ _PTR(SObject) aSO = aStudy->FindObjectID(IObject->getEntry());
+
+ // disable removal of "SMESH" component object
+ if(aSO->FindAttribute(anAttr, "AttributeIOR")){
+ anIOR = anAttr;
+ if ( engineIOR() == anIOR->Value().c_str() )
+ continue;
+ }
+ //Check the referenced object
+ _PTR(SObject) aRefSObject;
+ if ( aSO && aSO->ReferencedObject( aRefSObject ) )
+ aSO = aRefSObject; // Delete main Object instead of reference
+
+ // put the whole hierarchy of sub-objects of the selected SO into a list and
+ // then treat them all starting from the deepest objects (at list back)
+
+ std::list< _PTR(SObject) > listSO;
+ listSO.push_back( aSO );
+ std::list< _PTR(SObject) >::iterator itSO = listSO.begin();
+ for ( ; itSO != listSO.end(); ++itSO ) {
+ _PTR(ChildIterator) it = aStudy->NewChildIterator( *itSO );
+ for (it->InitEx(false); it->More(); it->Next())
+ listSO.push_back( it->Value() );
+ }
+
+ // treat SO's in the list starting from the back
+
+ std::list< _PTR(SObject) >::reverse_iterator ritSO = listSO.rbegin();
+ for ( ; ritSO != listSO.rend(); ++ritSO ) {
+ _PTR(SObject) SO = *ritSO;
+ if ( !SO ) continue;
+ std::string anEntry = SO->GetID();
+
+ /** Erase graphical object **/
+ if(SO->FindAttribute(anAttr, "AttributeIOR") && vm ){
+ QVector<SUIT_ViewWindow*> aViews = vm->getViews();
+ for(int i = 0; i < nbSf; i++){
+ SUIT_ViewWindow *sf = aViews[i];
+ if(SMESH_Actor* anActor = SMESH::FindActorByEntry(sf,anEntry.c_str())){
+ SMESH::RemoveActor(sf,anActor);
+ }
+ }
+ }
+
+ /** Remove an object from data structures **/
+ SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH::SObjectToObject( SO ));
+ SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( SMESH::SObjectToObject( SO ));
+ if ( !aGroup->_is_nil() ) { // DELETE GROUP
+ SMESH::SMESH_Mesh_var aMesh = aGroup->GetMesh();
+ aMesh->RemoveGroup( aGroup );
+ }
+ else if ( !aSubMesh->_is_nil() ) { // DELETE SUBMESH
+ SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather();
+ aMesh->RemoveSubMesh( aSubMesh );
+
+ _PTR(SObject) aMeshSO = SMESH::FindSObject(aMesh);
+ if (aMeshSO)
+ SMESH::ModifiedMesh(aMeshSO, false, aMesh->NbNodes()==0);
+ }
+ else {
+ IObject = new SALOME_InteractiveObject
+ ( anEntry.c_str(), engineIOR().toLatin1().data(), SO->GetName().c_str() );
+ QString objType = CheckTypeObject(IObject);
+ if ( objType == "Hypothesis" || objType == "Algorithm" ) {// DELETE HYPOTHESIS
+ SMESH::RemoveHypothesisOrAlgorithmOnMesh(IObject);
+ aStudyBuilder->RemoveObjectWithChildren( SO );
+ }
+ else {// default action: remove SObject from the study
+ // san - it's no use opening a transaction here until UNDO/REDO is provided in SMESH
+ //SUIT_Operation *op = new SALOMEGUI_ImportOperation(myActiveStudy);
+ //op->start();
+ aStudyBuilder->RemoveObjectWithChildren( SO );
+ //op->finish();
+ }
+ }
+ } /* listSO back loop */
+ } /* IObject->hasEntry() */
+ } /* more/next */
+ } /* aViewMenegers list loop */
+
aStudyBuilder->CommitCommand();
/* Clear any previous selection */
GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() );
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;
}
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 )
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* ) ) );
+ }
+}
+
#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>
VISUAL_OBJ_CONT.erase(aKey);
}
}
-#ifndef DISABLE_PLOT2DVIEWER
- ProcessIn2DViewers(theActor,RemoveFrom2dViewer);
-#endif
theActor->Delete();
vtkWnd->Repaint();
}
}
#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;
+ //================================================================================
+ /*!
+ * \brief Find all SMESH_Actor's in the View Window.
+ * If actor constains Plot2d_Histogram object remove it from each Plot2d Viewer.
+ */
+ //================================================================================
- 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