From a3e19b8576ba1c0853fb67a5ac6b83d95b6c98a1 Mon Sep 17 00:00:00 2001
From: Julien Michel <julien.michel@orfeo-toolbox.org>
Date: Thu, 15 Jan 2009 16:58:14 +0100
Subject: [PATCH] BUG: Reverting file to revision 63226675275b due to an offset
 bug introduced after this revision

---
 Code/Visu/otbImageAlternateViewer.txx | 1271 ++++++++++++-------------
 1 file changed, 608 insertions(+), 663 deletions(-)

diff --git a/Code/Visu/otbImageAlternateViewer.txx b/Code/Visu/otbImageAlternateViewer.txx
index bd429fe9d0..a103b4cef7 100644
--- a/Code/Visu/otbImageAlternateViewer.txx
+++ b/Code/Visu/otbImageAlternateViewer.txx
@@ -10,8 +10,8 @@ Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
 See OTBCopyright.txt for details.
 
 
-This software is distributed WITHOUT ANY WARRANTY; without even
-the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+This software is distributed WITHOUT ANY WARRANTY; without even 
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
 PURPOSE.  See the above copyright notices for more information.
 
 =========================================================================*/
@@ -73,7 +73,7 @@ namespace otb
   {
     if(m_OpenGlBuffer != NULL)
       {
-  delete [] m_OpenGlBuffer;
+	delete [] m_OpenGlBuffer;
       }
   }
 
@@ -98,13 +98,13 @@ namespace otb
     Init(this->x(),this->y(),this->w(),this->h(),label);
   }
 
-
+  
   template <class TPixel>
   void
   ImageAlternateViewer<TPixel>
   ::Init(int x, int y, int w, int h, const char * l)
-  {
-    IndexType index;
+  {    
+    IndexType index; 
     SizeType size;
 
     index[0]=0;
@@ -124,11 +124,11 @@ namespace otb
     m_DisplayExtent.SetIndex(index);
     m_DisplayExtent.SetSize(size);
     m_OldDisplayExtent=m_DisplayExtent;
-
+    
     m_OldSpacingZoomFactor=m_SpacingZoomFactor;
 
     m_Splitter=SplitterType::New();
-
+   
     m_SubWindowRegion.SetIndex(index);
     m_SubWindowRegion.SetSize(nullSize);
 
@@ -139,23 +139,23 @@ namespace otb
     typename ImageListType::Pointer bandList = m_DecompositionFilter->GetOutput() ;
     bandList->UpdateOutputInformation();
     bandList->GetNthElement(m_RedChannelIndex)->SetRequestedRegion(m_RequestedRegion);
-
+    
     if(m_ViewModelIsRGB)
       {
-  bandList->GetNthElement(m_GreenChannelIndex)->SetRequestedRegion(m_RequestedRegion);
-  bandList->GetNthElement(m_BlueChannelIndex)->SetRequestedRegion(m_RequestedRegion);
+	bandList->GetNthElement(m_GreenChannelIndex)->SetRequestedRegion(m_RequestedRegion);
+	bandList->GetNthElement(m_BlueChannelIndex)->SetRequestedRegion(m_RequestedRegion);
       }
     bandList->PropagateRequestedRegion();
 
     if(!this->GetImage())
       {
-  itkExceptionMacro("No input image!");
+	itkExceptionMacro("No input image!");
       }
     this->label(l);
-    this->resize(x,
-     y,
-     m_DisplayExtent.GetSize()[0],
-     m_DisplayExtent.GetSize()[1]);
+    this->resize(x, 
+		 y, 
+		 m_DisplayExtent.GetSize()[0], 
+		 m_DisplayExtent.GetSize()[1]);
   }
   template <class TPixel>
   void
@@ -176,7 +176,7 @@ namespace otb
     index[0]=0;
     index[1]=0;
     size[0]=w;
-    size[1]=h;
+    size[1]=h; 
 
     m_DisplayExtent.SetIndex(index);
     m_DisplayExtent.SetSize(size);
@@ -226,27 +226,27 @@ namespace otb
     m_InsightViewModelIsRGB=false;
   }
 
-  /**
-   * Show The widget.
+  /** 
+   * Show The widget. 
    */
   template <class TPixel>
   void
   ImageAlternateViewer<TPixel>
   ::Show(void)
