Bloops
Bloops

Reputation: 485

How to position a vtkActor2D in the upper right corner?

How can I position a vtkActor2D relative to the upper right corner of the render window? I am using the following code to load an image and display it as an overlay on my 3D scene:

vtkPNGReader pngReader = vtkPNGReader.New();
pngReader.SetFileName("image.png");
pngReader.Update();

vtkImageMapper imageMapper = vtkImageMapper.New();
imageMapper.SetInputConnection(pngReader.GetOutputPort());
imageMapper.SetColorWindow(255);
imageMapper.SetColorLevel(127.5);

vtkActor2D imageActor = vtkActor2D.New();
imageActor.SetMapper(imageMapper);

vtkRenderer renderer = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();
renderer.AddActor2D(imageActor);

I know I can set the actor's position using

imageActor.SetPosition(42, 42);

but this is, of course, relative to the lower left corner. So how can I specify that the image is drawn relative to (respectively in) the upper right corner of the render window and stays in its relative position even during a resize of the render window? I searched the internet for several hours now but could not even find a hint.

Upvotes: 3

Views: 1999

Answers (1)

David Doria
David Doria

Reputation: 10273

You could observe the ModifiedEvent on the vtkRenderWindow and check if its GetSize method returns different values than the last time you observed the event. Then you can use GetSize - [your position] to set the coordinates of your actor.

Upvotes: 5

Related Questions