From 91696aaf933633c6902a91de759a79a4792f30ac Mon Sep 17 00:00:00 2001
From: Stephane Albert <stephane.albert@c-s.fr>
Date: Mon, 16 Mar 2015 15:39:14 +0100
Subject: [PATCH] ENH: Fixed disapearance of ROI actor in Quicklook view

---
 .../Common/Gui/mvdAbstractImageViewRenderer.h |  4 ++
 Code/Common/Gui/mvdImageViewRenderer.cxx      | 24 ++++++-
 Code/Common/Gui/mvdImageViewRenderer.h        |  3 +
 Code/Common/Gui/mvdQuicklookViewRenderer.cxx  | 63 ++++++++++++++++---
 Code/Common/Gui/mvdQuicklookViewRenderer.h    |  9 ++-
 5 files changed, 90 insertions(+), 13 deletions(-)

diff --git a/Code/Common/Gui/mvdAbstractImageViewRenderer.h b/Code/Common/Gui/mvdAbstractImageViewRenderer.h
index 5a02582797..6a46f617ed 100644
--- a/Code/Common/Gui/mvdAbstractImageViewRenderer.h
+++ b/Code/Common/Gui/mvdAbstractImageViewRenderer.h
@@ -320,7 +320,11 @@ void
 AbstractImageViewRenderer
 ::UpdateScene()
 {
+  virtual_PrepareScene();
+
   virtual_UpdateScene();
+
+  virtual_FinishScene();
 }
 
 /*****************************************************************************/
diff --git a/Code/Common/Gui/mvdImageViewRenderer.cxx b/Code/Common/Gui/mvdImageViewRenderer.cxx
index 19dfeb1efe..a4d5b2b4ad 100644
--- a/Code/Common/Gui/mvdImageViewRenderer.cxx
+++ b/Code/Common/Gui/mvdImageViewRenderer.cxx
@@ -404,16 +404,19 @@ void
 ImageViewRenderer
 ::UpdateActors( const AbstractImageViewRenderer::RenderingContext * )
 {
+  qDebug() << this << "::virtual_UpdateActors()";
+
   assert( !m_GlView.IsNull() );
 
 
   StackedLayerModel * stackedLayerModel = GetLayerStack();
   assert( stackedLayerModel!=NULL );
 
+  /*
   otb::GlImageActor::Pointer refImageActor(
     GetReferenceActor< otb::GlImageActor >()
   );
-
+  */
 
   for( StackedLayerModel::ConstIterator it( stackedLayerModel->Begin() );
        it!=stackedLayerModel->End();
@@ -598,7 +601,7 @@ ImageViewRenderer
       }
     }
 
-  m_GlView->SetRenderingOrder( stackedLayerModel->GetKeys() );
+  m_GlView->SetRenderingOrder( stackedLayerModel->GetKeys(), false );
 }
 
 /*******************************************************************************/
@@ -606,6 +609,8 @@ void
 ImageViewRenderer
 ::virtual_UpdateScene()
 {
+  qDebug() << this << "::virtual_UpdateScene()";
+
   assert( !m_GlView.IsNull() );
 
   StackedLayerModel * stackedLayerModel = GetLayerStack();
@@ -623,7 +628,11 @@ ImageViewRenderer
            it!=keys.end();
            ++it )
         if( !stackedLayerModel->Contains( *it ) )
+          {
+          qDebug() << "Removed image-actor:" << FromStdString( *it );
+
           m_GlView->RemoveActor( *it );
+          }
       }
 
 