-  {
+  { 
     if(!m_Image)
       {
-  itkExceptionMacro(<<"No input image !");
+	itkExceptionMacro(<<"No input image !");
       }
     else
       {
-  this->show();
-  this->redraw();
+	this->show();
+	this->redraw();
       }
   }
 
-  /**
-   * Draw the widget
+  /** 
+   * Draw the widget 
    */
   template <class TPixel>
   void
@@ -255,16 +255,16 @@ namespace otb
   {
     if(!m_Updating)
       {
-  m_Updating = true;
-  IncrementalOpenGlBufferUpdate();
-  ResetOpenGlContext();
-  this->Draw(m_OpenGlBuffer,m_BufferedRegion);
-
-  if(!m_Drag)
-    {
-      AdditionalRedraw();
-    }
-  m_Updating = false;
+	m_Updating = true;
+	IncrementalOpenGlBufferUpdate();
+	ResetOpenGlContext();
+	this->Draw(m_OpenGlBuffer,m_BufferedRegion);
+	
+	if(!m_Drag)
+	  {
+	    AdditionalRedraw();
+	  }
+	m_Updating = false;
       }
   }
 
@@ -276,25 +276,25 @@ namespace otb
   {
     std::vector<unsigned char *> bufferList;
     std::vector<RegionType> bufferRegionList;
-
+     
     if(m_BufferedRegion!=m_DisplayExtent)
       {
-  for(unsigned int i = 0;i<8;++i)
-    {
-      RegionType additionalBufferRegion = GetAdditionalBufferRegion(i);
-      unsigned char * additionalBuffer = CreateAdditionalBuffer(additionalBufferRegion,m_Image,m_ViewModelIsRGB);
-      this->Draw(additionalBuffer,additionalBufferRegion);
-      bufferList.push_back(additionalBuffer);
-      bufferRegionList.push_back(additionalBufferRegion);
-    }
-  DecorationRedraw();
-  MergeBuffersAndFreeMemory(bufferList,bufferRegionList);
+	for(unsigned int i = 0;i<8;++i)
+	  {
+	    RegionType additionalBufferRegion = GetAdditionalBufferRegion(i);
+	    unsigned char * additionalBuffer = CreateAdditionalBuffer(additionalBufferRegion,m_Image,m_ViewModelIsRGB);
+	    this->Draw(additionalBuffer,additionalBufferRegion);
+	    bufferList.push_back(additionalBuffer);
+	    bufferRegionList.push_back(additionalBufferRegion);
+	  }
+	DecorationRedraw();
+	MergeBuffersAndFreeMemory(bufferList,bufferRegionList);
       }
     if(m_SubWindowMode)
       {
-  unsigned char * subWindowBuffer = CreateAdditionalBuffer(m_SubWindowRegion,m_SecondImage,m_InsightViewModelIsRGB);
-  this->Draw(subWindowBuffer,m_SubWindowRegion);
-  delete [] subWindowBuffer;
+	unsigned char * subWindowBuffer = CreateAdditionalBuffer(m_SubWindowRegion,m_SecondImage,m_InsightViewModelIsRGB);
+	this->Draw(subWindowBuffer,m_SubWindowRegion);
+	delete [] subWindowBuffer;
       }
     DecorationRedraw();
   }
@@ -307,32 +307,32 @@ namespace otb
   {
     if(m_SubWindowMode)
       {
-  this->DrawRegionBoundary(m_SubWindowRegion);
+	this->DrawRegionBoundary(m_SubWindowRegion);
       }
     swap_buffers();
     glFlush();
   }
 
   template <class TPixel>
-  long
+  long 
   ImageAlternateViewer<TPixel>
   ::IndexInOldGrid(PointType point, PointType oldUpperLeft, SpacingType spacing, SizeType size)
   {
     long resp;
     double x = (point[0]-oldUpperLeft[0])/spacing[0];
     double y = (point[1]-oldUpperLeft[1])/spacing[1];
-
+    
     if ((vcl_floor(x)!=x)||(vcl_floor(y)!=y))
       {
-  resp=-1;
+	resp=-1;
       }
     else if(x<0||x>size[0]||y<0||y>size[1])
       {
-  resp = -1;
+	resp = -1;
       }
-    else
+    else 
       {
-  resp = 3*(static_cast<long>(y)*size[0]+static_cast<long>(x));
+	resp = 3*(static_cast<long>(y)*size[0]+static_cast<long>(x));
       }
 
     return resp;
@@ -345,13 +345,9 @@ namespace otb
   ::IncrementalOpenGlBufferUpdate()
   {
     IndexType focusOffset;
-    focusOffset[0]=static_cast<long>(static_cast<double>(
-                                     m_ViewedRegionCenter[0]-m_OldViewedRegionCenter[0])/m_SpacingZoomFactor
-                                    );
-    focusOffset[1]=static_cast<long>(static_cast<double>(
-                                     m_ViewedRegionCenter[1]-m_OldViewedRegionCenter[1])/m_SpacingZoomFactor
-                                    );
-
+    focusOffset[0]=static_cast<long>(static_cast<double>(m_ViewedRegionCenter[0]-m_OldViewedRegionCenter[0])/m_SpacingZoomFactor);
+    focusOffset[1]=static_cast<long>(static_cast<double>(m_ViewedRegionCenter[1]-m_OldViewedRegionCenter[1])/m_SpacingZoomFactor);
+    
     IndexType newBufferedRegionIndex;
 
     SizeType newBufferedRegionSize;
@@ -364,172 +360,170 @@ namespace otb
     m_BufferedRegion.SetSize(newBufferedRegionSize);
 
     newBufferedRegionIndex[0]=(static_cast<long>(m_DisplayExtent.GetSize()[0])
-        -static_cast<long>(m_BufferedRegion.GetSize()[0]))/2;
+			       -static_cast<long>(m_BufferedRegion.GetSize()[0]))/2;
     newBufferedRegionIndex[1]=(static_cast<long>(m_DisplayExtent.GetSize()[1])
-        -static_cast<long>(m_BufferedRegion.GetSize()[1]))/2;
+			       -static_cast<long>(m_BufferedRegion.GetSize()[1]))/2;
     newBufferedRegionIndex[0]-=focusOffset[0];
     newBufferedRegionIndex[1]-=focusOffset[1];
     m_BufferedRegion.SetIndex(newBufferedRegionIndex);
-
+    
     PointType center;
     m_Image->TransformIndexToPhysicalPoint(m_ViewedRegionCenter,center);
 
-    if(m_SpacingZoomFactor != m_OldSpacingZoomFactor)
-    {
-      m_BufferedRegion.Crop(m_DisplayExtent);
-
-      SpacingType spacing = m_Image->GetSpacing()*m_SpacingZoomFactor;
-      SpacingType oldSpacing = m_Image->GetSpacing()*m_OldSpacingZoomFactor;
-
-      PointType origin;
-      origin[0]=center[0]-(static_cast<double>(this->m_DisplayExtent.GetSize()[0])/2-1)*spacing[0];
-      origin[1]=center[1]-(static_cast<double>(this->m_DisplayExtent.GetSize()[1])/2-1)*spacing[1];
-
-      PointType oldOrigin;
-      oldOrigin[0]=center[0]-(static_cast<double>(this->m_DisplayExtent.GetSize()[0])/2-1)*oldSpacing[0];
-      oldOrigin[1]=center[1]-(static_cast<double>(this->m_DisplayExtent.GetSize()[1])/2-1)*oldSpacing[1];
-
-      PointType oldBufferedUpperLeft;
-      oldBufferedUpperLeft[0]=oldOrigin[0]+static_cast<double>(m_OldBufferedRegion.GetIndex()[0])*oldSpacing[0];
-      oldBufferedUpperLeft[1]=oldOrigin[1]+static_cast<double>(m_OldBufferedRegion.GetIndex()[1])*oldSpacing[1];
-
-      PointType bufferedUpperLeft;
-      bufferedUpperLeft[0]=origin[0]+static_cast<double>(m_BufferedRegion.GetIndex()[0])*spacing[0];
-      bufferedUpperLeft[1]=origin[1]+static_cast<double>(m_BufferedRegion.GetIndex()[1])*spacing[1];
-
-      unsigned char *  newBuffer = NULL;
-      unsigned int bufferLenght = 3*m_BufferedRegion.GetSize()[0]*m_BufferedRegion.GetSize()[1];
-
-      newBuffer = new unsigned char[bufferLenght];
-      typename ImageListType::Pointer bandList;
-      unsigned int index = 0;
-      PixelType interpolatedValue = 0;
-      PointType interpolatedPos;
-      interpolatedPos.Fill(0);
-      unsigned int numberOfSplits=1;
-
-      unsigned int optiCount = 0;
-      InterpolatorPointerType interpolator;
-      if(m_SpacingZoomFactor>1)
-      {
-        numberOfSplits=max(
-            (static_cast<unsigned int>(m_SpacingZoomFactor))*(static_cast<unsigned int>(m_SpacingZoomFactor))
-            ,1U);
-        interpolator = m_ZoomOutInterpolator;
-      }
-      else
-      {
-        interpolator = m_ZoomInInterpolator;
-      }
-
-      unsigned int splitterNumberOfSplits = m_Splitter->GetNumberOfSplits(m_BufferedRegion,numberOfSplits);
-
-      for(unsigned int splitIndex = 0;splitIndex<splitterNumberOfSplits;++splitIndex)
-      {
-        RegionType splitRegion = m_Splitter->GetSplit(splitIndex,splitterNumberOfSplits,m_BufferedRegion);
-        m_RequestedRegion = ComputeRequestedRegion(splitRegion);
-        if(! m_RequestedRegion.Crop(m_Image->GetLargestPossibleRegion()))
-        {
-          SizeType nullSize;
-          nullSize.Fill(0);
-          IndexType nullIndex;
-          nullIndex.Fill(0);
-          m_RequestedRegion.SetSize(nullSize);
-          m_RequestedRegion.SetIndex(nullIndex);
-        }
-        m_DecompositionFilter = VectorImageDecompositionFilterType::New();
-        m_DecompositionFilter->SetInput(m_Image);
-        bandList = m_DecompositionFilter->GetOutput();
-        bandList->UpdateOutputInformation();
-        bandList->GetNthElement(m_RedChannelIndex)->SetRequestedRegion(m_RequestedRegion);
-        if(m_ViewModelIsRGB)
-        {
-          bandList->GetNthElement(m_GreenChannelIndex)->SetRequestedRegion(m_RequestedRegion);
-          bandList->GetNthElement(m_BlueChannelIndex)->SetRequestedRegion(m_RequestedRegion);
-        }
-        bandList->PropagateRequestedRegion();
-        bandList->UpdateOutputData();
-
-
-        PointType upperLeft;
-        upperLeft[0]=origin[0]+static_cast<double>(splitRegion.GetIndex()[0])*spacing[0];
-        upperLeft[1]=origin[1]+static_cast<double>(splitRegion.GetIndex()[1])*spacing[1];
-
-
-        interpolatedPos[1]=upperLeft[1];
-        for(unsigned int j = 0;j<splitRegion.GetSize()[1];++j)
-        {
-          interpolatedPos[0]=upperLeft[0];
-          for(unsigned int i = 0;i<splitRegion.GetSize()[0];++i)
-          {
-
-            long indexInOldBuffer = IndexInOldGrid(interpolatedPos,oldBufferedUpperLeft,oldSpacing,m_OldBufferedRegion.GetSize());
-            if(indexInOldBuffer>0)
-            {
-              newBuffer[index] = m_OpenGlBuffer[indexInOldBuffer];
-              newBuffer[index+1] = m_OpenGlBuffer[indexInOldBuffer+1];
-              newBuffer[index+2] = m_OpenGlBuffer[indexInOldBuffer+2];
-              index+=3;
-              optiCount++;
-            }
-            else
-            {
-              interpolator->SetInputImage(bandList->GetNthElement(m_RedChannelIndex));
-              if(interpolator->IsInsideBuffer(interpolatedPos))
-              {
-                interpolatedValue = static_cast<PixelType>(m_ZoomInInterpolator->Evaluate(interpolatedPos));
-              }
-              else
-              {
-                interpolatedValue = 0;
-              }
-              newBuffer[index] = Normalize(interpolatedValue,m_RedChannelIndex);
-              if(m_ViewModelIsRGB)
-              {
-                m_ZoomInInterpolator->SetInputImage(bandList->GetNthElement(m_GreenChannelIndex));
-                if( m_ZoomInInterpolator->IsInsideBuffer(interpolatedPos))
-                {
-                  interpolatedValue = static_cast<PixelType>(interpolator->Evaluate(interpolatedPos));
-                }
-                else
-                {
-                  interpolatedValue = 0;
-                }
-                newBuffer[index+1] = Normalize(interpolatedValue,m_GreenChannelIndex);
-                interpolator->SetInputImage(bandList->GetNthElement(m_BlueChannelIndex));
-                if( interpolator->IsInsideBuffer(interpolatedPos))
-                {
-                  interpolatedValue = static_cast<PixelType>(interpolator->Evaluate(interpolatedPos));
-                }
-                else
-                {
-                  interpolatedValue = 0;
-                }
-                newBuffer[index+2] = Normalize(interpolatedValue,m_BlueChannelIndex);
-                index+=3;
-              }
-              else
-              {
-                newBuffer[index+1] = Normalize(interpolatedValue,m_RedChannelIndex);
-                newBuffer[index+2] = Normalize(interpolatedValue,m_RedChannelIndex);
-                index+=3;
-              }
-            }
-            interpolatedPos[0] +=spacing[0];
-          }
-          interpolatedPos[1] +=spacing[1];
-        }
-      }
-      if(m_OpenGlBuffer!=NULL)
-      {
-        delete [] m_OpenGlBuffer;
-      }
-      m_OpenGlBuffer = newBuffer;
-
-      m_OldSpacingZoomFactor = m_SpacingZoomFactor;
-    }
+     if(m_SpacingZoomFactor != m_OldSpacingZoomFactor)
+       {
+	m_BufferedRegion.Crop(m_DisplayExtent);
+
+	SpacingType spacing = m_Image->GetSpacing()*m_SpacingZoomFactor;
+	SpacingType oldSpacing = m_Image->GetSpacing()*m_OldSpacingZoomFactor;
+	
+	PointType origin;
+	origin[0]=center[0]-(static_cast<double>(this->m_DisplayExtent.GetSize()[0])/2-1)*spacing[0];
+	origin[1]=center[1]-(static_cast<double>(this->m_DisplayExtent.GetSize()[1])/2-1)*spacing[1];
+	
+	PointType oldOrigin;
+	oldOrigin[0]=center[0]-(static_cast<double>(this->m_DisplayExtent.GetSize()[0])/2-1)*oldSpacing[0];
+	oldOrigin[1]=center[1]-(static_cast<double>(this->m_DisplayExtent.GetSize()[1])/2-1)*oldSpacing[1];
+		
+	PointType oldBufferedUpperLeft;
+	oldBufferedUpperLeft[0]=oldOrigin[0]+static_cast<double>(m_OldBufferedRegion.GetIndex()[0])*oldSpacing[0];
+	oldBufferedUpperLeft[1]=oldOrigin[1]+static_cast<double>(m_OldBufferedRegion.GetIndex()[1])*oldSpacing[1];
+
+	PointType bufferedUpperLeft;
+	bufferedUpperLeft[0]=origin[0]+static_cast<double>(m_BufferedRegion.GetIndex()[0])*spacing[0];
+	bufferedUpperLeft[1]=origin[1]+static_cast<double>(m_BufferedRegion.GetIndex()[1])*spacing[1];
+
+	unsigned char *  newBuffer = NULL;
+	unsigned int bufferLenght = 3*m_BufferedRegion.GetSize()[0]*m_BufferedRegion.GetSize()[1];
+   
+	newBuffer = new unsigned char[bufferLenght];
+	typename ImageListType::Pointer bandList;
+	unsigned int index = 0;
+	PixelType interpolatedValue = 0;
+	PointType interpolatedPos;
+	interpolatedPos.Fill(0);
+	unsigned int numberOfSplits=1;
+	
+	unsigned int optiCount = 0;
+	InterpolatorPointerType interpolator;
+	if(m_SpacingZoomFactor>1)
+	  {
+	    numberOfSplits=max((static_cast<unsigned int>(m_SpacingZoomFactor))*(static_cast<unsigned int>(m_SpacingZoomFactor)),1U);
+	    interpolator = m_ZoomOutInterpolator;
+	  }
+	else
+	  {
+	    interpolator = m_ZoomInInterpolator;
+	  }
+	
+	unsigned int splitterNumberOfSplits = m_Splitter->GetNumberOfSplits(m_BufferedRegion,numberOfSplits);
+	
+	for(unsigned int splitIndex = 0;splitIndex<splitterNumberOfSplits;++splitIndex)
+	  {
+	    RegionType splitRegion = m_Splitter->GetSplit(splitIndex,splitterNumberOfSplits,m_BufferedRegion);
+	    m_RequestedRegion = ComputeRequestedRegion(splitRegion);
+	    if(! m_RequestedRegion.Crop(m_Image->GetLargestPossibleRegion()))
+	      {
+		SizeType nullSize;
+		nullSize.Fill(0);
+		IndexType nullIndex;
+		nullIndex.Fill(0);
+		m_RequestedRegion.SetSize(nullSize);
+		m_RequestedRegion.SetIndex(nullIndex);
+	      }	    
+	    m_DecompositionFilter = VectorImageDecompositionFilterType::New();
+	    m_DecompositionFilter->SetInput(m_Image);
+	    bandList = m_DecompositionFilter->GetOutput();
+	    bandList->UpdateOutputInformation();
+	    bandList->GetNthElement(m_RedChannelIndex)->SetRequestedRegion(m_RequestedRegion);
+	    if(m_ViewModelIsRGB)
+	      {
+		bandList->GetNthElement(m_GreenChannelIndex)->SetRequestedRegion(m_RequestedRegion);
+		bandList->GetNthElement(m_BlueChannelIndex)->SetRequestedRegion(m_RequestedRegion);
+	      }
+	    bandList->PropagateRequestedRegion();
+	    bandList->UpdateOutputData();
+	    
+
+	    PointType upperLeft;
+	    upperLeft[0]=origin[0]+static_cast<double>(splitRegion.GetIndex()[0])*spacing[0];
+	    upperLeft[1]=origin[1]+static_cast<double>(splitRegion.GetIndex()[1])*spacing[1];
+
+
+	    interpolatedPos[1]=upperLeft[1];
+	    for(unsigned int j = 0;j<splitRegion.GetSize()[1];++j)
+	      {
+		interpolatedPos[0]=upperLeft[0];
+		for(unsigned int i = 0;i<splitRegion.GetSize()[0];++i)
+		  {
+		    
+		    long indexInOldBuffer = IndexInOldGrid(interpolatedPos,oldBufferedUpperLeft,oldSpacing,m_OldBufferedRegion.GetSize());
+		    if(indexInOldBuffer>0)
+		      {
+			newBuffer[index] = m_OpenGlBuffer[indexInOldBuffer];
+			newBuffer[index+1] = m_OpenGlBuffer[indexInOldBuffer+1];
+			newBuffer[index+2] = m_OpenGlBuffer[indexInOldBuffer+2];
+			index+=3;
+			optiCount++;
+		      }
+		    else
+		      {
+			interpolator->SetInputImage(bandList->GetNthElement(m_RedChannelIndex));
+			if(interpolator->IsInsideBuffer(interpolatedPos))
+			  {
+			    interpolatedValue = static_cast<PixelType>(m_ZoomInInterpolator->Evaluate(interpolatedPos));
+			  }
+			else
+			  {
+			    interpolatedValue = 0;
+			  }
+			newBuffer[index] = Normalize(interpolatedValue,m_RedChannelIndex);
+			if(m_ViewModelIsRGB)
+			  {
+			    m_ZoomInInterpolator->SetInputImage(bandList->GetNthElement(m_GreenChannelIndex));
+			    if( m_ZoomInInterpolator->IsInsideBuffer(interpolatedPos))
+			      {
+				interpolatedValue = static_cast<PixelType>(interpolator->Evaluate(interpolatedPos));
+			      }
+			    else
+			      {
+				interpolatedValue = 0;
+			      }
+			    newBuffer[index+1] = Normalize(interpolatedValue,m_GreenChannelIndex);
+			    interpolator->SetInputImage(bandList->GetNthElement(m_BlueChannelIndex));
+			    if( interpolator->IsInsideBuffer(interpolatedPos))
+			      {
+				interpolatedValue = static_cast<PixelType>(interpolator->Evaluate(interpolatedPos));
+			      }
+			    else
+			      {
+				interpolatedValue = 0;
+			      }
+			    newBuffer[index+2] = Normalize(interpolatedValue,m_BlueChannelIndex);
+			    index+=3;
+			  }
+			else
+			  {
+			    newBuffer[index+1] = Normalize(interpolatedValue,m_RedChannelIndex);
+			    newBuffer[index+2] = Normalize(interpolatedValue,m_RedChannelIndex);
+			    index+=3; 
+			  }
+ 		      }
+		    interpolatedPos[0] +=spacing[0];
+		  }
+		interpolatedPos[1] +=spacing[1];
+	      }
+	  }
+	if(m_OpenGlBuffer!=NULL)
+	  {
+	    delete [] m_OpenGlBuffer;
+	  }
+	m_OpenGlBuffer = newBuffer;
+
+	m_OldSpacingZoomFactor = m_SpacingZoomFactor;
   }
-
+}
+  
   template <class TPixel>
   typename ImageAlternateViewer<TPixel>
   ::RegionType
