+//--------------------------------------------------------------------
+std::vector<int> vvImage::GetSize()
+{
+ 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]);
+ }
+ return size0;
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+unsigned long vvImage::GetActualMemorySize()
+{
+ unsigned long size = 0;
+ for (unsigned int i = 0; i < mVtkImages.size(); i++) {
+ size += mVtkImages[i]->GetActualMemorySize()*1024;
+ }
+ return size;
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+bool vvImage::IsTimeSequence() const
+{
+ return mVtkImages.size()>1;
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+const std::vector<vtkImageData*>& vvImage::GetVTKImages()
+{
+ return mVtkImages;
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+vtkImageData* vvImage::GetFirstVTKImageData()
+{
+ return mVtkImages[0];
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+bool vvImage::IsScalarTypeInteger()
+{
+ assert(mVtkImages.size()> 0);
+ int t = mVtkImages[0]->GetScalarType();
+ return IsScalarTypeInteger(t);
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+bool vvImage::IsScalarTypeInteger(int t)
+{
+ if ((t == VTK_BIT) ||
+ (t == VTK_CHAR) ||
+ (t == VTK_UNSIGNED_CHAR) ||
+ (t == VTK_SHORT) ||
+ (t == VTK_UNSIGNED_SHORT) ||
+ (t == VTK_INT) ||
+ (t == VTK_UNSIGNED_INT) ||
+ (t == VTK_LONG) ||
+ (t == VTK_UNSIGNED_LONG)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+//--------------------------------------------------------------------
+
+//--------------------------------------------------------------------
+const std::vector< vtkSmartPointer<vtkTransform> >& vvImage::GetTransform()
+{
+ return this->mTransform;
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+void vvImage::InitializeTransform()
+{
+ for (int i = 0; i < mTransform.size(); i++)
+ mTransform[i]->Identity();
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+std::vector< std::vector<double> > vvImage::GetDirection()
+{
+ int dim = this->GetNumberOfDimensions();
+ vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
+ transform->Identity();
+ for (int i = 0; i < mTransform.size(); i++)
+ transform->Concatenate(this->mTransform[i]);
+
+ vtkSmartPointer<vtkMatrix4x4> matrix = transform->GetMatrix();
+ matrix->Invert();
+ std::vector<std::vector<double> > direction0;
+ for (int i = 0; i < dim; i++) {
+ if (i != 3) {
+ std::vector<double> direction1;
+ for (int j = 0; j < dim; j++) {
+ if (j != 3)
+#if VTK_MAJOR_VERSION <= 6
+ direction1.push_back((*matrix)[i][j]);
+#else
+ direction1.push_back((*matrix).GetElement(i,j));
+#endif
+ }
+ direction0.push_back(direction1);