]> Creatis software - clitk.git/blobdiff - common/vvImage.cxx
Added Manual Registration Tool with updated Median Filter tool
[clitk.git] / common / vvImage.cxx
index cb73874aa2a3d815a158a62eca498f5f6380c6e8..2a47a99d6463989ff9157009aa6057f87f509b0a 100644 (file)
 #define VVIMAGE_CXX
 #include "vvImage.h"
 #include "clitkCommon.h"
-
+#include <vtkTransform.h>
 #include <vtkImageData.h>
 #include <vtkImageReslice.h>
-
 #include <cassert>
 
 //--------------------------------------------------------------------
 vvImage::vvImage() {
-    Init();
+  Init();
 }
 //--------------------------------------------------------------------
 
@@ -36,23 +35,25 @@ vvImage::vvImage() {
 void vvImage::Init() {
     mTimeSpacing = 1;
     mTimeOrigin = 0;
+    
     if (CLITK_EXPERIMENTAL)
     {
         mVtkImageReslice = vtkSmartPointer<vtkImageReslice>::New();
+       transform = vtkSmartPointer<vtkTransform>::New();  
         mVtkImageReslice->SetInterpolationModeToLinear();
         mVtkImageReslice->AutoCropOutputOn();
+       mVtkImageReslice->SetBackgroundColor(-1000,-1000,-1000,1);
+       mVtkImageReslice->SetResliceTransform(transform);
     }
 }
 //--------------------------------------------------------------------
 
-
 //--------------------------------------------------------------------
 vvImage::~vvImage() {
     Reset();
 }
 //--------------------------------------------------------------------
 
-
 //--------------------------------------------------------------------
 void vvImage::Reset() {
     if (CLITK_EXPERIMENTAL)
@@ -91,133 +92,123 @@ void vvImage::AddImage(vtkImageData* image) {
 }
 //--------------------------------------------------------------------
 
-
 //--------------------------------------------------------------------
 int vvImage::GetNumberOfSpatialDimensions() {
-  int dim=GetNumberOfDimensions();
-  if (IsTimeSequence())
-    return dim-1;
-  else
-    return dim;
+    int dim=GetNumberOfDimensions();
+    if (IsTimeSequence())
+        return dim-1;
+    else
+        return dim;
 }
 //--------------------------------------------------------------------
-
-
+//
 //--------------------------------------------------------------------
 int vvImage::GetNumberOfDimensions() const {
-  if (mVtkImages.size())
+    if (mVtkImages.size())
     {
-      int dimension = 2;
-      int extent[6];
-      mVtkImages[0]->GetWholeExtent(extent);
-      if (extent[5] - extent[4] >= 1)
-        dimension++;
-      if (mVtkImages.size() > 1)
-        dimension++;
-      return dimension;
+        int dimension = 2;
+        int extent[6];
+        mVtkImages[0]->GetWholeExtent(extent);
+        if (extent[5] - extent[4] >= 1)
+            dimension++;
+        if (mVtkImages.size() > 1)
+            dimension++;
+        return dimension;
     }
-  return 0;
+    return 0;
 }
-//--------------------------------------------------------------------
-
-
 //--------------------------------------------------------------------
 void vvImage::GetScalarRange(double* range)
 {
-  assert(mVtkImages.size());
-  double * temp = mVtkImages[0]->GetScalarRange();
-  range[0]=temp[0];range[1]=temp[1];
-  for (unsigned int i=1;i<mVtkImages.size();i++)
+    assert(mVtkImages.size());
+    double * temp = mVtkImages[0]->GetScalarRange();
+    range[0]=temp[0];range[1]=temp[1];
+    for (unsigned int i=1;i<mVtkImages.size();i++)
     {
-      temp = mVtkImages[i]->GetScalarRange();
-      if (temp[0] < range[0]) range[0]=temp[0];
-      if (temp[1] > range[1]) range[1]=temp[1];
+        temp = mVtkImages[i]->GetScalarRange();
+        if (temp[0] < range[0]) range[0]=temp[0];
+        if (temp[1] > range[1]) range[1]=temp[1];
     }
 }
-//--------------------------------------------------------------------
-
 
 //--------------------------------------------------------------------
 std::string vvImage::GetScalarTypeAsString() {
-  // WARNING VTK pixel type different from ITK Pixel type
-  std::string vtktype = mVtkImages[0]->GetScalarTypeAsString();
-  if (vtktype == "unsigned char") return "unsigned_char";
-  if (vtktype == "unsigned short") return "unsigned_short";
-  if (vtktype == "unsigned int") return "unsigned_int";
-  return vtktype;
+    return mVtkImages[0]->GetScalarTypeAsString();
 }
 //--------------------------------------------------------------------
 
-
 //--------------------------------------------------------------------
 int vvImage::GetNumberOfScalarComponents() {
-  return mVtkImages[0]->GetNumberOfScalarComponents();
+    return mVtkImages[0]->GetNumberOfScalarComponents();
 }
 //--------------------------------------------------------------------
 
-
 //--------------------------------------------------------------------
 int vvImage::GetScalarSize() {
-  return mVtkImages[0]->GetScalarSize();
+    return mVtkImages[0]->GetScalarSize();
 }
 //--------------------------------------------------------------------
 
-
 //--------------------------------------------------------------------
 std::vector<double> vvImage::GetSpacing() {
-  std::vector<double> spacing;
-  int dim = this->GetNumberOfDimensions();
-  for (int i = 0; i < dim; i++)
+    std::vector<double> spacing;
+    int dim = this->GetNumberOfDimensions();
+    for (int i = 0; i < dim; i++)
     {
+        if (i == 3)
+            spacing.push_back(1);
+        else
+            spacing.push_back(mVtkImages[0]->GetSpacing()[i]);
       if (i == 3)
         spacing.push_back(mTimeSpacing);
       else
         spacing.push_back(mVtkImages[0]->GetSpacing()[i]);
     }
-  return spacing;
+    return spacing;
 }
 //--------------------------------------------------------------------
 
-
 //--------------------------------------------------------------------
 std::vector<double> vvImage::GetOrigin() const {
-  std::vector<double> origin;
-  int dim = this->GetNumberOfDimensions();
-  for (int i = 0; i < dim; i++)
+    std::vector<double> origin;
+    int dim = this->GetNumberOfDimensions();
+    for (int i = 0; i < dim; i++)
     {
+        if (i == 3)
+            origin.push_back(0);
+        else
+            origin.push_back(mVtkImages[0]->GetOrigin()[i]);
       if (i == 3)
         origin.push_back(mTimeOrigin);
       else
         origin.push_back(mVtkImages[0]->GetOrigin()[i]);
     }
-  return origin;
+    return origin;
 }
 //--------------------------------------------------------------------
 
-
 //--------------------------------------------------------------------
 std::vector<int> vvImage::GetSize() {
-  std::vector<int> size0;
-  int dim = this->GetNumberOfDimensions();
-  for (int i = 0; i < dim; i++)
+    std::vector<int> size0;
+    int dim = this->GetNumberOfDimensions();
+    for (int i = 0; i < dim; i++)
     {
-      if (i == 3)
-        size0.push_back(mVtkImages.size());
-      else
-        size0.push_back(mVtkImages[0]->GetDimensions()[i]);
+        if (i == 3)
+            size0.push_back(mVtkImages.size());
+        else
+            size0.push_back(mVtkImages[0]->GetDimensions()[i]);
     }
-  return size0;
+    return size0;
 }
 //--------------------------------------------------------------------
 
-
 //--------------------------------------------------------------------
 unsigned long vvImage::GetActualMemorySize() {
-  unsigned long size = 0;
-  for (unsigned int i = 0; i < mVtkImages.size(); i++) {
-    size += mVtkImages[i]->GetActualMemorySize();
-  }
-  return size;
+    unsigned long size = 0;
+    for (unsigned int i = 0; i < mVtkImages.size(); i++) {
+        size += mVtkImages[i]->GetActualMemorySize();
+    }
+    return size;
 }
 //--------------------------------------------------------------------
 
@@ -251,7 +242,6 @@ bool vvImage::IsScalarTypeInteger() {
 }
 //--------------------------------------------------------------------
 
-
 //--------------------------------------------------------------------
 bool vvImage::IsScalarTypeInteger(int t) {
   if ((t == VTK_BIT) ||
@@ -269,8 +259,91 @@ bool vvImage::IsScalarTypeInteger(int t) {
     return false;
   }
 }
+
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+
+void vvImage::SetVTKImageReslice(vtkImageReslice* reslice) {
+   mVtkImageReslice=reslice;
+    
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+vtkAbstractTransform * vvImage::GetTransform()
+{
+    return mVtkImageReslice->GetResliceTransform();
+}
 //--------------------------------------------------------------------
 
+//-------------------------------------------------------------------
+void vvImage::SetRotateX(int xvalue)
+{
+    transform->PostMultiply();
+    transform->Translate(-origin[0],-origin[1],-origin[2]);
+    transform->RotateX(xvalue);
+    transform->Translate(origin[0],origin[1],origin[2]);
+     mVtkImageReslice->Update();
+}
+
+//--------------------------------------------------------------------
+
+//-------------------------------------------------------------------
+void vvImage::SetRotateY(int yvalue)
+{
+    transform->PostMultiply();
+    transform->Translate(-origin[0],-origin[1],-origin[2]);
+    transform->RotateY(yvalue);
+    transform->Translate(origin[0],origin[1],origin[2]);
+     mVtkImageReslice->Update();
+}
+//--------------------------------------------------------------------
+
+//-------------------------------------------------------------------
+void vvImage::SetRotateZ(int zvalue)
+{
+    transform->PostMultiply();
+    transform->Translate(-origin[0],-origin[1],-origin[2]);
+    transform->RotateZ(zvalue);
+    transform->Translate(origin[0],origin[1],origin[2]);
+     mVtkImageReslice->Update();
+}
+//--------------------------------------------------------------------
+
+//-------------------------------------------------------------------
+void vvImage::SetTranslationX(int xvalue)
+{ 
+    transform->Translate(xvalue,0,0);
+     mVtkImageReslice->Update();
+}
+//--------------------------------------------------------------------
+
+//-------------------------------------------------------------------
+
+void vvImage::SetTranslationY(int yvalue)
+{ 
+    transform->Translate(0,yvalue,0);
+     mVtkImageReslice->Update();
+}
+//--------------------------------------------------------------------
+
+//-------------------------------------------------------------------
+void vvImage::SetTranslationZ(int zvalue)
+{ 
+    transform->Translate(0,0,zvalue);
+     mVtkImageReslice->Update();
+}
+//-------------------------------------------------------------------
+
+//-------------------------------------------------------------------
+void vvImage::SetOrigin(double value[3])
+{  
+  origin=new double[mVtkImageReslice->GetOutputDimensionality()];
+  origin[0]=value[0];
+  origin[1]=value[1];
+  origin[2]=value[2];
+}
 
 //--------------------------------------------------------------------
 void vvImage::SetTransform(vtkAbstractTransform  *transform)