Slicer3:Python:ScriptedActor

From Slicer Wiki
Jump to: navigation, search
Home < Slicer3:Python:ScriptedActor

After a conversation with Gordon Kindlmann, I (Steve Pieper) decided to try an experiment...

Question

Can python be used to tie non-VTK-aware OpenGL C++ code into VTK?

Answer

VtkOpenGLScriptedActor.png

I checked in some code to make this possible. The C++ class, vtkOpenGLScriptedActor, allows you to specify a script that should be executed inside the VTK render process. This calls out to python, where arbitrary code can be run (something like a callback).

The example script shows how to draw some simple OpenGL shapes in the same window with a VTK managed sphere. The example relies on having PyOpenGL installed in Slicer's python.

The result is shown in the image to the right.

Considerations

Making individual vertex calls through python is not advised for efficiency, however that doesn't mean this is simply a demo. In particular, there are some ways this could be applied:

  • OpenGL is moving to Vertex Buffer Objects and these are interoperable with numpy arrays, so large amounts of data can be manipulated with single calls.
  • The python code can invoke arbitrary C or C++ code through various mechanisms. If this code isn't VTK-aware, then the python code may be able to provide the needed compatibility glue.