vtkDearImGUIInjector
vtkDearImGUIInjector copied to clipboard
any way this can work with python
I've tried for several hours to port this to python and vtk shows up but no imgui... can it be done?
"""
vtk_imgui_cone_vtkobject.py
Faithful Python port of vtkDearImGUIInjector (inherits from vtkObject, full keymap, no render-to-texture).
"""
import sys
import imgui
from imgui.integrations.opengl import ProgrammablePipelineRenderer
import OpenGL.GL as gl
from vtkmodules.vtkRenderingCore import (
vtkRenderer,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkActor,
vtkPolyDataMapper,
)
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonCore import vtkObject
# noinspection PyUnresolvedReferences
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersSources import vtkSphereSource
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
# --------------------------------------------------------------------
def _vtk_callback_wrapper(pyfunc):
def _cb(caller, event):
try:
pyfunc(caller, event)
except Exception:
import traceback
traceback.print_exc()
return _cb
# --------------------------------------------------------------------
class VTKDearImGuiInjector(vtkObject):
"""Faithful Python port of the C++ vtkDearImGUIInjector."""
def __init__(self, rw: vtkRenderWindow, iren: vtkRenderWindowInteractor):
super().__init__()
self.SetReferenceCount(1)
self.rw = rw
self.iren = iren
# --- ImGui setup ---
imgui.create_context()
self.io = imgui.get_io()
#self.io.config_flags |= imgui.CONFIG_FLAGS_DOCKING_ENABLE
#self.io.config_flags |= imgui.CONFIG_FLAGS_NAV_ENABLE_KEYBOARD
w, h = self.rw.GetSize()
self.io.display_size = (float(w), float(h))
self.io.mouse_down[0] = False
self.io.mouse_down[1] = False
self.io.mouse_down[2] = False
self.io.mouse_wheel = 0.0
# Faithful port: add missing flags/state
self.FinishedSetup = False
self.Focused = True
self.GrabMouse = False
self.GrabKeyboard = False
self.ShowDemo = True
self.ShowAppMetrics = False
self.ShowAppStyleEditor = False
self.ShowAppAbout = False
self.MouseJustPressed = [False, False, False]
self.Time = 0.0
# Custom event types
self.ImGuiDrawEvent = 1001
self.ImGuiSetupEvent = 1002
self.ImGuiTearDownEvent = 1003
# VTK render + input hooks
self._renderer_initialized = False
# Add event observers to match C++
self._start_tag = self.rw.AddObserver("StartEvent", _vtk_callback_wrapper(self._on_start))
self._render_tag = self.rw.AddObserver("EndEvent", _vtk_callback_wrapper(self._on_first_render))
self._render_event_tag = self.rw.AddObserver("RenderEvent", _vtk_callback_wrapper(self._on_render_event))
self._exit_tag = self.iren.AddObserver("ExitEvent", _vtk_callback_wrapper(self._on_exit))
self._imgui_render_tag = None
self._bind_input_events()
def _on_start(self, caller, event):
print("VTK StartEvent received.")
def _on_render_event(self, caller, event):
print("VTK RenderEvent received, running ImGui frame...")
if not getattr(self, "renderer", None):
return
self.rw.MakeCurrent()
blend_enabled = gl.glIsEnabled(gl.GL_BLEND)
print(f"GL_BLEND enabled before ImGui: {blend_enabled}")
gl_blend_src = gl.glGetIntegerv(gl.GL_BLEND_SRC)
gl_blend_dst = gl.glGetIntegerv(gl.GL_BLEND_DST)
print(f"GL_BLEND_SRC: {gl_blend_src}, GL_BLEND_DST: {gl_blend_dst}")
gl.glEnable(gl.GL_BLEND)
gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
print("Starting ImGui new frame (RenderEvent)...")
imgui.new_frame()
imgui.show_demo_window()
imgui.render()
draw_data = imgui.get_draw_data()
print(f"ImGui draw_data type: {type(draw_data)}")
self.rw.MakeCurrent()
self.renderer.render(draw_data)
print("ImGui overlay rendered (RenderEvent).")
blend_enabled = gl.glIsEnabled(gl.GL_BLEND)
print(f"GL_BLEND enabled after ImGui: {blend_enabled}")
gl_blend_src = gl.glGetIntegerv(gl.GL_BLEND_SRC)
gl_blend_dst = gl.glGetIntegerv(gl.GL_BLEND_DST)
print(f"GL_BLEND_SRC: {gl_blend_src}, GL_BLEND_DST: {gl_blend_dst}")
def _on_exit(self, caller, event):
print("VTK ExitEvent received. Shutting down ImGui.")
self.shutdown()
def inject(self, iren):
self.iren = iren
self._bind_input_events()
# Add timer callback for ImGui overlay
print("Adding ImGui timer callback...")
iren.AddObserver("TimerEvent", _vtk_callback_wrapper(self._imgui_timer_callback))
iren.CreateRepeatingTimer(10) # 10 ms interval
def setup(self):
# Windows key mapping (faithful port)
self.keymap = self._build_keymap()
# Print the OpenGL window backend class name before initializing ImGui renderer
print(f"ImGui setup: VTK RenderWindow backend is {self.rw.GetClassName()}")
# Match C++: set platform name and window handle if available (only if attributes exist)
if hasattr(self.io, "backend_platform_name"):
self.io.backend_platform_name = self.rw.GetClassName()
if hasattr(self.io, "ime_window_handle"):
if hasattr(self.rw, "GetGenericWindowId"):
self.io.ime_window_handle = self.rw.GetGenericWindowId()
# Initialize ImGui OpenGL renderer
try:
self.renderer = ProgrammablePipelineRenderer()
self.FinishedSetup = True
# Optionally: invoke a setup event/callback here if you want to match C++ event system
except Exception as e:
print(f"Failed to initialize ImGui OpenGL renderer: {e}")
self.renderer = None
self.FinishedSetup = False
def _on_first_render(self, caller, event):
# Only initialize if window is mapped (visible)
print("First VTK EndEvent received, initializing ImGui OpenGL renderer...")
if not self._renderer_initialized and self.rw.GetMapped():
print("VTK window is mapped, initializing ImGui OpenGL renderer...")
try:
print("Initializing ImGui OpenGL renderer...")
self.renderer = ProgrammablePipelineRenderer()
self._renderer_initialized = True
# Now hook up ImGui frame rendering to EndEvent
if self._imgui_render_tag is None:
self._imgui_render_tag = self.rw.AddObserver("EndEvent", _vtk_callback_wrapper(self._on_render))
print("ImGui OpenGL renderer initialized after first VTK EndEvent.")
except Exception as e:
print(f"Failed to initialize ImGui OpenGL renderer: {e}")
self.renderer = None
self._renderer_initialized = False
# Remove this observer after first call
self.rw.RemoveObserver(self._render_tag)
# UI state
self.float_value = 0.5
self.show_demo = True
self.keymap = self._build_keymap()
print(f"{self.GetClassName()} initialized (inherits vtkObject).")
# ----------------------------------------------------------------
def _bind_input_events(self):
iren = self.iren
for ev in [
"MouseMoveEvent", "LeftButtonPressEvent", "LeftButtonReleaseEvent",
"MiddleButtonPressEvent", "MiddleButtonReleaseEvent",
"RightButtonPressEvent", "RightButtonReleaseEvent",
"MouseWheelForwardEvent", "MouseWheelBackwardEvent",
"KeyPressEvent", "KeyReleaseEvent",
]:
iren.AddObserver(ev, _vtk_callback_wrapper(getattr(self, "_on_" + ev.split("Event")[0].lower(), self._on_key)))
# ----------------------------------------------------------------
def _build_keymap(self):
# Windows virtual key codes
VK = {
"Left": 0x25,
"Right": 0x27,
"Up": 0x26,
"Down": 0x28,
"Prior": 0x21,
"Next": 0x22,
"Home": 0x24,
"End": 0x23,
"Insert": 0x2D,
"Delete": 0x2E,
"BackSpace": 0x08,
"space": 0x20,
"Return": 0x0D,
"Escape": 0x1B,
"Tab": 0x09,
}
for i in range(1, 13):
VK[f"F{i}"] = 111 + i
return VK
# ----------------------------------------------------------------
def _on_mousemove(self, caller, event):
x, y = self.iren.GetEventPosition()
w, h = self.rw.GetSize()
self.io.mouse_pos = (x, h - y)
def _on_leftbuttonpress(self, c, e): self.io.mouse_down[0] = True
def _on_leftbuttonrelease(self, c, e): self.io.mouse_down[0] = False
def _on_middlebuttonpress(self, c, e): self.io.mouse_down[1] = True
def _on_middlebuttonrelease(self, c, e): self.io.mouse_down[1] = False
def _on_rightbuttonpress(self, c, e): self.io.mouse_down[2] = True
def _on_rightbuttonrelease(self, c, e): self.io.mouse_down[2] = False
def _on_mousewheelforward(self, c, e): self.io.mouse_wheel += 1.0
def _on_mousewheelbackward(self, c, e): self.io.mouse_wheel -= 1.0
def _on_key(self, caller, event):
key_sym = self.iren.GetKeySym()
is_press = event == "KeyPressEvent"
# Use Windows VK codes for key mapping
if key_sym in self.keymap:
code = self.keymap[key_sym]
if code >= 0 and code < len(self.io.keys_down):
self.io.keys_down[code] = is_press
elif len(key_sym) == 1:
self.io.keys_down[ord(key_sym.upper())] = is_press
# Modifiers
self.io.key_ctrl = self.iren.GetControlKey()
self.io.key_shift = self.iren.GetShiftKey()
self.io.key_alt = self.iren.GetAltKey()
self.io.key_super = False
# ----------------------------------------------------------------
def _on_render(self, caller, event):
# Disable ImGui rendering in EndEvent for now
pass
def _imgui_timer_callback(self, obj, event):
# Timer callback to render ImGui overlay after VTK frame
print("ImGui timer callback running...")
if not getattr(self, "renderer", None):
return
self.rw.MakeCurrent()
gl.glEnable(gl.GL_BLEND)
gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
imgui.new_frame()
imgui.show_demo_window()
imgui.render()
draw_data = imgui.get_draw_data()
self.renderer.render(draw_data)
print("ImGui overlay rendered (timer callback).")
# ----------------------------------------------------------------
def shutdown(self):
# Remove all observers added for event hooks
for tag in [getattr(self, '_start_tag', None), getattr(self, '_render_tag', None), getattr(self, '_render_event_tag', None), getattr(self, '_exit_tag', None)]:
try:
if tag is not None:
self.rw.RemoveObserver(tag)
except Exception:
pass
if hasattr(self, "renderer") and self.renderer:
try:
self.renderer.shutdown()
except Exception:
pass
# Only destroy ImGui context if valid
try:
if imgui.get_current_context() is not None:
imgui.destroy_context()
except Exception:
pass
# --------------------------------------------------------------------
def main():
colors = vtkNamedColors()
sphereSource = vtkSphereSource()
sphereSource.SetCenter(0.0, 0.0, 0.0)
sphereSource.SetRadius(5)
# Create a mapper and actor
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(sphereSource.GetOutputPort())
actor = vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(colors.GetColor3d('MistyRose'))
# Setup a renderer, render window, and interactor
# Use vtkRenderWindow instead of vtkGenericOpenGLRenderWindow
from vtkmodules.vtkRenderingCore import vtkRenderWindow, vtkRenderer
renderer = vtkRenderer()
renderWindow = vtkRenderWindow()
print("VTK RenderWindow backend:", renderWindow.GetClassName())
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
# Add the actor to the scene
renderer.AddActor(actor)
renderer.SetBackground(colors.GetColor3d('SlateGray'))
# Render and interact
print("Calling renderWindow.Render()...")
renderWindow.Render()
print("Render complete. Setting window name...")
renderWindow.SetWindowName('WindowTitle')
print("Starting VTKDearImGuiInjector...")
injector = VTKDearImGuiInjector(renderWindow, renderWindowInteractor)
injector.inject(renderWindowInteractor)
injector.setup()
print("Starting VTK event loop...")
renderWindowInteractor.Start()
print("VTK event loop exited. Shutting down ImGui injector...")
injector.shutdown()
if __name__ == "__main__":
main()
output
VTK RenderWindow backend: vtkWin32OpenGLRenderWindow
Calling renderWindow.Render()...
Render complete. Setting window name...
Starting VTKDearImGuiInjector...
Adding ImGui timer callback...
ImGui setup: VTK RenderWindow backend is vtkWin32OpenGLRenderWindow
Starting VTK event loop...
ImGui timer callback running...
ImGui overlay rendered (timer callback).
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
First VTK EndEvent received, initializing ImGui OpenGL renderer...
VTK window is mapped, initializing ImGui OpenGL renderer...
Initializing ImGui OpenGL renderer...
ImGui OpenGL renderer initialized after first VTK EndEvent.
vtkObject initialized (inherits vtkObject).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
VTK StartEvent received.
VTK RenderEvent received, running ImGui frame...
GL_BLEND enabled before ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
Starting ImGui new frame (RenderEvent)...
ImGui draw_data type: <class 'imgui.core._DrawData'>
ImGui overlay rendered (RenderEvent).
GL_BLEND enabled after ImGui: 1
GL_BLEND_SRC: 770, GL_BLEND_DST: 771
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
ImGui timer callback running...
ImGui overlay rendered (timer callback).
VTK ExitEvent received. Shutting down ImGui.
VTK event loop exited. Shutting down ImGui injector...