]> Creatis software - clitk.git/blobdiff - common/vvImage.cxx
- add (fake) icon
[clitk.git] / common / vvImage.cxx
index ae5c5a645ca5c842524be2c8b03c617485254571..2a47a99d6463989ff9157009aa6057f87f509b0a 100644 (file)
@@ -1,76 +1,94 @@
-#ifndef VVIMAGE_CXX
-#define VVIMAGE_CXX
-
-/*-------------------------------------------------------------------------
-
-Program:   vv
-Language:  C++
-Author :   Pierre Seroul (pierre.seroul@gmail.com)
-
-Copyright (C) 2008
-Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
-CREATIS-LRMN http://www.creatis.insa-lyon.fr
+/*=========================================================================
+  Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
 
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, version 3 of the License.
+  Authors belong to: 
+  - University of LYON              http://www.universite-lyon.fr/
+  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+  This software is distributed WITHOUT ANY WARRANTY; without even
+  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+  PURPOSE.  See the copyright notices for more information.
 
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
--------------------------------------------------------------------------*/
+  It is distributed under dual licence
 
+  - BSD        See included LICENSE.txt file
+  - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+======================================================================-====*/
+#ifndef VVIMAGE_CXX
+#define VVIMAGE_CXX
 #include "vvImage.h"
-#include "vtkImageData.h"
 #include "clitkCommon.h"
+#include <vtkTransform.h>
+#include <vtkImageData.h>
+#include <vtkImageReslice.h>
 #include <cassert>
 
 //--------------------------------------------------------------------
 vvImage::vvImage() {
-    mVtkImages.resize(0);
+  Init();
 }
 //--------------------------------------------------------------------
 
+
 //--------------------------------------------------------------------
-vvImage::~vvImage() {
-    for (unsigned int i = 0; i < mVtkImages.size(); i++) {
-        if (mVtkImages[i] != NULL)
-            mVtkImages[i]->Delete();
+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);
     }
 }
 //--------------------------------------------------------------------
 
 //--------------------------------------------------------------------
-void vvImage::SetImage(std::vector<vtkImageData*> images) {
-    for (unsigned int i = 0; i < mVtkImages.size(); i++) {
-        if (mVtkImages[i] != NULL)
-            mVtkImages[i]->Delete();
+vvImage::~vvImage() {
+    Reset();
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+void vvImage::Reset() {
+    if (CLITK_EXPERIMENTAL)
+    {
+        for (unsigned int i = 0; i < mVtkImages.size(); i++)
+            mVtkImages[i] = (vtkImageData*)mVtkImageReslice->GetInput(i);
+        mVtkImageReslice->RemoveAllInputs();
     }
+    for (unsigned int i = 0; i < mVtkImages.size(); i++)
+        mVtkImages[i]->Delete();
     mVtkImages.resize(0);
-    for (unsigned int i = 0; i < images.size(); i++) {
-        mVtkImages.push_back(images[i]);
-    }
+    Init();
 }
 //--------------------------------------------------------------------
 
+
 //--------------------------------------------------------------------
-void vvImage::AddImage(vtkImageData* image) {
-    mVtkImages.push_back(image);
+void vvImage::SetImage(std::vector< vtkImageData* > images) {
+    Reset();
+    for (unsigned int i = 0; i < images.size(); i++)
+        AddImage(images[i]);
 }
 //--------------------------------------------------------------------
 
+
 //--------------------------------------------------------------------
-void vvImage::Init() {
-    for (unsigned int i = 0; i < mVtkImages.size(); i++) {
-        if (mVtkImages[i] != NULL)
-            mVtkImages[i]->Delete();
+void vvImage::AddImage(vtkImageData* image) {
+    if (CLITK_EXPERIMENTAL)
+    {
+        mVtkImageReslice->SetInput(mVtkImages.size(), image);
+        mVtkImageReslice->Update();
+        mVtkImages.push_back( mVtkImageReslice->GetOutput( mVtkImages.size() ) );
     }
-    mVtkImages.resize(0);
+    else
+        mVtkImages.push_back(image);
 }
 //--------------------------------------------------------------------
 
@@ -141,6 +159,10 @@ std::vector<double> vvImage::GetSpacing() {
             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;
 }
@@ -156,6 +178,10 @@ std::vector<double> vvImage::GetOrigin() const {
             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;
 }
@@ -233,7 +259,98 @@ 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)
+{
+  mVtkImageReslice->SetResliceTransform(transform);
+  mVtkImageReslice->Update();
+}
+//--------------------------------------------------------------------
 
 #endif // VVIMAGE_CXX