[vtkusers] problem with vtkvolume16reader->GetOutput()->GetScalarPointer()??

Veerapuram Varadhan v.varadhan at californiadigital.com
Wed May 5 02:47:24 EDT 2004


Ahhh..  sorry... anyway thanx for your explantion.

V. Varadhan.

> No, an explicit call to Update() does not need to be made in these
> examples
> because the data is not being modified outside the visualization pipeline,
> and the whole pipeline is updated when the first Render() happens. In this
> case, a Render() call happens when Initialize() is called on the
> vtkRenderWindowInteractor.
>
> - Amy
>
> At 04:58 AM 5/4/2004, Veerapuram Varadhan wrote:
>>Hi Amy,
>>
>>Probably we might have to reflect the said change in
>>VTK/Examples/Medical/Cxx/Medical1.cxx
>>VTK/Examples/Medical/Cxx/Medical2.cxx and
>>VTK/Examples/Medical/Cxx/Medical3.cxx
>>as well.
>>
>>V. Varadhan.
>>
>> > 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
>> >
>> >
>> >
>> > _______________________________________________
>> > 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
>> >
>>
>>_______________________________________________
>>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
>
>
>
> _______________________________________________
> 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