]> Creatis software - creaRigidRegistration.git/blobdiff - lib/Surface.cxx
Added template methods
[creaRigidRegistration.git] / lib / Surface.cxx
index ac7467d562f2faddfafbe623be3dfa245005edc7..08993a91925fc4959d37d82edd5c8549602f4154 100644 (file)
@@ -1,14 +1,12 @@
 #include "vtkImageData.h"
 #include "vtkImageCast.h"
 #include "vtkActor.h"
-#include "vtkPoints.h"
 #include "vtkPolyDataMapper.h"
 #include "vtkPolyData.h"
 #include "vtkProperty.h"
 #include "vtkFloatArray.h"
 #include "vtkType.h"
 #include "vtkDataSetMapper.h"
-#include "vtkCellArray.h"
 
 #include "Surface.h"
 
@@ -76,243 +74,149 @@ void Surface::surface(vtkImageData* imageData)
        /*
                images pointers
        */
-       vtkPoints* surfacePoints = vtkPoints::New();
-       vtkCellArray* surfaceCells = vtkCellArray::New();
-       int counter=0;
-
+       surfacePoints = vtkPoints::New();
+       surfaceCells = vtkCellArray::New();
+       
        if(imageType == VTK_CHAR)
        {
                // pointers to get into the image
-       char* dataImagePointer=NULL;
-       
-       // we start where the  image starts
-       dataImagePointer=(char*)imageData->GetScalarPointer(0,0,0);     
-       
-       /*
-        Image Size
-       */
-       int ext[6];
-       imageData->GetExtent(ext);
-       int sx,sy,sz;
-       sx=ext[1]-ext[0]+1;
-       sy=ext[3]-ext[2]+1;
-       sz=ext[5]-ext[4]+1;
+               char* dataImagePointer=NULL;
+               
+               char max = VTK_CHAR_MAX;
 
-       //-----------------
-       //A3
-       //-----------------
-       //walking in the image
-       int i=0,j=0,k=0;
-       double sum1=0,sum2=0,sum3=0,sum4=0;     
-       for(i=0;i<sx;i++)
+               surfaceByType(dataImagePointer, imageData, max);
+       }               
+       else if(imageType == VTK_SIGNED_CHAR)
        {
-               for(j=0;j<sy;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               
-                               // we get the pointer to the position (i,j,k)y that way we can get the position of the point in the surface
-                               dataImagePointer=(char*)imageData->GetScalarPointer(i,j,k);                             
-
-                               sum1=(int)(dataImagePointer[0]) + (int)(dataImagePointer[1]) + (int)(dataImagePointer[2]);
-                               sum1=sum1/(3*VTK_CHAR_MAX);                             
+               // pointers to get into the image
+               signed char* dataImagePointer=NULL;
 
-                               surfacePoints->InsertPoint(counter, i, j, sum1*height);                         
+               signed char max = VTK_SIGNED_CHAR_MAX;
 
-                               counter ++;
-                       }
-               }
+               surfaceByType(dataImagePointer, imageData, max);        
        }
-
-       //This cycle creates the cells of the surface
-       int n =0;       
-       for(i=0;i<sx-1;i++)
+       else if(imageType == VTK_UNSIGNED_CHAR)
        {
-               for(j=0;j<sy-1;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+1);
-                               surfaceCells->InsertCellPoint(n+sy+1);
+               // pointers to get into the image
+               unsigned char* dataImagePointer=NULL;
 
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-                               surfaceCells->InsertCellPoint(n+sy);
+               unsigned char max = VTK_UNSIGNED_CHAR_MAX;
 
-                               if(j<sy-2)
-                               {
-                                       n++;
-                               }
-                               else
-                               {
-                                       n=n+2;
-                               }
-                               
-                       }
-               }
-       }               
+               surfaceByType(dataImagePointer, imageData, max);        
        }