@@ -542,7 +536,7 @@ namespace otb
 
     size.Fill(0);
     index.Fill(0);
-
+    
     SizeType deSize = m_DisplayExtent.GetSize();
     IndexType deUL =m_DisplayExtent.GetIndex();
     IndexType deLR;
@@ -558,58 +552,58 @@ namespace otb
     switch(part)
       {
       case 0:
-  index   = deUL;
-  size[0] = max(bufUL[0]-deUL[0],0L);
-  size[1] = max(bufUL[1]-deUL[1],0L);
-  break;
+	index   = deUL;
+	size[0] = max(bufUL[0]-deUL[0],0L);
+	size[1] = max(bufUL[1]-deUL[1],0L);
+	break;
 
       case 1:
-  index[0] = max(deUL[0],bufUL[0]);
-  index[1] = deUL[1];
-  size[0]  = min(bufLR[0]-max(bufUL[0],0L),deLR[0]-index[0]);
-  size[1]  = max(bufUL[1]-deUL[1],0L);
-  break;
+	index[0] = max(deUL[0],bufUL[0]);
+	index[1] = deUL[1];
+	size[0]  = min(bufLR[0]-max(bufUL[0],0L),deLR[0]-index[0]);
+	size[1]  = max(bufUL[1]-deUL[1],0L);
+	break;
 
       case 2:
-  index[0] = min(bufLR[0],deLR[0]);
-  index[1] = deUL[1];
-  size[0]  = max(deLR[0]-bufLR[0],0L);
-  size[1]  = max(bufUL[1]-deUL[1],0L);
-  break;
+	index[0] = min(bufLR[0],deLR[0]);
+	index[1] = deUL[1];
+	size[0]  = max(deLR[0]-bufLR[0],0L);
+	size[1]  = max(bufUL[1]-deUL[1],0L);
+	break;
 
       case 3:
-  index[0] = deUL[0];
-  index[1] = max(bufUL[1],0L);
-  size[0]  = max(bufUL[0]-deUL[0],0L);
-  size[1]  = min(bufLR[1]-max(bufUL[1],0L),deLR[1]-index[1]);
-  break;
-
+	index[0] = deUL[0];
+	index[1] = max(bufUL[1],0L);
+	size[0]  = max(bufUL[0]-deUL[0],0L);
+	size[1]  = min(bufLR[1]-max(bufUL[1],0L),deLR[1]-index[1]);
+	break;
+	
       case 4:
-  index[0] = min(bufLR[0],deLR[0]);
-  index[1] = max(bufUL[1],deUL[0]);
-  size[0]  = max(deLR[0]-bufLR[0],0L);
-  size[1]  = min(bufLR[1]-max(bufUL[1],0L),deLR[1]-index[1]);
-  break;
+	index[0] = min(bufLR[0],deLR[0]);
+	index[1] = max(bufUL[1],deUL[0]);
+	size[0]  = max(deLR[0]-bufLR[0],0L);
+	size[1]  = min(bufLR[1]-max(bufUL[1],0L),deLR[1]-index[1]);
+	break;
 
       case 5:
-  index[0] = deUL[0];
-  index[1] = min(deLR[1],bufLR[1]);
-  size[0]  = max(bufUL[0]-deUL[0],0L);
-  size[1]  = max(deLR[1]-bufLR[1],0L);
-  break;
+	index[0] = deUL[0];
+	index[1] = min(deLR[1],bufLR[1]);
+	size[0]  = max(bufUL[0]-deUL[0],0L);
+	size[1]  = max(deLR[1]-bufLR[1],0L);
+	break;
 
       case 6:
-  index[0] = max(deUL[0],bufUL[0]);
-  index[1] = min(deLR[1],bufLR[1]);
-  size[0]  = min(bufLR[0]-max(bufUL[0],0L),deLR[0]-index[0]);
-  size[1]  = max(deLR[1]-bufLR[1],0L);
-  break;
+	index[0] = max(deUL[0],bufUL[0]);
+	index[1] = min(deLR[1],bufLR[1]);
+	size[0]  = min(bufLR[0]-max(bufUL[0],0L),deLR[0]-index[0]);
+	size[1]  = max(deLR[1]-bufLR[1],0L);
+	break;
 
       case 7:
-  index[0] = min(bufLR[0],deLR[0]);
-  index[1] = min(deLR[1],bufLR[1]);
-  size[0]  = max(deLR[0]-bufLR[0],0L);
-  size[1]  = max(deLR[1]-bufLR[1],0L);
+	index[0] = min(bufLR[0],deLR[0]);
+	index[1] = min(deLR[1],bufLR[1]);
+	size[0]  = max(deLR[0]-bufLR[0],0L);
+	size[1]  = max(deLR[1]-bufLR[1],0L);
       }
     region.SetSize(size);
     region.SetIndex(index);
