[vtkusers] problem with vtkvolume16reader->GetOutput()->GetScalarPointer()??
Amy Henderson
amy.henderson at kitware.com
Mon May 3 08:47:16 EDT 2004
Hi Nicolas,
This problem is very similar to your previous problem. In this case, the
scalars haven't been filled in yet because the data has not been read from
the file. Add v16->Update(); before you try to access this reader's output.
This is true for all readers, filters, etc. in VTK. Their output is not
valid until Update has been called on them. The VTK rendering process
updates your visualization pipeline for you, which is why you don't have to
call Update yourself if you are rendering the results without modifying
them first.
- Amy
At 06:06 AM 5/1/2004, Dumont Nicolas wrote:
>Hello users!!
>
>I wish to make a copy of my volume data in a new vtkimagedata object, so
>after that i could modify the scalar data at the voxels (for example to
>make a spherical hole inside the volume).
>
>The code I wrote works well with
>
>vtkPNGreader->GetOutput()->GetScalarPointer();
>
>but the same code adapted for
>
>vtkVolume16reader->GetOutput()->GetScalarPointer();
>
>returns me the error that GetScalarPointer() points to memory 0x0000000000
>and so cant be read.
>
>Any body has an idea why it is so ?
>
>Nicolas D.
>Ulg, Belgium
>
>
>
>Here are both pieces of code:
>
>****************************************************
>vtkPNGReader * reader = vtkPNGReader::New();
> reader->SetFilePattern("MR/%d.png");
> reader->SetDataExtent(1,256,1,256,0,126);
> reader->SetDataSpacing(1,1,1.5);
> reader->SetDataOrigin(0,0,0);
> reader->UpdateWholeExtent();
>
>
>vtkImageData *imageData = vtkImageData::New();
> imageData->SetDimensions(256,256,126);
> imageData->SetSpacing(1,1,1.5);
> imageData->SetOrigin(0.0,0.0,0.0);
> imageData->SetScalarTypeToUnsignedChar();
> imageData->SetNumberOfScalarComponents(1);
> imageData->AllocateScalars();
> imageData->GetPointData()->CopyScalarsOn();
>
>unsigned char *ptrReader =
>(unsigned char *) reader->GetOutput()->GetScalarPointer();
>unsigned char *ptrData =
>(unsigned char *) imageData->GetScalarPointer();
>
>for (int i=0; i<256*256*126; i++)
>{
> *ptrData = *ptrReader;
> ptrData++;
> ptrReader++;
>}
>
>//...
> volumeMapper->SetInput(imageData);
>//...
>
>***********************************************************************
>vtkVolume16Reader *v16 = vtkVolume16Reader::New();
> v16->SetDataDimensions(64,64);
> v16->SetDataByteOrderToLittleEndian();
> v16->SetFilePrefix ("quarter");
> v16->SetImageRange(1, 93);
> v16->SetDataSpacing (3.2, 3.2, 1.5);
>
>vtkImageData *imageData = vtkImageData::New();
> imageData->SetDimensions(64,64,93);
> imageData->SetSpacing(3.2,3.2,1.5);
> imageData->SetOrigin(0.0,0.0,0.0);
> imageData->SetScalarTypeToUnsignedChar();
> imageData->SetNumberOfScalarComponents(1);
> imageData->AllocateScalars();
> imageData->GetPointData()->CopyScalarsOn();
>
>unsigned char *ptr2 =
>(unsigned char *) v16->GetOutput()->GetScalarPointer();
>unsigned char *ptr =
>(unsigned char *) imageData->GetScalarPointer();
>
>for (int i=0; i<64*64*93; i++)
>{
> *ptr = *ptr2;
> ptr++;
> ptr2++;
>}
>//...
> volumeMapper->SetInput(imageData);
>//...
>
>
>_______________________________________________
>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