Additional changes for issue 0020830: redesign methods of the SALOME View / Displayer / Presentation to handle pre-display/erase and post-display/erase operations properly.

This commit is contained in:
vsr 2011-03-09 09:31:35 +00:00
parent 20c08bd101
commit aaaf656e0d
2 changed files with 34 additions and 8 deletions

View File

@ -343,9 +343,9 @@ void GEOM_Displayer::Display( const Handle(SALOME_InteractiveObject)& theIO,
if ( prs ) if ( prs )
{ {
vf->BeforeDisplay( this ); vf->BeforeDisplay( this, prs );
vf->Display( prs ); vf->Display( prs );
vf->AfterDisplay( this ); vf->AfterDisplay( this, prs );
if ( updateViewer ) if ( updateViewer )
vf->Repaint(); vf->Repaint();
@ -399,7 +399,9 @@ void GEOM_Displayer::Erase( const Handle(SALOME_InteractiveObject)& theIO,
if ( vf ) { if ( vf ) {
SALOME_Prs* prs = vf->CreatePrs( theIO->getEntry() ); SALOME_Prs* prs = vf->CreatePrs( theIO->getEntry() );
if ( prs ) { if ( prs ) {
vf->BeforeErase( this, prs );
vf->Erase( prs, forced ); vf->Erase( prs, forced );
vf->AfterErase( this, prs );
if ( updateViewer ) if ( updateViewer )
vf->Repaint(); vf->Repaint();
delete prs; // delete presentation because displayer is its owner 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); QStringList uv = anIsos.split(DIGIT_SEPARATOR);
anUIsoNumber = uv[0].toInt(); anUIsoNumber = uv[0].toInt();
aVIsoNumber = uv[1].toInt(); aVIsoNumber = uv[1].toInt();
AISShape->SetTransparency(aPropMap.value(TRANSPARENCY_PROP).toDouble()); //AISShape->SetTransparency(aPropMap.value(TRANSPARENCY_PROP).toDouble());
} else { } else {
anUIsoNumber = aResMgr->integerValue("OCCViewer", "iso_number_u", 1); anUIsoNumber = aResMgr->integerValue("OCCViewer", "iso_number_u", 1);
aVIsoNumber = aResMgr->integerValue("OCCViewer", "iso_number_v", 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 ] * [ 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<SOCC_Viewer*>( v ); SOCC_Viewer* vf = dynamic_cast<SOCC_Viewer*>( v );
if ( vf ) 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<SOCC_Viewer*>( v );
if ( vf && !p->IsNull() ) {
int aMgrId = getViewManagerId( vf );
Handle(AIS_InteractiveContext) ic = vf->getAISContext();
const SOCC_Prs* prs = dynamic_cast<const SOCC_Prs*>( 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 * GEOM_Displayer::SetColor

View File

@ -140,8 +140,8 @@ public:
/* Reimplemented from SALOME_Displayer */ /* Reimplemented from SALOME_Displayer */
virtual void Update( SALOME_OCCPrs* ); virtual void Update( SALOME_OCCPrs* );
virtual void Update( SALOME_VTKPrs* ); virtual void Update( SALOME_VTKPrs* );
virtual void BeforeDisplay( SALOME_View*, const SALOME_OCCViewType& ); virtual void BeforeDisplay( SALOME_View*, const SALOME_OCCPrs* );
virtual void AfterDisplay ( SALOME_View*, const SALOME_OCCViewType& ); virtual void AfterDisplay ( SALOME_View*, const SALOME_OCCPrs* );
/* This methos is used for activisation/deactivisation of objects to be displayed*/ /* This methos is used for activisation/deactivisation of objects to be displayed*/
void SetToActivate( const bool ); void SetToActivate( const bool );