[vtkusers] Vol.cxx example + vtkImageWriter + vtkImageReader

Mathieu Malaterre Mathieu.Malaterre at creatis.insa-lyon.fr
Wed Jul 23 11:59:57 EDT 2003


Paul,
	Is there any particular reason why you are using vtkImageReader/Writer ?

Try this instead:

<snip>
//------------------ Write Data ---------------------------
//vtkImageWriter *writer =   vtkImageWriter::New();
vtkStructuredPointsWriter *writer = vtkStructuredPointsWriter::New();
    writer->SetInput(vol);
    writer->SetFileName("voldata.vtk");
    writer->Write();

//----------------- Read Data ---------------------------
//vtkImageReader *reader  = vtkImageReader::New();
vtkStructuredPointsReader *reader = vtkStructuredPointsReader::New();
//   reader->SetDataExtent(0,25, 0, 25, 0, 25);
    reader->SetFileName("voldata.vtk");
//   reader->SetDataSpacing(sp, sp, sp);
//   reader->SetDataOrigin(-0.5,-0.5,-0.5);
<snip>

HTH
mathieu

Paul McGuinness wrote:
> Hi vtk users,
> 
> I am creating a sphere using vtkImageData and then using vtkContourFilter.
> This is the simple example Vol.cxx that can be found from the vtk website.
> The problem I am having is to write the vtkImageData using vtkImageWriter
> to files, and then reading these files back using vtkImageReader and then
> contouring the data. I don't obtain the sphere I originally got but a
> cubic shape that looks like a sponge.
> Can someone please help me understand what I am doing wrong and how I can
> fix this.
> I have attached the code below so you can see what I am talking about.
> 
> Many thanks,
> Paul
> 
> 
> #include "vtkImageWriter.h"
> #include "vtkImageReader.h"
> #include "vtkPointData.h"
> #include "vtkRenderer.h"
> #include "vtkRenderWindow.h"
> #include "vtkRenderWindowInteractor.h"
> #include "vtkStructuredPoints.h"
> #include "vtkFloatArray.h"
> #include "vtkContourFilter.h"
> #include "vtkPolyDataMapper.h"
> #include "vtkActor.h"
> #include "vtkImageCast.h"
> 
> main ()
> {
> 
>   float sp, z, y, x, s;
> int i, j, k,  kOffset, jOffset, offset,h;
> 
>   vtkImageData *vol = vtkImageData::New();
>   vol->SetDimensions(26,26,26);
>   vol->SetOrigin(-0.5,-0.5,-0.5);
>   sp =1.0/25.0;
>   vol->SetSpacing(sp,sp,sp);
> 
>   vtkFloatArray *scalars =vtkFloatArray::New();
>                      for(k=0;k<26;k++)
>                      {
>                      z = -0.5 + k*sp;
>                      kOffset = k*26*26;
> 
>                      for(j=0; j<26; j++)
>                      {
>                      y = -0.5 +j*sp;
>                      jOffset = j*26;
> 
>                      for(i=0;i<26;i++)
>                      {
>                      x = -0.5 + i*sp;
>                      s = x*x + y*y + z*z - (0.4*0.4);
>                      offset = i + jOffset + kOffset;
>                      scalars->InsertTuple1(offset,s);
>                      }
>                      }
>                      }
> 
>   vol->GetPointData()->SetScalars(scalars);
> 
> //------------------ Write Data ---------------------------
> vtkImageWriter *writer =   vtkImageWriter::New();
>   writer->SetInput(vol);
>   writer->SetFilePrefix("voldata");
>   writer->Write();
> 
> //----------------- Read Data ---------------------------
> vtkImageReader *reader  = vtkImageReader::New();
>    reader->SetDataExtent(0,25, 0, 25, 0, 25);
>    reader->SetFilePrefix("voldata");
>    reader->SetDataSpacing(sp, sp, sp);
>    reader->SetDataOrigin(-0.5,-0.5,-0.5);
> 
> 
> 
>   vtkContourFilter *contour = vtkContourFilter::New();
> //    contour->SetInput(vol);            //original
>       contour->SetInput(reader->GetOutput());
>       contour->SetValue(0,0);
> 
>   vtkPolyDataMapper *volMapper = vtkPolyDataMapper::New();
>       volMapper->SetInput(contour->GetOutput());
>       volMapper->ScalarVisibilityOff();
>   vtkActor *volActor = vtkActor::New();
>       volActor->SetMapper(volMapper);
> 
> 
> 
>   vtkRenderer *renderer = vtkRenderer::New();
>   vtkRenderWindow *renWin = vtkRenderWindow::New();
>     renWin->AddRenderer(renderer);
>   vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
>     iren->SetRenderWindow(renWin);
> 
> 
>   renderer->AddActor(volActor);
>       renderer->SetBackground(1,1,1);
>   renWin->SetSize(200,200);
> 
>   // interact with data
> 
>   renWin->Render();
>   iren->Start();
> 
>   // Clean up
>   renderer->Delete();
>   renWin->Delete();
>   iren->Delete();
>   vol->Delete();
>   scalars->Delete();
>   contour->Delete();
>   volMapper->Delete();
>   volActor->Delete();
> }
> 
> 
> 
> 
> _______________________________________________
> This is the private VTK discussion list. 
> Please keep messages on-topic. Check the FAQ at: <http://public.kitware.com/cgi-bin/vtkfaq>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
> 


-- 
Mathieu Malaterre
CREATIS
28 Avenue du Doyen LEPINE
B.P. Lyon-Montchat
69394 Lyon Cedex 03
http://www.creatis.insa-lyon.fr/~malaterre/




More information about the vtkusers mailing list