PolarAxesActor
Repository source: PolarAxesActor
Other languages
See (Cxx)
Question
If you have a question about this example, please use the VTK Discourse Forum
Code¶
PolarAxesActor.py
#!/usr/bin/env python3
import math
# noinspection PyUnresolvedReferences
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonComputationalGeometry import vtkParametricEnneper
from vtkmodules.vtkFiltersSources import vtkParametricFunctionSource
from vtkmodules.vtkInteractionWidgets import vtkCameraOrientationWidget
from vtkmodules.vtkRenderingAnnotation import vtkPolarAxesActor
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkPolyDataMapper,
    vtkRenderer,
    vtkRenderWindow,
    vtkRenderWindowInteractor
)
def main():
    colors = vtkNamedColors()
    # The source will be a parametric function.
    src = vtkParametricEnneper()
    fn_src = vtkParametricFunctionSource()
    fn_src.SetParametricFunction(src)
    # Create a mapper and actor.
    mapper = vtkPolyDataMapper()
    fn_src >> mapper
    actor = vtkActor(mapper=mapper)
    actor.property.color = colors.GetColor3d('CornflowerBlue')
    # Create a renderer, render window, and interactor.
    renderer = vtkRenderer(background=colors.GetColor3d('MidnightBlue'))
    render_window = vtkRenderWindow(size=(600, 600), window_name='PolarAxesActor')
    render_window.AddRenderer(renderer)
    render_window_interactor = vtkRenderWindowInteractor()
    render_window_interactor.render_window = render_window
    # Since we import vtkmodules.vtkInteractionStyle we can do this
    # because vtkInteractorStyleSwitch is automatically imported:
    render_window_interactor.interactor_style.SetCurrentStyleToTrackballCamera()
    bounds = fn_src.update().output.bounds
    radius = math.sqrt(abs(dot_product((bounds[0], bounds[2]), (bounds[1], bounds[3]))))
    pole = (0.0, 0.0, bounds[5])
    polar_axes_actor = vtkPolarAxesActor(pole=pole, maximum_radius=radius,
                                         requested_number_of_polar_axes=5,
                                         minimum_angle=-45.0, maximum_angle=135.0)
    axes_prop = polar_axes_actor.polar_axis_property
    axes_prop.color = colors.GetColor3d('Red')
    arcs_prop = polar_axes_actor.polar_arcs_property
    arcs_prop.color = colors.GetColor3d('Yellow')
    arcs_prop.line_width = 1.0
    polar_axes_actor.secondary_radial_axes_property = axes_prop
    polar_axes_actor.last_radial_axis_property = axes_prop
    polar_axes_actor.secondary_polar_arcs_property = arcs_prop
    # Add the actor to the scene.
    renderer.AddActor(actor)
    renderer.AddActor(polar_axes_actor)
    renderer.active_camera.parallel_projection = True
    polar_axes_actor.SetCamera(renderer.active_camera)
    renderer.ResetCamera()
    cow = vtkCameraOrientationWidget(parent_renderer=renderer,
                                     interactor=render_window_interactor)
    # Enable the widget.
    cow.On()
    # Render and interact.
    render_window.Render()
    render_window_interactor.Start()
def dot_product(v1, v2):
    total = 0.0
    for x, y in zip(v1, v2):
        total += x * y
    return total
if __name__ == '__main__':
    main()