]> Creatis software - crea.git/blob - src/creaVtk.txx
Feature #1711 CreaDevManager application implementation
[crea.git] / src / creaVtk.txx
1 /*
2 # ---------------------------------------------------------------------
3 #
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
5 #                        pour la Santé)
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9 #
10 #  This software is governed by the CeCILL-B license under French law and 
11 #  abiding by the rules of distribution of free software. You can  use, 
12 #  modify and/ or redistribute the software under the terms of the CeCILL-B 
13 #  license as circulated by CEA, CNRS and INRIA at the following URL 
14 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
15 #  or in the file LICENSE.txt.
16 #
17 #  As a counterpart to the access to the source code and  rights to copy,
18 #  modify and redistribute granted by the license, users are provided only
19 #  with a limited warranty  and the software's author,  the holder of the
20 #  economic rights,  and the successive licensors  have only  limited
21 #  liability. 
22 #
23 #  The fact that you are presently reading this means that you have had
24 #  knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------ 
26 */                                                                         
27
28
29
30 #include <vtkDataArrayTemplate.h>
31
32 #include <vtkCharArray.h>
33 #include <vtkSignedCharArray.h>
34 #include <vtkUnsignedCharArray.h>
35 #include <vtkShortArray.h>
36 #include <vtkUnsignedShortArray.h>
37 #include <vtkIntArray.h>
38 #include <vtkUnsignedIntArray.h>
39 #include <vtkLongArray.h>
40 #include <vtkUnsignedLongArray.h>
41 #include <vtkFloatArray.h>
42 #include <vtkDoubleArray.h>
43
44 #include <vtkPointData.h>
45 #include <vtkTypeTraits.h>
46 #include <creaMessageManager.h>
47 namespace crea
48 {  
49   template <class T>
50   /*CREA_EXPORT*/ vtkImageData* NewVtkImageDataFromRaw( T* data, 
51                                                     int nx, 
52                                                     int ny,
53                                                     int nz,
54                                                     bool do_not_desalloc)
55   {
56     //    std::cout << "NV "<<nx<<" " <<ny<<" " << nz<<std::endl;
57     //    std::cout <<  vtkTypeTraits<T>::SizedName() << std::endl;
58     vtkImageData *image = vtkImageData::New();
59
60     // Shouldn't we pass NumberOfScalarComponents to deal with RGB, RGBA images as well? // JPR
61
62     image->SetNumberOfScalarComponents(1);
63
64     int vtktype = vtkTypeTraits<T>::VTKTypeID();
65     image->SetScalarType(vtktype);
66     image->SetDimensions(nx, ny ,nz);
67     image->SetSpacing(1, 1, 1);
68     image->AllocateScalars();
69     vtkDataArray* array = 0;
70     switch (vtktype)
71       {
72       case VTK_CHAR:
73         array = vtkCharArray::New(); break;
74       case VTK_SIGNED_CHAR:
75         array = vtkSignedCharArray::New(); break;
76       case VTK_UNSIGNED_CHAR:
77         array = vtkUnsignedCharArray::New(); break;
78       case VTK_SHORT:
79         array = vtkShortArray::New(); break;
80       case VTK_UNSIGNED_SHORT:
81         array = vtkUnsignedShortArray::New(); break;
82       case VTK_INT:
83         array = vtkIntArray::New(); break;      
84       case VTK_UNSIGNED_INT:
85         array = vtkUnsignedIntArray::New(); break;
86       case VTK_LONG:
87         array = vtkLongArray::New(); break;
88       case VTK_UNSIGNED_LONG:
89         array = vtkUnsignedLongArray::New(); break;
90       case VTK_FLOAT:
91         array = vtkFloatArray::New(); break;
92       case VTK_DOUBLE:
93         array = vtkDoubleArray::New(); break;
94       default:
95         creaGlobalError("NewVtkImageDataFromRaw : type "
96                   <<vtkTypeTraits<T>::SizedName()
97                   <<" non implemented");
98       }
99     vtkDataArrayTemplate<T>* tarray 
100                 = dynamic_cast<vtkDataArrayTemplate<T>*>(array);
101     array->SetNumberOfComponents( 1 );
102     size_t size = (long)nx*(long)ny*(long)nz;
103     // The last param of SetArray is set to 1 to keep the class from deleting the array 
104     // when it cleans up or reallocates memory.
105     int dndesa = 0;
106     if (do_not_desalloc)
107         dndesa = 1;
108     tarray->SetArray( data, size, dndesa );
109     image->GetPointData( )->SetScalars( tarray );
110     array->Delete( );
111     return image;
112   }
113   
114 }
115