From aaaf656e0d63c804b7468cea5e2e3a7458852c0c Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 9 Mar 2011 09:31:35 +0000 Subject: [PATCH] Additional changes for issue 0020830: redesign methods of the SALOME View / Displayer / Presentation to handle pre-display/erase and post-display/erase operations properly. --- src/GEOMGUI/GEOM_Displayer.cxx | 38 ++++++++++++++++++++++++++++------ src/GEOMGUI/GEOM_Displayer.h | 4 ++-- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index af7b1e54b..063cb70af 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -343,9 +343,9 @@ void GEOM_Displayer::Display( const Handle(SALOME_InteractiveObject)& theIO, if ( prs ) { - vf->BeforeDisplay( this ); + vf->BeforeDisplay( this, prs ); vf->Display( prs ); - vf->AfterDisplay( this ); + vf->AfterDisplay( this, prs ); if ( updateViewer ) vf->Repaint(); @@ -399,7 +399,9 @@ void GEOM_Displayer::Erase( const Handle(SALOME_InteractiveObject)& theIO, if ( vf ) { SALOME_Prs* prs = vf->CreatePrs( theIO->getEntry() ); if ( prs ) { + vf->BeforeErase( this, prs ); vf->Erase( prs, forced ); + vf->AfterErase( this, prs ); if ( updateViewer ) vf->Repaint(); delete prs; // delete presentation because displayer is its owner @@ -662,7 +664,7 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs ) QStringList uv = anIsos.split(DIGIT_SEPARATOR); anUIsoNumber = uv[0].toInt(); aVIsoNumber = uv[1].toInt(); - AISShape->SetTransparency(aPropMap.value(TRANSPARENCY_PROP).toDouble()); + //AISShape->SetTransparency(aPropMap.value(TRANSPARENCY_PROP).toDouble()); } else { anUIsoNumber = aResMgr->integerValue("OCCViewer", "iso_number_u", 1); aVIsoNumber = aResMgr->integerValue("OCCViewer", "iso_number_v", 1); @@ -1429,7 +1431,7 @@ void GEOM_Displayer::LocalSelection( const SALOME_ListIO& theIOList, const int t * [ Reimplemented from SALOME_Displayer ] */ //================================================================= -void GEOM_Displayer::BeforeDisplay( SALOME_View* v, const SALOME_OCCViewType& ) +void GEOM_Displayer::BeforeDisplay( SALOME_View* v, const SALOME_OCCPrs* ) { SOCC_Viewer* vf = dynamic_cast( v ); if ( vf ) @@ -1443,11 +1445,35 @@ void GEOM_Displayer::BeforeDisplay( SALOME_View* v, const SALOME_OCCViewType& ) } } -void GEOM_Displayer::AfterDisplay( SALOME_View*, const SALOME_OCCViewType& ) +void GEOM_Displayer::AfterDisplay( SALOME_View* v, const SALOME_OCCPrs* p ) { + SalomeApp_Study* aStudy = getStudy(); + if (!aStudy) return; + SOCC_Viewer* vf = dynamic_cast( v ); + if ( vf && !p->IsNull() ) { + int aMgrId = getViewManagerId( vf ); + Handle(AIS_InteractiveContext) ic = vf->getAISContext(); + const SOCC_Prs* prs = dynamic_cast( p ); + if ( !ic.IsNull() && prs ) { + AIS_ListOfInteractive objects; + prs->GetObjects( objects ); + AIS_ListIteratorOfListOfInteractive it( objects ); + while( it.More() ) { + Handle(GEOM_AISShape) sh = Handle(GEOM_AISShape)::DownCast( it.Value() ); + if ( sh.IsNull() ) continue; + Handle(SALOME_InteractiveObject) IO = sh->getIO(); + if ( IO.IsNull() ) continue; + PropMap aPropMap = aStudy->getObjectPropMap( aMgrId, IO->getEntry() ); + if ( aPropMap.contains( TRANSPARENCY_PROP ) ) { + double transparency = aPropMap.value(TRANSPARENCY_PROP).toDouble(); + ic->SetTransparency( sh, transparency, true ); + it.Next(); + } + } + } + } } - //================================================================= /*! * GEOM_Displayer::SetColor diff --git a/src/GEOMGUI/GEOM_Displayer.h b/src/GEOMGUI/GEOM_Displayer.h index b62210f23..7b5977046 100644 --- a/src/GEOMGUI/GEOM_Displayer.h +++ b/src/GEOMGUI/GEOM_Displayer.h @@ -140,8 +140,8 @@ public: /* Reimplemented from SALOME_Displayer */ virtual void Update( SALOME_OCCPrs* ); virtual void Update( SALOME_VTKPrs* ); - virtual void BeforeDisplay( SALOME_View*, const SALOME_OCCViewType& ); - virtual void AfterDisplay ( SALOME_View*, const SALOME_OCCViewType& ); + virtual void BeforeDisplay( SALOME_View*, const SALOME_OCCPrs* ); + virtual void AfterDisplay ( SALOME_View*, const SALOME_OCCPrs* ); /* This methos is used for activisation/deactivisation of objects to be displayed*/ void SetToActivate( const bool ); -- 2.39.2