@@ -679,6 +688,8 @@ void
 ImageViewRenderer
 ::virtual_RefreshScene()
 {
+  qDebug() << this << "::virtual_RefreshScene()";
+
   StackedLayerModel * stackedLayerModel = GetLayerStack();
 
   if( stackedLayerModel==NULL || stackedLayerModel->IsEmpty() )
@@ -723,10 +734,17 @@ ImageViewRenderer
   if( !m_ReferencePair.second.IsNull() )
     {
     if( referencePair.second.IsNull() )
-      emit SetProjectionRequired();
+      {
+      virtual_SetProjection();
 
+      emit SetProjectionRequired();
+      }
     else
+      {
+      virtual_UpdateProjection();
+
       emit UpdateProjectionRequired();
+      }
     }
 
 #endif // USE_REMOTE_DESKTOP_DISABLED_RENDERING
diff --git a/Code/Common/Gui/mvdImageViewRenderer.h b/Code/Common/Gui/mvdImageViewRenderer.h
index 6c7d5151d4..62b0c2ba28 100644
--- a/Code/Common/Gui/mvdImageViewRenderer.h
+++ b/Code/Common/Gui/mvdImageViewRenderer.h
@@ -253,6 +253,9 @@ private:
 // Private methods.
 private:
 
+  virtual void virtual_SetProjection() {};
+  virtual void virtual_UpdateProjection() {};
+
   //
   // AbstractImageViewRenderer overloads.
 
diff --git a/Code/Common/Gui/mvdQuicklookViewRenderer.cxx b/Code/Common/Gui/mvdQuicklookViewRenderer.cxx
index 3ef7cb3173..17189f3d66 100644
--- a/Code/Common/Gui/mvdQuicklookViewRenderer.cxx
+++ b/Code/Common/Gui/mvdQuicklookViewRenderer.cxx
@@ -41,6 +41,7 @@
 //
 // Monteverdi includes (sorted by alphabetic order)
 #include "Core/mvdDatasetModel.h"
+#include "Core/mvdStackedLayerModel.h"
 #include "Core/mvdTypes.h"
 #include "Core/mvdVectorImageModel.h"
 
@@ -65,7 +66,6 @@ namespace mvd
 
 /*****************************************************************************/
 /* CLASS IMPLEMENTATION SECTION                                              */
-
 /*****************************************************************************/
 QuicklookViewRenderer
 ::QuicklookViewRenderer( QObject* parent ) :
@@ -106,25 +106,56 @@ QuicklookViewRenderer
 /*******************************************************************************/
 void
 QuicklookViewRenderer
-::virtual_FinishScene()
+::virtual_SetProjection()
 {
-  assert( !m_GlView.IsNull() );
+  SetWktAndKwl();
+}
 
-  // qDebug() << this << "::virtual_FinishScene()";
+/*******************************************************************************/
+void
+QuicklookViewRenderer
+::virtual_UpdateProjection()
+{
+  SetWktAndKwl();
+}
+
+/*******************************************************************************/
+void
+QuicklookViewRenderer
+::SetWktAndKwl()
+{
+  qDebug() << this << "::SetWktAndKwl()";
+
+  assert( GetLayerStack()!=NULL );
+
+  if( GetLayerStack()->IsEmpty() )
+    return;
 
   otb::GlImageActor::Pointer referenceGlImageActor(
     GetReferenceActor< otb::GlImageActor >()
   );
 
-  if( referenceGlImageActor.IsNull() )
-    return;
+  assert( !referenceGlImageActor.IsNull() );
+
+  m_GlRoiActor->SetKwl( referenceGlImageActor->GetKwl() );
+  m_GlRoiActor->SetWkt( referenceGlImageActor->GetWkt() );
+}
+
+/*******************************************************************************/
+void
+QuicklookViewRenderer
+::virtual_FinishScene()
+{
+  qDebug() << this << "::virtual_FinishScene()";
+
+  assert( !m_GlView.IsNull() );
+
 
   std::string key( m_GlView->AddActor( m_GlRoiActor ) );
 
   m_GlRoiActor->SetVisible( true );
 
-  m_GlRoiActor->SetKwl( referenceGlImageActor->GetKwl() );
-  m_GlRoiActor->SetWkt( referenceGlImageActor->GetWkt() );
+  qDebug() << "Added roi-actor:" << FromStdString( key );
 
   /*
   ColorType color;
@@ -137,6 +168,18 @@ QuicklookViewRenderer
   m_GlRoiActor->SetAlpha( 0.2 );
 
   m_GlView->MoveActorToEndOfRenderingOrder( key, true );
+
+#if 0
+  otb::GlImageActor::Pointer referenceGlImageActor(
+    GetReferenceActor< otb::GlImageActor >()
+  );
+
+  if( referenceGlImageActor.IsNull() )
+    return;
+
+  m_GlRoiActor->SetKwl( referenceGlImageActor->GetKwl() );
+  m_GlRoiActor->SetWkt( referenceGlImageActor->GetWkt() );
+#endif
 }
 
 /*****************************************************************************/
@@ -144,9 +187,11 @@ void
 QuicklookViewRenderer
 ::UpdateActors( const AbstractImageViewRenderer::RenderingContext* c )
 {
+  qDebug() << this << "::UpdateActors()";
+
   assert( c!=NULL );
 
-  ImageViewRenderer::UpdateActors( c );
+  // ImageViewRenderer::UpdateActors( c );
 
   assert(
     c==dynamic_cast< const QuicklookViewRenderer::RenderingContext * >( c )
diff --git a/Code/Common/Gui/mvdQuicklookViewRenderer.h b/Code/Common/Gui/mvdQuicklookViewRenderer.h
index b88393ad9f..873dcab2e3 100644
--- a/Code/Common/Gui/mvdQuicklookViewRenderer.h
+++ b/Code/Common/Gui/mvdQuicklookViewRenderer.h
@@ -162,9 +162,16 @@ private:
 // Private methods.
 private:
 
+  void SetWktAndKwl();
+
   //
-  // AbstractImageViewRenderer overloads.
+  // ImageViewRenderer overrides.
+  virtual void virtual_SetProjection();
+  virtual void virtual_UpdateProjection();
 
+  //
+  // AbstractImageViewRenderer overloads.
+  // TODO: Move virtual_*Scene() methods to protected section.
   virtual void virtual_FinishScene();
 
 //
-- 
GitLab