[vtkusers] Up: Segmentation Fault error when trying to animate a vector of actors

Lucia Pavan lpavan.pd at gmail.com
Thu Jan 17 09:10:06 EST 2013


Hi vtkusers,

I re-post my message, as I think something went wrong with it yesterday. 
I want to use VTK to trace the linear movement of a number of particles.
(my final aim is to visualize the evolution of a stream of particles, each of which is following a different path).
For this I am trying to merge the two C++ examples AnimateActors and VectorOfActors that are on the vtk website.
The code compiles smoothly, but I end up with a Segmentation Fault error when trying to animate the vector of actors.
The code I'm using is here below.
I isolated the problem in this part of the code:

    std::vector<double> endPart(3);
    for(unsigned int k = 0; k < actors.size(); k++)
    {
		ActorAnimator animatePart;
		animatePart.SetActor(actors[k]);
		endPart[0] = 1.0;
		endPart[1] = 2.5;
		endPart[2] = 0;
		animatePart.SetEndPosition(endPart);
		
		animatePart.AddObserversToCue(cues[k]);
	}	


Could somebody help me in understanding where is my error? 
Even suggestions on a simpler method /different approach to the problem are welcome!

many thanks,
Lucia



-------------------------------------------------------------------
Lucia Pavan

ISDC - Science data center for Astrophysics   
Ch. d'Ecogia 16, 
CH-1290 Versoix
Switzerland


--------- my code --------
#include "AnimateActors.h"
#include <vtkSmartPointer.h>
#include <vtkAnimationCue.h>
#include <vtkRenderer.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkCommand.h>
#include <vtkAnimationScene.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCamera.h>
#include "vtkProperty.h"
#include <stdio.h>
#include <math.h>

#include <vector>


int main(int argc, char *argv[])
{
  // Create the graphics structure. The renderer renders into the
  // render window.
  vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
  vtkSmartPointer<vtkRenderer> ren1 = vtkSmartPointer<vtkRenderer>::New();
  vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
  renWin->SetSize(600,600); //(width, height)
  renWin->SetMultiSamples(0);
  iren->SetRenderWindow(renWin);
  renWin->AddRenderer(ren1);
  
  // Generate a sphere
  vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
  sphereSource->SetRadius(0.25);
  sphereSource->SetCenter(0.0,2.5,0.0);
	
  vtkSmartPointer<vtkPolyDataMapper> sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
  sphereMapper->SetInputConnection( sphereSource->GetOutputPort());
  vtkSmartPointer<vtkActor> sphere = vtkSmartPointer<vtkActor>::New();
  sphere->SetMapper(sphereMapper);
	
  ren1->AddActor(sphere);


   // Generate a vector of actors (particles)
   std::vector<vtkSmartPointer<vtkActor> > actors;	
   for(unsigned int i = 0; i < 3; i++)
    {
	vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
	sphereSource->SetCenter(0.0,2.5,0.0);
	sphereSource->SetRadius(0.2);
	
	vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	mapper->SetInputConnection(sphereSource->GetOutputPort());
	
	vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
	actor->SetMapper(mapper);
	actor->GetProperty()->SetColor(1.0,1.0,1.0);
	actors.push_back(actor);
	
	ren1->AddActor(actors[i]);
    }
	
	
  // Create an Animation Scene
  vtkSmartPointer<vtkAnimationScene> scene = vtkSmartPointer<vtkAnimationScene>::New();
  if(argc>=2 && strcmp(argv[1],"-real")==0)
    {
    cout << "real-time mode" << endl;
    scene->SetModeToRealTime();
    }
  else
    {
    cout << "sequence mode" << endl;
    scene->SetModeToSequence();
    }
  scene->SetLoop(0);
  scene->SetFrameRate(5);
  scene->SetStartTime(0);
  scene->SetEndTime(10);
  
  vtkSmartPointer<AnimationSceneObserver> sceneObserver = vtkSmartPointer<AnimationSceneObserver>::New();
  sceneObserver->SetRenderWindow(renWin);
  scene->AddObserver(vtkCommand::AnimationCueTickEvent,sceneObserver);

  // Create an Animation Cue for each actor

  vtkSmartPointer<vtkAnimationCue> cue1 = vtkSmartPointer<vtkAnimationCue>::New();
  cue1->SetStartTime(5);
  cue1->SetEndTime(10);
  scene->AddCue(cue1);

	std::vector<vtkSmartPointer<vtkAnimationCue> > cues;
	for(unsigned int j = 0; j < actors.size(); j++)
    {
	vtkSmartPointer<vtkAnimationCue> cue = vtkSmartPointer<vtkAnimationCue>::New();
	cue->SetStartTime(5);
	cue->SetEndTime(10);
	cues.push_back(cue);
	
	scene->AddCue(cues[j]);
	}	
	
	// Create an ActorAnimator for each actor;
	ActorAnimator animateSphere;
	animateSphere.SetActor(sphere);
	std::vector<double> endSphere(3);
        endSphere[0] = 0;
        endSphere[1] = -2.5;
        endSphere[2] = 0;
	animateSphere.SetEndPosition(endSphere);
	
	animateSphere.AddObserversToCue(cue1);
	
	

    std::vector<double> endPart(3);
    for(unsigned int k = 0; k < actors.size(); k++)
    {
		ActorAnimator animatePart;
		animatePart.SetActor(actors[k]);
		endPart[0] = 1.0;
		endPart[1] = 2.5;
		endPart[2] = 0;
		animatePart.SetEndPosition(endPart);
		
		animatePart.AddObserversToCue(cues[k]);
	}	

  renWin->Render();
  ren1->ResetCamera();
  ren1->GetActiveCamera()->Dolly(0.5);
  ren1->ResetCameraClippingRange();

  // Create Cue observer.
  scene->Play();
  scene->Stop();
  
  iren->Start();
  return EXIT_SUCCESS;
}

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130117/ce7a5df3/attachment.htm>


More information about the vtkusers mailing list