[vtkusers] giving renderwindow a name

Bryan P. Conrad conrabp at ortho.ufl.edu
Thu Jan 7 11:52:27 EST 2010


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
<mailto:daviddoria%2Bvtk 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

 

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


More information about the vtkusers mailing list