vtkVectorText从字面上可以看出,这是vtk提供的向量文本对象,它将给定的文本字符串转换为vtkPolyData对象来显示。它除了能够支持常见的数字(0-9),字母(a-z,A-Z)之外,还支持其它的一些ASCII字符,即还包括字符编码在33-126之间的字符。而且它只支持\n这个控制字符。
vtkVectorText
TextSource
vtkVectorText Code
#!/usr/bin/env python
import vtk
def main():
colors = vtk.vtkNamedColors()
# Create the axes and the associated mapper and actor.
axes = vtk.vtkAxes()
axes.SetOrigin(0, 0, 0)
axesMapper = vtk.vtkPolyDataMapper() # 使用PolyDataMapper将数据转换为图形数据
# print('axesMapper',axesMapper)
axesMapper.SetInputConnection(axes.GetOutputPort())
axesActor = vtk.vtkActor()
axesActor.SetMapper(axesMapper)
axesActor.GetProperty().SetLineWidth(3)
# Create the 3D text and the associated mapper and follower (a type of actor). Position the text so it is displayed over the origin of the axes.
atext = vtk.vtkVectorText()
atext.SetText("Origin")
textMapper = vtk.vtkPolyDataMapper()
textMapper.SetInputConnection(atext.GetOutputPort())
textActor = vtk.vtkFollower()
textActor.SetMapper(textMapper)
textActor.SetScale(0.3, 0.3, 0.3)
textActor.AddPosition(0, 0, 0.5)
# Create the Renderer, RenderWindow, and RenderWindowInteractor.
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindow.SetSize(640, 480)
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(renderWindow)
style = vtk.vtkInteractorStyleTrackballCamera()
interactor.SetInteractorStyle(style)
# Add the actors to the renderer.
renderer.AddActor(axesActor)
renderer.AddActor(textActor)
renderer.SetBackground(colors.GetColor3d("Silver"))
# Zoom in closer.
renderer.ResetCamera()
renderer.GetActiveCamera().Zoom(0.6) # 类似于焦距
##renderer.SetBackground(colors.GetColor3d("Silver"))
renderer.SetBackground(0,0,0)
# Reset the clipping range of the camera; set the camera of the follower; render.
renderer.ResetCameraClippingRange()
textActor.SetCamera(renderer.GetActiveCamera()) # 文本始终正面显示
interactor.Initialize()
renderWindow.Render()
interactor.Start()
if __name__ == '__main__':
main()
TextSource Code:
#!/usr/bin/env python
# noinspection PyUnresolvedReferences
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersSources import vtkTextSource
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
def main():
colors = vtkNamedColors()
textSource = vtkTextSource()
textSource.SetText("Hello")
textSource.SetForegroundColor(colors.GetColor3d('DarkSlateGray'))
textSource.SetBackgroundColor(colors.GetColor3d('NavajoWhite'))
# Turn off if you don't want the background drawn with the text.
textSource.BackingOn()
textSource.Update()
# Create a mapper and actor
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(textSource.GetOutputPort())
actor = vtkActor()
actor.SetMapper(mapper)
# Create a renderer, render window, and interactor
renderer = vtkRenderer()
renderWindow = vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindow.SetWindowName('TextSource')
renderWindowInteractor = vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
# Add the actor to the scene
renderer.AddActor(actor)
renderer.SetBackground(colors.GetColor3d('Bisque'))
# Render and interact
renderWindow.Render()
renderWindowInteractor.Start()
if __name__ == '__main__':
main()