Salome HOME
Improve viewer performance
authorvsv <vitaly.smetannikov@opencascade.com>
Fri, 25 Sep 2015 08:57:12 +0000 (11:57 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Fri, 25 Sep 2015 08:57:12 +0000 (11:57 +0300)
src/XGUI/XGUI_Displayer.cpp
src/XGUI/XGUI_Displayer.h
src/XGUI/XGUI_WorkshopListener.cpp

index b41682090e2d05791671aa6a051422a0220738bd..4ddd905723cb49e16e58ff3c57bc401ca6a65040 100644 (file)
@@ -96,7 +96,7 @@ QString qIntListInfo(const QIntList& theValues, const QString& theSeparator = QS
 }
 
 XGUI_Displayer::XGUI_Displayer(XGUI_Workshop* theWorkshop)
-  : myWorkshop(theWorkshop), myEnableUpdateViewer(true)
+  : myWorkshop(theWorkshop), myEnableUpdateViewer(true), myNeedUpdate(false)
 {
   enableUpdateViewer(true);
   myCustomPrs = std::shared_ptr<GeomAPI_ICustomPrs>(new XGUI_CustomPrs());
@@ -689,7 +689,10 @@ bool XGUI_Displayer::enableUpdateViewer(const bool isEnabled)
   bool aWasEnabled = myEnableUpdateViewer;
 
   myEnableUpdateViewer = isEnabled;
-
+  if (myNeedUpdate && myEnableUpdateViewer) {
+    updateViewer();
+    myNeedUpdate = false;
+  }
   return aWasEnabled;
 }
 
@@ -700,6 +703,8 @@ void XGUI_Displayer::updateViewer() const
   if (!aContext.IsNull() && myEnableUpdateViewer) {
     myWorkshop->viewer()->Zfitall();
     aContext->UpdateCurrentViewer();
+  } else {
+    myNeedUpdate = true;
   }
 }
 
index b189189f6b3428d610e4d625717cfe9b3eaf0eb0..3cd6f9c73d5934e52b435e0b7468e23a97c83815 100644 (file)
@@ -141,6 +141,8 @@ class XGUI_EXPORT XGUI_Displayer: public QObject
   /// \param isEnabled a boolean value
   bool enableUpdateViewer(const bool isEnabled);
 
+  bool isUpdateEnabled() const { return myEnableUpdateViewer; }
+
   /// Updates the viewer
   void updateViewer() const;
 
@@ -307,7 +309,10 @@ private:
   QIntList myActiveSelectionModes;
 
   /// the enable update viewer flag
-  bool myEnableUpdateViewer;  
+  bool myEnableUpdateViewer; 
+
+  /// A flag that update was requested but not done
+  mutable bool myNeedUpdate;
 };
 
 #endif
index 434b6cdd837fb015de84211a1eb4f12a4920c7fb..e5c95c78bf7e68c333f712e5e051cf2ed7c341ee 100755 (executable)
@@ -191,7 +191,6 @@ void XGUI_WorkshopListener::processEvent(const std::shared_ptr<Events_Message>&
     // the viewer's update context is unblocked, the viewer's update works
     XGUI_Displayer* aDisplayer = workshop()->displayer();
     aDisplayer->enableUpdateViewer(true);
-    aDisplayer->updateViewer();
   } else if (theMessage->eventID() == Events_Loop::eventByName(EVENT_OBJECT_ERROR_CHANGED)) {
     std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aUpdMsg =
         std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);