[vtkusers] Reading DICOM using vtkImageActor

Sam Raby rabysam28 at gmail.com
Tue Mar 4 14:30:20 EST 2014


Thanks David. Your solution seems much more straightforward than mine.

-S


On Tue, Mar 4, 2014 at 12:44 PM, David Gobbi <david.gobbi at gmail.com> wrote:

> Hi Sam,
>
> There are a couple issues here.  First, the mapper for vtkImageActor
> is vtkImageSliceMapper, not vtkImageMapper.  The vtkImageMapper is not
> compatible with vtkImageActor.  Second, the mapper is created is
> created by the vtkImageActor, so to get the mapper, you should do
> this:
>
> vtkImageSliceMapper *mapper = actor->GetMapper();
>
> Then, you should be able to use mapper->SetSliceNumber(n) to set the
> slice.  See the documentation for vtkImageSliceMapper for more
> information.
>
> Also, at least on my computer, the fonts in your emails are tiny and
> almost impossible to read... please either fix the fonts, or just send
> your emails as plain text.
>
>   David
>
>
>
>
> On Tue, Mar 4, 2014 at 11:29 AM, Sam Raby <rabysam28 at gmail.com> wrote:
> > I learnt that this seems to be a bug as reported here:
> >
> >
> http://www.paraview.org/Bug/bug_relationship_graph.php?bug_id=3661&graph=dependency
> >
> > From the link, I figured we can get around this issue by using
> > GetDisplayExtent. So the following code works:
> >
> >
> >     // DICOM Reader
> >
> >     vtkSmartPointer<vtkDICOMImageReader> reader =
> > vtkSmartPointer<vtkDICOMImageReader>::New();
> >
> >     reader->SetDirectoryName("/home/Images/DICOM");
> >
> >     reader->Update();
> >
> >
> >     // Mapper
> >
> >     vtkSmartPointer<vtkImageMapper> imageMapper =
> > vtkSmartPointer<vtkImageMapper>::New();
> >
> >     imageMapper->SetInputData(reader->GetOutput());
> >
> >     imageMapper->SetZSlice(12); // does not work.
> >
> >
> >     // Actor
> >
> > vtkSmartPointer<vtkImageActor> mapActor =
> > vtkSmartPointer<vtkImageActor>::New();
> >
> >     mapActor->SetInputData(imageMapper->GetInput());
> >
> >     mapActor->SetZSlice(12); // this also does not work.
> >
> >
> >
> > On Tue, Mar 4, 2014 at 11:10 AM, Sam Raby <rabysam28 at gmail.com> wrote:
> >>
> >> Hi,
> >>
> >> I am trying to read DICOM series using vtkImageActor. (Note: I know I
> can
> >> read them easily by vtkImageViewer2, however it is not suitable for my
> >> application).
> >>
> >> The problem is when I use SetZSlice, it does not update the slice and it
> >> always shows the first slice of DICOM. I call SetZSlice in both
> >> vtkImageActor and vtkImageMapper but it does not change the slice.
> >>
> >> Thanks for any tips, and here is my simple code:
> >>
> >>     // DICOM Reader
> >>
> >>     vtkSmartPointer<vtkDICOMImageReader> reader =
> >> vtkSmartPointer<vtkDICOMImageReader>::New();
> >>
> >>     reader->SetDirectoryName("/home/Images/DICOM");
> >>
> >>     reader->Update();
> >>
> >>
> >>     // Mapper
> >>
> >>     vtkSmartPointer<vtkImageMapper> imageMapper =
> >> vtkSmartPointer<vtkImageMapper>::New();
> >>
> >>     imageMapper->SetInputData(reader->GetOutput());
> >>
> >>     imageMapper->SetZSlice(12); // does not work.
> >>
> >>
> >>     // Actor
> >>
> >> vtkSmartPointer<vtkImageActor> mapActor =
> >> vtkSmartPointer<vtkImageActor>::New();
> >>
> >>     mapActor->SetInputData(imageMapper->GetInput());
> >>
> >>     mapActor->SetZSlice(12); // this also does not work.
> >>
> >>
> >>     // Visualization
> >>
> >>     vtkRenderer *ren=vtkRenderer::New();
> >>
> >>     ren->AddActor(mapActor);
> >>
> >>     ren->ResetCamera();
> >>
> >>
> >>     vtkSmartPointer<vtkRenderWindow> renderWindow =
> >> vtkSmartPointer<vtkRenderWindow>::New();
> >>
> >>     renderWindow->AddRenderer(ren);
> >>
> >>
> >>     vtkSmartPointer<vtkRenderWindowInteractor> iren =
> >> vtkSmartPointer<vtkRenderWindowInteractor>::New();
> >>
> >>     iren->SetRenderWindow(renderWindow);
> >>
> >>     iren->Start();
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20140304/b846a4d1/attachment.html>


More information about the vtkusers mailing list