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 )
{
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<n; i++ )
- if( myZLayers[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;