-#include <qpopupmenu.h>
-#include <qcolordialog.h>
-
-#include <vtkCamera.h>
-#include <vtkRenderer.h>
-#include <vtkActorCollection.h>
-
-#include "SUIT_Session.h"
-
-#include "SVTK_Selection.h"
-#include "SVTK_ViewModel.h"
-#include "SVTK_ViewWindow.h"
-#include "SVTK_Prs.h"
-
-#include "SVTK_RenderWindowInteractor.h"
-#include "SVTK_RenderWindow.h"
-
-#include "ToolsGUI.h"
-
-#include "SALOME_Actor.h"
-#include "SALOME_InteractiveObject.hxx"
-
-#include "Utils_ORB_INIT.hxx"
-#include "Utils_SINGLETON.hxx"
-#include "SALOME_ModuleCatalog_impl.hxx"
-#include "SALOME_NamingService.hxx"
-
-#include "SALOMEDSClient.hxx"
-#include "SALOMEDS_StudyManager.hxx"
-
-// in order NOT TO link with SalomeApp, here the code returns SALOMEDS_Study.
-// SalomeApp_Study::studyDS() does it as well, but -- here it is retrieved from
-// SALOMEDS::StudyManager - no linkage with SalomeApp.
-
-static _PTR(Study) getStudyDS()
-{
- SALOMEDSClient_Study* aStudy = NULL;
- _PTR(StudyManager) aMgr( new SALOMEDS_StudyManager() );
-
- // get id of SUIT_Study, if it's a SalomeApp_Study, it will return
- // id of its underlying SALOMEDS::Study
- SUIT_Application* app = SUIT_Session::session()->activeApplication();
- if ( !app ) return _PTR(Study)(aStudy);
- SUIT_Study* stud = app->activeStudy();
- if ( !stud ) return _PTR(Study)(aStudy);
- const int id = stud->id(); // virtual method, must return SALOMEDS_Study id
- // get SALOMEDS_Study with this id from StudyMgr
- return aMgr->GetStudyByID( id );
-}
-
-//==========================================================
-SVTK_Viewer::SVTK_Viewer()
-{
- myTrihedronSize = 100;
-}
-
-//==========================================================
-SVTK_Viewer::~SVTK_Viewer()
-{
-}
-
-QColor SVTK_Viewer::backgroundColor() const
-{
- return myBgColor;
-}
-
-void SVTK_Viewer::setBackgroundColor( const QColor& c )
-{
- if ( c.isValid() )
- myBgColor = c;
-}
-
-//==========================================================
-SUIT_ViewWindow* SVTK_Viewer::createView( SUIT_Desktop* theDesktop )
-{
- SVTK_ViewWindow* vw = new SVTK_ViewWindow( theDesktop, this );
- vw->setBackgroundColor( backgroundColor() );
- vw->SetTrihedronSize( trihedronSize() );
- return vw;
-}
-
-int SVTK_Viewer::trihedronSize() const
-{
- return myTrihedronSize;
-}
-
-void SVTK_Viewer::setTrihedronSize( const int sz )
-{
- myTrihedronSize = sz;
-
- SUIT_ViewManager* vm = getViewManager();
- if ( !vm )
- return;
-
- QPtrVector<SUIT_ViewWindow> vec = vm->getViews();
- for ( int i = 0; i < vec.count(); i++ )
- {
- SUIT_ViewWindow* win = vec.at( i );
- if ( !win || !win->inherits( "SVTK_ViewWindow" ) )
- continue;
-
- SVTK_ViewWindow* vw = (SVTK_ViewWindow*)win;
- vw->SetTrihedronSize( sz );
- }
-}
-
-//==========================================================
-void SVTK_Viewer::setViewManager(SUIT_ViewManager* theViewManager)
-{
- SUIT_ViewModel::setViewManager(theViewManager);
-
- if ( !theViewManager )
- return;
-
- connect(theViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)),
- this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
-
- connect(theViewManager, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)),
- this, SLOT(onMouseMove(SUIT_ViewWindow*, QMouseEvent*)));
-
- connect(theViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)),
- this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
-}
-
-//==========================================================
-void SVTK_Viewer::contextMenuPopup( QPopupMenu* thePopup )
-{
- thePopup->insertItem( tr( "MEN_DUMP_VIEW" ), this, SLOT( onDumpView() ) );
- thePopup->insertItem( tr( "MEN_CHANGE_BACKGROUD" ), this, SLOT( onChangeBgColor() ) );
-
- thePopup->insertSeparator();
-
- SVTK_ViewWindow* aView = (SVTK_ViewWindow*)(myViewManager->getActiveView());
- if ( aView && !aView->getToolBar()->isVisible() )
- thePopup->insertItem( tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) );
-}
-
-//==========================================================
-void SVTK_Viewer::onMousePress(SUIT_ViewWindow* vw, QMouseEvent* event)
-{
- if(SVTK_ViewWindow* aVW = dynamic_cast<SVTK_ViewWindow*>(vw)){
- if(SVTK_RenderWindowInteractor* aRWI = aVW->getRWInteractor()){
- switch(event->button()) {
- case LeftButton:
- aRWI->LeftButtonPressed(event) ;
- break ;
- case MidButton:
- aRWI->MiddleButtonPressed(event) ;
- break ;
- case RightButton:
- aRWI->RightButtonPressed(event) ;
- break;
- default:
- break ;
- }
- }
- }
-}
-
-//==========================================================
-void
-SVTK_Viewer
-::onMouseMove(SUIT_ViewWindow* vw, QMouseEvent* event)
-{
- if(SVTK_ViewWindow* aVW = dynamic_cast<SVTK_ViewWindow*>(vw)){
- if(SVTK_RenderWindowInteractor* aRWI = aVW->getRWInteractor()){
- aRWI->MouseMove( event );
- }
- }
-}
-
-//==========================================================
-void
-SVTK_Viewer
-::onMouseRelease(SUIT_ViewWindow* vw, QMouseEvent* event)
-{
- if(SVTK_ViewWindow* aVW = dynamic_cast<SVTK_ViewWindow*>(vw)){
- if(SVTK_RenderWindowInteractor* aRWI = aVW->getRWInteractor()){
- switch(event->button()) {
- case LeftButton:
- aRWI->LeftButtonReleased(event) ;
- break ;
- case MidButton:
- aRWI->MiddleButtonReleased(event) ;
- break ;
- case RightButton:
- aRWI->RightButtonReleased(event) ;
- break;
- default:
- break ;
- }
- }
- }
-}
-
-//==========================================================
-void
-SVTK_Viewer
-::enableSelection(bool isEnabled)
-{
- mySelectionEnabled = isEnabled;
- //!! To be done for view windows
-}
-
-//==========================================================
-void
-SVTK_Viewer
-::enableMultiselection(bool isEnable)
-{
- myMultiSelectionEnabled = isEnable;
- //!! To be done for view windows
-}
-
-void SVTK_Viewer::onDumpView()
-{
- SVTK_ViewWindow* aView = (SVTK_ViewWindow*)(myViewManager->getActiveView());
- if ( aView )
- aView->onDumpView();
-}
-
-//==========================================================
-void SVTK_Viewer::onChangeBgColor()
-{
- QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();
- for(int i = 0, iEnd = aViews.size(); i < iEnd; i++)
- if(SUIT_ViewWindow* aViewWindow = aViews.at(i))
- if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow)){
- QColor aColor = QColorDialog::getColor( aView->backgroundColor(), aView);
- if ( aColor.isValid() )
- aView->setBackgroundColor(aColor);
- }
-}
-
-//==========================================================
-void
-SVTK_Viewer
-::onShowToolbar()
-{
- QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();
- for(int i = 0, iEnd = aViews.size(); i < iEnd; i++)
- if(SUIT_ViewWindow* aViewWindow = aViews.at(i))
- if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow))
- aView->getToolBar()->show();
-}
-
-//==========================================================
-void
-SVTK_Viewer
-::Display( const SALOME_VTKPrs* prs )
-{
- // try do downcast object
- if(const SVTK_Prs* aPrs = dynamic_cast<const SVTK_Prs*>( prs )){
- if(aPrs->IsNull())
- return;
- if(vtkActorCollection* anActorCollection = aPrs->GetObjects()){
- // get SALOMEDS Study
- _PTR(Study) aStudy(getStudyDS());
- anActorCollection->InitTraversal();
- while(vtkActor* anActor = anActorCollection->GetNextActor()){
- if(SALOME_Actor* anAct = SALOME_Actor::SafeDownCast(anActor)){
- // Set visibility flag
- Handle(SALOME_InteractiveObject) anObj = anAct->getIO();
- if(!anObj.IsNull() && anObj->hasEntry() && aStudy){
- ToolsGUI::SetVisibility(aStudy,anObj->getEntry(),true,this);
- }
- // just display the object
- QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();
- for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){
- if(SUIT_ViewWindow* aViewWindow = aViews.at(i)){
- if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow)){
- if(SVTK_RenderWindowInteractor* aRWI = aView->getRWInteractor()){
- aRWI->Display(anAct,false);
- if(anAct->IsSetCamera()){
- vtkRenderer* aRenderer = aView->getRenderer();
- anAct->SetCamera( aRenderer->GetActiveCamera() );
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
-
-//==========================================================
-void
-SVTK_Viewer
-::Erase( const SALOME_VTKPrs* prs, const bool forced )
-{
- // try do downcast object
- if(const SVTK_Prs* aPrs = dynamic_cast<const SVTK_Prs*>( prs )){
- if(aPrs->IsNull())
- return;
- if(vtkActorCollection* anActorCollection = aPrs->GetObjects()){
- // get SALOMEDS Study
- _PTR(Study) aStudy(getStudyDS());
- anActorCollection->InitTraversal();
- while(vtkActor* anActor = anActorCollection->GetNextActor())
- if(SALOME_Actor* anAct = SALOME_Actor::SafeDownCast(anActor)){
- // Set visibility flag
- Handle(SALOME_InteractiveObject) anObj = anAct->getIO();
- if(!anObj.IsNull() && anObj->hasEntry() && aStudy){
- ToolsGUI::SetVisibility(aStudy,anObj->getEntry(),false,this);
- }
- // just display the object
- QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();
- for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){
- if(SUIT_ViewWindow* aViewWindow = aViews.at(i))
- if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow))
- if(SVTK_RenderWindowInteractor* aRWI = aView->getRWInteractor())
- if ( forced )
- aRWI->Remove(anAct,false);
- else
- aRWI->Erase(anAct,forced);
- }
- }
- }
- }
-}
-
-//==========================================================
-void
-SVTK_Viewer
-::EraseAll( const bool forced )
-{
- _PTR(Study) aStudy(getStudyDS());
- QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();
- for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){
- if(SUIT_ViewWindow* aViewWindow = aViews.at(i)){
- if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow)){
- vtkRenderer* aRenderer = aView->getRenderer();
- vtkActorCollection* anActorCollection = aRenderer->GetActors();
- anActorCollection->InitTraversal();
- while(vtkActor* anActor = anActorCollection->GetNextActor()){
- if(SALOME_Actor* anAct = SALOME_Actor::SafeDownCast(anActor)){
- // Set visibility flag
- Handle(SALOME_InteractiveObject) anObj = anAct->getIO();
- if(!anObj.IsNull() && anObj->hasEntry() && aStudy)
- ToolsGUI::SetVisibility(aStudy,anObj->getEntry(),false,this);
- if(forced)
- aRenderer->RemoveActor(anAct);
- else{
- // just erase actor
- anAct->SetVisibility( false );
- // erase dependent actors
- vtkActorCollection* aCollection = vtkActorCollection::New();
- anAct->GetChildActors( aCollection );
- aCollection->InitTraversal();
- while(vtkActor* aSubAct = aCollection->GetNextActor())
- aSubAct->SetVisibility( false );
- aCollection->Delete();
- }
- }
- }
- }
- }
- }
- Repaint();
-}
-
-//==========================================================
-SALOME_Prs*
-SVTK_Viewer
-::CreatePrs( const char* entry )
-{
- SVTK_Prs* prs = new SVTK_Prs();
- if ( entry ) {
- vtkRenderer* rnr = ( (SVTK_ViewWindow*) getViewManager()->getActiveView() )->getRenderer();
- vtkActorCollection* theActors = rnr->GetActors();
- theActors->InitTraversal();
- vtkActor* ac;
- while( ( ac = theActors->GetNextActor() ) ) {
- SALOME_Actor* anActor = SALOME_Actor::SafeDownCast( ac );
- if ( anActor && anActor->hasIO() && !strcmp( anActor->getIO()->getEntry(), entry ) ) {
- prs->AddObject( ac );
- }
- }
- }
- return prs;
-}
-
-//==========================================================
-void
-SVTK_Viewer
-::BeforeDisplay( SALOME_Displayer* d )
-{
- d->BeforeDisplay( this, SALOME_VTKViewType() );
-}
-
-//==========================================================
-void
-SVTK_Viewer::AfterDisplay( SALOME_Displayer* d )
-{
- d->AfterDisplay( this, SALOME_VTKViewType() );
-}
-
-//==========================================================
-bool
-SVTK_Viewer
-::isVisible( const Handle(SALOME_InteractiveObject)& io )
-{
- QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();
- for(int i = 0, iEnd = aViews.size(); i < iEnd; i++)
- if(SUIT_ViewWindow* aViewWindow = aViews.at(i))
- if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow))
- if(SVTK_RenderWindowInteractor* aRWI = aView->getRWInteractor())
- if(!aRWI->isVisible( io ))
- return false;
- return true;
-}
-
-//==========================================================
-void
-SVTK_Viewer
-::Repaint()
-{
-// if (theUpdateTrihedron) onAdjustTrihedron();
- QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();
- for(int i = 0, iEnd = aViews.size(); i < iEnd; i++)
- if(SUIT_ViewWindow* aViewWindow = aViews.at(i))
- if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow))
- if(SVTK_RenderWindow* aRW = aView->getRenderWindow())
- {
- aView->getRenderer()->Render();
- aView->getRWInteractor()->unHighlightAll();
- aRW->update();
- }
-}
-
-void
-SVTK_Viewer
-::onSelectionChanged()
-{
- emit selectionChanged();
-}
-
+#include <qpopupmenu.h>\r
+#include <qcolordialog.h>\r
+\r
+#include <vtkCamera.h>\r
+#include <vtkRenderer.h>\r
+#include <vtkActorCollection.h>\r
+\r
+#include "SUIT_Session.h"\r
+\r
+#include "SVTK_Selection.h"\r
+#include "SVTK_ViewModel.h"\r
+#include "SVTK_ViewWindow.h"\r
+#include "SVTK_Prs.h"\r
+\r
+#include "VTKViewer_ViewModel.h"\r
+\r
+#include "SVTK_RenderWindowInteractor.h"\r
+#include "SVTK_RenderWindow.h"\r
+\r
+//#include <ToolsGUI.h>\r
+\r
+#include <SALOME_Actor.h>\r
+#include <SALOME_InteractiveObject.hxx>\r
+\r
+// Temporarily commented to avoid awful dependecy on SALOMEDS\r
+// TODO: better mechanism of storing display/erse status in a study\r
+// should be provided...\r
+//#include "Utils_ORB_INIT.hxx"\r
+//#include "Utils_SINGLETON.hxx"\r
+//#include "SALOME_ModuleCatalog_impl.hxx"\r
+//#include "SALOME_NamingService.hxx"\r
+\r
+//#include "SALOMEDSClient.hxx"\r
+//#include "SALOMEDS_StudyManager.hxx"\r
+\r
+// in order NOT TO link with SalomeApp, here the code returns SALOMEDS_Study.\r
+// SalomeApp_Study::studyDS() does it as well, but -- here it is retrieved from \r
+// SALOMEDS::StudyManager - no linkage with SalomeApp. \r
+\r
+// Temporarily commented to avoid awful dependecy on SALOMEDS\r
+// TODO: better mechanism of storing display/erse status in a study\r
+// should be provided...\r
+//static _PTR(Study) getStudyDS() \r
+//{\r
+// SALOMEDSClient_Study* aStudy = NULL;\r
+// _PTR(StudyManager) aMgr( new SALOMEDS_StudyManager() );\r
+ // get id of SUIT_Study, if it's a SalomeApp_Study, it will return\r
+ // id of its underlying SALOMEDS::Study\r
+// SUIT_Application* app = SUIT_Session::session()->activeApplication();\r
+// if ( !app ) return _PTR(Study)(aStudy); \r
+// SUIT_Study* stud = app->activeStudy();\r
+// if ( !stud ) return _PTR(Study)(aStudy); \r
+// const int id = stud->id(); // virtual method, must return SALOMEDS_Study id\r
+ // get SALOMEDS_Study with this id from StudyMgr\r
+// return aMgr->GetStudyByID( id );\r
+//}\r
+\r
+//==========================================================\r
+SVTK_Viewer::SVTK_Viewer()\r
+{\r
+ myTrihedronSize = 100;\r
+}\r
+\r
+//==========================================================\r
+SVTK_Viewer::~SVTK_Viewer() \r
+{\r
+}\r
+\r
+QColor SVTK_Viewer::backgroundColor() const\r
+{\r
+ return myBgColor;\r
+}\r
+\r
+void SVTK_Viewer::setBackgroundColor( const QColor& c )\r
+{\r
+ if ( c.isValid() )\r
+ myBgColor = c;\r
+}\r
+\r
+//==========================================================\r
+SUIT_ViewWindow* SVTK_Viewer::createView( SUIT_Desktop* theDesktop )\r
+{\r
+ SVTK_ViewWindow* vw = new SVTK_ViewWindow( theDesktop, this );\r
+ vw->setBackgroundColor( backgroundColor() );\r
+ vw->SetTrihedronSize( trihedronSize() );\r
+ return vw;\r
+}\r
+\r
+int SVTK_Viewer::trihedronSize() const\r
+{\r
+ return myTrihedronSize;\r
+}\r
+\r
+void SVTK_Viewer::setTrihedronSize( const int sz )\r
+{\r
+ myTrihedronSize = sz;\r
+\r
+ SUIT_ViewManager* vm = getViewManager();\r
+ if ( !vm )\r
+ return;\r
+\r
+ QPtrVector<SUIT_ViewWindow> vec = vm->getViews();\r
+ for ( int i = 0; i < vec.count(); i++ )\r
+ {\r
+ SUIT_ViewWindow* win = vec.at( i );\r
+ if ( !win || !win->inherits( "SVTK_ViewWindow" ) )\r
+ continue;\r
+\r
+ SVTK_ViewWindow* vw = (SVTK_ViewWindow*)win;\r
+ vw->SetTrihedronSize( sz );\r
+ }\r
+}\r
+\r
+//==========================================================\r
+void SVTK_Viewer::setViewManager(SUIT_ViewManager* theViewManager)\r
+{\r
+ SUIT_ViewModel::setViewManager(theViewManager);\r
+\r
+ if ( !theViewManager )\r
+ return;\r
+\r
+ connect(theViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)), \r
+ this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));\r
+ \r
+ connect(theViewManager, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)), \r
+ this, SLOT(onMouseMove(SUIT_ViewWindow*, QMouseEvent*)));\r
+ \r
+ connect(theViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)), \r
+ this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));\r
+}\r
+\r
+//==========================================================\r
+void SVTK_Viewer::contextMenuPopup( QPopupMenu* thePopup )\r
+{\r
+ thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_DUMP_VIEW" ), this, SLOT( onDumpView() ) );\r
+ thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_CHANGE_BACKGROUD" ), this, SLOT( onChangeBgColor() ) );\r
+\r
+ thePopup->insertSeparator();\r
+\r
+ SVTK_ViewWindow* aView = (SVTK_ViewWindow*)(myViewManager->getActiveView());\r
+ if ( aView && !aView->getToolBar()->isVisible() )\r
+ thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) );\r
+}\r
+\r
+//==========================================================\r
+void SVTK_Viewer::onMousePress(SUIT_ViewWindow* vw, QMouseEvent* event)\r
+{\r
+ if(SVTK_ViewWindow* aVW = dynamic_cast<SVTK_ViewWindow*>(vw)){\r
+ if(SVTK_RenderWindowInteractor* aRWI = aVW->getRWInteractor()){\r
+ switch(event->button()) {\r
+ case LeftButton:\r
+ aRWI->LeftButtonPressed(event) ;\r
+ break ;\r
+ case MidButton:\r
+ aRWI->MiddleButtonPressed(event) ;\r
+ break ;\r
+ case RightButton:\r
+ aRWI->RightButtonPressed(event) ;\r
+ break;\r
+ default:\r
+ break ;\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+//==========================================================\r
+void \r
+SVTK_Viewer\r
+::onMouseMove(SUIT_ViewWindow* vw, QMouseEvent* event)\r
+{\r
+ if(SVTK_ViewWindow* aVW = dynamic_cast<SVTK_ViewWindow*>(vw)){\r
+ if(SVTK_RenderWindowInteractor* aRWI = aVW->getRWInteractor()){\r
+ aRWI->MouseMove( event );\r
+ }\r
+ }\r
+}\r
+\r
+//==========================================================\r
+void \r
+SVTK_Viewer\r
+::onMouseRelease(SUIT_ViewWindow* vw, QMouseEvent* event)\r
+{\r
+ if(SVTK_ViewWindow* aVW = dynamic_cast<SVTK_ViewWindow*>(vw)){\r
+ if(SVTK_RenderWindowInteractor* aRWI = aVW->getRWInteractor()){\r
+ switch(event->button()) {\r
+ case LeftButton:\r
+ aRWI->LeftButtonReleased(event) ;\r
+ break ;\r
+ case MidButton:\r
+ aRWI->MiddleButtonReleased(event) ;\r
+ break ;\r
+ case RightButton:\r
+ aRWI->RightButtonReleased(event) ;\r
+ break;\r
+ default:\r
+ break ;\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+//==========================================================\r
+void \r
+SVTK_Viewer\r
+::enableSelection(bool isEnabled)\r
+{\r
+ mySelectionEnabled = isEnabled;\r
+ //!! To be done for view windows\r
+}\r
+\r
+//==========================================================\r
+void\r
+SVTK_Viewer\r
+::enableMultiselection(bool isEnable)\r
+{\r
+ myMultiSelectionEnabled = isEnable;\r
+ //!! To be done for view windows\r
+}\r
+\r
+void SVTK_Viewer::onDumpView()\r
+{\r
+ SVTK_ViewWindow* aView = (SVTK_ViewWindow*)(myViewManager->getActiveView());\r
+ if ( aView )\r
+ aView->onDumpView();\r
+}\r
+\r
+//==========================================================\r
+void SVTK_Viewer::onChangeBgColor()\r
+{\r
+ QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();\r
+ for(int i = 0, iEnd = aViews.size(); i < iEnd; i++)\r
+ if(SUIT_ViewWindow* aViewWindow = aViews.at(i))\r
+ if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow)){\r
+ QColor aColor = QColorDialog::getColor( aView->backgroundColor(), aView);\r
+ if ( aColor.isValid() )\r
+ aView->setBackgroundColor(aColor);\r
+ }\r
+}\r
+\r
+//==========================================================\r
+void\r
+SVTK_Viewer\r
+::onShowToolbar() \r
+{\r
+ QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();\r
+ for(int i = 0, iEnd = aViews.size(); i < iEnd; i++)\r
+ if(SUIT_ViewWindow* aViewWindow = aViews.at(i))\r
+ if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow))\r
+ aView->getToolBar()->show(); \r
+}\r
+\r
+//==========================================================\r
+void\r
+SVTK_Viewer\r
+::Display( const SALOME_VTKPrs* prs )\r
+{\r
+ // try do downcast object\r
+ if(const SVTK_Prs* aPrs = dynamic_cast<const SVTK_Prs*>( prs )){\r
+ if(aPrs->IsNull())\r
+ return;\r
+ if(vtkActorCollection* anActorCollection = aPrs->GetObjects()){\r
+ // get SALOMEDS Study\r
+ // Temporarily commented to avoid awful dependecy on SALOMEDS\r
+ // TODO: better mechanism of storing display/erse status in a study\r
+ // should be provided...\r
+ // _PTR(Study) aStudy(getStudyDS());\r
+ anActorCollection->InitTraversal();\r
+ while(vtkActor* anActor = anActorCollection->GetNextActor()){\r
+ if(SALOME_Actor* anAct = SALOME_Actor::SafeDownCast(anActor)){\r
+ // Set visibility flag\r
+ // Temporarily commented to avoid awful dependecy on SALOMEDS\r
+ // TODO: better mechanism of storing display/erse status in a study\r
+ // should be provided...\r
+ //Handle(SALOME_InteractiveObject) anObj = anAct->getIO();\r
+ //if(!anObj.IsNull() && anObj->hasEntry() && aStudy){\r
+ // ToolsGUI::SetVisibility(aStudy,anObj->getEntry(),true,this);\r
+ //}\r
+ // just display the object\r
+ QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();\r
+ for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){\r
+ if(SUIT_ViewWindow* aViewWindow = aViews.at(i)){\r
+ if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow)){\r
+ if(SVTK_RenderWindowInteractor* aRWI = aView->getRWInteractor()){\r
+ aRWI->Display(anAct,false);\r
+ if(anAct->IsSetCamera()){\r
+ vtkRenderer* aRenderer = aView->getRenderer();\r
+ anAct->SetCamera( aRenderer->GetActiveCamera() );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+//==========================================================\r
+void\r
+SVTK_Viewer\r
+::Erase( const SALOME_VTKPrs* prs, const bool forced )\r
+{\r
+ // try do downcast object\r
+ if(const SVTK_Prs* aPrs = dynamic_cast<const SVTK_Prs*>( prs )){\r
+ if(aPrs->IsNull())\r
+ return;\r
+ if(vtkActorCollection* anActorCollection = aPrs->GetObjects()){\r
+ // get SALOMEDS Study\r
+ // Temporarily commented to avoid awful dependecy on SALOMEDS\r
+ // TODO: better mechanism of storing display/erse status in a study\r
+ // should be provided...\r
+ //_PTR(Study) aStudy(getStudyDS());\r
+ anActorCollection->InitTraversal();\r
+ while(vtkActor* anActor = anActorCollection->GetNextActor())\r
+ if(SALOME_Actor* anAct = SALOME_Actor::SafeDownCast(anActor)){\r
+ // Set visibility flag\r
+ // Temporarily commented to avoid awful dependecy on SALOMEDS\r
+ // TODO: better mechanism of storing display/erse status in a study\r
+ // should be provided...\r
+ //Handle(SALOME_InteractiveObject) anObj = anAct->getIO();\r
+ //if(!anObj.IsNull() && anObj->hasEntry() && aStudy){\r
+ // ToolsGUI::SetVisibility(aStudy,anObj->getEntry(),false,this);\r
+ //}\r
+ // just display the object\r
+ QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();\r
+ for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){\r
+ if(SUIT_ViewWindow* aViewWindow = aViews.at(i))\r
+ if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow))\r
+ if(SVTK_RenderWindowInteractor* aRWI = aView->getRWInteractor())\r
+ if ( forced )\r
+ aRWI->Remove(anAct,false);\r
+ else\r
+ aRWI->Erase(anAct,forced);\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r
+ \r
+//==========================================================\r
+void\r
+SVTK_Viewer\r
+::EraseAll( const bool forced )\r
+{\r
+ // Temporarily commented to avoid awful dependecy on SALOMEDS\r
+ // TODO: better mechanism of storing display/erse status in a study\r
+ // should be provided...\r
+ //_PTR(Study) aStudy(getStudyDS());\r
+ QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();\r
+ for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){\r
+ if(SUIT_ViewWindow* aViewWindow = aViews.at(i)){\r
+ if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow)){\r
+ vtkRenderer* aRenderer = aView->getRenderer();\r
+ vtkActorCollection* anActorCollection = aRenderer->GetActors();\r
+ anActorCollection->InitTraversal();\r
+ while(vtkActor* anActor = anActorCollection->GetNextActor()){\r
+ if(SALOME_Actor* anAct = SALOME_Actor::SafeDownCast(anActor)){\r
+ // Set visibility flag\r
+ // Temporarily commented to avoid awful dependecy on SALOMEDS\r
+ // TODO: better mechanism of storing display/erse status in a study\r
+ // should be provided...\r
+ //Handle(SALOME_InteractiveObject) anObj = anAct->getIO();\r
+ //if(!anObj.IsNull() && anObj->hasEntry() && aStudy)\r
+ // ToolsGUI::SetVisibility(aStudy,anObj->getEntry(),false,this);\r
+ if(forced)\r
+ aRenderer->RemoveActor(anAct);\r
+ else{\r
+ // just erase actor\r
+ anAct->SetVisibility( false );\r
+ // erase dependent actors\r
+ vtkActorCollection* aCollection = vtkActorCollection::New();\r
+ anAct->GetChildActors( aCollection );\r
+ aCollection->InitTraversal();\r
+ while(vtkActor* aSubAct = aCollection->GetNextActor())\r
+ aSubAct->SetVisibility( false );\r
+ aCollection->Delete();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ Repaint();\r
+}\r
+\r
+//==========================================================\r
+SALOME_Prs* \r
+SVTK_Viewer\r
+::CreatePrs( const char* entry )\r
+{\r
+ SVTK_Prs* prs = new SVTK_Prs();\r
+ if ( entry ) {\r
+ vtkRenderer* rnr = ( (SVTK_ViewWindow*) getViewManager()->getActiveView() )->getRenderer();\r
+ vtkActorCollection* theActors = rnr->GetActors();\r
+ theActors->InitTraversal();\r
+ vtkActor* ac;\r
+ while( ( ac = theActors->GetNextActor() ) ) {\r
+ SALOME_Actor* anActor = SALOME_Actor::SafeDownCast( ac );\r
+ if ( anActor && anActor->hasIO() && !strcmp( anActor->getIO()->getEntry(), entry ) ) {\r
+ prs->AddObject( ac );\r
+ }\r
+ }\r
+ }\r
+ return prs;\r
+}\r
+\r
+//==========================================================\r
+void\r
+SVTK_Viewer\r
+::BeforeDisplay( SALOME_Displayer* d )\r
+{\r
+ d->BeforeDisplay( this, SALOME_VTKViewType() );\r
+}\r
+\r
+//==========================================================\r
+void\r
+SVTK_Viewer::AfterDisplay( SALOME_Displayer* d )\r
+{\r
+ d->AfterDisplay( this, SALOME_VTKViewType() );\r
+}\r
+\r
+//==========================================================\r
+bool\r
+SVTK_Viewer\r
+::isVisible( const Handle(SALOME_InteractiveObject)& io )\r
+{\r
+ QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();\r
+ for(int i = 0, iEnd = aViews.size(); i < iEnd; i++)\r
+ if(SUIT_ViewWindow* aViewWindow = aViews.at(i))\r
+ if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow))\r
+ if(SVTK_RenderWindowInteractor* aRWI = aView->getRWInteractor())\r
+ if(!aRWI->isVisible( io ))\r
+ return false;\r
+ return true;\r
+}\r
+\r
+//==========================================================\r
+void \r
+SVTK_Viewer\r
+::Repaint()\r
+{\r
+// if (theUpdateTrihedron) onAdjustTrihedron();\r
+ QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();\r
+ for(int i = 0, iEnd = aViews.size(); i < iEnd; i++)\r
+ if(SUIT_ViewWindow* aViewWindow = aViews.at(i))\r
+ if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewWindow))\r
+ if(SVTK_RenderWindow* aRW = aView->getRenderWindow())\r
+ aRW->update();\r
+}\r
+\r
+void \r
+SVTK_Viewer\r
+::onSelectionChanged()\r
+{\r
+ emit selectionChanged();\r
+}\r
+\r