This article is developed in Python language
When we develop 3D software, we often use the camera coordinate axis to indicate the current spatial position;
Coordinate axis effect:
Camera direction coordinate axis
Cube coordinate axis
Custom axis:
Code:
Axes
def main(): colors = vtkNamedColors() # create a Sphere sphereSource = vtkSphereSource() sphereSource.SetCenter(0.0, 0.0, 0.0) sphereSource.SetRadius(0.5) # create a mapper sphereMapper = vtkPolyDataMapper() sphereMapper.SetInputConnection(sphereSource.GetOutputPort()) # create an actor sphereActor = vtkActor() sphereActor.SetMapper(sphereMapper) # a renderer and render window renderer = vtkRenderer() renderWindow = vtkRenderWindow() renderWindow.SetWindowName('Axes') renderWindow.AddRenderer(renderer) # an interactor renderWindowInteractor = vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) # add the actors to the scene renderer.AddActor(sphereActor) renderer.SetBackground(colors.GetColor3d('SlateGray')) transform = vtkTransform() transform.Translate(1.0, 0.0, 0.0) axes = vtkAxesActor() # The axes are positioned with a user transform axes.SetUserTransform(transform) # properties of the axes labels can be set as follows # this sets the x axis label to red axes.GetXAxisCaptionActor2D().GetCaptionTextProperty().SetColor(colors.GetColor3d('Red')); # the actual text of the axis label can be changed: axes.SetXAxisLabelText('test') renderer.AddActor(axes) renderer.GetActiveCamera().Azimuth(50) renderer.GetActiveCamera().Elevation(-30) renderer.ResetCamera() renderWindow.SetWindowName('Axes') renderWindow.Render() # begin mouse interaction renderWindowInteractor.Start() if __name__ == '__main__': main()
CameraOrientationWidget
def main(): colors = vtkNamedColors() renderer = vtkRenderer() ren_win = vtkRenderWindow() interactor = vtkRenderWindowInteractor() sphere_source = vtkSphereSource() sphere_source.SetRadius(10.0) mapper = vtkPolyDataMapper() mapper.SetInputConnection(sphere_source.GetOutputPort()) actor = vtkActor() actor.GetProperty().SetColor(colors.GetColor3d('Beige')) actor.SetMapper(mapper) renderer.AddActor(actor) renderer.SetBackground(colors.GetColor3d('DimGray')) ren_win.AddRenderer(renderer) ren_win.SetSize(600, 600) ren_win.SetWindowName('CameraOrientationWidget') # Important: The interactor must be set prior to enabling the widget. interactor.SetRenderWindow(ren_win) cam_orient_manipulator = vtkCameraOrientationWidget() cam_orient_manipulator.SetParentRenderer(renderer) # Enable the widget. cam_orient_manipulator.On() ren_win.Render() interactor.Initialize() interactor.Start() if __name__ == "__main__": main()
OrientationMarkerWidget
colors = vtkNamedColors() # create a rendering window and renderer ren = vtkRenderer() ren_win = vtkRenderWindow() ren_win.AddRenderer(ren) ren_win.SetWindowName('OrientationMarkerWidget') # create a renderwindowinteractor iren = vtkRenderWindowInteractor() iren.SetRenderWindow(ren_win) cube = vtkCubeSource() cube.SetXLength(200) cube.SetYLength(200) cube.SetZLength(200) cube.Update() cm = vtkPolyDataMapper() cm.SetInputConnection(cube.GetOutputPort()) ca = vtkActor() ca.SetMapper(cm) ca.GetProperty().SetColor(colors.GetColor3d("BurlyWood")) ca.GetProperty().EdgeVisibilityOn() ca.GetProperty().SetEdgeColor(colors.GetColor3d("Red")) # assign actor to the renderer ren.AddActor(ca) ren.SetBackground(colors.GetColor3d('CornflowerBlue')) axes_actor = vtkAnnotatedCubeActor() axes_actor.SetXPlusFaceText('L') axes_actor.SetXMinusFaceText('R') axes_actor.SetYMinusFaceText('I') axes_actor.SetYPlusFaceText('S') axes_actor.SetZMinusFaceText('P') axes_actor.SetZPlusFaceText('A') axes_actor.GetTextEdgesProperty().SetColor(colors.GetColor3d("Yellow")) axes_actor.GetTextEdgesProperty().SetLineWidth(2) axes_actor.GetCubeProperty().SetColor(colors.GetColor3d("Blue")) axes = vtkOrientationMarkerWidget() axes.SetOrientationMarker(axes_actor) axes.SetInteractor(iren) axes.EnabledOn() axes.InteractiveOn() ren.ResetCamera() # enable user interface interactor iren.Initialize() ren_win.Render() ren.GetActiveCamera().Azimuth(45) ren.GetActiveCamera().Elevation(30) ren_win.Render() iren.Start()
custom OrientationMarker
colors = vtkNamedColors() reader = vtkXMLPolyDataReader() reader.SetFileName("./Human.vtp") icon_mapper = vtkDataSetMapper() icon_mapper.SetInputConnection(reader.GetOutputPort()) icon_actor = vtkActor() icon_actor.SetMapper(icon_mapper) icon_actor.GetProperty().SetColor(colors.GetColor3d('Silver')) # Set up the renderer, window, and interactor renderer = vtkRenderer() renderer.SetBackground(colors.GetColor3d('SlateGray')) ren_win = vtkRenderWindow() ren_win.AddRenderer(renderer) ren_win.SetSize(400, 400) ren_win.SetWindowName('OrientationMarkerWidget1') iren = vtkRenderWindowInteractor() iren.SetRenderWindow(ren_win) rgb = [0.0, 0.0, 0.0] colors.GetColorRGB('Wheat', rgb) # Set up the widget widget = vtkOrientationMarkerWidget() widget.SetOrientationMarker(icon_actor) widget.SetInteractor(iren) widget.SetViewport(0.0, 0.0, 0.3, 0.3) widget.SetOutlineColor(*rgb) widget.SetEnabled(1) widget.InteractiveOn() # Create a superquadric superquadric_source = vtkSuperquadricSource() superquadric_source.SetPhiRoundness(.001) superquadric_source.SetThetaRoundness(.04) # Create a mapper and actor superquadric_mapper = vtkPolyDataMapper() superquadric_mapper.SetInputConnection(superquadric_source.GetOutputPort()) superquadric_actor = vtkActor() superquadric_actor.SetMapper(superquadric_mapper) superquadric_actor.GetProperty().SetInterpolationToFlat() superquadric_actor.GetProperty().SetDiffuseColor(colors.GetColor3d('Carrot')) superquadric_actor.GetProperty().SetSpecularColor(colors.GetColor3d('White')) superquadric_actor.GetProperty().SetDiffuse(0.6) superquadric_actor.GetProperty().SetSpecular(0.5) superquadric_actor.GetProperty().SetSpecularPower(5.0) renderer.AddActor(superquadric_actor) renderer.ResetCamera() ren_win.Render() iren.Initialize() iren.Start()