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"
19 #include "VTKViewer_Transform.h"
20 #include "VTKViewer_Utilities.h"
22 #include "SVTK_Trihedron.h"
23 #include "SVTK_ViewWindow.h"
24 #include "SVTK_ViewModel.h"
25 #include "SVTK_RenderWindow.h"
26 #include "SVTK_RenderWindowInteractor.h"
27 #include "SVTK_InteractorStyle.h"
29 #include "SALOME_ListIteratorOfListIO.hxx"
31 #include "SVTK_SelectorDef.h"
33 #include "VTKViewer_Algorithm.h"
34 #include "SVTK_Functor.h"
36 //----------------------------------------------------------------------------
38 ::SVTK_ViewWindow( SUIT_Desktop* theDesktop,
39 SVTK_Viewer* theModel)
40 : SUIT_ViewWindow( theDesktop ),
41 myTrihedronSize( 100 )
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;
283 // onViewTrihedron: Shows - Hides Trihedron
284 aAction = new QtxAction(tr("MNU_SHOW_TRIHEDRON"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_TRIHEDRON" ) ),
285 tr( "MNU_SHOW_TRIHEDRON" ), 0, this);
286 aAction->setStatusTip(tr("DSC_SHOW_TRIHEDRON"));
287 connect(aAction, SIGNAL(activated()), this, SLOT(onViewTrihedron()));
288 myActionsMap[ ViewTrihedronId ] = aAction;
291 //----------------------------------------------------------------------------
296 myActionsMap[DumpId]->addTo(myToolBar);
297 myActionsMap[ViewTrihedronId]->addTo(myToolBar);
299 SUIT_ToolButton* aScaleBtn = new SUIT_ToolButton(myToolBar);
300 aScaleBtn->AddAction(myActionsMap[FitAllId]);
301 aScaleBtn->AddAction(myActionsMap[FitRectId]);
302 aScaleBtn->AddAction(myActionsMap[ZoomId]);
304 SUIT_ToolButton* aPanningBtn = new SUIT_ToolButton(myToolBar);
305 aPanningBtn->AddAction(myActionsMap[PanId]);
306 aPanningBtn->AddAction(myActionsMap[GlobalPanId]);
308 myActionsMap[RotationId]->addTo(myToolBar);
310 SUIT_ToolButton* aViewsBtn = new SUIT_ToolButton(myToolBar);
311 aViewsBtn->AddAction(myActionsMap[FrontId]);
312 aViewsBtn->AddAction(myActionsMap[BackId]);
313 aViewsBtn->AddAction(myActionsMap[TopId]);
314 aViewsBtn->AddAction(myActionsMap[BottomId]);
315 aViewsBtn->AddAction(myActionsMap[LeftId]);
316 aViewsBtn->AddAction(myActionsMap[RightId]);
318 myActionsMap[ResetId]->addTo(myToolBar);
321 //----------------------------------------------------------------------------
326 vtkCamera* camera = myRenderer->GetActiveCamera();
327 camera->SetPosition(1,0,0);
328 camera->SetViewUp(0,0,1);
329 camera->SetFocalPoint(0,0,0);
333 //----------------------------------------------------------------------------
338 vtkCamera* camera = myRenderer->GetActiveCamera();
339 camera->SetPosition(-1,0,0);
340 camera->SetViewUp(0,0,1);
341 camera->SetFocalPoint(0,0,0);
345 //----------------------------------------------------------------------------
350 vtkCamera* camera = myRenderer->GetActiveCamera();
351 camera->SetPosition(0,0,1);
352 camera->SetViewUp(0,1,0);
353 camera->SetFocalPoint(0,0,0);
357 //----------------------------------------------------------------------------
362 vtkCamera* camera = myRenderer->GetActiveCamera();
363 camera->SetPosition(0,0,-1);
364 camera->SetViewUp(0,1,0);
365 camera->SetFocalPoint(0,0,0);
369 //----------------------------------------------------------------------------
374 vtkCamera* camera = myRenderer->GetActiveCamera();
375 camera->SetPosition(0,-1,0);
376 camera->SetViewUp(0,0,1);
377 camera->SetFocalPoint(0,0,0);
381 //----------------------------------------------------------------------------
386 vtkCamera* camera = myRenderer->GetActiveCamera();
387 camera->SetPosition(0,1,0);
388 camera->SetViewUp(0,0,1);
389 camera->SetFocalPoint(0,0,0);
393 //----------------------------------------------------------------------------
398 int aTrihedronIsVisible = isTrihedronDisplayed();
399 myTrihedron->SetVisibility( VTKViewer_Trihedron::eOnlyLineOn );
400 ::ResetCamera(myRenderer,true);
401 vtkCamera* aCamera = myRenderer->GetActiveCamera();
402 aCamera->SetPosition(1,-1,1);
403 aCamera->SetViewUp(0,0,1);
404 ::ResetCamera(myRenderer,true);
405 if(aTrihedronIsVisible) myTrihedron->VisibilityOn();
406 else myTrihedron->VisibilityOff();
407 static float aCoeff = 3.0;
408 aCamera->SetParallelScale(aCoeff*aCamera->GetParallelScale());
412 //----------------------------------------------------------------------------
417 myRWInteractor->GetSInteractorStyle()->ViewFitAll();
421 //----------------------------------------------------------------
424 ::onSelectionChanged()
428 const SALOME_ListIO& aListIO = mySelector->StoredIObjects();
429 SALOME_ListIteratorOfListIO anIter(aListIO);
430 for(; anIter.More(); anIter.Next()){
431 highlight(anIter.Value(),true,!anIter.More());
434 emit selectionChanged();
437 //----------------------------------------------------------------
440 ::SetSelectionMode(Selection_Mode theMode)
442 mySelector->SetSelectionMode(theMode);
443 myRWInteractor->SetSelectionMode(theMode);
446 //----------------------------------------------------------------
449 ::SelectionMode() const
451 return mySelector->SelectionMode();
454 //----------------------------------------------------------------
459 myRWInteractor->unHighlightAll();
462 //----------------------------------------------------------------
465 ::highlight( const Handle(SALOME_InteractiveObject)& theIO,
469 myRWInteractor->highlight(theIO, theIsHighlight, theIsUpdate);
471 if(mySelector->HasIndex(theIO) && theIO->hasEntry()){
472 TColStd_IndexedMapOfInteger aMapIndex;
473 mySelector->GetIndex(theIO,aMapIndex);
475 const char* anEntry = theIO->getEntry();
476 vtkActorCollection* aCollection = myRenderer->GetActors();
477 if(SALOME_Actor* anActor = Find<SALOME_Actor>(aCollection,TIsSameEntry<SALOME_Actor>(anEntry))){
478 switch (mySelector->SelectionMode()) {
480 myRWInteractor->highlightPoint(aMapIndex,anActor,theIsHighlight,theIsUpdate);
482 case EdgeOfCellSelection:
483 myRWInteractor->highlightEdge(aMapIndex,anActor,theIsHighlight,theIsUpdate);
488 case VolumeSelection:
489 myRWInteractor->highlightCell(aMapIndex,anActor,theIsHighlight,theIsUpdate);
494 myRWInteractor->unHighlightSubSelection();
498 //----------------------------------------------------------------
501 ::isInViewer( const Handle(SALOME_InteractiveObject)& theIO )
503 return myRWInteractor->isInViewer( theIO );
506 //----------------------------------------------------------------
509 ::isVisible( const Handle(SALOME_InteractiveObject)& theIO )
511 return myRWInteractor->isVisible( theIO );
514 //----------------------------------------------------------------------------
517 ::setBackgroundColor( const QColor& color )
520 myRenderer->SetBackground( color.red()/255., color.green()/255., color.blue()/255. );
523 //----------------------------------------------------------------------------
526 ::backgroundColor() const
530 myRenderer->GetBackground( backint );
531 return QColor(int(backint[0]*255), int(backint[1]*255), int(backint[2]*255));
533 return SUIT_ViewWindow::backgroundColor();
536 //----------------------------------------------------------------------------
539 ::Repaint(bool theUpdateTrihedron)
541 if (theUpdateTrihedron)
543 myRenderWindow->update();
546 //----------------------------------------------------------------------------
549 ::GetScale( double theScale[3] )
551 myTransform->GetScale( theScale );
554 //----------------------------------------------------------------------------
557 ::SetScale( double theScale[3] )
559 myTransform->SetScale( theScale[0], theScale[1], theScale[2] );
560 myRWInteractor->Render();
564 //----------------------------------------------------------------------------
567 ::isTrihedronDisplayed()
569 return myTrihedron->GetVisibility() == VTKViewer_Trihedron::eOn;
572 //----------------------------------------------------------------------------
580 if(isTrihedronDisplayed())
581 myTrihedron->VisibilityOff();
583 myTrihedron->VisibilityOn();
588 //----------------------------------------------------------------------------
591 ::ComputeTrihedronSize( double& theNewSize, double& theSize )
593 // calculating diagonal of visible props of the renderer
595 myTrihedron->VisibilityOff();
597 if ( ::ComputeVisiblePropBounds( myRenderer, aBndBox ) == 0 ) {
598 aBndBox[ 1 ] = aBndBox[ 3 ] = aBndBox[ 5 ] = 100;
599 aBndBox[ 0 ] = aBndBox[ 2 ] = aBndBox[ 4 ] = 0;
602 myTrihedron->VisibilityOn();
604 static bool aCalcByDiag = false;
606 aLength = sqrt( ( aBndBox[1]-aBndBox[0])*(aBndBox[1]-aBndBox[0] )+
607 ( aBndBox[3]-aBndBox[2])*(aBndBox[3]-aBndBox[2] )+
608 ( aBndBox[5]-aBndBox[4])*(aBndBox[5]-aBndBox[4] ) );
610 aLength = aBndBox[ 1 ]-aBndBox[ 0 ];
611 aLength = max( ( aBndBox[ 3 ] - aBndBox[ 2 ] ),aLength );
612 aLength = max( ( aBndBox[ 5 ] - aBndBox[ 4 ] ),aLength );
615 float aSizeInPercents = myTrihedronSize;
617 static float EPS_SIZE = 5.0E-3;
618 theSize = myTrihedron->GetSize();
619 theNewSize = aLength * aSizeInPercents / 100.0;
621 // if the new trihedron size have sufficient difference, then apply the value
622 return fabs( theNewSize - theSize) > theSize * EPS_SIZE ||
623 fabs( theNewSize-theSize ) > theNewSize * EPS_SIZE;
626 //----------------------------------------------------------------------------
627 int SVTK_ViewWindow::GetTrihedronSize() const
629 return myTrihedronSize;
632 void SVTK_ViewWindow::SetTrihedronSize( const int sz )
634 if ( myTrihedronSize == sz )
637 myTrihedronSize = sz;
638 AdjustTrihedrons( true );
643 ::AdjustTrihedrons( const bool theIsForcedUpdate )
645 if ( !isTrihedronDisplayed() && !theIsForcedUpdate )
648 int aVisibleNum = myTrihedron->GetVisibleActorCount( myRenderer );
649 if ( aVisibleNum || theIsForcedUpdate ) {
650 // if the new trihedron size have sufficient difference, then apply the value
651 double aNewSize = 100, anOldSize;
652 if ( ComputeTrihedronSize( aNewSize, anOldSize ) || theIsForcedUpdate ) {
653 myTrihedron->SetSize( aNewSize );
654 // itearte throuh displayed objects and set size if necessary
656 vtkActorCollection* anActors = getRenderer()->GetActors();
657 anActors->InitTraversal();
658 while( vtkActor* anActor = anActors->GetNextActor() ) {
659 if( SALOME_Actor* aSActor = SALOME_Actor::SafeDownCast( anActor ) ) {
660 if ( aSActor->IsResizable() )
661 aSActor->SetSize( 0.5 * aNewSize );
667 ::ResetCameraClippingRange(myRenderer);
670 //----------------------------------------------------------------------------
673 ::onAdjustTrihedron()
675 AdjustTrihedrons( false );
678 #define INCREMENT_FOR_OP 10
680 //=======================================================================
682 // Purpose : Performs incremental panning to the left
683 //=======================================================================
688 myRWInteractor->GetSInteractorStyle()->IncrementalPan( -INCREMENT_FOR_OP, 0 );
691 //=======================================================================
693 // Purpose : Performs incremental panning to the right
694 //=======================================================================
699 myRWInteractor->GetSInteractorStyle()->IncrementalPan( INCREMENT_FOR_OP, 0 );
702 //=======================================================================
704 // Purpose : Performs incremental panning to the top
705 //=======================================================================
710 myRWInteractor->GetSInteractorStyle()->IncrementalPan( 0, INCREMENT_FOR_OP );
713 //=======================================================================
715 // Purpose : Performs incremental panning to the bottom
716 //=======================================================================
721 myRWInteractor->GetSInteractorStyle()->IncrementalPan( 0, -INCREMENT_FOR_OP );
724 //=======================================================================
726 // Purpose : Performs incremental zooming in
727 //=======================================================================
732 myRWInteractor->GetSInteractorStyle()->IncrementalZoom( INCREMENT_FOR_OP );
735 //=======================================================================
737 // Purpose : Performs incremental zooming out
738 //=======================================================================
743 myRWInteractor->GetSInteractorStyle()->IncrementalZoom( -INCREMENT_FOR_OP );
746 //=======================================================================
747 // name : onRotateLeft
748 // Purpose : Performs incremental rotating to the left
749 //=======================================================================
754 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( -INCREMENT_FOR_OP, 0 );
757 //=======================================================================
758 // name : onRotateRight
759 // Purpose : Performs incremental rotating to the right
760 //=======================================================================
765 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( INCREMENT_FOR_OP, 0 );
768 //=======================================================================
770 // Purpose : Performs incremental rotating to the top
771 //=======================================================================
776 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( 0, -INCREMENT_FOR_OP );
779 //=======================================================================
782 ::onKeyPressed(QKeyEvent* event)
784 emit keyPressed( this, event );
787 //=======================================================================
790 ::onKeyReleased(QKeyEvent* event)
792 emit keyReleased( this, event );
795 //=======================================================================
798 ::onMousePressed(QMouseEvent* event)
800 emit mousePressed(this, event);
803 //=======================================================================
806 ::onMouseReleased(QMouseEvent* event)
808 emit mouseReleased( this, event );
811 //=======================================================================
814 ::onMouseMoving(QMouseEvent* event)
816 emit mouseMoving( this, event );
819 //=======================================================================
822 ::onMouseDoubleClicked( QMouseEvent* event )
824 emit mouseDoubleClicked( this, event );
827 //=======================================================================
828 // name : onRotateDown
829 // Purpose : Performs incremental rotating to the bottom
830 //=======================================================================
835 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( 0, INCREMENT_FOR_OP );
838 //----------------------------------------------------------------------------
841 ::InsertActor( SALOME_Actor* theActor, bool theMoveInternalActors )
843 theActor->AddToRender(myRenderer);
844 theActor->SetTransform(myTransform);
845 if(theMoveInternalActors)
846 myRWInteractor->MoveInternalActors();
849 //----------------------------------------------------------------------------
852 ::AddActor( SALOME_Actor* theActor, bool theUpdate /*=false*/ )
854 InsertActor(theActor);
859 //----------------------------------------------------------------------------
862 ::RemoveActor( SALOME_Actor* theActor, bool theUpdate /*=false*/ )
864 theActor->RemoveFromRender(myRenderer);
869 //----------------------------------------------------------------------------
872 ::MoveActor( SALOME_Actor* theActor)
874 RemoveActor(theActor);
875 InsertActor(theActor,true);
878 //----------------------------------------------------------------------------
883 QPixmap px = QPixmap::grabWindow( myRenderWindow->winId() );
884 return px.convertToImage();