[vtk-developers] VTK and Qt5 / QML
c.sell at byterefinery.de
c.sell at byterefinery.de
Tue May 16 04:57:24 EDT 2017
just for the record (nobody care about this subject?):
I found that contrary to what I said I had NOT adhered to the
principle established with protoype 1 while implementing protoype 2.
Rather, I had directly called into the VTK interactor from the QML UI
thread. And because the VTK interactors immediately go into rendering,
all hell broke loose.
After cleaning up example 2 according to the rule laid out earlier
("store event data in RenderDelegate, call update() on the QML item,
pass the event to VTK inside RenderDelgate.Render()", all works well.
What I would like to do is validate the solution against findings made
elsewhere, and then establish the "canonical" way of integrating VTK
with QML. As I said, there are some architectural quirks with the
solution which I would also like to address.
regards,
Christian
Zitat von c.sell at byterefinery.de:
> Hello all,
>
> I am looking into the possibility of replacing the 3D rendering
> engine in my Qt5 / QML based mobile tablet-oriented application with
> VTK. What I need is a first class QtQuick integration (not a hack or
> workaround) that is 100% stable in every context (not an unusual
> requirement, I admit). To my amazement, nothing of that kind seems
> to exist (correct me if I'm wrong).
>
> I went on to investigate what had been done so far and to implement
> my first prototypes, using the QQuickFrameBufferObject approach.
> From the very start this felt like an uphill battle, because VTK
> seems to come from a Windowing background and is quite tightly
> integrated with concepts that are not valid in a QML context.
>
> I'll describe my findings together with the 2 prototypical QML items
> I implemented:
>
> 1st was an adaptation of the DICOM example which now runs as a QML
> item. All user interaction is handled by QML and forwarded to VTK
> (which is one thing that doesn't come naturally with VTK), and after
> some non-elegant tweaking I was able to have the UI move from slice
> to slice and re-render upon mouse wheel events as expected. The
> problem here was, that QML insists on keeping mouse event handling
> and OpenGL rendering on separate threads, with one "rendering
> thread" dedicated to OpenGL. However, the pre-existing VTK
> Interactors directly call Render() after reconfiguring the UI from
> the mouse event data, which is an absolute QML No-Go. I had to
> introduce a RenderDelegate that works somewhat like this:
>
> QML mouse event:
> tell RenderDelegate about the event
> call update() on the QML item, which triggers rer-endering on
> the dedicated thread
> on the QML rendering thread:
> call Render() on the RenderWindow
> inside the RenderDelegate, look at whether a mouse event is
> pending, and call the corresponding VTK mouse handler
> call the renderer's default Render() function while setting the
> delegate's "Used" flag to false
>
> 2nd was a QML item that displays a model loaded from a 3ds file. My
> goal here was to move the model around using mouse drag events. I
> took the lessons learned from the first example, threw in a
> vtkInteractorStyleTrackballCamera and hoped for the best. First
> thing I found was that I needed a specialized
> RenderWindowInteractor, which I provided. When I realized that the
> most important requirement for that class was to provide access to
> timer functionality, I already got wary, as throwing around events
> and doing stuff offline while on the QML rendering thread is never a
> good idea. My fears came true when I finished wiring everything
> together: I was able to move the model using the mouse, but after a
> few moments things got whacky with error output written to the
> console and finally a segemtation fault from deep inside VTK.
>
> I still need to investigate the second example, but would like to
> synchronize with the community at this point in order to avoid
> errors/misconceptions on my side, to seek help if possible and to
> offer my contribution to the VTK code base once this becomes
> functional. My first impression is that there are some issues that
> lie on an architectural level and cannot be (elegantly) dealt with
> on the QML side alone. Any comments?
>
> thanks,
> Christian Sell
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Search the list archives at: http://markmail.org/search/?q=vtk-developers
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/vtk-developers
More information about the vtk-developers
mailing list