@@ -623,9 +617,9 @@ namespace otb
   ::ComputeRequestedRegion(RegionType &region)
   {
     RegionType outputRegion;
-
+    
     SpacingType spacing = m_Image->GetSpacing()*m_SpacingZoomFactor;
-
+    
     PointType center;
     m_Image->TransformIndexToPhysicalPoint(m_ViewedRegionCenter,center);
     PointType origin;
@@ -680,11 +674,11 @@ namespace otb
     unsigned char *  result = NULL;
 
     unsigned int bufferLenght = 3*region.GetSize()[0]*region.GetSize()[1];
-
+   
     if(bufferLenght == 0)
-    {
-      return result;
-    }
+      {
+	return result;
+      }
 
     result = new unsigned char[bufferLenght];
 
@@ -700,19 +694,17 @@ namespace otb
 
     InterpolatorPointerType interpolator;
     if(m_SpacingZoomFactor>1)
-    {
-      numberOfSplits=max(
-          (static_cast<unsigned int>(m_SpacingZoomFactor))*(static_cast<unsigned int>(m_SpacingZoomFactor))
-          ,1U);
-      interpolator = m_ZoomOutInterpolator;
-    }
+      {
+	numberOfSplits=max((static_cast<unsigned int>(m_SpacingZoomFactor))*(static_cast<unsigned int>(m_SpacingZoomFactor)),1U);
+	interpolator = m_ZoomOutInterpolator;
+      }
     else
-    {
-      interpolator = m_ZoomInInterpolator;
-    }
-
+      {
+	interpolator = m_ZoomInInterpolator;
+      }
+    
     unsigned int splitterNumberOfSplits = m_Splitter->GetNumberOfSplits(region,numberOfSplits);
-
+    
     SpacingType spacing = image->GetSpacing()*m_SpacingZoomFactor;
 
     PointType center;
@@ -722,215 +714,210 @@ namespace otb
     origin[1]=center[1]-(static_cast<double>(this->m_DisplayExtent.GetSize()[1])/2-1)*spacing[1];
 
     for(unsigned int splitIndex = 0;splitIndex<splitterNumberOfSplits;++splitIndex)
-    {
-      RegionType splitRegion = m_Splitter->GetSplit(splitIndex,splitterNumberOfSplits,region);
-
-      PointType upperLeft;
-      upperLeft[0]=origin[0]+(static_cast<double>(splitRegion.GetIndex()[0]))*spacing[0];
-      upperLeft[1]=origin[1]+(static_cast<double>(splitRegion.GetIndex()[1]))*spacing[1];
-      m_RequestedRegion = ComputeRequestedRegion(splitRegion);
-      if(!m_RequestedRegion.Crop(image->GetLargestPossibleRegion()))
       {
-        SizeType nullSize;
-        nullSize.Fill(0);
-        IndexType nullIndex;
-        nullIndex.Fill(0);
-        m_RequestedRegion.SetSize(nullSize);
-        m_RequestedRegion.SetIndex(nullIndex);
+	RegionType splitRegion = m_Splitter->GetSplit(splitIndex,splitterNumberOfSplits,region);
+
+	PointType upperLeft;
+	upperLeft[0]=origin[0]+(static_cast<double>(splitRegion.GetIndex()[0]))*spacing[0];
+	upperLeft[1]=origin[1]+(static_cast<double>(splitRegion.GetIndex()[1]))*spacing[1];
+	m_RequestedRegion = ComputeRequestedRegion(splitRegion);
+	if(!m_RequestedRegion.Crop(image->GetLargestPossibleRegion()))
+	  {
+	    SizeType nullSize;
+	    nullSize.Fill(0);
+	    IndexType nullIndex;
+	    nullIndex.Fill(0);
+	    m_RequestedRegion.SetSize(nullSize);
+	    m_RequestedRegion.SetIndex(nullIndex);
+	  }
+	m_DecompositionFilter = VectorImageDecompositionFilterType::New();
+	m_DecompositionFilter->SetInput(image);
+	bandList = m_DecompositionFilter->GetOutput();
+	
+	bandList->UpdateOutputInformation();
+	bandList->GetNthElement(m_RedChannelIndex)->SetRequestedRegion(m_RequestedRegion);
+	if(rgb)
+	  {
+	    bandList->GetNthElement(m_GreenChannelIndex)->SetRequestedRegion(m_RequestedRegion);
+	    bandList->GetNthElement(m_BlueChannelIndex)->SetRequestedRegion(m_RequestedRegion);
+	  }
+	bandList->PropagateRequestedRegion();
+	bandList->UpdateOutputData();
+
+	filter.Stop();
+
+	interpolation.Start();
+	interpolatedPos[1]=upperLeft[1];
+	for(unsigned int j = 0;j<splitRegion.GetSize()[1];++j)
+	  {
+	    interpolatedPos[0]=upperLeft[0];
+	    for(unsigned int i = 0;i<splitRegion.GetSize()[0];++i)
+	      {
+		interpolator->SetInputImage(bandList->GetNthElement(m_RedChannelIndex));
+		if( interpolator->IsInsideBuffer(interpolatedPos))
+		  {
+		    interpolatedValue = static_cast<PixelType>(interpolator->Evaluate(interpolatedPos));
+		  }
+		else
+		  {
+		    interpolatedValue = 0;
+		  }
+		result[index] = Normalize(interpolatedValue,m_RedChannelIndex);
+		if(rgb)
+		  {
+		    interpolator->SetInputImage(bandList->GetNthElement(m_GreenChannelIndex));
+		    if( interpolator->IsInsideBuffer(interpolatedPos))
+		      {
+			interpolatedValue = static_cast<PixelType>( interpolator->Evaluate(interpolatedPos));
+		      }
+		    else
+		      {
+			interpolatedValue = 0;
+		      }
+		    result[index+1] = Normalize(interpolatedValue,m_GreenChannelIndex);
+		    interpolator->SetInputImage(bandList->GetNthElement(m_BlueChannelIndex));
+		    if( interpolator->IsInsideBuffer(interpolatedPos))
+		      {
+			interpolatedValue = static_cast<PixelType>(interpolator->Evaluate(interpolatedPos));
+		      }
+		    else
+		      {
+			interpolatedValue = 0;
+		      }
+		    result[index+2] = Normalize(interpolatedValue,m_BlueChannelIndex);
+		    index+=3;
+		  }
+		else
+		  {
+		    result[index+1] = Normalize(interpolatedValue,m_RedChannelIndex);
+		    result[index+2] = Normalize(interpolatedValue,m_RedChannelIndex);
+		    index+=3; 
+		  }
+		interpolatedPos[0] +=spacing[0];
+	      }
+	    interpolatedPos[1] +=spacing[1];
+	  }
       }
-      m_DecompositionFilter = VectorImageDecompositionFilterType::New();
-      m_DecompositionFilter->SetInput(image);
-      bandList = m_DecompositionFilter->GetOutput();
 
-      bandList->UpdateOutputInformation();
-      bandList->GetNthElement(m_RedChannelIndex)->SetRequestedRegion(m_RequestedRegion);
-      if(rgb)
-      {
-        bandList->GetNthElement(m_GreenChannelIndex)->SetRequestedRegion(m_RequestedRegion);
-        bandList->GetNthElement(m_BlueChannelIndex)->SetRequestedRegion(m_RequestedRegion);
-      }
-      bandList->PropagateRequestedRegion();
-      bandList->UpdateOutputData();
 
-      filter.Stop();
 
-      interpolation.Start();
-      interpolatedPos[1]=upperLeft[1];
-      for(unsigned int j = 0;j<splitRegion.GetSize()[1];++j)
-      {
-        interpolatedPos[0]=upperLeft[0];
-        for(unsigned int i = 0;i<splitRegion.GetSize()[0];++i)
-        {
-          interpolator->SetInputImage(bandList->GetNthElement(m_RedChannelIndex));
-          if( interpolator->IsInsideBuffer(interpolatedPos))
-          {
-            interpolatedValue = static_cast<PixelType>(interpolator->Evaluate(interpolatedPos));
-          }
-          else
-          {
-            interpolatedValue = 0;
-          }
-          result[index] = Normalize(interpolatedValue,m_RedChannelIndex);
-          if(rgb)
-          {
-            interpolator->SetInputImage(bandList->GetNthElement(m_GreenChannelIndex));
-            if( interpolator->IsInsideBuffer(interpolatedPos))
-            {
-              interpolatedValue = static_cast<PixelType>( interpolator->Evaluate(interpolatedPos));
-            }
-            else
-            {
-              interpolatedValue = 0;
-            }
-            result[index+1] = Normalize(interpolatedValue,m_GreenChannelIndex);
-            interpolator->SetInputImage(bandList->GetNthElement(m_BlueChannelIndex));
-            if( interpolator->IsInsideBuffer(interpolatedPos))
-            {
-              interpolatedValue = static_cast<PixelType>(interpolator->Evaluate(interpolatedPos));
-            }
-            else
-            {
-              interpolatedValue = 0;
-            }
-            result[index+2] = Normalize(interpolatedValue,m_BlueChannelIndex);
-            index+=3;
-          }
-          else
-          {
-            result[index+1] = Normalize(interpolatedValue,m_RedChannelIndex);
-            result[index+2] = Normalize(interpolatedValue,m_RedChannelIndex);
-            index+=3;
-          }
-          interpolatedPos[0] +=spacing[0];
-        }
-        interpolatedPos[1] +=spacing[1];
-      }
-    }
 
     interpolation.Stop();
     total.Stop();
     return result;
   }
