[vtkusers] Animated plot?
    Torquil Macdonald Sørensen 
    torquil at gmail.com
       
    Fri Jun 27 09:44:25 EDT 2008
    
    
  
Hello
I am trying to plot some polygons, change their positions, then plot the new 
polygons, and so on. The first plot is correct, a pair of 8-vertex polygons, 
one on the lower left and one on the upper right. In the for-loop I translate 
the polygons a bit using a sine function. But the plot stays the same every 
time...  I expected the for-loop to result in an animated plot.
Here is the source:
#include <blitz/array.h>
#include "vtkActor.h"
#include "vtkCellArray.h"
#include "vtkPoints.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
using namespace std; using namespace blitz;
// N polygons of M vertices in D dimensions
const int N = 2, M = 8, D = 3;
void initialize(Array<double,3>& R);
void setPlotData(Array<double,3>& R,
				 vtkPoints* points, vtkCellArray* lines, vtkPolyData* polyData);
int main()
{
	Array<double,3> R(N,M,D); // Holds the polygon data
	
	initialize(R); // Initialize polygon positions
	vtkPoints* points = vtkPoints::New();
	vtkCellArray* lines = vtkCellArray::New();
	vtkPolyData* polyData = vtkPolyData::New();
	vtkPolyDataMapper* polyDataMapper = vtkPolyDataMapper::New();
	vtkActor* polyDataActor = vtkActor::New();
	vtkRenderer* renderer= vtkRenderer::New();
	vtkRenderWindow* renderWindow = vtkRenderWindow::New();
	setPlotData(R, points, lines, polyData);
	polyData->SetPoints(points);
	polyData->SetLines(lines);
	polyDataMapper->SetInput(polyData);
	polyDataActor->SetMapper(polyDataMapper);
	renderer->AddActor(polyDataActor);
	renderer->SetBackground(0.0, 0.0, 0.0);
	renderWindow->AddRenderer(renderer);
	renderWindow->SetSize(500, 500);
	for (int i = 0; i < 10; ++i) {
		renderWindow->Render();
		cout << "Sleeping for 1 sec..." << endl;
		sleep(1);
		
		R += sin(double(i)); // Modify R by translating the polygons a bit.
		setPlotData(R, points, lines, polyData);
	}
	
	points->Delete();
	lines->Delete();
	polyDataMapper->Delete();
	polyDataActor->Delete();
	renderer->Delete();
	renderWindow->Delete();
	
	return(0);
}
void initialize(Array<double,3>& R)
{
	for(int n = 0; n != N; ++n) {
		for(int m = 0; m != M; ++m) {
			R(n,m,0) = 0.25*cos(2*double(m)/M*M_PI) + n - 1;
			R(n,m,1) = 0.25*sin(2*double(m)/M*M_PI) + n - 1;
			R(n,m,2) = 0.0;
		}
	}
}
void setPlotData(Array<double,3>& R, vtkPoints* points, vtkCellArray* lines, 		
vtkPolyData* polyData)
{
	points->Initialize();
	lines->Initialize();
	int pointID = 0;
	double p[D];
	for(int n = 0; n != N; ++n) {
		for(int m = 0; m != M; ++m) {
			for(int d = 0; d != D; ++d) {
				p[d] = R(n,m,d);
			}
			points->InsertNextPoint(p);
			for(int d = 0; d != D; ++d) {
				p[d] = R(n,(m+1)%M,d);
			}
			points->InsertNextPoint(p);
			lines->InsertNextCell(2);
			lines->InsertCellPoint(pointID);
			lines->InsertCellPoint(pointID+1);
			pointID += 2;
		}
	}
	polyData->SetPoints(points);
	polyData->SetLines(lines);
}
    
    
More information about the vtkusers
mailing list