[Insight-users] ITK to VTK - Vector Images

Karthik Krishnan Karthik.Krishnan at kitware.com
Mon Nov 7 15:09:26 EST 2005


I've done exactly this before and I am certain it works.

Your code looks good except for this line:

    glyph->SetVectorModeToUseNormal();

Usually when you glyph, you want

    glyph->SetVectorModeToUseVector();

Using the Normal should explain why you see all of them lined up along 
one axis. At least I hope that's the reason.

HTH
Karthik

Hari Sundar wrote:

>Hi,
>
>I am trying to set up a simple connection between ITK and VTK. It
>doesn't seem to be working correctly. I started with the
>itkReadITKImageShowVTK.cxx example file under InsightApplications. This
>example compiles and works correctly.
>
>I want to load in a displacement field (MHD file, 3D, 3 Components per
>voxel), and show arrows at each voxel location. However the program
>that I wrote doesn't display correctly. I see all the arrows aligned
>with the X axis and of constant length. 
>
>Why isn't VTK seeing this as a Vector dataset ? I have attached the
>main code.
>
>thanks,
>~Hari
>
>--
>try {
>    const unsigned int ImageDimension = 3;
>    typedef float PixelType;
>      
>    typedef itk::Vector < float, ImageDimension > VectorType;
>    typedef itk::Image <VectorType, ImageDimension > ImageType;
>    typedef itk::ImageFileReader < ImageType > FieldReaderType;
>
>    FieldReaderType::Pointer reader = FieldReaderType::New (); 
>    reader->SetFileName( argv[1] );
>    reader->Update();
>
>    typedef itk::VTKImageExport< ImageType > ExportFilterType;
>    ExportFilterType::Pointer itkExporter = ExportFilterType::New();
>
>    itkExporter->SetInput( reader->GetOutput() );
>
>    vtkImageImport* vtkImporter = vtkImageImport::New();  
>    ConnectPipelines(itkExporter, vtkImporter);
>    
>    vtkOutlineFilter *outline = vtkOutlineFilter::New();
>    outline->SetInput(vtkImporter->GetOutput());
>
>    vtkPolyDataMapper *outlineMapper = vtkPolyDataMapper::New();
>    outlineMapper->SetInput(outline->GetOutput());
>
>    vtkActor *outlineActor = vtkActor::New();
>    outlineActor->SetMapper(outlineMapper);
>    outlineActor->GetProperty()->SetColor(0.7, 0.3, 0.1);
>    
>    vtkExtractVOI *m_ExtractVOI  = vtkExtractVOI::New();
>    m_ExtractVOI->SetInput(vtkImporter->GetOutput() );
>    m_ExtractVOI->SetSampleRate( 4,4,4 );
>    
>    vtkArrowSource* vector = vtkArrowSource::New();
>    
>    vtkGlyph3D *glyph = vtkGlyph3D::New();
>    glyph->SetInput( m_ExtractVOI->GetOutput());
>    glyph->SetSource( vector->GetOutput() );
>    glyph->SetVectorModeToUseNormal();
>    glyph->SetScaleModeToScaleByVector();
>    glyph->SetScaleFactor(2);
>    
>    vtkPolyDataMapper *spikeMapper = vtkPolyDataMapper::New();
>    spikeMapper->SetInput(glyph->GetOutput());
>    
>    vtkActor *spikeActor = vtkActor::New();
>    spikeActor->SetMapper(spikeMapper);
>    spikeActor->GetProperty()->SetColor(0.0, 0.79, 0.34);
>
>    vtkRenderer *ren= vtkRenderer::New();
>    ren->AddActor( spikeActor );
>    ren->AddActor( outlineActor );
>    ren->SetBackground( 0.1, 0.2, 0.4 );
>
>    vtkRenderWindow *renWin = vtkRenderWindow::New();
>    renWin->SetSize(600,600);
>    renWin->AddRenderer( ren );  
>    
>    vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
>    iren->SetRenderWindow(renWin);
>    
>    vtkInteractorStyleTrackballCamera *style =
>vtkInteractorStyleTrackballCamera::New();
>    iren->SetInteractorStyle(style);
>    
>    iren->Initialize();
>    iren->Start();
>    
>    
>  }
>  catch( itk::ExceptionObject & e ) {
>    std::cerr << "Exception catched !! " << e << std::endl;
>  }
>
>  return 0;
>}
>
> template <typename ITK_Exporter, typename VTK_Importer>
>void ConnectPipelines(ITK_Exporter exporter, VTK_Importer* importer)
>{
> 
>importer->SetUpdateInformationCallback(exporter->GetUpdateInformationCallback());
> 
>importer->SetPipelineModifiedCallback(exporter->GetPipelineModifiedCallback());
>  importer->SetWholeExtentCallback(exporter->GetWholeExtentCallback());
>  importer->SetSpacingCallback(exporter->GetSpacingCallback());
>  importer->SetOriginCallback(exporter->GetOriginCallback());
>  importer->SetScalarTypeCallback(exporter->GetScalarTypeCallback());
> 
>importer->SetNumberOfComponentsCallback(exporter->GetNumberOfComponentsCallback());
> 
>importer->SetPropagateUpdateExtentCallback(exporter->GetPropagateUpdateExtentCallback());
>  importer->SetUpdateDataCallback(exporter->GetUpdateDataCallback());
>  importer->SetDataExtentCallback(exporter->GetDataExtentCallback());
> 
>importer->SetBufferPointerCallback(exporter->GetBufferPointerCallback());
>  importer->SetCallbackUserData(exporter->GetCallbackUserData());
>}
>
>
>bhogaa na bhuktaa vayameva bhuktaaH
>tapo na tapta.n vayameva taptaaH |
>kaalo na yaato vayameva yaataaH
>tR^ishhNaa na jiirNaa vayameva jiirNaaH ||
>
>
>		
>__________________________________ 
>Yahoo! FareChase: Search multiple travel sites in one click.
>http://farechase.yahoo.com
>_______________________________________________
>Insight-users mailing list
>Insight-users at itk.org
>http://www.itk.org/mailman/listinfo/insight-users
>
>  
>


More information about the Insight-users mailing list