[vtkusers] Issues moving code to a function and returning a smart pointer

Manuel Corrales manuelcorrales at gmail.com
Mon May 20 11:45:04 EDT 2013


David, I am getting this error on your code:

error: ‘class vtkImageViewer2’ has no member named ‘SetInputData’
      imageViewer->SetInputData(connector->GetOutput());


Am I using and old or bad compiled version of vtk?

Regards,
Manuel.



On Mon, May 20, 2013 at 11:06 AM, Manuel Corrales
<manuelcorrales at gmail.com>wrote:

> Thanks David. Sorry about the example. I will attach a working example as
> soon as I can. About  the sample code you sent, my problem is when the code
> is the other way around. I mean, reading the file and the connector in the
> function and then rendering the viewer in the main method. It maybe a Qt
> widget issue, but I am not sure.
>
> Thanks for your response!
>
>
> On Mon, May 20, 2013 at 10:55 AM, David Doria <daviddoria at gmail.com>wrote:
>
>> On Fri, May 17, 2013 at 3:43 PM, Manuel Corrales
>> <manuelcorrales at gmail.com> wrote:
>> > Hello all. I have a simple code that reads an image using ITK, then it
>> > convert it to VTK and after that I display the image in a QVTKWidget.
>> The
>> > code is this and works fine:
>> >
>> >      typedef itk::Image< double, 2 >         ImageType;
>> >       typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
>> >       typedef itk::ImageFileReader<ImageType> ReaderType;
>> >
>> >       ReaderType::Pointer reader = ReaderType::New();
>> >       reader->SetFileName(file.c_str());
>> >       reader->Update();
>> >
>> >       ConnectorType::Pointer connector = ConnectorType::New();
>> >       connector->SetInput(reader->GetOutput());
>> >       connector->Update();
>> >       ImageReader *myReader = new ImageReader();
>> >       vtkSmartPointer<vtkImageViewer2> vtkImageViewer =
>> > vtkSmartPointer<vtkImageViewer2>::New();
>> >       vtkImageViewer->SetInput(connector->GetOutput());
>> >
>> vtkImageViewer->SetRenderWindow(this->qvtkWidget->GetRenderWindow());
>> >       vtkImageViewer->Render();
>> >
>> >
>> > Now if I change this code and create a separate function to perform the
>> > connection from ITK to VTK, I get a segfault:
>> >
>> > ImageReader *myReader = new ImageReader();
>> >       vtkSmartPointer<vtkImageViewer2> vtkImageViewer =
>> > myReader->renderITKReaderInVTK(file);
>> >
>> vtkImageViewer->SetRenderWindow(this->qvtkWidget->GetRenderWindow());
>> >       vtkImageViewer->Render();
>> >
>> > and the called function:
>> >
>> > vtkSmartPointer<vtkImageViewer2>
>> > ImageReader::renderITKReaderInVTK(std::string fileName) {
>> >     typedef itk::Image< double, 2 >         ImageType;
>> >     typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
>> >     typedef itk::ImageFileReader<ImageType> ReaderType;
>> >
>> >     ReaderType::Pointer reader = ReaderType::New();
>> >     qDebug() << "Setting reader file name";
>> >     reader->SetFileName(fileName.c_str());
>> >     qDebug() << "Updating reader";
>> >     reader->Update();
>> >
>> >     ConnectorType::Pointer connector = ConnectorType::New();
>> >     qDebug() << "Setting input to connector";
>> >     connector->SetInput(reader->GetOutput());
>> >     qDebug() << "Updating connector";
>> >     connector->Update();
>> >
>> >     vtkSmartPointer<vtkImageViewer2> vtkImageViewer =
>> > vtkSmartPointer<vtkImageViewer2>::New();
>> >     qDebug() << "Setting connector outupt -> imageViewer input";
>> >     vtkImageViewer->SetInput(connector->GetOutput());
>> >     qDebug() << "Image viewer set up ready";
>> >     return vtkImageViewer;
>> > }
>> >
>> > Any ideas why the same code (I think) works if it is all together but
>> fail
>> > when it's in a different function?
>> >
>> > Thanks in advance!
>> > Regards,
>> > Manuel.
>>
>>
>> It is much easier for us if you provide a compilable example of the
>> error. I tried the following, but it seems to work fine. If you can
>> provide something like this that segfaults, I'm sure someone can help
>> you out.
>>
>> #include <vtkVersion.h>
>> #include <vtkSmartPointer.h>
>> #include <vtkRenderWindow.h>
>> #include <vtkRenderWindowInteractor.h>
>> #include <vtkRenderer.h>
>> #include <vtkImageViewer2.h>
>>
>> #include "itkImage.h"
>> #include "itkImageFileReader.h"
>> #include "itkImageToVTKImageFilter.h"
>>
>> vtkSmartPointer<vtkImageViewer2> CreateImageViewer();
>>
>> int main(int, char *[])
>> {
>>
>>     typedef itk::Image< double, 2 >         ImageType;
>>      typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
>>      typedef itk::ImageFileReader<ImageType> ReaderType;
>>
>>      ReaderType::Pointer reader = ReaderType::New();
>>      reader->SetFileName("test.png");
>>      reader->Update();
>>
>>      ConnectorType::Pointer connector = ConnectorType::New();
>>      connector->SetInput(reader->GetOutput());
>>      connector->Update();
>>
>>      vtkSmartPointer<vtkImageViewer2> imageViewer = CreateImageViewer();
>>      imageViewer->SetInputData(connector->GetOutput());
>>      imageViewer->Render();
>>
>>   return EXIT_SUCCESS;
>> }
>>
>> vtkSmartPointer<vtkImageViewer2> CreateImageViewer()
>> {
>>     vtkSmartPointer<vtkImageViewer2> imageViewer =
>> vtkSmartPointer<vtkImageViewer2>::New();
>>     return imageViewer;
>> }
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130520/d0b7a789/attachment.htm>


More information about the vtkusers mailing list