IPAL52528: TC7.5.0: Dump study - transparency is lost

Properly process visibility state on Show/Hide operations
This commit is contained in:
vsr 2014-10-23 16:33:30 +04:00
parent bd37ceaf56
commit aa8b2914fb
7 changed files with 48 additions and 36 deletions

View File

@ -381,7 +381,7 @@ void GEOMBase_Helper::displayPreview( const SALOME_Prs* prs,
SUIT_ViewModel* aViewModel = aViewManager->getViewModel();
SALOME_View* aView = dynamic_cast<SALOME_View*>(aViewModel);
if (aView)
aView->Display( prs );
aView->Display( getDisplayer(), prs );
}
// Add prs to the preview list
@ -401,19 +401,20 @@ void GEOMBase_Helper::erasePreview( const bool update )
// check view frame where the preview was displayed
bool vfOK = checkViewWindow() && myViewWindow;
// Iterate through presentations and delete them
for ( PrsList::iterator anIter = myPreview.begin(); anIter != myPreview.end(); ++anIter ) {
for ( PrsList::iterator anIter = myPreview.begin(); anIter != myPreview.end(); ++anIter )
{
if ( vfOK )
{
SUIT_ViewManager* aViewManager = myViewWindow->getViewManager();
if ( aViewManager->getType() == OCCViewer_Viewer::Type() ||
aViewManager->getType() == SVTK_Viewer::Type() )
{
SUIT_ViewManager* aViewManager = myViewWindow->getViewManager();
if ( aViewManager->getType() == OCCViewer_Viewer::Type() ||
aViewManager->getType() == SVTK_Viewer::Type() )
{
SUIT_ViewModel* aViewModel = aViewManager->getViewModel();
SALOME_View* aView = dynamic_cast<SALOME_View*>(aViewModel);
if (aView)
aView->Erase( *anIter, true );
}
SUIT_ViewModel* aViewModel = aViewManager->getViewModel();
SALOME_View* aView = dynamic_cast<SALOME_View*>(aViewModel);
if (aView)
aView->Erase( getDisplayer(), *anIter, true );
}
}
delete *anIter;
}
myPreview.clear();

View File

@ -525,18 +525,12 @@ void GEOM_Displayer::Display( const Handle(SALOME_InteractiveObject)& theIO,
if ( prs )
{
vf->BeforeDisplay( this, prs );
vf->Display( prs );
vf->Display( this, prs );
vf->AfterDisplay( this, prs );
if ( updateViewer )
vf->Repaint();
int aMgrId = getViewManagerId(vf);
SalomeApp_Study* aStudy = getStudy();
aStudy->setObjectProperty(aMgrId, theIO->getEntry(), GEOM::propertyName( GEOM::Visibility ), 1 );
setVisibilityState(theIO->getEntry(), Qtx::ShownState);
delete prs; // delete presentation because displayer is its owner
}
}
@ -581,17 +575,11 @@ void GEOM_Displayer::Erase( const Handle(SALOME_InteractiveObject)& theIO,
SALOME_Prs* prs = vf->CreatePrs( theIO->getEntry() );
if ( prs ) {
vf->BeforeErase( this, prs );
vf->Erase( prs, forced );
vf->Erase( this, prs, forced );
vf->AfterErase( this, prs );
if ( updateViewer )
vf->Repaint();
delete prs; // delete presentation because displayer is its owner
int aMgrId = getViewManagerId(vf);
SalomeApp_Study* aStudy = getStudy();
aStudy->setObjectProperty(aMgrId, theIO->getEntry(), GEOM::propertyName( GEOM::Visibility ), 0 );
setVisibilityState(theIO->getEntry(), Qtx::HiddenState);
}
}
}
@ -694,6 +682,27 @@ void GEOM_Displayer::Display( const SALOME_ListIO& theIOList, const bool updateV
UpdateViewer();
}
void GEOM_Displayer::UpdateVisibility( SALOME_View* v, const SALOME_Prs* p, bool on )
{
SalomeApp_Study* aStudy = getStudy();
int vId = -1;
if ( v ) vId = getViewManagerId( v );
if ( p ) {
QString entry = p->GetEntry();
if ( !entry.isEmpty() ) {
if ( vId != -1 )
aStudy->setObjectProperty( vId, entry, GEOM::propertyName( GEOM::Visibility ), on );
setVisibilityState( entry, on ? Qtx::ShownState : Qtx::HiddenState );
}
}
else {
if ( vId != -1 ) {
aStudy->setObjectProperty( vId, GEOM::propertyName( GEOM::Visibility ), on );
}
}
}
Quantity_Color GEOM_Displayer::qColorFromResources( const QString& property, const QColor& defColor )
{
// VSR: this method can be improved in future:
@ -952,7 +961,7 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap
if ( create && !isTemporary && aMgrId != -1 ) {
// set properties to the study
study->setObjectPropMap( aMgrId, entry, propMap );
study->setObjectProperties( aMgrId, entry, propMap );
}
// AISShape->SetName(???); ??? necessary to set name ???
@ -1106,7 +1115,7 @@ void GEOM_Displayer::updateActorProperties( GEOM_Actor* actor, bool create )
if ( create && !isTemporary && aMgrId != -1 ) {
// set properties to the study
study->setObjectPropMap( aMgrId, entry, propMap );
study->setObjectProperties( aMgrId, entry, propMap );
}
}
@ -2336,7 +2345,7 @@ PropMap GEOM_Displayer::getObjectProperties( SalomeApp_Study* study,
if ( viewModel && viewId != -1 ) {
// get properties from the study
PropMap storedMap = study->getObjectPropMap( viewId, entry );
PropMap storedMap = study->getObjectProperties( viewId, entry );
// overwrite default properties from stored ones (that are specified)
for ( int prop = GEOM::Visibility; prop <= GEOM::LastProperty; prop++ ) {
if ( storedMap.contains( GEOM::propertyName( (GEOM::Property)prop ) ) )
@ -2946,7 +2955,7 @@ void GEOM_Displayer::UpdateColorScale( const bool theIsRedisplayFieldSteps, cons
{
if( SUIT_ViewManager* aViewManager = *vmIt )
{
const ObjMap anObjects = aStudy->getObjectMap( aViewManager->getGlobalId() );
const ObjMap& anObjects = aStudy->getObjectProperties( aViewManager->getGlobalId() );
for( ObjMap::ConstIterator objIt = anObjects.begin(); objIt != anObjects.end(); objIt++ )
{
_PTR(SObject) aSObj( aStudyDS->FindObjectID( objIt.key().toLatin1().constData() ) );

View File

@ -128,6 +128,9 @@ public:
const bool theUpdateViewer,
SALOME_View* theViewFrame );
/* Update visibility state */
void UpdateVisibility( SALOME_View*, const SALOME_Prs*, bool );
/* build presentation accordint to the current viewer type*/
SALOME_Prs* BuildPrs ( GEOM::GEOM_Object_ptr );
SALOME_Prs* BuildPrs ( const TopoDS_Shape& );

View File

@ -2702,10 +2702,10 @@ void GeometryGUI::storeVisualParameters (int savePoint)
// saving VTK actors properties
QVector<SUIT_ViewWindow*> views = vman->getViews();
for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
ObjMap::ConstIterator o_it = anObjects.begin();
for (; o_it != anObjects.end(); o_it++) {
const PropMap aProps = o_it.value();
const PropMap& aProps = o_it.value();
//Check that object exists in the study
_PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
@ -2977,8 +2977,7 @@ void GeometryGUI::restoreVisualParameters (int savePoint)
QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
for (int index = 0; index < aListOfMap.count(); index++) {
appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
appStudy->setObjectProperties(index, entry, aListOfMap[index]);
//Get Visibility property of the current PropMap
if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {

View File

@ -543,7 +543,7 @@ void GEOMToolsGUI::removeObjectWithChildren(_PTR(SObject) obj,
if (!CORBA::is_nil(geomObj)) {
//Remove visual properties of the object
appStudy->removeObjectFromAll(obj->GetID().c_str());
appStudy->removeObjectProperties(obj->GetID().c_str());
// Erase graphical object
QListIterator<SALOME_View*> it( views );

View File

@ -328,7 +328,7 @@ GEOMToolsGUI_MaterialPropertiesDlg::GEOMToolsGUI_MaterialPropertiesDlg( QWidget*
SUIT_ViewWindow* window = app->desktop()->activeWindow();
if ( window ) {
int mgrId = window->getViewManager()->getGlobalId();
PropMap propMap = study->getObjectPropMap( mgrId, io->getEntry() );
PropMap propMap = study->getObjectProperties( mgrId, io->getEntry() );
QString matProp = propMap.value(GEOM::propertyName( GEOM::Material )).toString();
if ( !matProp.isEmpty() )
myCurrentModel.fromProperties( matProp );

View File

@ -446,7 +446,7 @@ void GEOMToolsGUI_ReduceStudyDlg::removeObject( std::string& theStudyEntry )
_PTR(SObject) obj ( myStudy->FindObjectID( theStudyEntry.c_str() ) );
if ( obj ) {
// remove visual properties of the object
appStudy->removeObjectFromAll(obj->GetID().c_str());
appStudy->removeObjectProperties(obj->GetID().c_str());
// remove references to this object
appStudy->deleteReferencesTo( obj );
// remove objects from study