[vtkusers] How to add vtkRenderWindowInteractor to a native	Cocoa window
    Elvis Dowson 
    elvis.dowson at mac.com
       
    Thu Oct 23 14:06:50 EDT 2008
    
    
  
Hi Clint,
                     I just took a quick look at the QVTKInteractor  
class (currently defined inside the QVTKWidget source files).
Here are some initial thoughts.
QVTKInteractor Specifications
The new QVTKInteractor class should work with a QGraphicsView. One  
should be able to perform off-screen rendering using VTK in off-screen  
mode and render VTK images in a QGraphicsScene contained in a  
QGraphicsView. The QGraphicsScene will take care of rendering  
QTWidgets on top of the VTK generated OpenGL images. The  
QVTKInteractor class shall be derived from vtkRenderWindowInteractor,  
and be able to process mouse movements from the QGraphicsView.
QVTKInteractor Design
QVTKInteractor::SetGraphicsView(QGraphicsView* ) method
In terms of design, the QVTKInteractor should be able to attach itself  
to a QGraphicsView via a SetGraphicsView(QGraphicsView* ) method.
I am not going to implement the vtkSetRenderWindow(vtkRenderWindow* )  
method since we don't have a vtkRenderWindow here when using a  
framebuffer object, plus it is the wrong place to attach an  
interactor, since all the interaction is going to take place in the  
view and not the vtkRenderWindow.
Signals & Slots
Implement signals within the view (a QGrahicsView subclass), so that a  
signal will be emitted whenever a mouse event occurs. See: Qt 4.4.3:  
Signals and Slots
Q_SIGNALS:
   // Description:
   // This signal will be emitted whenever a mouse event occurs
   // within the QVTK window
   void mouseEvent(QMouseEvent* event);
Implement a slot in QVTKInteractor to handle mouse events. This will  
need to internally interface with VTK.
public Q_SLOTS:
  // Description:
  // This slot will be automatically invoked whenever a mouse event  
occurs
   void mouseEvent(); 	
Question 01: I was wondering if I should internally pass these  
commands to the off screen vtkRenderWindow instance? Suppose at some  
point, I do get rid of the un-necessary vtkRenderWindow, when  
performing off-screen rendering, can I still pass interactor events to  
VTK to interact with the VTK scene, in off-screen mode?
Summary
In terms of usage, one would need to subclass from QGraphicsView and  
emit a signal on mouse move.
The QVTKInteractor associated with the QGraphicsView will process the  
mouse movements using its slot, and send these commands to the off- 
screen vtk OpenGL rendering context.
It seems a pretty straightforward design. It has the advantage of  
being loosely coupled and strongly typed at the same time, using the  
Qt signals and slots mechanism.
I was wondering if this approach seems okay to you, and if I can  
proceed ahead with realizing a preliminary prototype?
Do also let me know if I have missed somethings here.
Admittedly, I am trying to keep the initial functionality to a minimum  
and not considering QVTKWidget compatibility in the first go. Once I  
have completed the integration with a QGraphicsView, then same parts  
can be adapted for QVTKWidget, and expose this class in a separate  
QVTKInteractor.h and QVTKInteractor.cpp file.
Best regards,
Elvis Dowson
On Oct 22, 2008, at 8:19 PM, clinton at elemtech.com wrote:
>
> I'm guessing you should be able to set up an interactor like you  
> normally
> would.  The only missing piece is taking mouse events from the  
> QGraphicsView
> and passing them off to the interactor.  You can look at  
> QVTKWidget.cxx for
> how to pass them off to the interactor.  Getting mouse events from the
> QGraphicsView is another part of the issue.
>
> If you'd like to experiment, you can try modifying the  
> QVTKInteractor to do
> event filtering on the QVTKWidget and pass events to the  
> interactor.  That
> would mean moving all the handing of mouse and key events from  
> QVTKWidget
> into QVTKInteractor.  Then you might be able to use that new  
> QVTKInteractor
> with the QGraphicsView.  If it works well, then this is something  
> that can go
> into VTK.
>
> Clint
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20081023/ece4e145/attachment.htm>
    
    
More information about the vtkusers
mailing list