[vtkusers] giving renderwindow a name
michiel mentink
michael.mentink at st-hughs.ox.ac.uk
Fri Jan 8 04:48:35 EST 2010
thank you,
that'll give me something to play with.
Michael
On Thu, Jan 7, 2010 at 7:16 PM, David Doria
<daviddoria+vtk at gmail.com<daviddoria%2Bvtk at gmail.com>
> wrote:
> 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<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
> >
> >
>
> 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
> _______________________________________________
> 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/20100108/9a1bdd61/attachment.htm>
More information about the vtkusers
mailing list