1 #include "SALOME_Actor.h"
3 #include <qapplication.h>
5 #include <vtkActorCollection.h>
6 #include <vtkRenderWindow.h>
7 #include <vtkRenderer.h>
10 #include "QtxAction.h"
12 #include "SUIT_Session.h"
13 #include "SUIT_ToolButton.h"
14 #include "SUIT_MessageBox.h"
16 #include "SUIT_Tools.h"
17 #include "SUIT_ResourceMgr.h"
18 #include "SUIT_FileDlg.h"
20 #include "VTKViewer_Transform.h"
21 #include "VTKViewer_Utilities.h"
23 #include "SVTK_Trihedron.h"
24 #include "SVTK_ViewWindow.h"
25 #include "SVTK_ViewModel.h"
26 #include "SVTK_RenderWindow.h"
27 #include "SVTK_RenderWindowInteractor.h"
28 #include "SVTK_InteractorStyle.h"
30 #include "SALOME_ListIteratorOfListIO.hxx"
32 #include "SVTK_SelectorDef.h"
34 #include "VTKViewer_Algorithm.h"
35 #include "SVTK_Functor.h"
37 //----------------------------------------------------------------------------
39 ::SVTK_ViewWindow( SUIT_Desktop* theDesktop,
40 SVTK_Viewer* theModel)
41 : SUIT_ViewWindow(theDesktop)
44 mySelector = new SVTK_SelectorDef();
45 connect(this,SIGNAL(selectionChanged()),theModel,SLOT(onSelectionChanged()));
47 myTransform = VTKViewer_Transform::New();
48 myTrihedron = SVTK_Trihedron::New();
49 myRenderer = vtkRenderer::New() ;
51 myTrihedron->AddToRender( myRenderer );
53 myRenderWindow = new SVTK_RenderWindow( this, "RenderWindow" );
54 setCentralWidget(myRenderWindow);
55 myRenderWindow->setFocusPolicy( StrongFocus );
56 myRenderWindow->setFocus();
58 myRenderWindow->getRenderWindow()->AddRenderer( myRenderer );
60 myRenderer->GetActiveCamera()->ParallelProjectionOn();
61 myRenderer->LightFollowCameraOn();
62 myRenderer->TwoSidedLightingOn();
64 // Set BackgroundColor
65 QString BgrColorRed = "0";//SUIT_CONFIG->getSetting("VTKViewer:BackgroundColorRed");
66 QString BgrColorGreen = "0";//SUIT_CONFIG->getSetting("VTKViewer:BackgroundColorGreen");
67 QString BgrColorBlue = "0";//SUIT_CONFIG->getSetting("VTKViewer:BackgroundColorBlue");
69 if( !BgrColorRed.isEmpty() && !BgrColorGreen.isEmpty() && !BgrColorBlue.isEmpty() )
70 myRenderer->SetBackground( BgrColorRed.toInt()/255., BgrColorGreen.toInt()/255., BgrColorBlue.toInt()/255. );
72 myRenderer->SetBackground( 0, 0, 0 );
74 // Create an interactor.
75 myRWInteractor = SVTK_RenderWindowInteractor::New();
76 myRWInteractor->SetRenderWindow( myRenderWindow->getRenderWindow() );
77 myRWInteractor->setViewWindow( this );
79 SVTK_InteractorStyle* RWS = SVTK_InteractorStyle::New();
80 RWS->setGUIWindow( myRenderWindow );
81 RWS->setViewWindow( this );
83 myRWInteractor->SetInteractorStyle( RWS );
84 myRWInteractor->Initialize();
86 RWS->setTriedron( myTrihedron );
87 RWS->FindPokedRenderer( 0, 0 );
89 SetSelectionMode(ActorSelection);
91 setCentralWidget( myRenderWindow );
93 myToolBar = new QToolBar(this);
94 myToolBar->setCloseMode(QDockWindow::Undocked);
95 myToolBar->setLabel(tr("LBL_TOOLBAR_LABEL"));
100 connect( myRenderWindow, SIGNAL(KeyPressed( QKeyEvent* )),
101 this, SLOT(onKeyPressed( QKeyEvent* )) );
102 connect( myRenderWindow, SIGNAL(KeyReleased( QKeyEvent* )),
103 this, SLOT(onKeyReleased( QKeyEvent* )) );
104 connect( myRenderWindow, SIGNAL(MouseButtonPressed( QMouseEvent* )),
105 this, SLOT(onMousePressed( QMouseEvent* )) );
106 connect( myRenderWindow, SIGNAL(MouseButtonReleased( QMouseEvent* )),
107 this, SLOT(onMouseReleased( QMouseEvent* )) );
108 connect( myRenderWindow, SIGNAL(MouseDoubleClicked( QMouseEvent* )),
109 this, SLOT(onMouseDoubleClicked( QMouseEvent* )) );
110 connect( myRenderWindow, SIGNAL(MouseMove( QMouseEvent* )),
111 this, SLOT(onMouseMoving( QMouseEvent* )) );
113 connect( myRWInteractor, SIGNAL(RenderWindowModified()),
114 myRenderWindow, SLOT(update()) );
115 connect( myRWInteractor, SIGNAL(contextMenuRequested( QContextMenuEvent * )),
116 this, SIGNAL(contextMenuRequested( QContextMenuEvent * )) );
121 //----------------------------------------------------------------------------
125 myTransform->Delete();
126 // In order to ensure that the interactor unregisters
127 // this RenderWindow, we assign a NULL RenderWindow to
128 // it before deleting it.
129 myRWInteractor->SetRenderWindow( NULL );
130 myRWInteractor->Delete();
133 myRenderer->RemoveAllProps();
134 //m_Renderer->Delete() ;
135 myTrihedron->Delete();
138 //----------------------------------------------------------------------------
143 myRWInteractor->GetSInteractorStyle()->startZoom();
146 //----------------------------------------------------------------------------
151 myRWInteractor->GetSInteractorStyle()->startPan();
154 //----------------------------------------------------------------------------
159 myRWInteractor->GetSInteractorStyle()->startRotate();
162 //----------------------------------------------------------------------------
165 ::activateGlobalPanning()
167 if(myTrihedron->GetVisibleActorCount(myRenderer))
168 myRWInteractor->GetSInteractorStyle()->startGlobalPan();
171 //----------------------------------------------------------------------------
174 ::activateWindowFit()
176 myRWInteractor->GetSInteractorStyle()->startFitArea();
179 //----------------------------------------------------------------------------
184 if (!myActionsMap.isEmpty()) return;
186 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
191 aAction = new QtxAction(tr("MNU_DUMP_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_DUMP" ) ),
192 tr( "MNU_DUMP_VIEW" ), 0, this);
193 aAction->setStatusTip(tr("DSC_DUMP_VIEW"));
194 connect(aAction, SIGNAL(activated()), this, SLOT(onDumpView()));
195 myActionsMap[ DumpId ] = aAction;
198 aAction = new QtxAction(tr("MNU_FITALL"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_FITALL" ) ),
199 tr( "MNU_FITALL" ), 0, this);
200 aAction->setStatusTip(tr("DSC_FITALL"));
201 connect(aAction, SIGNAL(activated()), this, SLOT(onFitAll()));
202 myActionsMap[ FitAllId ] = aAction;
205 aAction = new QtxAction(tr("MNU_FITRECT"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_FITAREA" ) ),
206 tr( "MNU_FITRECT" ), 0, this);
207 aAction->setStatusTip(tr("DSC_FITRECT"));
208 connect(aAction, SIGNAL(activated()), this, SLOT(activateWindowFit()));
209 myActionsMap[ FitRectId ] = aAction;
212 aAction = new QtxAction(tr("MNU_ZOOM_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_ZOOM" ) ),
213 tr( "MNU_ZOOM_VIEW" ), 0, this);
214 aAction->setStatusTip(tr("DSC_ZOOM_VIEW"));
215 connect(aAction, SIGNAL(activated()), this, SLOT(activateZoom()));
216 myActionsMap[ ZoomId ] = aAction;
219 aAction = new QtxAction(tr("MNU_PAN_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_PAN" ) ),
220 tr( "MNU_PAN_VIEW" ), 0, this);
221 aAction->setStatusTip(tr("DSC_PAN_VIEW"));
222 connect(aAction, SIGNAL(activated()), this, SLOT(activatePanning()));
223 myActionsMap[ PanId ] = aAction;
226 aAction = new QtxAction(tr("MNU_GLOBALPAN_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_GLOBALPAN" ) ),
227 tr( "MNU_GLOBALPAN_VIEW" ), 0, this);
228 aAction->setStatusTip(tr("DSC_GLOBALPAN_VIEW"));
229 connect(aAction, SIGNAL(activated()), this, SLOT(activateGlobalPanning()));
230 myActionsMap[ GlobalPanId ] = aAction;
233 aAction = new QtxAction(tr("MNU_ROTATE_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_ROTATE" ) ),
234 tr( "MNU_ROTATE_VIEW" ), 0, this);
235 aAction->setStatusTip(tr("DSC_ROTATE_VIEW"));
236 connect(aAction, SIGNAL(activated()), this, SLOT(activateRotation()));
237 myActionsMap[ RotationId ] = aAction;
240 aAction = new QtxAction(tr("MNU_FRONT_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_FRONT" ) ),
241 tr( "MNU_FRONT_VIEW" ), 0, this);
242 aAction->setStatusTip(tr("DSC_FRONT_VIEW"));
243 connect(aAction, SIGNAL(activated()), this, SLOT(onFrontView()));
244 myActionsMap[ FrontId ] = aAction;
246 aAction = new QtxAction(tr("MNU_BACK_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_BACK" ) ),
247 tr( "MNU_BACK_VIEW" ), 0, this);
248 aAction->setStatusTip(tr("DSC_BACK_VIEW"));
249 connect(aAction, SIGNAL(activated()), this, SLOT(onBackView()));
250 myActionsMap[ BackId ] = aAction;
252 aAction = new QtxAction(tr("MNU_TOP_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_TOP" ) ),
253 tr( "MNU_TOP_VIEW" ), 0, this);
254 aAction->setStatusTip(tr("DSC_TOP_VIEW"));
255 connect(aAction, SIGNAL(activated()), this, SLOT(onTopView()));
256 myActionsMap[ TopId ] = aAction;
258 aAction = new QtxAction(tr("MNU_BOTTOM_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_BOTTOM" ) ),
259 tr( "MNU_BOTTOM_VIEW" ), 0, this);
260 aAction->setStatusTip(tr("DSC_BOTTOM_VIEW"));
261 connect(aAction, SIGNAL(activated()), this, SLOT(onBottomView()));
262 myActionsMap[ BottomId ] = aAction;
264 aAction = new QtxAction(tr("MNU_LEFT_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_LEFT" ) ),
265 tr( "MNU_LEFT_VIEW" ), 0, this);
266 aAction->setStatusTip(tr("DSC_LEFT_VIEW"));
267 connect(aAction, SIGNAL(activated()), this, SLOT(onLeftView()));
268 myActionsMap[ LeftId ] = aAction;
270 aAction = new QtxAction(tr("MNU_RIGHT_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_RIGHT" ) ),
271 tr( "MNU_RIGHT_VIEW" ), 0, this);
272 aAction->setStatusTip(tr("DSC_RIGHT_VIEW"));
273 connect(aAction, SIGNAL(activated()), this, SLOT(onRightView()));
274 myActionsMap[ RightId ] = aAction;
277 aAction = new QtxAction(tr("MNU_RESET_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_RESET" ) ),
278 tr( "MNU_RESET_VIEW" ), 0, this);
279 aAction->setStatusTip(tr("DSC_RESET_VIEW"));
280 connect(aAction, SIGNAL(activated()), this, SLOT(onResetView()));
281 myActionsMap[ ResetId ] = aAction;
284 //----------------------------------------------------------------------------
289 myActionsMap[DumpId]->addTo(myToolBar);
291 SUIT_ToolButton* aScaleBtn = new SUIT_ToolButton(myToolBar);
292 aScaleBtn->AddAction(myActionsMap[FitAllId]);
293 aScaleBtn->AddAction(myActionsMap[FitRectId]);
294 aScaleBtn->AddAction(myActionsMap[ZoomId]);
296 SUIT_ToolButton* aPanningBtn = new SUIT_ToolButton(myToolBar);
297 aPanningBtn->AddAction(myActionsMap[PanId]);
298 aPanningBtn->AddAction(myActionsMap[GlobalPanId]);
300 myActionsMap[RotationId]->addTo(myToolBar);
302 SUIT_ToolButton* aViewsBtn = new SUIT_ToolButton(myToolBar);
303 aViewsBtn->AddAction(myActionsMap[FrontId]);
304 aViewsBtn->AddAction(myActionsMap[BackId]);
305 aViewsBtn->AddAction(myActionsMap[TopId]);
306 aViewsBtn->AddAction(myActionsMap[BottomId]);
307 aViewsBtn->AddAction(myActionsMap[LeftId]);
308 aViewsBtn->AddAction(myActionsMap[RightId]);
310 myActionsMap[ResetId]->addTo(myToolBar);
313 //----------------------------------------------------------------------------
318 vtkCamera* camera = myRenderer->GetActiveCamera();
319 camera->SetPosition(1,0,0);
320 camera->SetViewUp(0,0,1);
321 camera->SetFocalPoint(0,0,0);
325 //----------------------------------------------------------------------------
330 vtkCamera* camera = myRenderer->GetActiveCamera();
331 camera->SetPosition(-1,0,0);
332 camera->SetViewUp(0,0,1);
333 camera->SetFocalPoint(0,0,0);
337 //----------------------------------------------------------------------------
342 vtkCamera* camera = myRenderer->GetActiveCamera();
343 camera->SetPosition(0,0,1);
344 camera->SetViewUp(0,1,0);
345 camera->SetFocalPoint(0,0,0);
349 //----------------------------------------------------------------------------
354 vtkCamera* camera = myRenderer->GetActiveCamera();
355 camera->SetPosition(0,0,-1);
356 camera->SetViewUp(0,1,0);
357 camera->SetFocalPoint(0,0,0);
361 //----------------------------------------------------------------------------
366 vtkCamera* camera = myRenderer->GetActiveCamera();
367 camera->SetPosition(0,-1,0);
368 camera->SetViewUp(0,0,1);
369 camera->SetFocalPoint(0,0,0);
373 //----------------------------------------------------------------------------
378 vtkCamera* camera = myRenderer->GetActiveCamera();
379 camera->SetPosition(0,1,0);
380 camera->SetViewUp(0,0,1);
381 camera->SetFocalPoint(0,0,0);
385 //----------------------------------------------------------------------------
390 int aTrihedronIsVisible = isTrihedronDisplayed();
391 myTrihedron->SetVisibility( VTKViewer_Trihedron::eOnlyLineOn );
392 ::ResetCamera(myRenderer,true);
393 vtkCamera* aCamera = myRenderer->GetActiveCamera();
394 aCamera->SetPosition(1,-1,1);
395 aCamera->SetViewUp(0,0,1);
396 ::ResetCamera(myRenderer,true);
397 if(aTrihedronIsVisible) myTrihedron->VisibilityOn();
398 else myTrihedron->VisibilityOff();
399 static float aCoeff = 3.0;
400 aCamera->SetParallelScale(aCoeff*aCamera->GetParallelScale());
404 //----------------------------------------------------------------------------
409 myRWInteractor->GetSInteractorStyle()->ViewFitAll();
413 //----------------------------------------------------------------------------
418 QApplication::setOverrideCursor( Qt::waitCursor );
419 QPixmap px = QPixmap::grabWindow(myRenderWindow->winId());
420 QApplication::restoreOverrideCursor();
422 QString fileName = SUIT_FileDlg::getFileName(this,
424 tr("VTK_IMAGE_FILES"),
425 tr("INF_APP_DUMP_VIEW"),
427 if (!fileName.isNull()) {
428 QApplication::setOverrideCursor( Qt::waitCursor );
429 QString fmt = SUIT_Tools::extension( fileName ).upper();
431 fmt = QString("BMP"); // default format
434 bool bOk = px.save(fileName, fmt.latin1());
435 QApplication::restoreOverrideCursor();
437 SUIT_MessageBox::error1(this, tr("ERROR"), tr("ERR_DOC_CANT_SAVE_FILE"), tr("BUT_OK"));
442 //----------------------------------------------------------------
445 ::onSelectionChanged()
449 const SALOME_ListIO& aListIO = mySelector->StoredIObjects();
450 SALOME_ListIteratorOfListIO anIter(aListIO);
451 for(; anIter.More(); anIter.Next()){
452 highlight(anIter.Value(),true,!anIter.More());
455 emit selectionChanged();
458 //----------------------------------------------------------------
461 ::SetSelectionMode(Selection_Mode theMode)
463 mySelector->SetSelectionMode(theMode);
464 myRWInteractor->SetSelectionMode(theMode);
467 //----------------------------------------------------------------
470 ::SelectionMode() const
472 return mySelector->SelectionMode();
475 //----------------------------------------------------------------
480 myRWInteractor->unHighlightAll();
483 //----------------------------------------------------------------
486 ::highlight( const Handle(SALOME_InteractiveObject)& theIO,
490 myRWInteractor->highlight(theIO, theIsHighlight, theIsUpdate);
492 if(mySelector->HasIndex(theIO) && theIO->hasEntry()){
493 TColStd_IndexedMapOfInteger aMapIndex;
494 mySelector->GetIndex(theIO,aMapIndex);
496 const char* anEntry = theIO->getEntry();
497 vtkActorCollection* aCollection = myRenderer->GetActors();
498 if(SALOME_Actor* anActor = Find<SALOME_Actor>(aCollection,TIsSameEntry<SALOME_Actor>(anEntry))){
499 switch (mySelector->SelectionMode()) {
501 myRWInteractor->highlightPoint(aMapIndex,anActor,theIsHighlight,theIsUpdate);
503 case EdgeOfCellSelection:
504 myRWInteractor->highlightEdge(aMapIndex,anActor,theIsHighlight,theIsUpdate);
509 case VolumeSelection:
510 myRWInteractor->highlightCell(aMapIndex,anActor,theIsHighlight,theIsUpdate);
515 myRWInteractor->unHighlightSubSelection();
519 //----------------------------------------------------------------
522 ::isInViewer( const Handle(SALOME_InteractiveObject)& theIO )
524 return myRWInteractor->isInViewer( theIO );
527 //----------------------------------------------------------------
530 ::isVisible( const Handle(SALOME_InteractiveObject)& theIO )
532 return myRWInteractor->isVisible( theIO );
535 //----------------------------------------------------------------------------
538 ::setBackgroundColor( const QColor& color )
541 myRenderer->SetBackground( color.red()/255., color.green()/255., color.blue()/255. );
544 //----------------------------------------------------------------------------
547 ::backgroundColor() const
551 myRenderer->GetBackground( backint );
552 return QColor(int(backint[0]*255), int(backint[1]*255), int(backint[2]*255));
554 return SUIT_ViewWindow::backgroundColor();
557 //----------------------------------------------------------------------------
560 ::Repaint(bool theUpdateTrihedron)
562 if (theUpdateTrihedron)
564 myRenderWindow->update();
567 //----------------------------------------------------------------------------
570 ::GetScale( double theScale[3] )
572 myTransform->GetScale( theScale );
575 //----------------------------------------------------------------------------
578 ::SetScale( double theScale[3] )
580 myTransform->SetScale( theScale[0], theScale[1], theScale[2] );
581 myRWInteractor->Render();
585 //----------------------------------------------------------------------------
588 ::isTrihedronDisplayed()
590 return myTrihedron->GetVisibility() == VTKViewer_Trihedron::eOn;
593 //----------------------------------------------------------------------------
601 if(isTrihedronDisplayed())
602 myTrihedron->VisibilityOff();
604 myTrihedron->VisibilityOn();
609 //----------------------------------------------------------------------------
612 ::ComputeTrihedronSize( double& theNewSize, double& theSize )
614 // calculating diagonal of visible props of the renderer
616 myTrihedron->VisibilityOff();
618 if ( ::ComputeVisiblePropBounds( myRenderer, aBndBox ) == 0 ) {
619 aBndBox[ 1 ] = aBndBox[ 3 ] = aBndBox[ 5 ] = 100;
620 aBndBox[ 0 ] = aBndBox[ 2 ] = aBndBox[ 4 ] = 0;
623 myTrihedron->VisibilityOn();
625 static bool aCalcByDiag = false;
627 aLength = sqrt( ( aBndBox[1]-aBndBox[0])*(aBndBox[1]-aBndBox[0] )+
628 ( aBndBox[3]-aBndBox[2])*(aBndBox[3]-aBndBox[2] )+
629 ( aBndBox[5]-aBndBox[4])*(aBndBox[5]-aBndBox[4] ) );
631 aLength = aBndBox[ 1 ]-aBndBox[ 0 ];
632 aLength = max( ( aBndBox[ 3 ] - aBndBox[ 2 ] ),aLength );
633 aLength = max( ( aBndBox[ 5 ] - aBndBox[ 4 ] ),aLength );
636 static float aSizeInPercents = 105;
637 //QString aSetting = QAD_CONFIG->getSetting( "Viewer:TrihedronSize" );
638 //if ( !aSetting.isEmpty() )
639 // aSizeInPercents = aSetting.toFloat();
641 static float EPS_SIZE = 5.0E-3;
642 theSize = myTrihedron->GetSize();
643 theNewSize = aLength * aSizeInPercents / 100.0;
645 // if the new trihedron size have sufficient difference, then apply the value
646 return fabs( theNewSize - theSize) > theSize * EPS_SIZE ||
647 fabs( theNewSize-theSize ) > theNewSize * EPS_SIZE;
650 //----------------------------------------------------------------------------
653 ::GetTrihedronSize() const
655 return myTrihedron->GetSize();
658 //----------------------------------------------------------------------------
661 ::AdjustTrihedrons( const bool theIsForcedUpdate )
663 if ( !isTrihedronDisplayed() && !theIsForcedUpdate )
666 int aVisibleNum = myTrihedron->GetVisibleActorCount( myRenderer );
667 if ( aVisibleNum || theIsForcedUpdate ) {
668 // if the new trihedron size have sufficient difference, then apply the value
669 double aNewSize = 100, anOldSize;
670 if ( ComputeTrihedronSize( aNewSize, anOldSize ) || theIsForcedUpdate ) {
671 myTrihedron->SetSize( aNewSize );
672 // itearte throuh displayed objects and set size if necessary
674 vtkActorCollection* anActors = getRenderer()->GetActors();
675 anActors->InitTraversal();
676 while( vtkActor* anActor = anActors->GetNextActor() ) {
677 if( SALOME_Actor* aSActor = SALOME_Actor::SafeDownCast( anActor ) ) {
678 if ( aSActor->IsResizable() )
679 aSActor->SetSize( 0.5 * aNewSize );
685 ::ResetCameraClippingRange(myRenderer);
688 //----------------------------------------------------------------------------
691 ::onAdjustTrihedron()
693 AdjustTrihedrons( false );
696 #define INCREMENT_FOR_OP 10
698 //=======================================================================
700 // Purpose : Performs incremental panning to the left
701 //=======================================================================
706 myRWInteractor->GetSInteractorStyle()->IncrementalPan( -INCREMENT_FOR_OP, 0 );
709 //=======================================================================
711 // Purpose : Performs incremental panning to the right
712 //=======================================================================
717 myRWInteractor->GetSInteractorStyle()->IncrementalPan( INCREMENT_FOR_OP, 0 );
720 //=======================================================================
722 // Purpose : Performs incremental panning to the top
723 //=======================================================================
728 myRWInteractor->GetSInteractorStyle()->IncrementalPan( 0, INCREMENT_FOR_OP );
731 //=======================================================================
733 // Purpose : Performs incremental panning to the bottom
734 //=======================================================================
739 myRWInteractor->GetSInteractorStyle()->IncrementalPan( 0, -INCREMENT_FOR_OP );
742 //=======================================================================
744 // Purpose : Performs incremental zooming in
745 //=======================================================================
750 myRWInteractor->GetSInteractorStyle()->IncrementalZoom( INCREMENT_FOR_OP );
753 //=======================================================================
755 // Purpose : Performs incremental zooming out
756 //=======================================================================
761 myRWInteractor->GetSInteractorStyle()->IncrementalZoom( -INCREMENT_FOR_OP );
764 //=======================================================================
765 // name : onRotateLeft
766 // Purpose : Performs incremental rotating to the left
767 //=======================================================================
772 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( -INCREMENT_FOR_OP, 0 );
775 //=======================================================================
776 // name : onRotateRight
777 // Purpose : Performs incremental rotating to the right
778 //=======================================================================
783 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( INCREMENT_FOR_OP, 0 );
786 //=======================================================================
788 // Purpose : Performs incremental rotating to the top
789 //=======================================================================
794 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( 0, -INCREMENT_FOR_OP );
797 //=======================================================================
800 ::onKeyPressed(QKeyEvent* event)
802 emit keyPressed( this, event );
805 //=======================================================================
808 ::onKeyReleased(QKeyEvent* event)
810 emit keyReleased( this, event );
813 //=======================================================================
816 ::onMousePressed(QMouseEvent* event)
818 emit mousePressed(this, event);
821 //=======================================================================
824 ::onMouseReleased(QMouseEvent* event)
826 emit mouseReleased( this, event );
829 //=======================================================================
832 ::onMouseMoving(QMouseEvent* event)
834 emit mouseMoving( this, event );
837 //=======================================================================
840 ::onMouseDoubleClicked( QMouseEvent* event )
842 emit mouseDoubleClicked( this, event );
845 //=======================================================================
846 // name : onRotateDown
847 // Purpose : Performs incremental rotating to the bottom
848 //=======================================================================
853 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( 0, INCREMENT_FOR_OP );
856 //----------------------------------------------------------------------------
859 ::InsertActor( SALOME_Actor* theActor, bool theMoveInternalActors )
861 theActor->AddToRender(myRenderer);
862 theActor->SetTransform(myTransform);
863 if(theMoveInternalActors)
864 myRWInteractor->MoveInternalActors();
867 //----------------------------------------------------------------------------
870 ::AddActor( SALOME_Actor* theActor, bool theUpdate /*=false*/ )
872 InsertActor(theActor);
877 //----------------------------------------------------------------------------
880 ::RemoveActor( SALOME_Actor* theActor, bool theUpdate /*=false*/ )
882 theActor->RemoveFromRender(myRenderer);
887 //----------------------------------------------------------------------------
890 ::MoveActor( SALOME_Actor* theActor)
892 RemoveActor(theActor);
893 InsertActor(theActor,true);