-       else if(imageType == VTK_SIGNED_CHAR)
-       {
-                       // pointers to get into the image
-       signed char* dataImagePointer=NULL;
-       
-       // we start where the  image starts
-       dataImagePointer=(signed char*)imageData->GetScalarPointer(0,0,0);      
-       
-       /*
-        Image Size
-       */
-       int ext[6];
-       imageData->GetExtent(ext);
-       int sx,sy,sz;
-       sx=ext[1]-ext[0]+1;
-       sy=ext[3]-ext[2]+1;
-       sz=ext[5]-ext[4]+1;
-
-       //-----------------
-       //A3
-       //-----------------
-       //walking in the image
-       int i=0,j=0,k=0;
-       double sum1=0,sum2=0,sum3=0,sum4=0;     
-       for(i=0;i<sx;i++)
+       else if(imageType == VTK_SHORT)
        {
-               for(j=0;j<sy;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               
-                               // we get the pointer to the position (i,j,k)y that way we can get the position of the point in the surface
-                               dataImagePointer=(signed char*)imageData->GetScalarPointer(i,j,k);                              
-
-                               sum1=(int)(dataImagePointer[0]) + (int)(dataImagePointer[1]) + (int)(dataImagePointer[2]);
-                               sum1=sum1/(3*VTK_SIGNED_CHAR_MAX);                              
+               // pointers to get into the image
+               short* dataImagePointer=NULL;
 
-                               surfacePoints->InsertPoint(counter, i, j, sum1*height);                         
+               short max = VTK_SHORT_MAX;
 
-                               counter ++;
-                       }
-               }
+               surfaceByType(dataImagePointer, imageData, max);        
        }
-
-       //This cycle creates the cells of the surface
-       int n =0;       
-       for(i=0;i<sx-1;i++)
+       else if(imageType == VTK_UNSIGNED_SHORT)
        {
-               for(j=0;j<sy-1;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+1);
-                               surfaceCells->InsertCellPoint(n+sy+1);
+               // pointers to get into the image
+               unsigned short* dataImagePointer=NULL;
 
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-                               surfaceCells->InsertCellPoint(n+sy);
+               unsigned short max = VTK_UNSIGNED_SHORT_MAX;
 
-                               if(j<sy-2)
-                               {
-                                       n++;
-                               }
-                               else
-                               {
-                                       n=n+2;
-                               }
-                               
-                       }
-               }
+               surfaceByType(dataImagePointer, imageData, max);        
        }
+       else if(imageType == VTK_INT)
+       {
+               // pointers to get into the image
+               int* dataImagePointer=NULL;
+               
+               int max = VTK_INT_MAX;
 
+               surfaceByType(dataImagePointer, imageData, max);
        }
-       else if(imageType == VTK_UNSIGNED_CHAR)
+       else if(imageType == VTK_UNSIGNED_INT)
        {
                // pointers to get into the image
-       unsigned char* dataImagePointer=NULL;
-       
-       // we start where the  image starts
-       dataImagePointer=(unsigned char*)imageData->GetScalarPointer(0,0,0);    
-       
-       /*
-        Image Size
-       */
-       int ext[6];
-       imageData->GetExtent(ext);
-       int sx,sy,sz;
-       sx=ext[1]-ext[0]+1;
-       sy=ext[3]-ext[2]+1;
-       sz=ext[5]-ext[4]+1;
+               unsigned int* dataImagePointer=NULL;
+               
+               unsigned int max = VTK_UNSIGNED_INT_MAX;
 
-       //-----------------
-       //A3
-       //-----------------
-       //walking in the image
-       int i=0,j=0,k=0;
-       double sum1=0,sum2=0,sum3=0,sum4=0;     
-       for(i=0;i<sx;i++)
+               surfaceByType(dataImagePointer, imageData, max);
+       }
+       else if(imageType == VTK_LONG)
        {
-               for(j=0;j<sy;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               
-                               // we get the pointer to the position (i,j,k)y that way we can get the position of the point in the surface
-                               dataImagePointer=(unsigned char*)imageData->GetScalarPointer(i,j,k);                            
+               // pointers to get into the image
+               long* dataImagePointer=NULL;
+               
+               long max = VTK_LONG_MAX;
 
-                               sum1=(int)(dataImagePointer[0]) + (int)(dataImagePointer[1]) + (int)(dataImagePointer[2]);
-                               sum1=sum1/(3*VTK_UNSIGNED_CHAR_MAX);                            
+               surfaceByType(dataImagePointer, imageData, max);
+       }
+       else if(imageType == VTK_UNSIGNED_LONG)
+       {
+               // pointers to get into the image
+               unsigned long* dataImagePointer=NULL;
 
-                               surfacePoints->InsertPoint(counter, i, j, sum1*height);                         
+               unsigned long max = VTK_UNSIGNED_LONG_MAX;
 
-                               counter ++;
-                       }
-               }
+               surfaceByType(dataImagePointer, imageData, max);        
        }
