[vtkusers] giving renderwindow a name

David Doria daviddoria+vtk at gmail.com
Thu Jan 7 14:16:19 EST 2010


On Thu, Jan 7, 2010 at 11:52 AM, Bryan P. Conrad <conrabp at ortho.ufl.edu> wrote:
> Michael,
>
> I am not sure about how to programmatically align the renderwindows, but as
> for your question about displaying multiple render windows, I think the
> problem is that once you call windowinteractor.Start(), the render window
> will block the code from continuing until the interaction is terminated.
> You can work around this by calling Render() on each of the windows before
> you call Start().  Based on what it sounds like you are doing, it looks like
> you might be interested in looking at using one render window with multiple
> renderers in separate viewports.  This will allow you to display different
> scenes in each renderer, but you will only have to manage one render
> window.  I have attached examples of both scenarios below:
>
>
>
>
>
> import vtk
>
>
>
> def main():
>
>     '''multiple render windows'''
>
>     iren_list = []
>
>     for i in range(4):
>
>         rw = vtk.vtkRenderWindow()
>
>         ren = vtk.vtkRenderer()
>
>         rw.AddRenderer(ren)
>
>         iren = vtk.vtkRenderWindowInteractor()
>
>         iren.SetRenderWindow(rw)
>
>         rw.Render()
>
>         rw.SetWindowName('RW: '+str(i))
>
>         iren_list.append(iren)
>
>         #Create a sphere
>
>         sphereSource = vtk.vtkSphereSource()
>
>         sphereSource.SetCenter(0.0, 0.0, 0.0)
>
>         sphereSource.SetRadius(5)
>
>
>
>         #Create a mapper and actor
>
>         mapper = vtk.vtkPolyDataMapper()
>
>         mapper.SetInputConnection(sphereSource.GetOutputPort())
>
>         actor = vtk.vtkActor()
>
>         actor.SetMapper(mapper)
>
>         ren.AddActor(actor)
>
>         ren.ResetCamera()
>
>
>
>     iren_list[-1].Start()
>
>
>
>
>
> def main2():
>
>     '''One render window, multiple viewports'''
>
>     iren_list = []
>
>     rw = vtk.vtkRenderWindow()
>
>     iren = vtk.vtkRenderWindowInteractor()
>
>     iren.SetRenderWindow(rw)
>
>     # Define viewport ranges
>
>     xmins=[0,.5,0,.5]
>
>     xmaxs=[0.5,1,0.5,1]
>
>     ymins=[0,0,.5,.5]
>
>     ymaxs=[0.5,0.5,1,1]
>
>     for i in range(4):
>
>         ren = vtk.vtkRenderer()
>
>         rw.AddRenderer(ren)
>
>         ren.SetViewport(xmins[i],ymins[i],xmaxs[i],ymaxs[i])
>
>
>
>         #Create a sphere
>
>         sphereSource = vtk.vtkSphereSource()
>
>         sphereSource.SetCenter(0.0, 0.0, 0.0)
>
>         sphereSource.SetRadius(5)
>
>
>
>         #Create a mapper and actor
>
>         mapper = vtk.vtkPolyDataMapper()
>
>         mapper.SetInputConnection(sphereSource.GetOutputPort())
>
>         actor = vtk.vtkActor()
>
>         actor.SetMapper(mapper)
>
>         ren.AddActor(actor)
>
>         ren.ResetCamera()
>
>
>
>     rw.Render()
>
>     rw.SetWindowName('RW: Multiple ViewPorts')
>
>     iren.Start()
>
>
>
>
>
> if __name__ == '__main__':
>
>     main()
>
>     main2()
>
>
>
>
>
>
>
> ____________________________
>
> Bryan P. Conrad, Ph.D.
>
> Senior Engineer
>
>
>
> Department of Orthopaedics and Rehabilitation
>
> University of Florida
>
> PO Box 112727
>
> Gainesville, FL 32611
>
> Phone: 352.273.7412
>
> Fax: 352.273.7407
>
> ________________________________
>
> From: vtkusers-bounces at vtk.org [mailto:vtkusers-bounces at vtk.org] On Behalf
> Of michiel mentink
> Sent: Thursday, January 07, 2010 6:45 AM
> To: David Doria
>
> Cc: vtkusers at vtk.org
> Subject: Re: [vtkusers] giving renderwindow a name
>
>
>
> thanks guys, I've the title working now.
>
> For a touch of perfection; is there a way to automatically set the window
> coordinates so that the windows are aligned wherever you want them?
> (i.e. next to each other?)
>
>
> And one last question: after the first render window has been created, the
> program waits for me to press 'q' to continue the program. Is
> there a way for the program to continue without pressing 'q'?
>
> I tried: renwindow->Finalize(); // doesn't do anything
>
> windowinteractor->TerminateApp(); // this closes the application altogether
> when 'q' is pressed
>
> windowinteractor->UnRegister(); // error: no matching function call
>                                                // note: candidates are:
> virtual void vtkRenderWindowInteractor::UnRegister(vtkObjectBase*)
>
> windowinteractor->CreateOneShotTimer(1); // doesn't release focus
>
> I'd just like all windows to pop up as soon as possible and be able to
> manipulate them with my mouse whenever I'd like to.
> At this point I can manipulate all renderwindows fine, I'd just like the
> windows to appear without having to press 'q'.
>
> cheers, Michael
>
> On Tue, Jan 5, 2010 at 10:42 PM, David Doria <daviddoria+vtk at gmail.com>
> wrote:
>
> On Tue, Jan 5, 2010 at 5:22 PM, Bryan P. Conrad <conrabp at ortho.ufl.edu>
> wrote:
>> I have only done this in python, not C++, but I think the trick is to use
>> the method "SetWindowName" and it has to be called *after* the renderWindow
>> is rendered the first time.  See the python code below (copied from David's
>> C++ example), for a version that works on my machine.
>>
>> import vtk
>>
>> def main():
>>    #Create a sphere
>>    sphereSource = vtk.vtkSphereSource()
>>    sphereSource.SetCenter(0.0, 0.0, 0.0)
>>    sphereSource.SetRadius(5)
>>
>>    #Create a mapper and actor
>>    mapper = vtk.vtkPolyDataMapper()
>>    mapper.SetInputConnection(sphereSource.GetOutputPort())
>>    actor = vtk.vtkActor()
>>    actor.SetMapper(mapper)
>>
>>    # Setup a renderer, render window, and interactor
>>    renderer = vtk.vtkRenderer()
>>    renderWindow = vtk.vtkRenderWindow()
>>    #renderWindow.SetWindowName("Test")
>>
>>    renderWindow.AddRenderer(renderer);
>>    renderWindowInteractor = vtk.vtkRenderWindowInteractor()
>>    renderWindowInteractor.SetRenderWindow(renderWindow)
>>
>>    #Add the actor to the scene
>>    renderer.AddActor(actor)
>>    renderer.SetBackground(1,1,1) # Background color white
>>
>>    #Render and interact
>>    renderWindow.Render()
>>
>>    #*** SetWindowName after renderWindow.Render() is called***
>>    renderWindow.SetWindowName("Test")
>>
>>    renderWindowInteractor.Start()
>>
>>
>> if __name__ == '__main__':
>>    main()
>>
>> ____________________________
>> Bryan P. Conrad, Ph.D.
>> Senior Engineer
>>
>> Department of Orthopaedics and Rehabilitation
>> University of Florida
>> PO Box 112727
>> Gainesville, FL 32611
>> Phone: 352.273.7412
>> Fax: 352.273.7407
>>
>> -----Original Message-----
>> From: vtkusers-bounces at vtk.org [mailto:vtkusers-bounces at vtk.org] On Behalf
>> Of David Doria
>> Sent: Tuesday, January 05, 2010 2:07 PM
>> Cc: vtkusers at vtk.org
>> Subject: Re: [vtkusers] giving renderwindow a name
>>
>> On Tue, Jan 5, 2010 at 11:25 AM, michiel mentink
>> <michael.mentink at st-hughs.ox.ac.uk> wrote:
>>> I'm trying to give a renderwindow a title.
>>>
>>> I'm using the following code to create a window. So far so good.
>>>
>>>   // create a renderer
>>>   vtkSmartPointer<vtkRenderer> renderer =
>>>     vtkSmartPointer<vtkRenderer>::New();
>>>   renderer->AddActor(actor);
>>>
>>>   // create a render window
>>>   vtkSmartPointer<vtkRenderWindow> renwin =
>>>     vtkSmartPointer<vtkRenderWindow>::New();
>>>   renwin->AddRenderer(renderer);
>>>
>>>
>>>   // create an interactor
>>>   vtkSmartPointer<vtkRenderWindowInteractor> iren =
>>>     vtkSmartPointer<vtkRenderWindowInteractor>::New();
>>>   iren->SetRenderWindow(renwin);
>>>     renwin->SetSize(640, 480);
>>>
>>>   iren->Initialize();
>>>   iren->Start();
>>>
>>>
>>> ///////////end code////////
>>>
>>> Before iren->initialize, I tried the following:
>>>
>>>       iren->SetWindowInfo( "window1" );
>>>      renwin->SetWindowInfo( "window1");
>>>
>>> and also ->SetWindowId("window1");
>>> and ->SetWindowName("window1");
>>>
>>> but it keeps giving me error messages upon compiling:
>>>
>>> 'class vtkRenderWindowInteractor' has no member named 'SetWindowInfo'
>>> or
>>> error: 'renWin' was not declared in this scope
>>>
>>>
>>> It's probably a simple mistake, but I'm still beginning to understand
>>> VTK.
>>> Can anybody point me in the right direction?
>>>
>>> Kind regards, Michael
>>>
>>>
>>
>> I setup an example if anyone cares to play with it to get it to work:
>> http://www.cmake.org/Wiki/VTK/Examples/WindowTitle
>>
>> Thanks,
>>
>> David
>
> Thanks Bryan, that did the trick.
>
> The example can be found here (c++):
>
> http://www.cmake.org/Wiki/VTK/Examples/WindowTitle
>
> and here(python): http://www.cmake.org/Wiki/VTK/Examples/Python/WindowTitle
>
> Thanks,
>
> David
> _______________________________________________
> 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
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>
>

If anyone cares to demo multiple render windows or multiple viewports,
I've made a spot for them here:

http://www.vtk.org/Wiki/VTK/Examples/MultipleRenderWindows
http://www.vtk.org/Wiki/VTK/Examples/MultipleViewports

Thanks,

David



More information about the vtkusers mailing list