-
+  
   template <class TPixel>
-  int
+  int  
   ImageAlternateViewer<TPixel>
   ::handle(int event)
   {
     if(m_Updating)
       return 0;
     switch(event)
-    {
-      case FL_PUSH:
       {
-        if(!m_Drag)
-        {
-          m_OldMousePos[0]= static_cast<long int>(
-              static_cast<double>(m_DisplayExtent.GetSize()[0]/2)
-              +(static_cast<double>(Fl::event_x())-static_cast<double>(m_DisplayExtent.GetSize()[0]/2))/m_OpenGlIsotropicZoom
-                                                 );
-          m_OldMousePos[1]= static_cast<long int>(
-              static_cast<double>(m_DisplayExtent.GetSize()[1]/2)
-              +(static_cast<double>(Fl::event_y())-static_cast<double>(m_DisplayExtent.GetSize()[1]/2))/m_OpenGlIsotropicZoom
-                                                 );
-          m_Drag=true;
-          m_DragEventCounter=0;
-
-          if(m_SubWindowRegion.IsInside(m_OldMousePos))
-          {
-            m_SubWindowMove = true;
-          }
-          else
-          {
-            m_OldViewedRegionCenter = m_ViewedRegionCenter;
-          }
-        }
-        return 1;
-      }
+      case FL_PUSH:
+	{
+	  if(!m_Drag)
+	    {
+	      m_OldMousePos[0]= static_cast<long int>(static_cast<double>(m_DisplayExtent.GetSize()[0]/2)
+						      +(static_cast<double>(Fl::event_x())-static_cast<double>(m_DisplayExtent.GetSize()[0]/2))/m_OpenGlIsotropicZoom);
+	      m_OldMousePos[1]= static_cast<long int>(static_cast<double>(m_DisplayExtent.GetSize()[1]/2)
+						      +(static_cast<double>(Fl::event_y())-static_cast<double>(m_DisplayExtent.GetSize()[1]/2))/m_OpenGlIsotropicZoom);
+  	      m_Drag=true;
+	      m_DragEventCounter=0;
+	      
+	      if(m_SubWindowRegion.IsInside(m_OldMousePos))
+		{
+		  m_SubWindowMove = true;
+		}
+	      else
+		{
+		  m_OldViewedRegionCenter = m_ViewedRegionCenter;
+		}
+	    }
+ 	  return 1;  
+ 	}
 
       case FL_DRAG:
-      {
-        m_Drag=true;
-
-        int x =static_cast<int>(static_cast<double>(m_DisplayExtent.GetSize()[0]/2)
-            +(Fl::event_x()-static_cast<double>(m_DisplayExtent.GetSize()[0]/2))/m_OpenGlIsotropicZoom);
-        int y = static_cast<long int>(static_cast<double>(m_DisplayExtent.GetSize()[1]/2)
-            +(Fl::event_y()-static_cast<double>(m_DisplayExtent.GetSize()[1]/2))/m_OpenGlIsotropicZoom);
-        if(Fl::event_button()==FL_MIDDLE_MOUSE)
-        {
-          if(!m_SubWindowMode)
-            m_SubWindowMode = true;
-          IndexType newIndex;
-          SizeType newSize;
-
-          newIndex[0]=(x>m_OldMousePos[0] ? m_OldMousePos[0] : x);
-          newIndex[1]=(y>m_OldMousePos[1] ? m_OldMousePos[1] : y);
-          newSize[0]=vcl_abs(x-m_OldMousePos[0]);
-          newSize[1]=vcl_abs(y-m_OldMousePos[1]);
-          m_SubWindowRegion.SetIndex(newIndex);
-          m_SubWindowRegion.SetSize(newSize);
-          this->redraw();
-          m_DragEventCounter++;
-        }
-        else if(m_SubWindowMove)
-        {
-          IndexType index = m_SubWindowRegion.GetIndex();
-          index[0]+=(x-m_OldMousePos[0]);
-          index[1]+=(y-m_OldMousePos[1]);
-          m_SubWindowRegion.SetIndex(index);
-          m_OldMousePos[0]=x;
-          m_OldMousePos[1]=y;
-          this->redraw();
-          m_DragEventCounter++;
-        }
-
-        else
-        {
-          SpacingType spacing = m_Image->GetSpacing()*m_SpacingZoomFactor;
-          PointType origin;
-          origin[0]=static_cast<double>(m_OldViewedRegionCenter[0])
-              -static_cast<double>(this->m_DisplayExtent.GetSize()[0]/2)*spacing[0];
-          origin[1]=static_cast<double>(m_OldViewedRegionCenter[1])
-              -static_cast<double>(this->m_DisplayExtent.GetSize()[1]/2)*spacing[1];
-          PointType newCenter;
-          newCenter[0]=origin[0]
-              +static_cast<double>(m_OldMousePos[0]-x+static_cast<long>(this->m_DisplayExtent.GetSize()[0])/2)*spacing[0];
-          newCenter[1]=origin[1]
-              +static_cast<double>(m_OldMousePos[1]-y+static_cast<long>(this->m_DisplayExtent.GetSize()[1])/2)*spacing[1];
-          m_Image->TransformPhysicalPointToIndex(newCenter,m_ViewedRegionCenter);
-          this->redraw();
-          m_DragEventCounter++;
-        }
-
-        DecorationRedraw();
-        return 1;
-      }
+	{
+ 	  m_Drag=true;
+	  
+	  int x =static_cast<int>(static_cast<double>(m_DisplayExtent.GetSize()[0]/2)
+				  +(Fl::event_x()-static_cast<double>(m_DisplayExtent.GetSize()[0]/2))/m_OpenGlIsotropicZoom);
+	  int y = static_cast<long int>(static_cast<double>(m_DisplayExtent.GetSize()[1]/2)
+					+(Fl::event_y()-static_cast<double>(m_DisplayExtent.GetSize()[1]/2))/m_OpenGlIsotropicZoom);
+	  if(Fl::event_button()==FL_MIDDLE_MOUSE)
+	    {
+	      if(!m_SubWindowMode)
+		m_SubWindowMode = true;
+	      IndexType newIndex;
+	      SizeType newSize;
+
+	      newIndex[0]=(x>m_OldMousePos[0] ? m_OldMousePos[0] : x);
+	      newIndex[1]=(y>m_OldMousePos[1] ? m_OldMousePos[1] : y);
+	      newSize[0]=vcl_abs(x-m_OldMousePos[0]);
+	      newSize[1]=vcl_abs(y-m_OldMousePos[1]);
+	      m_SubWindowRegion.SetIndex(newIndex);
+	      m_SubWindowRegion.SetSize(newSize);
+	      this->redraw();
+	      m_DragEventCounter++;
+	    }
+	  else if(m_SubWindowMove)
+	    {
+	      IndexType index = m_SubWindowRegion.GetIndex();
+	      index[0]+=(x-m_OldMousePos[0]);
+	      index[1]+=(y-m_OldMousePos[1]);
+	      m_SubWindowRegion.SetIndex(index);
+	      m_OldMousePos[0]=x;
+	      m_OldMousePos[1]=y;
+	      this->redraw();
+	      m_DragEventCounter++;
+	    }
+	  
+	  else
+	    {
+	      SpacingType spacing = m_Image->GetSpacing()*m_SpacingZoomFactor;
+	      PointType origin;
+	      origin[0]=static_cast<double>(m_OldViewedRegionCenter[0])-static_cast<double>(this->m_DisplayExtent.GetSize()[0]/2)*spacing[0];
+	      origin[1]=static_cast<double>(m_OldViewedRegionCenter[1])-static_cast<double>(this->m_DisplayExtent.GetSize()[1]/2)*spacing[1];
+	      PointType newCenter;
+	      newCenter[0]=origin[0]+static_cast<double>(m_OldMousePos[0]-x+static_cast<long>(this->m_DisplayExtent.GetSize()[0])/2)*spacing[0];
+	      newCenter[1]=origin[1]+static_cast<double>(m_OldMousePos[1]-y+static_cast<long>(this->m_DisplayExtent.GetSize()[1])/2)*spacing[1];
+	      m_Image->TransformPhysicalPointToIndex(newCenter,m_ViewedRegionCenter);
+	      this->redraw();
+	      m_DragEventCounter++;
+	    }
+	  
+	  DecorationRedraw();
+	  return 1;
+	}
 
       case FL_RELEASE:
-  {
-    m_OldViewedRegionCenter = m_ViewedRegionCenter;
-    m_Drag=false;
-    AdditionalRedraw();
-    m_SubWindowMove = false;
-    return 1;
-  }
+	{
+	  m_OldViewedRegionCenter = m_ViewedRegionCenter;
+	  m_Drag=false;
+	  AdditionalRedraw();
+	  m_SubWindowMove = false;
+	  return 1;
+	}
       case FL_FOCUS:
-  {
-    return 1;
-  }
+	{
+	  return 1;
+	}
       case FL_UNFOCUS:
-  {
-    return 1;
-  }
+	{
+	  return 1;
+	}
       case FL_KEYDOWN:
-  {
-    if(Fl::event_key()==116) // T key
-      {
-        m_SubWindowMode = !m_SubWindowMode;
-        this->redraw();
-      }
-    return 1;
-  }
+	{
+	  if(Fl::event_key()==116) // T key
+	    {
+	      m_SubWindowMode = !m_SubWindowMode;
+	      this->redraw();
+	    }
+	  return 1;
+	}
       }
     return 0;
   }
