本文 以 Python 语言开发
我们在做三维软件开发时,经常会用到相机坐标轴,来指示当前空间位置;
- 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()
- 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()
- 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()
- 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()