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;
283 // onViewTrihedron: Shows - Hides Trihedron
284 aAction = new QtxAction(tr("MNU_VIEW_TRIHEDRON"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_TRIHEDRON" ) ),
285 tr( "MNU_VIEW_TRIHEDRON" ), 0, this);
286 aAction->setStatusTip(tr("DSC_VIEW_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 //----------------------------------------------------------------------------
426 QApplication::setOverrideCursor( Qt::waitCursor );
427 QPixmap px = QPixmap::grabWindow(myRenderWindow->winId());
428 QApplication::restoreOverrideCursor();
430 QString fileName = SUIT_FileDlg::getFileName(this,
432 tr("VTK_IMAGE_FILES"),
433 tr("INF_APP_DUMP_VIEW"),
435 if (!fileName.isNull()) {
436 QApplication::setOverrideCursor( Qt::waitCursor );
437 QString fmt = SUIT_Tools::extension( fileName ).upper();
439 fmt = QString("BMP"); // default format
442 bool bOk = px.save(fileName, fmt.latin1());
443 QApplication::restoreOverrideCursor();
445 SUIT_MessageBox::error1(this, tr("ERROR"), tr("ERR_DOC_CANT_SAVE_FILE"), tr("BUT_OK"));
450 //----------------------------------------------------------------
453 ::onSelectionChanged()
457 const SALOME_ListIO& aListIO = mySelector->StoredIObjects();
458 SALOME_ListIteratorOfListIO anIter(aListIO);
459 for(; anIter.More(); anIter.Next()){
460 highlight(anIter.Value(),true,!anIter.More());
463 emit selectionChanged();
466 //----------------------------------------------------------------
469 ::SetSelectionMode(Selection_Mode theMode)
471 mySelector->SetSelectionMode(theMode);
472 myRWInteractor->SetSelectionMode(theMode);
475 //----------------------------------------------------------------
478 ::SelectionMode() const
480 return mySelector->SelectionMode();
483 //----------------------------------------------------------------
488 myRWInteractor->unHighlightAll();
491 //----------------------------------------------------------------
494 ::highlight( const Handle(SALOME_InteractiveObject)& theIO,
498 myRWInteractor->highlight(theIO, theIsHighlight, theIsUpdate);
500 if(mySelector->HasIndex(theIO) && theIO->hasEntry()){
501 TColStd_IndexedMapOfInteger aMapIndex;
502 mySelector->GetIndex(theIO,aMapIndex);
504 const char* anEntry = theIO->getEntry();
505 vtkActorCollection* aCollection = myRenderer->GetActors();
506 if(SALOME_Actor* anActor = Find<SALOME_Actor>(aCollection,TIsSameEntry<SALOME_Actor>(anEntry))){
507 switch (mySelector->SelectionMode()) {
509 myRWInteractor->highlightPoint(aMapIndex,anActor,theIsHighlight,theIsUpdate);
511 case EdgeOfCellSelection:
512 myRWInteractor->highlightEdge(aMapIndex,anActor,theIsHighlight,theIsUpdate);
517 case VolumeSelection:
518 myRWInteractor->highlightCell(aMapIndex,anActor,theIsHighlight,theIsUpdate);
523 myRWInteractor->unHighlightSubSelection();
527 //----------------------------------------------------------------
530 ::isInViewer( const Handle(SALOME_InteractiveObject)& theIO )
532 return myRWInteractor->isInViewer( theIO );
535 //----------------------------------------------------------------
538 ::isVisible( const Handle(SALOME_InteractiveObject)& theIO )
540 return myRWInteractor->isVisible( theIO );
543 //----------------------------------------------------------------------------
546 ::setBackgroundColor( const QColor& color )
549 myRenderer->SetBackground( color.red()/255., color.green()/255., color.blue()/255. );
552 //----------------------------------------------------------------------------
555 ::backgroundColor() const
559 myRenderer->GetBackground( backint );
560 return QColor(int(backint[0]*255), int(backint[1]*255), int(backint[2]*255));
562 return SUIT_ViewWindow::backgroundColor();
565 //----------------------------------------------------------------------------
568 ::Repaint(bool theUpdateTrihedron)
570 if (theUpdateTrihedron)
572 myRenderWindow->update();
575 //----------------------------------------------------------------------------
578 ::GetScale( double theScale[3] )
580 myTransform->GetScale( theScale );
583 //----------------------------------------------------------------------------
586 ::SetScale( double theScale[3] )
588 myTransform->SetScale( theScale[0], theScale[1], theScale[2] );
589 myRWInteractor->Render();
593 //----------------------------------------------------------------------------
596 ::isTrihedronDisplayed()
598 return myTrihedron->GetVisibility() == VTKViewer_Trihedron::eOn;
601 //----------------------------------------------------------------------------
609 if(isTrihedronDisplayed())
610 myTrihedron->VisibilityOff();
612 myTrihedron->VisibilityOn();
617 //----------------------------------------------------------------------------
620 ::ComputeTrihedronSize( double& theNewSize, double& theSize )
622 // calculating diagonal of visible props of the renderer
624 myTrihedron->VisibilityOff();
626 if ( ::ComputeVisiblePropBounds( myRenderer, aBndBox ) == 0 ) {
627 aBndBox[ 1 ] = aBndBox[ 3 ] = aBndBox[ 5 ] = 100;
628 aBndBox[ 0 ] = aBndBox[ 2 ] = aBndBox[ 4 ] = 0;
631 myTrihedron->VisibilityOn();
633 static bool aCalcByDiag = false;
635 aLength = sqrt( ( aBndBox[1]-aBndBox[0])*(aBndBox[1]-aBndBox[0] )+
636 ( aBndBox[3]-aBndBox[2])*(aBndBox[3]-aBndBox[2] )+
637 ( aBndBox[5]-aBndBox[4])*(aBndBox[5]-aBndBox[4] ) );
639 aLength = aBndBox[ 1 ]-aBndBox[ 0 ];
640 aLength = max( ( aBndBox[ 3 ] - aBndBox[ 2 ] ),aLength );
641 aLength = max( ( aBndBox[ 5 ] - aBndBox[ 4 ] ),aLength );
644 static float aSizeInPercents = 105;
645 //QString aSetting = QAD_CONFIG->getSetting( "Viewer:TrihedronSize" );
646 //if ( !aSetting.isEmpty() )
647 // aSizeInPercents = aSetting.toFloat();
649 static float EPS_SIZE = 5.0E-3;
650 theSize = myTrihedron->GetSize();
651 theNewSize = aLength * aSizeInPercents / 100.0;
653 // if the new trihedron size have sufficient difference, then apply the value
654 return fabs( theNewSize - theSize) > theSize * EPS_SIZE ||
655 fabs( theNewSize-theSize ) > theNewSize * EPS_SIZE;
658 //----------------------------------------------------------------------------
661 ::GetTrihedronSize() const
663 return myTrihedron->GetSize();
666 //----------------------------------------------------------------------------
669 ::AdjustTrihedrons( const bool theIsForcedUpdate )
671 if ( !isTrihedronDisplayed() && !theIsForcedUpdate )
674 int aVisibleNum = myTrihedron->GetVisibleActorCount( myRenderer );
675 if ( aVisibleNum || theIsForcedUpdate ) {
676 // if the new trihedron size have sufficient difference, then apply the value
677 double aNewSize = 100, anOldSize;
678 if ( ComputeTrihedronSize( aNewSize, anOldSize ) || theIsForcedUpdate ) {
679 myTrihedron->SetSize( aNewSize );
680 // itearte throuh displayed objects and set size if necessary
682 vtkActorCollection* anActors = getRenderer()->GetActors();
683 anActors->InitTraversal();
684 while( vtkActor* anActor = anActors->GetNextActor() ) {
685 if( SALOME_Actor* aSActor = SALOME_Actor::SafeDownCast( anActor ) ) {
686 if ( aSActor->IsResizable() )
687 aSActor->SetSize( 0.5 * aNewSize );
693 ::ResetCameraClippingRange(myRenderer);
696 //----------------------------------------------------------------------------
699 ::onAdjustTrihedron()
701 AdjustTrihedrons( false );
704 #define INCREMENT_FOR_OP 10
706 //=======================================================================
708 // Purpose : Performs incremental panning to the left
709 //=======================================================================
714 myRWInteractor->GetSInteractorStyle()->IncrementalPan( -INCREMENT_FOR_OP, 0 );
717 //=======================================================================
719 // Purpose : Performs incremental panning to the right
720 //=======================================================================
725 myRWInteractor->GetSInteractorStyle()->IncrementalPan( INCREMENT_FOR_OP, 0 );
728 //=======================================================================
730 // Purpose : Performs incremental panning to the top
731 //=======================================================================
736 myRWInteractor->GetSInteractorStyle()->IncrementalPan( 0, INCREMENT_FOR_OP );
739 //=======================================================================
741 // Purpose : Performs incremental panning to the bottom
742 //=======================================================================
747 myRWInteractor->GetSInteractorStyle()->IncrementalPan( 0, -INCREMENT_FOR_OP );
750 //=======================================================================
752 // Purpose : Performs incremental zooming in
753 //=======================================================================
758 myRWInteractor->GetSInteractorStyle()->IncrementalZoom( INCREMENT_FOR_OP );
761 //=======================================================================
763 // Purpose : Performs incremental zooming out
764 //=======================================================================
769 myRWInteractor->GetSInteractorStyle()->IncrementalZoom( -INCREMENT_FOR_OP );
772 //=======================================================================
773 // name : onRotateLeft
774 // Purpose : Performs incremental rotating to the left
775 //=======================================================================
780 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( -INCREMENT_FOR_OP, 0 );
783 //=======================================================================
784 // name : onRotateRight
785 // Purpose : Performs incremental rotating to the right
786 //=======================================================================
791 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( INCREMENT_FOR_OP, 0 );
794 //=======================================================================
796 // Purpose : Performs incremental rotating to the top
797 //=======================================================================
802 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( 0, -INCREMENT_FOR_OP );
805 //=======================================================================
808 ::onKeyPressed(QKeyEvent* event)
810 emit keyPressed( this, event );
813 //=======================================================================
816 ::onKeyReleased(QKeyEvent* event)
818 emit keyReleased( this, event );
821 //=======================================================================
824 ::onMousePressed(QMouseEvent* event)
826 emit mousePressed(this, event);
829 //=======================================================================
832 ::onMouseReleased(QMouseEvent* event)
834 emit mouseReleased( this, event );
837 //=======================================================================
840 ::onMouseMoving(QMouseEvent* event)
842 emit mouseMoving( this, event );
845 //=======================================================================
848 ::onMouseDoubleClicked( QMouseEvent* event )
850 emit mouseDoubleClicked( this, event );
853 //=======================================================================
854 // name : onRotateDown
855 // Purpose : Performs incremental rotating to the bottom
856 //=======================================================================
861 myRWInteractor->GetSInteractorStyle()->IncrementalRotate( 0, INCREMENT_FOR_OP );
864 //----------------------------------------------------------------------------
867 ::InsertActor( SALOME_Actor* theActor, bool theMoveInternalActors )
869 theActor->AddToRender(myRenderer);
870 theActor->SetTransform(myTransform);
871 if(theMoveInternalActors)
872 myRWInteractor->MoveInternalActors();
875 //----------------------------------------------------------------------------
878 ::AddActor( SALOME_Actor* theActor, bool theUpdate /*=false*/ )
880 InsertActor(theActor);
885 //----------------------------------------------------------------------------
888 ::RemoveActor( SALOME_Actor* theActor, bool theUpdate /*=false*/ )
890 theActor->RemoveFromRender(myRenderer);
895 //----------------------------------------------------------------------------
898 ::MoveActor( SALOME_Actor* theActor)
900 RemoveActor(theActor);
901 InsertActor(theActor,true);