# Reading and visualizing vtk file

**URL:** https://discourse.vtk.org/t/reading-and-visualizing-vtk-file/2158
**Category:** Support
**Created:** [November 26, 2019, 9:11pm UTC](https://discourse.vtk.org/t/reading-and-visualizing-vtk-file/2158 "2019-11-26T21:11:37Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![banikr](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/b/b9bd4f/32.png) [@banikr](https://discourse.vtk.org/u/banikr)
#### Post date: [November 26, 2019, 9:11pm UTC](https://discourse.vtk.org/t/reading-and-visualizing-vtk-file/2158/1 "2019-11-26T21:11:37Z")

</div>

Hello all,  
I am trying to read a DTIbrain file in `.vtk` format. The image has eigenvectors and eigenvalues attached to its voxels and I want to read and visualize the principal eigenvectors.

For this, I am using `vtkStructuredPointsReader` as a reader and tried using `vtkXMLPolyDataReader` which doesn’t work.

I am using Glyph3D to depict all the vectors as an arrow. I have tried the following codes and generated the image below:

 ![image](https://discourse.vtk.org/uploads/default/original/2X/a/a49187d54bb7f6da7bd05c98d209ab5a440a6ee2.jpeg)  
the blueish section in the middle is where the brain is.

Now I want to get rid of the red arrows outside the brain and just to visualize the brain volume.  
How do I do that?

Codes:

```
#include <vtkSmartPointer.h>
#include <vtkXMLPolyDataReader.h>
#include <vtkNrrdReader.h>
#include <vtkPolyData.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkStructuredPointsReader.h>
#include <vtkArrowSource.h>
#include <vtkGlyph3D.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkPolyDataReader.h>
#include <vtkProperty.h>
#include <vtkImageDataGeometryFilter.h>
#include <vtkPolyDataNormals.h>
#include <vtkQuadricDecimation.h>

int main(int argc, char* argv[])
{
	vtkSmartPointer<vtkStructuredPointsReader> reader = vtkSmartPointer<vtkStructuredPointsReader>::New();
	//vtkSmartPointer<vtkXMLPolyDataReader> reader = vtkSmartPointer<vtkXMLPolyDataReader>::New();
	//reader->SetFileName("../../PEoutput.vtk");
	reader->SetFileName(argv[1]);
	reader->Update();

	vtkSmartPointer<vtkImageDataGeometryFilter>geometryFilter = vtkSmartPointer<vtkImageDataGeometryFilter>::New();
	geometryFilter->SetInputConnection(reader->GetOutputPort());
	geometryFilter->Update();

	vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	mapper->SetInputConnection(geometryFilter->GetOutputPort()); //geometryFilter

	vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
	actor->SetMapper(mapper);
	actor->GetProperty()->SetColor(0, 0, 0);

	// Compute & Visualize Normal Vectors
	/*
	vtkSmartPointer<vtkPolyDataNormals> normalsFilter = vtkSmartPointer<vtkPolyDataNormals>::New();
	normalsFilter->SetInputData(geometryFilter->GetOutput());
	normalsFilter->ComputePointNormalsOn();
	normalsFilter->Update();
	*/
	vtkSmartPointer<vtkArrowSource>oneArrow = vtkSmartPointer<vtkArrowSource>::New();
	oneArrow->Update();
	
	vtkSmartPointer<vtkGlyph3D> lotsOfArrows = vtkSmartPointer<vtkGlyph3D>::New();
	lotsOfArrows->SetSourceData(oneArrow->GetOutput());
	lotsOfArrows->SetInputData(geometryFilter->GetOutput()); //gerometryFilter
	lotsOfArrows->OrientOn();
	lotsOfArrows->SetScaleFactor(1);
	lotsOfArrows->SetColorModeToColorByVector();
	lotsOfArrows->Update();
	
	vtkSmartPointer < vtkPolyDataMapper > arrowMapper = vtkSmartPointer < vtkPolyDataMapper > ::New();
	arrowMapper->SetInputData(lotsOfArrows->GetOutput());

	vtkSmartPointer<vtkActor> arrowActor = vtkSmartPointer<vtkActor>::New();
	arrowActor->SetMapper(arrowMapper);
	arrowActor->GetProperty()->SetColor(1, 0, 0); //

	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
	renderWindow->AddRenderer(renderer);
	vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	interactor->SetRenderWindow(renderWindow);
	renderer->AddActor(arrowActor); //arrowActor //actor

	renderer->SetBackground(1, 1, 1);
	renderWindow->Render();
	renderWindow->SetSize(300, 300);

	interactor->Start();

	return 0;
}

```

I also tried reading the number of points and their attributes to threshold out outside arrows…but `vtkStructuredPointsReader` seems to have no functions as `GetNumberOfPoints` or `GetAttributes`

Please see the error image below:

 ![image](https://discourse.vtk.org/uploads/default/original/2X/9/94ccd46d30acb4ee6e29915ab4457e32b815da51.png)

---

<div class="post-metadata">

### Author: ![banikr](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/b/b9bd4f/32.png) [@banikr](https://discourse.vtk.org/u/banikr)
#### Post date: [November 26, 2019, 10:36pm UTC](https://discourse.vtk.org/t/reading-and-visualizing-vtk-file/2158/2 "2019-11-26T22:36:10Z")

</div>

I have done it by the following codes:

```
    int main(int argc, char* argv[])
{
	vtkSmartPointer<vtkStructuredPointsReader> reader = vtkSmartPointer<vtkStructuredPointsReader>::New();
	//vtkSmartPointer<vtkXMLPolyDataReader> reader2 = vtkSmartPointer<vtkXMLPolyDataReader>::New();
	//reader->SetFileName("../../PEoutput.vtk");
	reader->SetFileName(argv[1]);
	reader->Update();
	//std::cout << reader->GetOutput()->GetNumberOfPoints() << std::endl; //1762560

	//clean up codes:
	
	vtkSmartPointer<vtkFloatArray> brain = vtkSmartPointer<vtkFloatArray>::New();
	brain->SetNumberOfValues(reader->GetOutput()->GetNumberOfPoints());

	for (vtkIdType idx = 0; idx < reader->GetOutput()->GetNumberOfPoints(); idx++)
	{
		double* v = reader->GetOutput()->GetAttributes(vtkDataSet::POINT)->GetVectors()->GetTuple3(idx);
		if (v[0] * v[1] * v[2] > 0) 
		{
			brain->SetValue(idx, 1);
		}
		else 
		{
			brain->SetValue(idx, 0);
		}
	}
	
	reader->GetOutput()->GetPointData()->SetScalars(brain);

	vtkSmartPointer<vtkThresholdPoints> thresh = vtkSmartPointer<vtkThresholdPoints>::New();
	thresh->ThresholdByUpper(0.5);
	thresh->SetInputData(reader->GetOutput());
	thresh->Update();

```

 ![image](https://discourse.vtk.org/uploads/default/original/2X/8/8680cc53317742f3d44ebe58449c17b287f2babb.jpeg)
