]> Creatis software - clitk.git/blobdiff - vv/vtkVOXImageWriter.cxx
Debug RTStruct conversion with empty struc
[clitk.git] / vv / vtkVOXImageWriter.cxx
index 28e7c64382ca483f4dc29efb56922e112b061a1f..b703e96b4d5da7436ff024654d292c3936924837 100644 (file)
@@ -1,3 +1,20 @@
+/*=========================================================================
+  Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
+
+  Authors belong to:
+  - University of LYON              http://www.universite-lyon.fr/
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
+  - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
+
+  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.
+
+  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
+===========================================================================**/
 #include <string>
 #include <fstream>
 
 #include "vtkObjectFactory.h"
 #include "vtkStreamingDemandDrivenPipeline.h"
 #include "vtkDataSetAttributes.h"
-
-#include <vtkstd/string>
+#include <vtkVersion.h>
+#include <vtkAlgorithm.h>
 
 #include <sys/stat.h>
 
 //----------------------------------------------------------------------------
-vtkCxxRevisionMacro(vtkVOXImageWriter, "DummyRevision");
 vtkStandardNewMacro(vtkVOXImageWriter);
 
 //----------------------------------------------------------------------------
 vtkVOXImageWriter::vtkVOXImageWriter()
 {
-    this->FileName = 0;
-    this->FileLowerLeft = 1;
+  this->FileName = 0;
+  this->FileLowerLeft = 1;
 }
 
 //----------------------------------------------------------------------------
 vtkVOXImageWriter::~vtkVOXImageWriter()
 {
-    this->SetFileName(0);
+  this->SetFileName(0);
 }
 
 
 //----------------------------------------------------------------------------
 void vtkVOXImageWriter::Write( )
 {
-    this->SetErrorCode(vtkErrorCode::NoError);
-
-    this->GetInput()->UpdateInformation();
-
-    // Error checking
-    if (this->GetInput() == NULL )
-    {
-        vtkErrorMacro(<<"Write:Please specify an input!");
-        return;
+  this->SetErrorCode(vtkErrorCode::NoError);
+#if VTK_MAJOR_VERSION <= 5
+  this->GetInput()->UpdateInformation();
+#else
+  this->UpdateInformation();
+#endif
+  // Error checking
+  if (this->GetInput() == NULL ) {
+    vtkErrorMacro(<<"Write:Please specify an input!");
+    return;
+  }
+
+  if ( this->FileName == 0) {
+    vtkErrorMacro("Output file name not specified");
+    return;
+  }
+
+  int nDims = 3;
+#if VTK_MAJOR_VERSION <= 5
+  int * ext = this->GetInput()->GetWholeExtent();
+#else
+  int * ext = this->GetInformation()->Get(vtkDataObject::DATA_EXTENT());
+#endif
+  if ( ext[4] == ext[5] ) {
+    nDims = 2;
+    if ( ext[2] == ext[3] ) {
+      nDims = 1;
     }
-
-    if ( this->FileName == 0)
-    {
-        vtkErrorMacro("Output file name not specified");
-        return;
-    }
-
-    int nDims = 3;
-    int * ext = this->GetInput()->GetWholeExtent();
-    if ( ext[4] == ext[5] )
-    {
-        nDims = 2;
-        if ( ext[2] == ext[3] )
-        {
-            nDims = 1;
-        }
-    }
-
-    double * origin = this->GetInput()->GetOrigin();
-    double * spacingDouble = this->GetInput()->GetSpacing();
-
-    float spacing[3];
-    spacing[0] = spacingDouble[0];
-    spacing[1] = spacingDouble[1];
-    spacing[2] = spacingDouble[2];
-
-    int dimSize[3];
-    dimSize[0] = ext[1]-ext[0]+1;
-    dimSize[1] = ext[3]-ext[2]+1;
-    dimSize[2] = ext[5]-ext[4]+1;
-
-    std::string elementType;
-
-    int scalarType = this->GetInput()->GetScalarType();
-    switch ( scalarType )
-    {
-    case VTK_CHAR:
-        elementType = "schar";
-        break;
-    case VTK_UNSIGNED_CHAR:
-        elementType = "uchar";
-        break;
-    case VTK_SHORT:
-        elementType = "sshort";
-        break;
-    case VTK_UNSIGNED_SHORT:
-        elementType = "ushort";
-        break;
-    case VTK_INT:
-        elementType = "int";
-        break;
-    case VTK_UNSIGNED_INT:
-        elementType = "uint";
-        break;
-    case VTK_LONG:
-        elementType = "slong";
-        break;
-    case VTK_UNSIGNED_LONG:
-        elementType = "ulong";
-        break;
-    case VTK_FLOAT:
-        elementType = "float";
-        break;
-    case VTK_DOUBLE:
-        elementType = "double";
-        break;
-    default:
-        vtkErrorMacro("Unknown scalar type." );
-        return ;
-    }
-
-    origin[0] += ext[0] * spacing[0];
-    origin[1] += ext[2] * spacing[1];
-    origin[2] += ext[4] * spacing[2];
-
-    this->GetInput()->SetUpdateExtent(ext[0], ext[1],
-                                      ext[2], ext[3],
-                                      ext[4], ext[5]);
-    this->GetInput()->UpdateData();
-
-
-    this->SetFileDimensionality(nDims);
-
-    this->InvokeEvent(vtkCommand::StartEvent);
-    this->UpdateProgress(0.0);
-    //write here
-    std::cout << "Writing to file " << this->GetFileName() << " ..." << std::endl;
-    std::cout.flush();
-    fstream out(this->GetFileName(),ios::out|ios::binary);
-    out << "VOX v2\n# Size\n" << dimSize[0] << " " << dimSize[1] << " "
-    << dimSize[2] << std::endl << "# Spacing" << std::endl
-    << spacing[0] << " " << spacing[1] << " " << spacing[2] << std::endl
-    << "# Image dim" << std::endl << nDims << std::endl
-    << "# Image type" << std::endl << elementType << std::endl;
-    out.write((char*)this->GetInput()->GetScalarPointer(),
-              dimSize[0]*dimSize[1]*dimSize[2]*this->GetInput()->GetScalarSize());
-    out.close();
-
-    this->UpdateProgress(1.0);
-    this->InvokeEvent(vtkCommand::EndEvent);
+  }
+
+  double * origin = this->GetInput()->GetOrigin();
+  double * spacingDouble = this->GetInput()->GetSpacing();
+
+  float spacing[3];
+  spacing[0] = spacingDouble[0];
+  spacing[1] = spacingDouble[1];
+  spacing[2] = spacingDouble[2];
+
+  int dimSize[3];
+  dimSize[0] = ext[1]-ext[0]+1;
+  dimSize[1] = ext[3]-ext[2]+1;
+  dimSize[2] = ext[5]-ext[4]+1;
+
+  std::string elementType;
+
+  int scalarType = this->GetInput()->GetScalarType();
+  switch ( scalarType ) {
+  case VTK_CHAR:
+    elementType = "schar";
+    break;
+  case VTK_UNSIGNED_CHAR:
+    elementType = "uchar";
+    break;
+  case VTK_SHORT:
+    elementType = "sshort";
+    break;
+  case VTK_UNSIGNED_SHORT:
+    elementType = "ushort";
+    break;
+  case VTK_INT:
+    elementType = "int";
+    break;
+  case VTK_UNSIGNED_INT:
+    elementType = "uint";
+    break;
+  case VTK_LONG:
+    elementType = "slong";
+    break;
+  case VTK_UNSIGNED_LONG:
+    elementType = "ulong";
+    break;
+  case VTK_FLOAT:
+    elementType = "float";
+    break;
+  case VTK_DOUBLE:
+    elementType = "double";
+    break;
+  default:
+    vtkErrorMacro("Unknown scalar type." );
+    return ;
+  }
+
+  origin[0] += ext[0] * spacing[0];
+  origin[1] += ext[2] * spacing[1];
+  origin[2] += ext[4] * spacing[2];
+
+#if VTK_MAJOR_VERSION <= 5
+  this->GetInput()->SetUpdateExtent(ext[0], ext[1],
+                                    ext[2], ext[3],
+                                    ext[4], ext[5]);
+  this->GetInput()->UpdateData();
+#elif VTK_MAJOR_VERSION >= 8 || (VTK_MAJOR_VERSION == 7 && VTK_MINOR_VERSION >= 1)
+  this->UpdateExtent(ext);
+  this->Update();
+#else
+  this->SetUpdateExtent(ext);
+  this->Update();
+#endif
+  this->SetFileDimensionality(nDims);
+
+  this->InvokeEvent(vtkCommand::StartEvent);
+  this->UpdateProgress(0.0);
+  //write here
+  std::cout << "Writing to file " << this->GetFileName() << " ..." << std::endl;
+  std::cout.flush();
+  fstream out(this->GetFileName(),ios::out|ios::binary);
+  out << "VOX v2\n# Size\n" << dimSize[0] << " " << dimSize[1] << " "
+      << dimSize[2] << std::endl << "# Spacing" << std::endl
+      << spacing[0] << " " << spacing[1] << " " << spacing[2] << std::endl
+      << "# Image dim" << std::endl << nDims << std::endl
+      << "# Image type" << std::endl << elementType << std::endl;
+  out.write((char*)this->GetInput()->GetScalarPointer(),
+            dimSize[0]*dimSize[1]*dimSize[2]*this->GetInput()->GetScalarSize());
+  out.close();
+
+  this->UpdateProgress(1.0);
+  this->InvokeEvent(vtkCommand::EndEvent);
 }
 
 //----------------------------------------------------------------------------
 void vtkVOXImageWriter::PrintSelf(ostream& os, vtkIndent indent)
 {
-    this->Superclass::PrintSelf(os,indent);
-    os << indent << "FileName: " << (this->FileName==0?this->FileName:"(none)") << endl;
+  this->Superclass::PrintSelf(os,indent);
+  os << indent << "FileName: " << (this->FileName==0?this->FileName:"(none)") << endl;
 }