X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FOCCViewer%2FOCCViewer_ViewFrame.cxx;h=9656c64b4df07c725aad5d870fd37dd6ebe1f3a2;hb=8d986a56d8745aba15e2241a252c02bf30b53999;hp=cc20fd47394a9f9160a871aae4e57df86719a88a;hpb=02904c3728214667f919cfe06072a91e1687b12f;p=modules%2Fgui.git diff --git a/src/OCCViewer/OCCViewer_ViewFrame.cxx b/src/OCCViewer/OCCViewer_ViewFrame.cxx index cc20fd473..9656c64b4 100644 --- a/src/OCCViewer/OCCViewer_ViewFrame.cxx +++ b/src/OCCViewer/OCCViewer_ViewFrame.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -23,6 +23,7 @@ #include "OCCViewer_ViewFrame.h" #include "OCCViewer_ViewWindow.h" #include "OCCViewer_ViewModel.h" +#include "OCCViewer_ViewPort3d.h" #include #include @@ -52,6 +53,7 @@ OCCViewer_ViewFrame::OCCViewer_ViewFrame(SUIT_Desktop* theDesktop, OCCViewer_Vie myLayout->addWidget( view0, 0, 0 ); myMaximizedView = view0; + myActiveView = view0; connectViewSignals(view0); } @@ -76,6 +78,12 @@ OCCViewer_ViewWindow* OCCViewer_ViewFrame::getView( const int i ) const return ( i >= 0 && i < myViews.count() ) ? myViews.at( i ) : 0 ; } +//************************************************************************************** +OCCViewer_ViewWindow* OCCViewer_ViewFrame::getActiveView( ) const +{ + return myActiveView; +} + //************************************************************************************** void OCCViewer_ViewFrame::setViewManager( SUIT_ViewManager* theMgr ) { @@ -93,7 +101,10 @@ void OCCViewer_ViewFrame::returnTo3dView() view = myViews.at(i); view->setVisible( view->get2dMode() == No2dMode ); view->setMaximized( true, false ); - if (view->get2dMode() == No2dMode) myMaximizedView = view; + if (view->get2dMode() == No2dMode) { + myMaximizedView = view; + myActiveView = view; + } } myLayout->setColumnStretch(0, 0); myLayout->setColumnStretch(1, 0); @@ -107,6 +118,7 @@ void OCCViewer_ViewFrame::returnTo3dView() void OCCViewer_ViewFrame::onMaximizedView( OCCViewer_ViewWindow* theView, bool isMaximized) { myMaximizedView = theView; + myActiveView = theView; if (isMaximized) { if (myViews.count() <= 1) return; @@ -131,9 +143,7 @@ void OCCViewer_ViewFrame::onMaximizedView( OCCViewer_ViewWindow* theView, bool i mySplitMode = CreateSubViewsDlg.getSplitMode(); myViewsMode = CreateSubViewsDlg.getViewsMode(); splitSubViews(); - } - else { - myMaximizedView->setMaximized(true); + myMaximizedView->setMaximized(false, false); } } myLayout->invalidate(); @@ -160,10 +170,24 @@ void OCCViewer_ViewFrame::createSubViews() view->setDropDownButtons( dropDownButtons() ); connectViewSignals(view); view->setBackground(aModel->background(i)); + setSubViewParams( view ); } } } +//************************************************************************************** +void OCCViewer_ViewFrame::setSubViewParams( OCCViewer_ViewWindow* theView ) +{ + Handle(V3d_View) aView = theView->getViewPort()->getView(); + Handle(V3d_View) aMainView = myViews.at( MAIN_VIEW )->getViewPort()->getView(); + + // set ray tracing parameters + aView->ChangeRenderingParams() = aMainView->RenderingParams(); + + // set environment texture parameters + aView->SetTextureEnv( aMainView->TextureEnv() ); +} + void OCCViewer_ViewFrame::splitSubViews() { if( mySplitMode == -1 ) @@ -316,6 +340,130 @@ void OCCViewer_ViewFrame::setInteractionStyle( const int i ) } } +//************************************************************************************** +int OCCViewer_ViewFrame::projectionType() const +{ + return getView(MAIN_VIEW)->projectionType(); +} + +//************************************************************************************** +void OCCViewer_ViewFrame::setProjectionType( int t) +{ + foreach (OCCViewer_ViewWindow* aView, myViews) { + aView->setProjectionType(t); + } +} + +//************************************************************************************** +int OCCViewer_ViewFrame::stereoType() const +{ + return getView(MAIN_VIEW)->stereoType(); +} + +//************************************************************************************** +void OCCViewer_ViewFrame::setStereoType( int t) +{ + foreach (OCCViewer_ViewWindow* aView, myViews) { + aView->setStereoType(t); + } +} + +//************************************************************************************** +int OCCViewer_ViewFrame::anaglyphFilter() const +{ + return getView(MAIN_VIEW)->anaglyphFilter(); +} + +//************************************************************************************** +void OCCViewer_ViewFrame::setAnaglyphFilter( int t) +{ + foreach (OCCViewer_ViewWindow* aView, myViews) { + aView->setAnaglyphFilter(t); + } +} + +//************************************************************************************** +int OCCViewer_ViewFrame::stereographicFocusType() const +{ + return getView(MAIN_VIEW)->stereographicFocusType(); +} + +//************************************************************************************** +double OCCViewer_ViewFrame::stereographicFocusValue() const +{ + return getView(MAIN_VIEW)->stereographicFocusValue(); +} + +//************************************************************************************** +void OCCViewer_ViewFrame::setStereographicFocus( int t, double v) +{ + foreach (OCCViewer_ViewWindow* aView, myViews) { + aView->setStereographicFocus(t, v); + } +} + +//************************************************************************************** +int OCCViewer_ViewFrame::interocularDistanceType() const +{ + return getView(MAIN_VIEW)->interocularDistanceType(); +} + +//************************************************************************************** +double OCCViewer_ViewFrame::interocularDistanceValue() const +{ + return getView(MAIN_VIEW)->interocularDistanceValue(); +} + +//************************************************************************************** +void OCCViewer_ViewFrame::setInterocularDistance( int t, double v) +{ + foreach (OCCViewer_ViewWindow* aView, myViews) { + aView->setInterocularDistance(t, v); + } +} + +//************************************************************************************** +bool OCCViewer_ViewFrame::isReverseStereo() const +{ + return getView(MAIN_VIEW)->isReverseStereo(); +} + +//************************************************************************************** +void OCCViewer_ViewFrame::setReverseStereo( bool t) +{ + foreach (OCCViewer_ViewWindow* aView, myViews) { + aView->setReverseStereo(t); + } +} + +//************************************************************************************** +bool OCCViewer_ViewFrame::isVSync() const +{ + return getView(MAIN_VIEW)->isVSync(); +} + +//************************************************************************************** +void OCCViewer_ViewFrame::setVSync( bool t) +{ + foreach (OCCViewer_ViewWindow* aView, myViews) { + aView->setVSync(t); + } +} + +//************************************************************************************** +bool OCCViewer_ViewFrame::isQuadBufferSupport() const +{ + return getView(MAIN_VIEW)->isQuadBufferSupport(); +} + +//************************************************************************************** +void OCCViewer_ViewFrame::setQuadBufferSupport( bool t) +{ + foreach (OCCViewer_ViewWindow* aView, myViews) { + aView->setQuadBufferSupport(t); + } +} + //************************************************************************************** void OCCViewer_ViewFrame::setZoomingStyle( const int i ) { @@ -344,6 +492,9 @@ void OCCViewer_ViewFrame::connectViewSignals(OCCViewer_ViewWindow* theView) this, SIGNAL( mouseDoubleClicked(SUIT_ViewWindow*, QMouseEvent*) ) ); connect( theView, SIGNAL( mousePressed(SUIT_ViewWindow*, QMouseEvent*) ), this, SIGNAL( mousePressed(SUIT_ViewWindow*, QMouseEvent*) ) ); + // The signal is used to mouse pressed for choose the current window + connect( theView, SIGNAL( mousePressed(SUIT_ViewWindow*, QMouseEvent*) ), + this, SLOT( onMousePressed(SUIT_ViewWindow*, QMouseEvent*) ) ); connect( theView, SIGNAL( mouseReleased(SUIT_ViewWindow*, QMouseEvent*) ), this, SIGNAL( mouseReleased(SUIT_ViewWindow*, QMouseEvent*) ) ); connect( theView, SIGNAL( mouseMoving(SUIT_ViewWindow*, QMouseEvent*) ), @@ -457,6 +608,11 @@ void OCCViewer_ViewFrame::onContextMenuRequested(QContextMenuEvent*) myPopupRequestedView = dynamic_cast(sender()); } +void OCCViewer_ViewFrame::onMousePressed(SUIT_ViewWindow* view, QMouseEvent*) +{ + myActiveView = dynamic_cast(view); +} + void OCCViewer_ViewFrame::onDumpView() { if (myPopupRequestedView) { @@ -567,3 +723,12 @@ void OCCViewer_ViewFrame::enablePreselection( bool isEnabled ) aView->enablePreselection(isEnabled); } } + +bool OCCViewer_ViewFrame::enableDrawMode( bool on ) +{ + bool prev = false; + foreach (OCCViewer_ViewWindow* aView, myViews) { + prev = prev || aView->enableDrawMode( on ); + } + return prev; +}