- // Set Z layer
- Handle(V3d_Viewer) aViewer3d = theViewer->getViewer3d();
- if ( !aViewer3d.IsNull() ) {
- // Get existing layers
- TColStd_SequenceOfInteger anExistingZLayers;
- aViewer3d->GetAllZLayers( anExistingZLayers );
- int aNbLayers = anExistingZLayers.Length();
-
- // Get or create the appropriate layer
- Standard_Integer aLayerId = -1;
- if ( theZLayerIndex <= aNbLayers ) {
- aLayerId = anExistingZLayers.Value( theZLayerIndex );
- } else {
- Standard_Integer aNewId = -1;
- if ( aViewer3d->AddZLayer( aNewId ) ) {
- aLayerId = aNewId;
- }
- }
-
- if ( aLayerId >= 0 ) {
- // set Z layer
- aCtx->SetZLayer( anObjShape->getAISShape(), aLayerId );
-
- // set Z layer settings for the 3d viewer:
- // current settings
- Graphic3d_ZLayerSettings aSettings = aViewer3d->ZLayerSettings( aLayerId );
- // 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
- aViewer3d->SetZLayerSettings( aLayerId, aSettings );
-
- aRes = true;
- }
- }