[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