@@ -942,7 +929,7 @@ namespace otb
   {
     if(bufferList.size()!=8 || bufferRegionList.size()!=8)
       {
-  itkExceptionMacro("Invalid number of additionnal buffers");
+	itkExceptionMacro("Invalid number of additionnal buffers");
       }
 
     if(bufferRegionList[0].GetNumberOfPixels()==0
@@ -954,17 +941,17 @@ namespace otb
        &&bufferRegionList[6].GetNumberOfPixels()==0
        &&bufferRegionList[7].GetNumberOfPixels()==0)
       {
-  return;
+	return;
       }
 
-
-    // malloc new buffer
+      
+    // malloc new buffer 
     unsigned char * newBuffer = new unsigned char[3*m_DisplayExtent.GetNumberOfPixels()];
 
     // fill the new buffer
     unsigned int indexInNewBuffer = 0;
 
-
+    
     unsigned int indexInBuffer1=0;
     unsigned int indexInBuffer2=0;
     unsigned int indexInBuffer3=0;
@@ -983,7 +970,7 @@ namespace otb
        ||bufferRegionList[2].GetIndex()[1]!=bufferRegionList[0].GetIndex()[1]
        )
       {
-  itkExceptionMacro("Additional buffers misaligned.");
+	itkExceptionMacro("Additional buffers misaligned.");
       }
 
 
