[vtkusers] Rotation of PolyData

Lonni Besançon lonni.besancon at gmail.com
Mon Jun 15 09:00:32 EDT 2015


Hello everyone, I've been going through the examples in the wiki for quite a
while now but for some reason I can't make the rotation/translation/scaling
of a poly dataset to work.

I would like to get some help from you as I'm completely lost on the reason
why it doesn't work.
So far my code is the following:

void Drawing::scale(float k){
	vtkSmartPointer<vtkTransform> transform
=vtkSmartPointer<vtkTransform>::New();
	transform->Scale(5,1,1);
	vtkSmartPointer<vtkTransformFilter> transformFilter =
vtkSmartPointer<vtkTransformFilter>::New();
	transformFilter->SetInputConnection(cone->GetOutputPort());
	transformFilter->SetTransform(transform);
	mapper->SetInputConnection(transformFilter->GetOutputPort());
	mainActor->SetMapper(mapper);
}

void Drawing::translate(float x, float y, float z){
	cout << "Translate: " << x << " - " << " - " << y << " - " << z << endl ;
	vtkSmartPointer<vtkTransform> transform1a =
vtkSmartPointer<vtkTransform>::New();
	transform1a->Translate(x,y,z);
	mainActor->SetUserTransform(transform1a);
	transform->Update();
}

void Drawing::rotate(float x, float y, float z){
	cout << "Rotate: " << x << " - " << " - " << y << " - " << z << endl ;
	vtkSmartPointer<vtkTransform> transform1a =
vtkSmartPointer<vtkTransform>::New();
	transform1a->PostMultiply();
	transform1a->RotateX(x);
	transform1a->RotateY(y);
	transform1a->RotateZ(z);
	mainActor->SetUserTransform(transform1a);
}

void Drawing::dummy (){
	
	// Next we create an instance of vtkConeSource and set some of its
	// properties. The instance of vtkConeSource "cone" is part of a
	// visualization pipeline (it is a source process object); it produces data
	// (output type is vtkPolyData) which other filters may process.
	//
	cone = vtkConeSource::New();
	cone->SetHeight( 3.0 );
	cone->SetRadius( 1.0 );
	cone->SetResolution( 10 );

	//
	// In this example we terminate the pipeline with a mapper process object.
	// (Intermediate filters such as vtkShrinkPolyData could be inserted in
	// between the source and the mapper.)  We create an instance of
	// vtkPolyDataMapper to map the polygonal data into graphics primitives. We
	// connect the output of the cone souece to the input of this mapper.
	//
	mapper = vtkPolyDataMapper::New();
	mapper->SetInputConnection( cone->GetOutputPort() );

	//
	// Create an actor to represent the cone. The actor orchestrates rendering
	// of the mapper's graphics primitives. An actor also refers to properties
	// via a vtkProperty instance, and includes an internal transformation
	// matrix. We set this actor's mapper to be coneMapper which we created
	// above.
	//
	mainActor = vtkActor::New();
	mainActor->SetMapper( mapper );

	//
	// Create the Renderer and assign actors to it. A renderer is like a
	// viewport. It is part or all of a window on the screen and it is
	// responsible for drawing the actors it has.  We also set the background
	// color here.
	//
	ren = vtkRenderer::New();
	ren->AddActor( mainActor );
	ren->SetBackground( 0.1, 0.2, 0.4 );

	//
	// Finally we create the render window which will show up on the screen.
	// We put our renderer into the render window using AddRenderer. We also
	// set the size to be 300 pixels by 300.
	//
	win = vtkRenderWindow::New();
	win->AddRenderer( ren );
	win->SetSize( 300, 300 );

	//
	// The vtkRenderWindowInteractor class watches for events (e.g., keypress,
	// mouse) in the vtkRenderWindow. These events are translated into
	// event invocations that VTK understands (see VTK/Common/vtkCommand.h
	// for all events that VTK processes). Then observers of these VTK
	// events can process them as appropriate.
	vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
	iren->SetRenderWindow(win);

	//
	// By default the vtkRenderWindowInteractor instantiates an instance
	// of vtkInteractorStyle. vtkInteractorStyle translates a set of events
	// it observes into operations on the camera, actors, and/or properties
	// in the vtkRenderWindow associated with the vtkRenderWinodwInteractor.
	// Here we specify a particular interactor style.
	vtkInteractorStyleMultiTouchCamera *style =
	vtkInteractorStyleMultiTouchCamera::New();
	iren->SetInteractorStyle(style);
	iren->Initialize();
	iren->Start();

	//
	// Free up any objects we created. All instances in VTK are deleted by
	// using the Delete() method.
	//
	cone->Delete();
	mapper->Delete();
	mainActor->Delete();
	ren->Delete();
	win->Delete();
	iren->Delete();
	style->Delete();

}

As you can see I've tried different methods so far in the rotate or scale or
translate but none of them work and I'm completely puzzled since I don't
understand the reason why.

Any help will be greatly appreciated.

Have a good day,






--
View this message in context: http://vtk.1045678.n5.nabble.com/Rotation-of-PolyData-tp5732340.html
Sent from the VTK - Users mailing list archive at Nabble.com.


More information about the vtkusers mailing list