vtkStreamTracer using regular grid?

Hi guys,

I’m having great trouble getting the vtkStreamTracer to show any traces from generated data (the original code used a vtkRTAnalyticSource to generate the data). It is probably some thing trivial but I have been unable to figure out what is needed in order to get this up and running. Any help would be greatly appreciated.

My current code looks like this:

int main(int argc, char** argv)
{
// Setup the renderer
vtkNew renderer;
renderer->SetBackground(0.9, 0.9, 0.9);

// Setup the render window
vtkNew<vtkRenderWindow> renWin;
renWin->AddRenderer(renderer.Get());
renWin->SetSize(500, 500);

// Setup the render window interactor
vtkNew<vtkRenderWindowInteractor> interact;
vtkNew<vtkInteractorStyleTrackballCamera> style;
interact->SetRenderWindow(renWin.Get());
interact->SetInteractorStyle(style.Get());

const int XDim = 10;
const int YDim = 10;
const int ZDim = 10;

const int NUM_VALUES = XDim * YDim * ZDim;

vtkSmartPointer < vtkPoints > m_points = vtkSmartPointer < vtkPoints>::New();
m_points->SetNumberOfPoints(NUM_VALUES);

vtkFloatArray* m_vectors = vtkFloatArray::New();

m_vectors->SetNumberOfComponents(3);

vtkFloatArray* m_scalars[3];
for (int i = 0; i < 3; i++)
{
	m_scalars[i] = vtkFloatArray::New();
	m_scalars[i]->SetNumberOfComponents(1);
	m_scalars[i]->SetNumberOfTuples(NUM_VALUES);
}

float pt[3] = { 0 };
float vec[3] = { 0 };
int offset = 0;
for (int z = 0; z < 10; z++)
{
	for (int y = 0; y < 10; y++)
	{
		for (int x = 0; x < 10; x++)
		{
			pt[0] = x - 4.5;
			pt[1] = y - 4.5;
			pt[2] = z - 4.5;
			m_points->InsertPoint(offset, pt);

			vec[0] = 1;
			vec[1] = 1;
			vec[2] = 1;
			m_vectors->InsertTuple(offset, vec);

			for (int i = 0; i < 3; i++)
			{
				m_scalars[i]->InsertValue(offset, 1);
			}
			offset++;
		}
	}
}

vtkSmartPointer < vtkStructuredGrid> m_vectorField = vtkSmartPointer < vtkStructuredGrid >::New();

m_vectorField->SetDimensions(10, 10, 10);

m_vectorField->SetPoints(m_points);
m_vectorField->GetPointData()->SetVectors(m_vectors);
m_vectorField->GetPointData()->SetScalars(m_scalars[0]);

vtkSmartPointer < vtkPointSource > seeds = vtkSmartPointer < vtkPointSource >::New();
seeds->SetRadius(1);
seeds->SetCenter(0, 0, 0);
seeds->SetNumberOfPoints(50);

///*** Magic stuff needs to happen here!!!! ****

vtkSmartPointer < vtkRungeKutta45> rk4 = vtkSmartPointer < vtkRungeKutta45>::New();
vtkSmartPointer < vtkStreamTracer> streamer = vtkSmartPointer < vtkStreamTracer>::New();

streamer->SetInputData( *** WHAT GOES HERE??? *** );

streamer->SetSourceConnection(seeds->GetOutputPort());
streamer->SetMaximumPropagation(500);
streamer->SetInitialIntegrationStep(0.01);
streamer->SetMaximumIntegrationStep(0.5);
streamer->SetIntegrationDirectionToForward();
streamer->SetComputeVorticity(1);
streamer->SetIntegrator(rk4);
streamer->SetMaximumError(1.0e-8);
streamer->Update();

vtkSmartPointer < vtkPolyDataMapper> mapStream = vtkSmartPointer < vtkPolyDataMapper>::New();
mapStream->SetInputConnection(streamer->GetOutputPort());
vtkSmartPointer < vtkActor> streamActor = vtkSmartPointer < vtkActor>::New();
streamActor->SetMapper(mapStream);
renderer->AddActor(streamActor);

// Render and show interactive window
renWin->Render();
interact->Initialize();
interact->Start();
return 0;

}

Solved, take a look at the post

Difference between vtkStructuredPoints and vtkStructuredPointsReader?