The following commit has been merged in the master branch:
commit 552bd78bafebb57373e6f22c700e59c40d3cc3bf
Author: Gert Wollny <[email protected]>
Date:   Fri Apr 26 14:09:11 2013 +0200

    actually apply the patches

diff --git a/addons/vtk/vtkvf.cc b/addons/vtk/vtkvf.cc
index 4fd9218..cd5d402 100644
--- a/addons/vtk/vtkvf.cc
+++ b/addons/vtk/vtkvf.cc
@@ -20,9 +20,9 @@
 
 #include <vtk/vtkvf.hh>
 
-#include <vtkStructuredGridReader.h>
-#include <vtkStructuredGridWriter.h>
-#include <vtkStructuredGrid.h>
+#include <vtkStructuredPointsReader.h>
+#include <vtkStructuredPointsWriter.h>
+#include <vtkStructuredPoints.h>
 #include <vtkSmartPointer.h>
 #include <vtkPoints.h>
 
@@ -41,9 +41,25 @@ CVtk3DVFIOPlugin::CVtk3DVFIOPlugin():
 
 }
 
+
+template <typename T> 
+C3DIOVectorfield *read_field_data(const C3DBounds& size, void *scalars) 
+{
+       cvdebug() << "VTKVF read vector data of type " <<  
__type_descr<T>::value << "\n"; 
+
+       const T *my_scalars = reinterpret_cast<const T *>(scalars); 
+       if (!my_scalars) 
+               throw create_exception<logic_error>("CVtk3DImageIOPlugin::load: 
input image scalar type bogus"); 
+       
+       C3DIOVectorfield *result = new  C3DIOVectorfield(size); 
+       copy(my_scalars, my_scalars + 3 * result->size(), &(*result)[0].x); 
+
+       return result; 
+}
+
 CVtk3DVFIOPlugin::PData CVtk3DVFIOPlugin::do_load(const string&  filename) 
const
 {
-       auto reader = vtkSmartPointer<vtkStructuredGridReader>::New(); 
+       auto reader = vtkSmartPointer<vtkStructuredPointsReader>::New(); 
        reader->SetFileName(filename.c_str()); 
        auto iovf = reader->GetOutput(); 
        iovf->Update(); 
@@ -57,54 +73,51 @@ CVtk3DVFIOPlugin::PData CVtk3DVFIOPlugin::do_load(const 
string&  filename) const
        }
 
        auto dims = iovf->GetDimensions();
+       if (dim != 3)
+               throw create_exception<invalid_argument>("3D Vtkvf load (", 
filename ,
+                                                        "): Expect 3 
dimensions but got ", dim); 
        C3DBounds size(dims[0], dims[1], dims[2]); 
+
+       int components = iovf->GetNumberOfScalarComponents(); 
+       if (components != 3) 
+               throw create_exception<invalid_argument>("3D Vtkvf load (", 
filename ,
+                                                        "): only 3D vectors 
are allowed, "
+                                                        "but got ", 
components, " component elements"); 
+
        
-       PData result(new C3DIOVectorfield(size));
-       
-       auto points = iovf->GetPoints(); 
-
-
-       if (points->GetNumberOfPoints() != size.product()) 
-               throw create_exception<invalid_argument>("Got ", 
points->GetNumberOfPoints(), 
-                                                        " vectors but require 
", size.product());
-       vtkIdType i = 0; 
-       for (auto iv = result->begin(); iv != result->end(); ++iv, ++i) {
-               double x[3]; 
-               points->GetPoint (i, x); 
-               iv->x = x[0]; 
-               iv->y = x[1]; 
-               iv->z = x[2]; 
+       auto array = iovf->GetScalarPointer(); 
+
+       C3DIOVectorfield *result_field = nullptr; 
+       switch   (iovf->GetScalarType()) {
+       case VTK_FLOAT:          result_field=read_field_data<float>(size, 
array); break; 
+       case VTK_DOUBLE:         result_field=read_field_data<double>(size, 
array); break;  
+       default:
+               throw create_exception<invalid_argument>("3D Vtkvf load (", 
filename ,"): "
+                                                        "data type ", 
iovf->GetScalarTypeAsString(), 
+                                                        "(", 
iovf->GetScalarType(), ") not supported"); 
        }
-       return result; 
+       return PData(result_field); 
 }
 
 bool CVtk3DVFIOPlugin::do_save(const string& fname, const C3DIOVectorfield& 
data) const
 {
-       int dims[3];
-       dims[0] = data.get_size().x; 
-       dims[1] = data.get_size().y; 
-       dims[2] = data.get_size().z; 
-
-       auto sgrid = vtkSmartPointer<vtkStructuredGrid>::New();
-       sgrid->SetDimensions(dims);
-
-       auto points = vtkSmartPointer<vtkPoints>::New();
-       points->Allocate(data.get_size().product());
-
-       int offset = 0; 
-       float v[3]; 
-       for (auto iv = data.begin(); iv != data.end(); ++iv, ++offset) {
-               v[0] = iv->x; 
-               v[1] = iv->y; 
-               v[2] = iv->z; 
-               points->InsertPoint(offset, v); 
-       }
-       sgrid->SetPoints(points); 
+
+       auto outfield = vtkSmartPointer<vtkStructuredPoints>::New();
+       outfield->SetOrigin(0,0,0); 
+       outfield->SetSpacing(1.0, 1.0, 1.0); 
+       outfield->SetDimensions(data.get_size().x, data.get_size().y, 
data.get_size().z); 
+
+       outfield->SetScalarType(VTK_FLOAT); 
+       outfield->SetNumberOfScalarComponents(3);
+       outfield->AllocateScalars(); 
+       
+       float *out_ptr =  
reinterpret_cast<float*>(outfield->GetScalarPointer()); 
+       copy(&data[0].x, &data[0].x + data.size() * 3, out_ptr); 
        
-       auto writer = vtkSmartPointer<vtkStructuredGridWriter>::New(); 
+       auto writer = vtkSmartPointer<vtkStructuredPointsWriter>::New(); 
        writer->SetFileName(fname.c_str()); 
        writer->SetFileTypeToBinary();
-       writer->SetInput(sgrid); 
+       writer->SetInput(outfield); 
        return writer->Write();
 }
 
diff --git a/mia/3d/filter/scale.cc b/mia/3d/filter/scale.cc
index a1180cb..6d0fe58 100644
--- a/mia/3d/filter/scale.cc
+++ b/mia/3d/filter/scale.cc
@@ -137,6 +137,8 @@ C3DScaleFilterPlugin::C3DScaleFilterPlugin():
        C3DFilterPlugin("scale"),
        m_s(0,0,0)
 {
+       add_parameter("s", new C3DBoundsParameter(m_s, 0,"target size to set 
all components at once (component 0:use input image size)"));
+
        add_parameter("sx", new CUIntParameter(m_s.x, 0,
                                              numeric_limits<unsigned 
int>::max(), false,
                                              "target size in x direction 
(0:use input image size)"));

-- 
Packaging of mia in Debian

_______________________________________________
debian-med-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit

Reply via email to