X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_OCCDisplayer.cxx;h=3dbe862ccf5f9ab5d9b88fc8a76b5a526482f7dc;hb=f34b90e9e4e02ba65419134d5d37a2e42aecfabf;hp=b2316376c5af6c293bea39822b9b586cc0a92b2e;hpb=0f542b1bd90ff6043468a3a2fbac3b45f41c8503;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_OCCDisplayer.cxx b/src/HYDROGUI/HYDROGUI_OCCDisplayer.cxx index b2316376..3dbe862c 100644 --- a/src/HYDROGUI/HYDROGUI_OCCDisplayer.cxx +++ b/src/HYDROGUI/HYDROGUI_OCCDisplayer.cxx @@ -31,6 +31,8 @@ #include #include +#include + #include #include #include @@ -100,16 +102,7 @@ HYDROGUI_Shape* HYDROGUI_OCCDisplayer::createShape( const int if ( theContext.IsNull() || theObject.IsNull() ) return aResShape; - ObjectKind anObjectKind = theObject->GetKind(); - if ( anObjectKind != KIND_IMAGE && - anObjectKind != KIND_POLYLINEXY && - anObjectKind != KIND_IMMERSIBLE_ZONE && - anObjectKind != KIND_REGION && - anObjectKind != KIND_ZONE && - anObjectKind != KIND_OBSTACLE && - anObjectKind != KIND_PROFILE && - anObjectKind != KIND_STREAM && - anObjectKind != KIND_CHANNEL ) + if ( !HYDROGUI_Tool::IsObjectHasPresentation( theObject, OCCViewer_Viewer::Type() ) ) return aResShape; aResShape = new HYDROGUI_Shape( theContext, theObject ); @@ -131,9 +124,33 @@ void HYDROGUI_OCCDisplayer::Display( const HYDROData_SequenceOfObjects& theObjs, if( aCtx.IsNull() ) return; - for ( int i = 1, n = theObjs.Length(); i <= n; i++ ) - { + // Sort objects by display order ( needed for Z layers assignment only ) + HYDROData_SequenceOfObjects anObjects; + int aMaxIndex = -1; + for ( int i = 1, n = theObjs.Length(); i <= n; i++ ) { Handle(HYDROData_Entity) anObj = theObjs.Value( i ); + if ( anObj.IsNull() || anObj->IsRemoved() ) { + continue; + } + + int aDisplayOrderIndex = module()->getObjectDisplayOrder( (size_t)aViewer, anObj ); + if ( aDisplayOrderIndex > aMaxIndex ) { + anObjects.Append( anObj ); + aMaxIndex = aDisplayOrderIndex; + } else { + anObjects.Prepend( anObj ); + } + } + + // Get existing Z layers + TColStd_SequenceOfInteger anExistingZLayers; + aViewer->getViewer3d()->GetAllZLayers( anExistingZLayers ); + int aNbLayers = anExistingZLayers.Length(); + + // Display + for ( int i = 1, n = anObjects.Length(); i <= n; i++ ) + { + Handle(HYDROData_Entity) anObj = anObjects.Value( i ); if ( anObj.IsNull() || anObj->IsRemoved() ) continue; @@ -152,6 +169,20 @@ void HYDROGUI_OCCDisplayer::Display( const HYDROData_SequenceOfObjects& theObjs, { bool anIsVisible = module()->isObjectVisible( (size_t)aViewer, anObj ); anObjShape->setVisible( anIsVisible, false ); + + // Set Z layer + Standard_Integer aLayerId = -1; + if ( i <= aNbLayers ) { + aLayerId = anExistingZLayers.Value( i ); + } else { + Standard_Integer aNewId = -1; + if ( aViewer->getViewer3d()->AddZLayer( aNewId ) ) { + aLayerId = aNewId; + } + } + if ( aLayerId >= 0 ) { + aCtx->SetZLayer( anObjShape->getAISShape(), aLayerId ); + } } }