@@ -991,44 +978,39 @@ namespace otb
 
     for(unsigned int j = 0;j<bufferRegionList[0].GetSize()[1];++j)
       {
-  if(bufferList[0]!=NULL)
-    {
-      for(unsigned int i = 0; i<3*bufferRegionList[0].GetSize()[0];++i)
-        {
-    newBuffer[indexInNewBuffer]=bufferList[0][indexInBuffer1];
-    ++indexInNewBuffer;
-    ++indexInBuffer1;
-        }
-    }
-  // Fill region 2
-  if(bufferList[1]!=NULL)
-    {
-      for(unsigned int i = 0; i<3*bufferRegionList[1].GetSize()[0];++i)
-        {
-    newBuffer[indexInNewBuffer]=bufferList[1][indexInBuffer2];
-    ++indexInNewBuffer;
-    ++indexInBuffer2;
-        }
-    }
-  // Fill region 3
-  if(bufferList[2]!=NULL)
-    {
-      for(unsigned int i = 0; i<3*bufferRegionList[2].GetSize()[0];++i)
-        {
-    newBuffer[indexInNewBuffer]=bufferList[2][indexInBuffer3];
-    ++indexInNewBuffer;
-    ++indexInBuffer3;
-        }
-    }
+	if(bufferList[0]!=NULL)
+	  {
+	    for(unsigned int i = 0; i<3*bufferRegionList[0].GetSize()[0];++i)
+	      {
+		newBuffer[indexInNewBuffer]=bufferList[0][indexInBuffer1];
+		++indexInNewBuffer;
+		++indexInBuffer1;
+	      }
+	  }
+	// Fill region 2
+	if(bufferList[1]!=NULL)
+	  {
+	    for(unsigned int i = 0; i<3*bufferRegionList[1].GetSize()[0];++i)
+	      {
+		newBuffer[indexInNewBuffer]=bufferList[1][indexInBuffer2];
+		++indexInNewBuffer;
+		++indexInBuffer2;
+	      }
+	  }
+	// Fill region 3
+	if(bufferList[2]!=NULL)
+	  {
+	    for(unsigned int i = 0; i<3*bufferRegionList[2].GetSize()[0];++i)
+	      {
+		newBuffer[indexInNewBuffer]=bufferList[2][indexInBuffer3];
+		++indexInNewBuffer;
+		++indexInBuffer3;
+	      }
+	  }
       }
 
     unsigned int lineOffset = static_cast<unsigned int>(-min(0L,m_BufferedRegion.GetIndex()[0]));
-    unsigned int lineOffsetEnd = static_cast<unsigned int>(
-        -min(0L,
-             static_cast<long>(m_DisplayExtent.GetSize()[0])-m_BufferedRegion.GetIndex()[0]
-                 -static_cast<long>(m_BufferedRegion.GetSize()[0])
-            )
-                                                          );
+    unsigned int lineOffsetEnd = static_cast<unsigned int>(-min(0L,static_cast<long>(m_DisplayExtent.GetSize()[0])-m_BufferedRegion.GetIndex()[0]-static_cast<long>(m_BufferedRegion.GetSize()[0])));
     unsigned int columnOffset = static_cast<unsigned int>(-min(0L,m_BufferedRegion.GetIndex()[1]));
     unsigned int offsety= columnOffset*(static_cast<int>(m_BufferedRegion.GetSize()[0]))*3;
     unsigned int offsetx = lineOffset*3;
@@ -1038,42 +1020,42 @@ namespace otb
     // For each line
     for(unsigned int j = 0;j<bufferRegionList[3].GetSize()[1];++j)
       {
-  //Fill line from region 4
-  if(bufferList[3]!=NULL)
-    {
-      for(unsigned int i = 0;i<3*bufferRegionList[3].GetSize()[0];++i)
-        {
-    newBuffer[indexInNewBuffer]=bufferList[3][indexInBuffer4];
-    ++indexInNewBuffer;
-    ++indexInBuffer4;
-        }
-    }
-  // Fill line from central region
-  if(m_OpenGlBuffer!=NULL)
-    {
-
-      indexInCentralBuffer+=offsetx;
-      for(unsigned int i = 0;i<3*bufferRegionList[1].GetSize()[0];++i)
-        {
-    newBuffer[indexInNewBuffer]=m_OpenGlBuffer[indexInCentralBuffer];
-    ++indexInNewBuffer;
-    ++indexInCentralBuffer;
-        }
-      indexInCentralBuffer+=lineOffsetEnd*3;
-    }
-  // Fill line from region 5
-  if(bufferList[4]!=NULL)
-    {
-      for(unsigned int i = 0;i<3*bufferRegionList[4].GetSize()[0];++i)
-        {
-    newBuffer[indexInNewBuffer]=bufferList[4][indexInBuffer5];
-    ++indexInNewBuffer;
-    ++indexInBuffer5;
-        }
-    }
+	//Fill line from region 4
+	if(bufferList[3]!=NULL)
+	  {
+	    for(unsigned int i = 0;i<3*bufferRegionList[3].GetSize()[0];++i)
+	      {
+		newBuffer[indexInNewBuffer]=bufferList[3][indexInBuffer4];
+		++indexInNewBuffer;
+		++indexInBuffer4;
+	      }
+	  }
+	// Fill line from central region
+	if(m_OpenGlBuffer!=NULL)
+	  {
+
+	    indexInCentralBuffer+=offsetx;	    
+	    for(unsigned int i = 0;i<3*bufferRegionList[1].GetSize()[0];++i)
+	      {
+		newBuffer[indexInNewBuffer]=m_OpenGlBuffer[indexInCentralBuffer];
+		++indexInNewBuffer;
+		++indexInCentralBuffer;
+	      }
+	    indexInCentralBuffer+=lineOffsetEnd*3;
+	  }
+	// Fill line from region 5
+	if(bufferList[4]!=NULL)
+	  {
+	    for(unsigned int i = 0;i<3*bufferRegionList[4].GetSize()[0];++i)
+	      {
+		newBuffer[indexInNewBuffer]=bufferList[4][indexInBuffer5];
+		++indexInNewBuffer;
+		++indexInBuffer5;
+	      }
+	  }
       }
 
-
+   
 
     if(bufferRegionList[5].GetSize()[1]!=bufferRegionList[6].GetSize()[1]
        ||bufferRegionList[6].GetSize()[1]!=bufferRegionList[7].GetSize()[1]
@@ -1083,7 +1065,7 @@ namespace otb
        ||bufferRegionList[7].GetIndex()[1]!=bufferRegionList[5].GetIndex()[1]
        )
       {
-  itkExceptionMacro("Additional buffers misaligned.");
+	itkExceptionMacro("Additional buffers misaligned.");
       }
 
 
@@ -1091,45 +1073,45 @@ namespace otb
 
     for(unsigned int j = 0;j<bufferRegionList[5].GetSize()[1];++j)
       {
-  if(bufferList[5]!=NULL)
-    {
-      for(unsigned int i = 0; i<3*bufferRegionList[5].GetSize()[0];++i)
-        {
-    newBuffer[indexInNewBuffer]=bufferList[5][indexInBuffer6];
-    ++indexInNewBuffer;
-    ++indexInBuffer6;
-        }
-    }
-  // Fill region 2
-  if(bufferList[6]!=NULL)
-    {
-      for(unsigned int i = 0; i<3*bufferRegionList[6].GetSize()[0];++i)
-        {
-    newBuffer[indexInNewBuffer]=bufferList[6][indexInBuffer7];
-    ++indexInNewBuffer;
-    ++indexInBuffer7;
-        }
-    }
-  // Fill region 3
-  if(bufferList[7]!=NULL)
-    {
-      for(unsigned int i = 0; i<3*bufferRegionList[7].GetSize()[0];++i)
-        {
-    newBuffer[indexInNewBuffer]=bufferList[7][indexInBuffer8];
-    ++indexInNewBuffer;
-    ++indexInBuffer8;
-        }
-    }
+	if(bufferList[5]!=NULL)
+	  {
+	    for(unsigned int i = 0; i<3*bufferRegionList[5].GetSize()[0];++i)
+	      {
+		newBuffer[indexInNewBuffer]=bufferList[5][indexInBuffer6];
+		++indexInNewBuffer;
+		++indexInBuffer6;
+	      }
+	  }
+	// Fill region 2
+	if(bufferList[6]!=NULL)
+	  {
+	    for(unsigned int i = 0; i<3*bufferRegionList[6].GetSize()[0];++i)
+	      {
+		newBuffer[indexInNewBuffer]=bufferList[6][indexInBuffer7];
+		++indexInNewBuffer;
+		++indexInBuffer7;
+	      }
+	  }
+	// Fill region 3
+	if(bufferList[7]!=NULL)
+	  {
+	    for(unsigned int i = 0; i<3*bufferRegionList[7].GetSize()[0];++i)
+	      {
+		newBuffer[indexInNewBuffer]=bufferList[7][indexInBuffer8];
+		++indexInNewBuffer;
+		++indexInBuffer8;
+	      }
+	  }
       }
 
     // Free all intermediate buffers
-    typename std::vector<unsigned char *>::iterator it;
+    typename std::vector<unsigned char *>::iterator it;    
     for(it=bufferList.begin();it!=bufferList.end();++it)
       {
-  if((*it)!=NULL)
-    {
-      delete [] (*it);
-    };
+	if((*it)!=NULL)
+	  {
+	    delete [] (*it);
+	  };
       }
 
     // update buffered region
@@ -1138,15 +1120,15 @@ namespace otb
     // delete previous buffer
     if (m_OpenGlBuffer!=NULL)
       {
-  delete [] m_OpenGlBuffer;
+	delete [] m_OpenGlBuffer;
       }
     // replace by current buffer
     m_OpenGlBuffer = newBuffer;
 
-
+    
     //std::cout<<"Buffers merged and freed"<<std::endl;
   }
-
+  
   template <class TPixel>
   void
   ImageAlternateViewer<TPixel>
