Salome HOME
IPAL52528: TC7.5.0: Dump study - transparency is lost
authorvsr <vsr@opencascade.com>
Thu, 23 Oct 2014 12:33:30 +0000 (16:33 +0400)
committervsr <vsr@opencascade.com>
Thu, 23 Oct 2014 12:33:30 +0000 (16:33 +0400)
Properly process visibility state on Show/Hide operations

src/GEOMBase/GEOMBase_Helper.cxx
src/GEOMGUI/GEOM_Displayer.cxx
src/GEOMGUI/GEOM_Displayer.h
src/GEOMGUI/GeometryGUI.cxx
src/GEOMToolsGUI/GEOMToolsGUI.cxx
src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx
src/GEOMToolsGUI/GEOMToolsGUI_ReduceStudyDlg.cxx

index 880ae775b084cd644467c7c5fb0c7ea441228dde..93c4c2da6e68edfbf92cda0bc3f6f3a2101310a7 100755 (executable)
@@ -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();
index cbf422eefecb14a961cae25c1fb74efe4dceaaac..7d79a2cd5e3f6168cfeb9485463f71003207670a 100644 (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() ) );
index 7f0d01d9987dc9642d99833ff33dd05faba20d37..0096c51b2cac3a5a30763e0627828d52e531dc61 100644 (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& );
index 20e83565b7e725930bb016eefaa12dc61e85eb44..c7e69aec226daf19ba5ee7a8b50e9a7ac759beaf 100644 (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) {
index 916dda69226ff72ebc5c2a66ae11288bf27609c1..b56bc9c67a91876f04b3e49b94bfe87cc69ab600 100644 (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 );
index 96d5cb4679966b8e5a35e69ea66543491c135659..657230a11093bf437d7025c6592c1d813b4b096b 100644 (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 );
index 5554d0607c388bc9d9e3ae0b7515542131d9522a..ffa36f27c55e9a9990a41d6c7dbcce4f347bd7ed 100644 (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