X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ZLayers.cxx;h=3e06521d5a25fb67c97bb38117e65d6b76787148;hb=e84c3bdbce884a7e150fff690f0c1a3e0b12ed90;hp=2e9fad629670439b417130c7e1ed28070a8ac9d0;hpb=09d10e66ba0fac5353c8d1f138055fc6fe86fb65;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ZLayers.cxx b/src/HYDROGUI/HYDROGUI_ZLayers.cxx index 2e9fad62..3e06521d 100644 --- a/src/HYDROGUI/HYDROGUI_ZLayers.cxx +++ b/src/HYDROGUI/HYDROGUI_ZLayers.cxx @@ -48,6 +48,45 @@ void SetPrsZLayer( const Handle_PrsMgr_PresentableObject& thePresentableObject, PrsMgr_PresentationManager::SetZLayer( thePresentableObject, theMode, theLayerId ); } +void SetZLayerSettings( const Handle_V3d_Viewer& theViewer3d, int theLayerId, bool theIsOrdered ) +{ + if ( theViewer3d.IsNull() || theLayerId < 0 ) { + return; + } + + Graphic3d_ZLayerSettings aSettings = theViewer3d->ZLayerSettings( theLayerId ); + // enable depth write + aSettings.EnableSetting( Graphic3d_ZLayerDepthWrite ); + // disable depth clear + aSettings.DisableSetting( Graphic3d_ZLayerDepthClear ); + if ( theIsOrdered ) { + // disable depth test + aSettings.DisableSetting( Graphic3d_ZLayerDepthTest ); + // disable depth offset + aSettings.DisableSetting( Graphic3d_ZLayerDepthOffset ); + } else { + // enable depth test + aSettings.EnableSetting( Graphic3d_ZLayerDepthTest ); + // set depth offset + aSettings.SetDepthOffsetPositive(); + } + + // set new settings + theViewer3d->SetZLayerSettings( theLayerId, aSettings ); +} + +int CreateTopZLayer( const Handle_V3d_Viewer& theViewer3d ) +{ + int aTopZLayer = -1; + + if ( theViewer3d && !theViewer3d->AddZLayer( aTopZLayer ) ) { + aTopZLayer = -1; + } + + return aTopZLayer; +} + + HYDROGUI_ZLayersIterator::HYDROGUI_ZLayersIterator( const Handle_V3d_Viewer& theViewer ) : myIndex( 0 ), myNewZLayer( -1 ), myViewer( theViewer ) { @@ -73,34 +112,36 @@ void HYDROGUI_ZLayersIterator::Init( const Handle_V3d_Viewer& theViewer ) bool HYDROGUI_ZLayersIterator::More() const { - return myIndex <= (int)myZLayers.size() || myNewZLayer >= 0; + return myIndex < (int)myZLayers.size() || myNewZLayer >= 0; } void HYDROGUI_ZLayersIterator::Next() { - if( myIndex < (int)myZLayers.size() ) - myIndex++; - else if( !myViewer.IsNull() ) - { - bool isOK = myViewer->AddZLayer( myNewZLayer )==Standard_True; - if( !isOK ) - myNewZLayer = -1; + myIndex++; + + if( myIndex >= (int)myZLayers.size() && + !myViewer.IsNull() ) { + myNewZLayer = CreateTopZLayer( myViewer ); } } -int HYDROGUI_ZLayersIterator::MaxLayer() const +int HYDROGUI_ZLayersIterator::TopLayer() const { - int aMaxLayer = -1; - for( int i=0, n=myZLayers.size(); i aMaxLayer ) - aMaxLayer = myZLayers[i]; - return aMaxLayer; + int aTopLayer = -1; + + if ( myNewZLayer >= 0 ) { + aTopLayer = myNewZLayer; + } else if ( !myZLayers.empty() ) { + aTopLayer = myZLayers.back(); + } + + return aTopLayer; } int HYDROGUI_ZLayersIterator::LayerId() const { - if( More() ) + if( myIndex < (int)myZLayers.size() ) return myZLayers[myIndex]; else return myNewZLayer;