[vtkusers] VTK animation in the loop

agatte agatakrason at gmail.com
Sat Jun 13 15:59:55 EDT 2015


Hi, 

I have a question  concering animation in VTK toolkit. 
I would like to make an animation. 
I want to read image in the loop and visualize it. 
(I have image series. I have to see how it changes position, moves ect ...)
I wrote a code but it doesn't work well. It builds and compiles well. 
But it doesn't change simultaneously ... It doesn't change loop .. I have to
click on x in renderwindow....

Could anyone advice me something in VTK ? What I have to change/add to my
code ? 


I would be appreciate for any help please. 

Here is my code  :


class vtkTimerCallback : public vtkCommand
{
public:
	static vtkTimerCallback *New()
	{
		vtkTimerCallback *cb = new vtkTimerCallback;
		cb->TimerCount = 0;
		return cb;
	}

	virtual void Execute(vtkObject *vtkNotUsed(caller), unsigned long eventId,
void *vtkNotUsed(callData))
	{
		if(vtkCommand::TimerEvent == eventId)
		{
			++this->TimerCount;			
		}

		cout << this->TimerCount << endl;
	}

private:
	int TimerCount;

};


int main (int argc, char *argv[])
{

	 if( argc < 3)
    {
     std::cerr << "Usage: " <<argv[0] <<"refFileName 
numberOfFiles"<< std::endl;
     return EXIT_FAILURE;
    }

	//string dirName = "images";
    //argv[1]="\images\\image06.mhd";

	vtkSmartPointer<vtkMetaImageReader> refReader =
vtkSmartPointer<vtkMetaImageReader>::New();
	refReader->SetFileName(argv[1]);
	refReader->Update();

	vtkSmartPointer<vtkImageData> refVolume =
vtkSmartPointer<vtkImageData>::New();
    refVolume = refReader->GetOutput();

	vtkSmartPointer<vtkContourFilter> refContour =
vtkSmartPointer<vtkContourFilter>::New();
	refContour->SetInput(refVolume);
	refContour->Update();
	refContour->SetValue(0,1);

	vtkSmartPointer<vtkPolyData> refPolydata =
vtkSmartPointer<vtkPolyData>::New();
	refPolydata= refContour->GetOutput();
	
    vtkSmartPointer<vtkPoints> refPoints = refPolydata->GetPoints();
    vtkSmartPointer<vtkCellArray> refPolys = refPolydata->GetPolys();
	refPolydata->SetPoints(refPoints);

    vtkSmartPointer<vtkPolyDataMapper> refMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
    refMapper->SetInputConnection(refContour->GetOutputPort());
    refMapper->ScalarVisibilityOn();

    vtkSmartPointer<vtkActor> refActor =   vtkSmartPointer<vtkActor>::New();
    refActor->SetMapper(refMapper);
    // refActor->GetProperty()->SetColor(1.0, 2.0, 3.0);

	vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
    renderer->SetBackground(0, 0, 0);
    vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);
    vtkSmartPointer<vtkRenderWindowInteractor> interactor = 
vtkSmartPointer<vtkRenderWindowInteractor>::New();
    interactor->SetRenderWindow(renderWindow);
	renderer->AddActor(refActor);

	int numberOfFiles = atoi(argv[2]);
	std::cout<<"numberOfFiles : "<< std::endl; 

	renderer->Render();
	renderWindow->Render();
	interactor->Start();  

	renderer->UpdateLightsGeometryToFollowCamera();
	renderer->Modified();

	// Sign up to receive TimerEvent
	vtkSmartPointer<vtkTimerCallback> cb =
vtkSmartPointer<vtkTimerCallback>::New();
	interactor->AddObserver(vtkCommand::TimerEvent, cb);
	//interactor->CreateRepeatingTimer(10);
	interactor->SetDesiredUpdateRate(10);
	cb->AbortFlagOff();
	

	for(int i=1; i< numberOfFiles; ++i)
	{ 

       string end  = static_cast<ostringstream*>( &(ostringstream() << i)
)->str();
	   std::cout <<"  "<<end<<std::endl;
	   string currentFileName;
	   currentFileName = "image0" + end + ".mhd";
	   std::cout<<"  
"<<currentFileName<<std::endl;
       vtkSmartPointer<vtkMetaImageReader> moveReader=
vtkSmartPointer<vtkMetaImageReader>::New();
	   moveReader->SetFileName(currentFileName.c_str());
	   moveReader->Update();

	   vtkSmartPointer<vtkImageData> moveVolume =
vtkSmartPointer<vtkImageData>::New();
	   moveVolume = moveReader->GetOutput();

	   vtkSmartPointer<vtkContourFilter> moveContour =
vtkSmartPointer<vtkContourFilter>::New();
	   moveContour->SetInput(moveVolume);
	   moveContour->Update();
	   moveContour->SetValue(0,1);

	   vtkSmartPointer<vtkPolyData> movePolydata =
vtkSmartPointer<vtkPolyData>::New();
	   movePolydata = moveContour->GetOutput();
	
	   vtkSmartPointer<vtkPoints> movePoints = movePolydata->GetPoints();
	   vtkSmartPointer<vtkCellArray> movePolys = movePolydata->GetPolys();
	   movePolydata->SetPoints(movePoints);

	   vtkSmartPointer<vtkPolyDataMapper> moveMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
	   moveMapper->SetInputConnection(moveContour->GetOutputPort());
	   moveMapper->ScalarVisibilityOff();
 
	   vtkSmartPointer<vtkActor> moveActor = vtkSmartPointer<vtkActor>::New();
	   moveActor->SetMapper(moveMapper);
	   std::cout<< "i = "<<i<<std::endl;
	   moveActor->GetProperty()->SetColor(1.0, 2.0, 0.0);

	   renderer->AddActor(moveActor);
	   renderer->Render();
	   renderWindow->Render();
	   interactor->Start();   
	   moveActor->SetVisibility(0); 
	}

	system("Pause");


	return EXIT_SUCCESS;
}



--
View this message in context: http://vtk.1045678.n5.nabble.com/VTK-animation-in-the-loop-tp5732328.html
Sent from the VTK - Users mailing list archive at Nabble.com.


More information about the vtkusers mailing list