+       else if(imageType == VTK_FLOAT)
+       {               
+               // pointers to get into the image
+               float* dataImagePointer=NULL;
 
-       //This cycle creates the cells of the surface
-       int n =0;       
-       for(i=0;i<sx-1;i++)
+               float max = VTK_FLOAT_MAX;
+
+               surfaceByType(dataImagePointer, imageData, max);        
+       }
+       else if(imageType == VTK_DOUBLE)
        {
-               for(j=0;j<sy-1;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+1);
-                               surfaceCells->InsertCellPoint(n+sy+1);
+               // pointers to get into the image
+               double* dataImagePointer=NULL;
 
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-                               surfaceCells->InsertCellPoint(n+sy);
+               double max = VTK_DOUBLE_MAX;
 
-                               if(j<sy-2)
-                               {
-                                       n++;
-                               }
-                               else
-                               {
-                                       n=n+2;
-                               }
-                               
-                       }
-               }
+               surfaceByType(dataImagePointer, imageData, max);
        }
+
+       vtkPolyData* surfaceData = vtkPolyData::New();
+       surfaceData->SetPolys(surfaceCells);
+       surfaceData->SetPoints(surfacePoints);
+       surfaceData->Update();
+
+       vtkPolyDataMapper* surfaceMapper = vtkPolyDataMapper::New();
+       surfaceMapper->SetInput(surfaceData);
+       surfaceMapper->Update();
+
+    surfaceResult->SetMapper(surfaceMapper);
+       surfaceResult->GetProperty()->SetOpacity(1.0);
+
+       if (color == "RED")
+       {
+               surfaceResult->GetProperty()->SetColor(1,0,0);
        }