@@ -1156,63 +1138,30 @@ namespace otb
     total.Start();
     if(buffer!=NULL)
     {
-  // This enable negative raster pos
+	// This enable negative raster pos
       glRasterPos3d(0,0,0);
-
+	
       double zoomOffsetX = 0;
       double zoomOffsetY = 0;
 
-      zoomOffsetX = (1-m_OpenGlIsotropicZoom)
-          *(static_cast<double>(m_DisplayExtent.GetSize()[0]/2)-static_cast<double>(region.GetIndex()[0]));
-      zoomOffsetY = (1-m_OpenGlIsotropicZoom)
-          *( static_cast<double>(m_DisplayExtent.GetSize()[1]/2)-static_cast<double>(region.GetIndex()[1]));
-
-//      double movex = static_cast<double>(region.GetIndex()[0])+zoomOffsetX;
-//      double movey = static_cast<double>(m_DisplayExtent.GetSize()[1])-static_cast<double>(region.GetIndex()[1])-zoomOffsetY;
-//       glBitmap(0,0,0,0,movex,movey,NULL);
-//       glPixelZoom(m_OpenGlIsotropicZoom,-m_OpenGlIsotropicZoom);
-//
-//
-//   // display the image
-//       glDrawPixels(region.GetSize()[0],
-//                    region.GetSize()[1],
-//                                   GL_RGB,
-//                                   GL_UNSIGNED_BYTE,
-//                                   buffer);
-//       glEnd();
-
-//       std::cout << "Region size: " << region.GetSize() << std::endl;
-//       std::cout << "DisplayExtent size: " << m_DisplayExtent.GetSize() << std::endl;
-//       std::cout << "zoomOffset: " << zoomOffsetX << " " << zoomOffsetY << std::endl;
-//       std::cout << "move: " << movex << " " << movey << std::endl;
-
-
-      glEnable(GL_TEXTURE_2D);
-      glColor4f(1.0,1.0,1.0,0.0);
-      GLuint texture;
-      glGenTextures(1, &texture);
-      glBindTexture(GL_TEXTURE_2D, texture);
-      glTexImage2D(GL_TEXTURE_2D, 0, 3, region.GetSize()[0], region.GetSize()[1], 0, GL_RGB, GL_UNSIGNED_BYTE, buffer);
-      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);  // Nearest Filtering
-      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);  // Nearest Filtering
-
-      glBindTexture (GL_TEXTURE_2D, texture);
-      glBegin (GL_QUADS);
-//       glTexCoord2f (0.0, 1.0);  glVertex3f (-movex, -movey, 0.0);
-//       glTexCoord2f (1.0, 1.0);  glVertex3f (region.GetSize()[0]-movex, -movey, 0.0);
-//       glTexCoord2f (1.0, 0.0);  glVertex3f (region.GetSize()[0]-movex, region.GetSize()[1]-movey, 0.0);
-//       glTexCoord2f (0.0, 0.0);  glVertex3f (-movex, region.GetSize()[1]-movey, 0.0);
-      glTexCoord2f (0.0, 1.0);  glVertex3f (0.0, 0.0, 0.0);
-      glTexCoord2f (1.0, 1.0);  glVertex3f (region.GetSize()[0], 0.0, 0.0);
-      glTexCoord2f (1.0, 0.0);  glVertex3f (region.GetSize()[0], region.GetSize()[1], 0.0);
-      glTexCoord2f (0.0, 0.0);  glVertex3f (0.0, region.GetSize()[1], 0.0);
-      glEnd ();
-
-      glDisable(GL_TEXTURE_2D);
-
-
-//       swap_buffers();
-//       glFlush();
+      zoomOffsetX = (1-m_OpenGlIsotropicZoom)*(static_cast<double>(m_DisplayExtent.GetSize()[0]/2)-static_cast<double>(region.GetIndex()[0]));
+      zoomOffsetY = (1-m_OpenGlIsotropicZoom)*( static_cast<double>(m_DisplayExtent.GetSize()[1]/2)-static_cast<double>(region.GetIndex()[1]));
+	
+      double movex = static_cast<double>(region.GetIndex()[0])+zoomOffsetX;
+      double movey = static_cast<double>(m_DisplayExtent.GetSize()[1])-static_cast<double>(region.GetIndex()[1])-zoomOffsetY;
+      glBitmap(0,0,0,0,movex,movey,NULL);
+      glPixelZoom(m_OpenGlIsotropicZoom,-m_OpenGlIsotropicZoom);
+
+
+	// display the image
+      glDrawPixels(region.GetSize()[0],
+                   region.GetSize()[1], 
+                                  GL_RGB,
+                                  GL_UNSIGNED_BYTE, 
+                                  buffer);
+      glEnd();
+      swap_buffers();
+      glFlush();
     }
     total.Stop();
   }
@@ -1225,19 +1174,16 @@ namespace otb
   {
     double zoomOffsetX = 0;
     double zoomOffsetY = 0;
-
-    zoomOffsetX = (1-m_OpenGlIsotropicZoom)
-        *(static_cast<double>(m_DisplayExtent.GetSize()[0]/2)-static_cast<double>(region.GetIndex()[0]));
-    zoomOffsetY = (1-m_OpenGlIsotropicZoom)
-        *( static_cast<double>(m_DisplayExtent.GetSize()[1]/2)-static_cast<double>(region.GetIndex()[1]));
+    
+    zoomOffsetX = (1-m_OpenGlIsotropicZoom)*(static_cast<double>(m_DisplayExtent.GetSize()[0]/2)-static_cast<double>(region.GetIndex()[0]));
+    zoomOffsetY = (1-m_OpenGlIsotropicZoom)*( static_cast<double>(m_DisplayExtent.GetSize()[1]/2)-static_cast<double>(region.GetIndex()[1]));
     double minx,maxx,miny,maxy;
-
+    
     minx = static_cast<double>(region.GetIndex()[0])/**m_OpenGlIsotropicZoom*/+zoomOffsetX;
     maxx = minx + static_cast<double>(region.GetSize()[0])*m_OpenGlIsotropicZoom;
-    miny = static_cast<double>(m_DisplayExtent.GetSize()[1])
-        -static_cast<double>(region.GetIndex()[1])/**m_OpenGlIsotropicZoom*/-zoomOffsetY;
+    miny = static_cast<double>(m_DisplayExtent.GetSize()[1])-static_cast<double>(region.GetIndex()[1])/**m_OpenGlIsotropicZoom*/-zoomOffsetY;
     maxy = miny-static_cast<double>(region.GetSize()[1])*m_OpenGlIsotropicZoom;
-
+    
     glEnable(GL_BLEND);
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
     glColor3f(1,0,0);
@@ -1256,15 +1202,15 @@ namespace otb
   ::ResetOpenGlContext(void)
   {
     if (!this->valid())
-    {
-      valid(1);
-      glLoadIdentity();
-      glViewport(0,0,m_DisplayExtent.GetSize()[0],m_DisplayExtent.GetSize()[1]);
-      glClearColor((float)0.0, (float)0.0, (float)0.0, (float)0.0);
-      glShadeModel(GL_SMOOTH);
-      glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
-    }
-
+      {
+	valid(1);
+ 	glLoadIdentity();
+ 	glViewport(0,0,m_DisplayExtent.GetSize()[0],m_DisplayExtent.GetSize()[1]);
+	glClearColor((float)0.0, (float)0.0, (float)0.0, (float)0.0);          
+	glShadeModel(GL_SMOOTH);
+	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+      }
+    
     glClear(GL_COLOR_BUFFER_BIT);    //this clears and paints to black
     glMatrixMode(GL_PROJECTION);
     this->ortho();
@@ -1284,29 +1230,28 @@ namespace otb
     PixelType max = 255;
     PixelType min = 0;
     if(channelIndex<m_MaxComponentValues.GetSize())
-    {
-      max = m_MaxComponentValues[channelIndex];
-    }
+      {
+	max = m_MaxComponentValues[channelIndex];
+      }
     if(channelIndex<m_MinComponentValues.GetSize())
-    {
-      min = m_MinComponentValues[channelIndex];
-    }
+      {
+	min = m_MinComponentValues[channelIndex];
+      }
     if(value>=max)
-    {
-      return 255;
-    }
+      {
+	return 255;
+      }
 
     else if(value<=min)
-    {
-      return 0;
-    }
+      {
+	return 0;
+      }
     else
-    {
-      return static_cast<unsigned char>(255.*static_cast<double>(value-min)
-            /static_cast<double>(max-min));
-    }
+      {
+	return static_cast<unsigned char>(255.*static_cast<double>(value-min)
+					  /static_cast<double>(max-min));
+      }
   }
-
   /**
    * PrintSelf Method
    */
-- 
GitLab