[vtkusers] Vol.cxx example + vtkImageWriter + vtkImageReader
Paul McGuinness
mcguinpg at maths.tcd.ie
Thu Jul 24 07:31:55 EDT 2003
Mathieu,
The reason why I am interested in using vtkImageReader/Writer is to create
data files like the data files headsq/quarter.* such I can use them in
data parallelism. I have tried your method below but the data from one
file 'voldata.vtk' cannot be divided among multiple processors to my
knowledge. Do you know how I can create data files like headsq/quarter?
This is what I am trying to do exactly:
Use vtkImageWriter to write a sphere (or any object) of a specific
size to mulitple files like the files of headsq/quarter.*
Then use a data parallelism program similar to that of ParallelIso.cxx to
read in these files, and measure the time difference between this
parallel program and a similar serial program.
Use the vtkImageWriter again to write the same object of a different size,
and do the whole procedure again.
I hope to get a graphs of data size, number of processors, and time.
Paul
On Wed, 23 Jul 2003, Mathieu Malaterre wrote:
> 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/
>
> _______________________________________________
> 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
>
More information about the vtkusers
mailing list