BalloonWidget
Repository source: BalloonWidget
Question
If you have a question about this example, please use the VTK Discourse Forum
Code¶
BalloonWidget.py
#!/usr/bin/env python3
from dataclasses import dataclass
# noinspection PyUnresolvedReferences
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersSources import (
    vtkRegularPolygonSource,
    vtkSphereSource
)
from vtkmodules.vtkInteractionWidgets import (
    vtkBalloonRepresentation,
    vtkBalloonWidget
)
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkPolyDataMapper,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
    vtkRenderer,
    vtkTextProperty
)
def main():
    colors = vtkNamedColors()
    # Sphere.
    sphere_source = vtkSphereSource(center=(-4.0, 0.0, 0.0), radius=4.0)
    sphere_mapper = vtkPolyDataMapper()
    sphere_source >> sphere_mapper
    sphere_actor = vtkActor(mapper=sphere_mapper)
    sphere_actor.property.color = colors.GetColor3d('MistyRose')
    # Regular Polygon.
    regular_polygon_source = vtkRegularPolygonSource(center=(4.0, 0.0, 0.0), radius=4.0)
    regular_polygon_mapper = vtkPolyDataMapper()
    regular_polygon_source >> regular_polygon_mapper
    regular_polygon_actor = vtkActor(mapper=regular_polygon_mapper)
    regular_polygon_actor.property.color = colors.GetColor3d('Cornsilk')
    # A renderer and render window.
    ren = vtkRenderer(background=colors.GetColor3d('SlateGray'))
    ren_win = vtkRenderWindow(window_name='BalloonWidget')
    ren_win.AddRenderer(ren)
    # An interactor.
    iren = vtkRenderWindowInteractor()
    iren.render_window = ren_win
    # Create the widget.
    # Do not set the justification.
    text_property = vtkTextProperty(color=colors.GetColor3d('Black'),
                                    bold=False, italic=False, shadow=False,
                                    font_size=16,
                                    )
    balloon_rep = vtkBalloonRepresentation(balloon_layout=vtkBalloonRepresentation.ImageRight,
                                           text_property=text_property)
    balloon_widget = vtkBalloonWidget(interactor=iren, representation=balloon_rep)
    balloon_widget.AddBalloon(sphere_actor, 'This is a sphere')
    balloon_widget.AddBalloon(regular_polygon_actor, 'This is a regular polygon')
    # Add the actors to the scene.
    ren.AddActor(sphere_actor)
    ren.AddActor(regular_polygon_actor)
    # Render an image (lights and cameras are created automatically).
    ren_win.Render()
    balloon_widget.enabled = True
    # Begin mouse interaction.
    iren.Start()
    iren.Initialize()
@dataclass(frozen=True)
class TextProperty:
    @dataclass(frozen=True)
    class Justification:
        VTK_TEXT_LEFT: int = 0
        VTK_TEXT_CENTERED: int = 1
        VTK_TEXT_RIGHT: int = 2
    @dataclass(frozen=True)
    class VerticalJustification:
        VTK_TEXT_BOTTOM: int = 0
        VTK_TEXT_CENTERED: int = 1
        VTK_TEXT_TOP: int = 2
if __name__ == '__main__':
    main()
