vtkDearImGUIInjector icon indicating copy to clipboard operation
vtkDearImGUIInjector copied to clipboard

any way this can work with python

Open jtristano opened this issue 4 months ago • 0 comments

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...

jtristano avatar Oct 22 '25 13:10 jtristano