[vtkusers] Camera is not updated

Cory Quammen cory.quammen at kitware.com
Wed Aug 26 10:14:16 EDT 2015


Jens,

The resetCamera() call is likely causing your problems. It resets the
camera so that all visible objects in the renderer are displayed, so it
will overwrite the position that you set.

It's a bit of a mystery to me why the callback that creates a new camera
doesn't behave the same as the one that uses the active camera. Perhaps the
active camera returned by getActiveCamera() is not the same as the
renderer's active camera.

HTH,
Cory

On Tue, Aug 18, 2015 at 12:55 PM, Jens Schmidt <jens.g.w.schmidt at gmx.de>
wrote:

> Dear Cory,
>
> thank you for your reply! It took some time to identify the problem
> further.
> Please find at the very bottom of this mail a test implementation (java)
> showing the problem. The code creates a simple view showing some spheres
> and two buttons. The first button uses the camera present, the second one
> creates a new camera.
> They should behave the same, but don't. I think it is the resetCamera()
> method. Maybe i use it wrong? The relevant code is in the
> selectionListeners for the buttons.
>
> Best regards
> Jens
>
>
>
> Am 29.07.2015 um 03:48 schrieb Cory Quammen:
>
> Jens,
>
> Please remember to "reply-all" so that others on the list may benefit from
> or contribute to the conversation.
>
> Do you have a small code sample that reproduces the issue? This kind of
> camera manipulation followed by rendering is done all the time (see [1],
> for example), so I'm not sure what is going on.
>
> Thanks,
> Cory
>
> [1]
> http://www.vtk.org/gitweb?p=VTK.git;a=blob;f=Examples/Tutorial/Step3/Java/Cone3.java;h=91e003825bca66e275c22658019b6c52ef1afb75;hb=HEAD
>
> On Tue, Jul 28, 2015 at 7:42 AM, Jens Schmidt <jens.g.w.schmidt at gmx.de>
> wrote:
>
>> Cory,
>>
>> thx for your reply! Yep called render each time i changed the camera.
>> But the only time the camera did what i wanted was with the new camera
>> object and setActiveCamera.
>>
>> Best regards
>> Jens
>>
>>
>>
>> Am 27.07.2015 um 20:31 schrieb Cory Quammen:
>>
>>> Jens,
>>>
>>> Did you try calling your render window's Render() member function after
>>> changing the camera properties? Rendering updates are not performed
>>> automatically when you change just camera properties. This is actually
>>> good
>>> because it prevents too many renderings when you update more than one
>>> camera property.
>>>
>>> HTH,
>>> Cory
>>>
>>> On Mon, Jul 27, 2015 at 1:46 PM, Jens Schmidt <jens.g.w.schmidt at gmx.de>
>>> wrote:
>>>
>>> Hi Everyone!
>>>>
>>>> VTK rocks, but we knew that allready. ^^ What rocks less is that the
>>>> camera ist not automatically updated when SetPosition or SetFocalPoint
>>>> are
>>>> called.
>>>> Btw i am using the java wrapping with SWT. VtkAbstractComponent has a
>>>> reference to the active camera.
>>>> Using that had no effect, as was using the renderers GetActiveCamera
>>>> method.
>>>> In fact i have to create a new vtkCamera, modify that an then pass it to
>>>> the renderer as new active camera -> tada change on the screen.
>>>> Did i do something wrong or is that how it is supposed to work?
>>>>
>>>> Thank you
>>>> Jens
>>>> _______________________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Please keep messages on-topic and check the VTK FAQ at:
>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>>
>>>> Search the list archives at: http://markmail.org/search/?q=vtkusers
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://public.kitware.com/mailman/listinfo/vtkusers
>>>>
>>>>
>>>
>>>
>>
>
>
> --
> Cory Quammen
> R&D Engineer
> Kitware, Inc.
>
>
>
> Code below here:
> ==============
>
> package CamTest;
>
> import org.eclipse.swt.SWT;
> import org.eclipse.swt.events.SelectionAdapter;
> import org.eclipse.swt.events.SelectionEvent;
> import org.eclipse.swt.layout.GridData;
> import org.eclipse.swt.layout.GridLayout;
> import org.eclipse.swt.widgets.Button;
> import org.eclipse.swt.widgets.Composite;
> import org.eclipse.swt.widgets.Display;
> import org.eclipse.swt.widgets.Shell;
> import org.vtk.VTKLoader;
>
> import vtk.vtkActor;
> import vtk.vtkCamera;
> import vtk.vtkPolyDataMapper;
> import vtk.vtkSphereSource;
> import vtk.rendering.swt.vtkSwtComponent;
>
> public class CamTest {
>
>     class vtkView extends vtkSwtComponent {
>
>         public vtkView(Composite parentComposite) {
>             super(parentComposite);
>             renderer.SetBackground(0.1, 0.2, 0.4);
>             renderer.SetBackground2(1, 1, 1);
>             renderer.SetGradientBackground(true);
>             vtkSwtComponent.attachOrientationAxes(this);
>             update();
>         }
>
>         void setCamera(vtkCamera camera) {
>             this.camera = camera;
>             renderer.SetActiveCamera(camera);
>         }
>
>         void addSpheres(int precision, int numberInX, int numberInY, int
> numberInZ) {
>             vtkSphereSource source = new vtkSphereSource();
>             source.SetRadius(1.);
>             source.SetPhiResolution(precision);
>             source.SetThetaResolution(precision);
>
>             vtkPolyDataMapper mapper = new vtkPolyDataMapper();
>             mapper.SetInputConnection(source.GetOutputPort());
>             mapper.Update();
>
>             for (int i = 0; i < numberInX; i++) {
>                 for (int j = 0; j < numberInY; j++) {
>                     for (int k = 0; k < numberInZ; k++) {
>                         vtkActor actor = new vtkActor();
>                         actor.SetPosition(4 * i, 4 * j, 4 * k);
>                         actor.SetMapper(mapper);
>                         actor.GetProperty().BackfaceCullingOn();
>                         renderer.AddActor(actor);
>                     }
>                 }
>             }
>             update();
>             resetCamera();
>         }
>     }
>
>     private vtkView vtkView;
>
>     private CamTest() {
>         VTKLoader loader = new VTKLoader();
>         loader.loadAll();
>
>         Display display = new Display();
>         Shell shell = new Shell(display);
>         shell.setText("CamTest");
>         GridLayout layout = new GridLayout(2, false);
>         shell.setLayout(layout);
>
>         vtkView = new vtkView(shell);
>         GridData data = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
>         data.widthHint = 300;
>         data.heightHint = 300;
>         vtkView.getComponent().setLayoutData(data);
>
>         vtkView.addSpheres(10, 10, 10, 10);
>
>         Button isoButton = new Button(shell, SWT.PUSH);
>         isoButton.setText("ISO VIEW");
>         isoButton.addSelectionListener(new SelectionAdapter() {
>             @Override
>             public void widgetSelected(SelectionEvent e) {
>                 System.out.println("ISO");
>                 vtkCamera camera = vtkView.getActiveCamera();
>                 camera.SetPosition(new double[] { 1., 1., 1. });
>                 camera.SetViewUp(new double[] { 0., 0., 1. });
>                 vtkView.resetCamera();// <-- bad line
>                 vtkView.update();
>             }
>         });
>
>         Button resetButton = new Button(shell, SWT.PUSH);
>         resetButton.setText("RESET VIEW");
>         resetButton.addSelectionListener(new SelectionAdapter() {
>             @Override
>             public void widgetSelected(SelectionEvent e) {
>                 System.out.println("RESET");
>                 vtkCamera newCamera = new vtkCamera();
>                 newCamera.SetPosition(new double[] { 1., 1., 1. });
>                 newCamera.SetViewUp(new double[] { 0., 0., 1. });
>                 vtkView.setCamera(newCamera);
>                 vtkView.resetCamera();
>                 vtkView.update();
>             }
>         });
>
>         shell.pack();
>         shell.open();
>
>         while (!shell.isDisposed()) {
>             if (!display.readAndDispatch()) {
>                 display.sleep();
>             }
>         }
>         display.dispose();
>     }
>
>     public static void main(String[] args) {
>         CamTest camTest = new CamTest();
>     }
>
> }
>
>


-- 
Cory Quammen
R&D Engineer
Kitware, Inc.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20150826/1b76257a/attachment.html>


More information about the vtkusers mailing list