-       else if(imageType == VTK_SHORT)
+       else if (color == "BLUE")
+       {
+               surfaceResult->GetProperty()->SetColor(0,0,1);
+       }
+       else if (color == "GREEN")
+       {
+               surfaceResult->GetProperty()->SetColor(0,1,0);
+       }
+       else
        {
-                       // pointers to get into the image
-       short* dataImagePointer=NULL;
+               surfaceResult->GetProperty()->SetColor(1,1,1);
+       }
+}
+
+/*
+Template for constructing the surface by image type
+*/
+template <class T>
+void Surface::surfaceByType(T* dataImagePointer, vtkImageData* imageData, T max)
+{
+       int counter=0;
        
        // we start where the  image starts
-       dataImagePointer=(short*)imageData->GetScalarPointer(0,0,0);    
+       dataImagePointer=(T*)imageData->GetScalarPointer(0,0,0);        
        
        /*
         Image Size
@@ -338,10 +242,10 @@ void Surface::surface(vtkImageData* imageData)
                        {
                                
                                // we get the pointer to the position (i,j,k)y that way we can get the position of the point in the surface
-                               dataImagePointer=(short*)imageData->GetScalarPointer(i,j,k);                            
+                               dataImagePointer=(T*)imageData->GetScalarPointer(i,j,k);                                
 
-                               sum1=(int)(dataImagePointer[0]) + (int)(dataImagePointer[1]) + (int)(dataImagePointer[2]);
-                               sum1=sum1/(3*VTK_SHORT_MAX);                            
+                               sum1=(T)(dataImagePointer[0]) + (T)(dataImagePointer[1]) + (T)(dataImagePointer[2]);
+                               sum1=sum1/(3*max);                              
 
                                surfacePoints->InsertPoint(counter, i, j, sum1*height);                         
 
@@ -380,571 +284,8 @@ void Surface::surface(vtkImageData* imageData)
                        }
                }
        }
+}
 
-       }
-       else if(imageType == VTK_UNSIGNED_SHORT)
-       {
-                       // pointers to get into the image
-       unsigned short* dataImagePointer=NULL;
-       
-       // we start where the  image starts
-       dataImagePointer=(unsigned short*)imageData->GetScalarPointer(0,0,0);   
-       
-       /*
-        Image Size
-       */
-       int ext[6];
-       imageData->GetExtent(ext);
-       int sx,sy,sz;
-       sx=ext[1]-ext[0]+1;
-       sy=ext[3]-ext[2]+1;
-       sz=ext[5]-ext[4]+1;
-
-       //-----------------
-       //A3
-       //-----------------
-       //walking in the image
-       int i=0,j=0,k=0;
-       double sum1=0,sum2=0,sum3=0,sum4=0;     
-       for(i=0;i<sx;i++)
-       {
-               for(j=0;j<sy;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               
-                               // we get the pointer to the position (i,j,k)y that way we can get the position of the point in the surface
-                               dataImagePointer=(unsigned short*)imageData->GetScalarPointer(i,j,k);                           
-
-                               sum1=(int)(dataImagePointer[0]) + (int)(dataImagePointer[1]) + (int)(dataImagePointer[2]);
-                               sum1=sum1/(3*VTK_UNSIGNED_SHORT_MAX);                           
-
-                               surfacePoints->InsertPoint(counter, i, j, sum1*height);                         
-
-                               counter ++;
-                       }
-               }
-       }
-
-       //This cycle creates the cells of the surface
-       int n =0;       
-       for(i=0;i<sx-1;i++)
-       {
-               for(j=0;j<sy-1;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+1);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-                               surfaceCells->InsertCellPoint(n+sy);
-
-                               if(j<sy-2)
-                               {
-                                       n++;
-                               }
-                               else
-                               {
-                                       n=n+2;
-                               }
-                               
-                       }
-               }
-       }
-
-       }
-       else if(imageType == VTK_INT)
-       {
-                       // pointers to get into the image
-       int* dataImagePointer=NULL;
-       
-       // we start where the  image starts
-       dataImagePointer=(int*)imageData->GetScalarPointer(0,0,0);      
-       
-       /*
-        Image Size
-       */
-       int ext[6];
-       imageData->GetExtent(ext);
-       int sx,sy,sz;
-       sx=ext[1]-ext[0]+1;
-       sy=ext[3]-ext[2]+1;
-       sz=ext[5]-ext[4]+1;
-
-       //-----------------
-       //A3
-       //-----------------
-       //walking in the image
-       int i=0,j=0,k=0;
-       double sum1=0,sum2=0,sum3=0,sum4=0;     
-       for(i=0;i<sx;i++)
-       {
-               for(j=0;j<sy;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               
-                               // we get the pointer to the position (i,j,k)y that way we can get the position of the point in the surface
-                               dataImagePointer=(int*)imageData->GetScalarPointer(i,j,k);                              
-
-                               sum1=(int)(dataImagePointer[0]) + (int)(dataImagePointer[1]) + (int)(dataImagePointer[2]);
-                               sum1=sum1/(3*VTK_INT_MAX);                              
-
-                               surfacePoints->InsertPoint(counter, i, j, sum1*height);                         
-
-                               counter ++;
-                       }
-               }
-       }
-
-       //This cycle creates the cells of the surface
-       int n =0;       
-       for(i=0;i<sx-1;i++)
-       {
-               for(j=0;j<sy-1;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+1);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-                               surfaceCells->InsertCellPoint(n+sy);
-
-                               if(j<sy-2)
-                               {
-                                       n++;
-                               }
-                               else
-                               {
-                                       n=n+2;
-                               }
-                               
-                       }
-               }
-       }
-
-       }
-       else if(imageType == VTK_UNSIGNED_INT)
-       {
-                       // pointers to get into the image
-       unsigned int* dataImagePointer=NULL;
-       
-       // we start where the  image starts
-       dataImagePointer=(unsigned int*)imageData->GetScalarPointer(0,0,0);     
-       
-       /*
-        Image Size
-       */
-       int ext[6];
-       imageData->GetExtent(ext);
-       int sx,sy,sz;
-       sx=ext[1]-ext[0]+1;
-       sy=ext[3]-ext[2]+1;
-       sz=ext[5]-ext[4]+1;
-
-       //-----------------
-       //A3
-       //-----------------
-       //walking in the image
-       int i=0,j=0,k=0;
-       double sum1=0,sum2=0,sum3=0,sum4=0;     
-       for(i=0;i<sx;i++)
-       {
-               for(j=0;j<sy;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               
-                               // we get the pointer to the position (i,j,k)y that way we can get the position of the point in the surface
-                               dataImagePointer=(unsigned int*)imageData->GetScalarPointer(i,j,k);                             
-
-                               sum1=(int)(dataImagePointer[0]) + (int)(dataImagePointer[1]) + (int)(dataImagePointer[2]);
-                               sum1=sum1/(3*VTK_UNSIGNED_INT_MAX);                             
-
-                               surfacePoints->InsertPoint(counter, i, j, sum1*height);                         
-
-                               counter ++;
-                       }
-               }
-       }
-
-       //This cycle creates the cells of the surface
-       int n =0;       
-       for(i=0;i<sx-1;i++)
-       {
-               for(j=0;j<sy-1;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+1);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-                               surfaceCells->InsertCellPoint(n+sy);
-
-                               if(j<sy-2)
-                               {
-                                       n++;
-                               }
-                               else
-                               {
-                                       n=n+2;
-                               }
-                               
-                       }
-               }
-       }
-
-       }
-       else if(imageType == VTK_LONG)
-       {
-                       // pointers to get into the image
-       long* dataImagePointer=NULL;
-       
-       // we start where the  image starts
-       dataImagePointer=(long*)imageData->GetScalarPointer(0,0,0);     
-       
-       /*
-        Image Size
-       */
-       int ext[6];
-       imageData->GetExtent(ext);
-       int sx,sy,sz;
-       sx=ext[1]-ext[0]+1;
-       sy=ext[3]-ext[2]+1;
-       sz=ext[5]-ext[4]+1;
-
-       //-----------------
-       //A3
-       //-----------------
-       //walking in the image
-       int i=0,j=0,k=0;
-       double sum1=0,sum2=0,sum3=0,sum4=0;     
-       for(i=0;i<sx;i++)
-       {
-               for(j=0;j<sy;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               
-                               // we get the pointer to the position (i,j,k)y that way we can get the position of the point in the surface
-                               dataImagePointer=(long*)imageData->GetScalarPointer(i,j,k);                             
-
-                               sum1=(int)(dataImagePointer[0]) + (int)(dataImagePointer[1]) + (int)(dataImagePointer[2]);
-                               sum1=sum1/(3*VTK_LONG_MAX);                             
-
-                               surfacePoints->InsertPoint(counter, i, j, sum1*height);                         
-
-                               counter ++;
-                       }
-               }
-       }
-
-       //This cycle creates the cells of the surface
-       int n =0;       
-       for(i=0;i<sx-1;i++)
-       {
-               for(j=0;j<sy-1;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+1);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-                               surfaceCells->InsertCellPoint(n+sy);
-
-                               if(j<sy-2)
-                               {
-                                       n++;
-                               }
-                               else
-                               {
-                                       n=n+2;
-                               }
-                               
-                       }
-               }
-       }
-
-       }
-       else if(imageType == VTK_UNSIGNED_LONG)
-       {
-                       // pointers to get into the image
-       unsigned long* dataImagePointer=NULL;
-       
-       // we start where the  image starts
-       dataImagePointer=(unsigned long*)imageData->GetScalarPointer(0,0,0);    
-       
-       /*
-        Image Size
-       */
-       int ext[6];
-       imageData->GetExtent(ext);
-       int sx,sy,sz;
-       sx=ext[1]-ext[0]+1;
-       sy=ext[3]-ext[2]+1;
-       sz=ext[5]-ext[4]+1;
-
-       //-----------------
-       //A3
-       //-----------------
-       //walking in the image
-       int i=0,j=0,k=0;
-       double sum1=0,sum2=0,sum3=0,sum4=0;     
-       for(i=0;i<sx;i++)
-       {
-               for(j=0;j<sy;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               
-                               // we get the pointer to the position (i,j,k)y that way we can get the position of the point in the surface
-                               dataImagePointer=(unsigned long*)imageData->GetScalarPointer(i,j,k);                            
-
-                               sum1=(int)(dataImagePointer[0]) + (int)(dataImagePointer[1]) + (int)(dataImagePointer[2]);
-                               sum1=sum1/(3*VTK_UNSIGNED_LONG_MAX);                            
-
-                               surfacePoints->InsertPoint(counter, i, j, sum1*height);                         
-
-                               counter ++;
-                       }
-               }
-       }
-
-       //This cycle creates the cells of the surface
-       int n =0;       
-       for(i=0;i<sx-1;i++)
-       {
-               for(j=0;j<sy-1;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+1);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-                               surfaceCells->InsertCellPoint(n+sy);
-
-                               if(j<sy-2)
-                               {
-                                       n++;
-                               }
-                               else
-                               {
-                                       n=n+2;
-                               }
-                               
-                       }
-               }
-       }
-
-       }
-       else if(imageType == VTK_FLOAT)
-       {               
-                       // pointers to get into the image
-       float* dataImagePointer=NULL;
-       
-       // we start where the  image starts
-       dataImagePointer=(float*)imageData->GetScalarPointer(0,0,0);    
-       
-       /*
-        Image Size
-       */
-       int ext[6];
-       imageData->GetExtent(ext);
-       int sx,sy,sz;
-       sx=ext[1]-ext[0]+1;
-       sy=ext[3]-ext[2]+1;
-       sz=ext[5]-ext[4]+1;
-
-       //-----------------
-       //A3
-       //-----------------
-       //walking in the image
-       int i=0,j=0,k=0;
-       double sum1=0,sum2=0,sum3=0,sum4=0;     
-       for(i=0;i<sx;i++)
-       {
-               for(j=0;j<sy;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               
-                               // we get the pointer to the position (i,j,k)y that way we can get the position of the point in the surface
-                               dataImagePointer=(float*)imageData->GetScalarPointer(i,j,k);                            
-
-                               sum1=(int)(dataImagePointer[0]) + (int)(dataImagePointer[1]) + (int)(dataImagePointer[2]);
-                               sum1=sum1/(3*VTK_FLOAT_MAX);                            
-
-                               surfacePoints->InsertPoint(counter, i, j, sum1*height);                         
-
-                               counter ++;
-                       }
-               }
-       }
-
-       //This cycle creates the cells of the surface
-       int n =0;       
-       for(i=0;i<sx-1;i++)
-       {
-               for(j=0;j<sy-1;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+1);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-                               surfaceCells->InsertCellPoint(n+sy);
-
-                               if(j<sy-2)
-                               {
-                                       n++;
-                               }
-                               else
-                               {
-                                       n=n+2;
-                               }
-                               
-                       }
-               }
-       }
-
-       }
-       else if(imageType == VTK_DOUBLE)
-       {
-               std::cout << "Got inside Double" << std::endl;
-                       // pointers to get into the image
-       double* dataImagePointer=NULL;
-       
-       // we start where the  image starts
-       dataImagePointer=(double*)imageData->GetScalarPointer(0,0,0);   
-       
-       /*
-        Image Size
-       */
-       int ext[6];
-       imageData->GetExtent(ext);
-       int sx,sy,sz;
-       sx=ext[1]-ext[0]+1;
-       sy=ext[3]-ext[2]+1;
-       sz=ext[5]-ext[4]+1;
-
-       //-----------------
-       //A3
-       //-----------------
-       //walking in the image
-       int i=0,j=0,k=0;
-       double sum1=0,sum2=0,sum3=0,sum4=0;     
-       for(i=0;i<sx;i++)
-       {
-               for(j=0;j<sy;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               
-                               // we get the pointer to the position (i,j,k)y that way we can get the position of the point in the surface
-                               dataImagePointer=(double*)imageData->GetScalarPointer(i,j,k);                           
-
-                               sum1=(int)(dataImagePointer[0]) + (int)(dataImagePointer[1]) + (int)(dataImagePointer[2]);
-                               sum1=sum1/(3*VTK_DOUBLE_MAX);                           
-
-                               surfacePoints->InsertPoint(counter, i, j, sum1*height);                         
-
-                               counter ++;
-                       }
-               }
-       }
-
-       //This cycle creates the cells of the surface
-       int n =0;       
-       for(i=0;i<sx-1;i++)
-       {
-               for(j=0;j<sy-1;j++)
-               {
-                       for(k=0;k<sz;k++)
-                       {
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+1);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-
-                               surfaceCells->InsertNextCell(3);
-                               surfaceCells->InsertCellPoint(n);
-                               surfaceCells->InsertCellPoint(n+sy+1);
-                               surfaceCells->InsertCellPoint(n+sy);
-
-                               if(j<sy-2)
-                               {
-                                       n++;
-                               }
-                               else
-                               {
-                                       n=n+2;
-                               }
-                               
-                       }
-               }
-       }
-
-       }       
-
-       vtkPolyData* surfaceData = vtkPolyData::New();
-       surfaceData->SetPolys(surfaceCells);
-       surfaceData->SetPoints(surfacePoints);
-       surfaceData->Update();
-
-       vtkPolyDataMapper* surfaceMapper = vtkPolyDataMapper::New();
-       surfaceMapper->SetInput(surfaceData);
-       surfaceMapper->Update();
-
-    surfaceResult->SetMapper(surfaceMapper);
-       surfaceResult->GetProperty()->SetOpacity(1.0);
-
-       if (color == "RED")
-       {
-               surfaceResult->GetProperty()->SetColor(1,0,0);
-       }
-       else if (color == "BLUE")
-       {
-               surfaceResult->GetProperty()->SetColor(0,0,1);
-       }
-       else if (color == "GREEN")
-       {
-               surfaceResult->GetProperty()->SetColor(0,1,0);
-       }
-       else
-       {
-               surfaceResult->GetProperty()->SetColor(1,1,1);
-       }
-}
 /*
 Returns the filtered image
 */