半透明的2d VTK文本背景

时间:2013-07-04 03:53:34

标签: python vtk

简单的问题,但我尝试了一些事情似乎没有任何作用。

我想使用2D vtkTextActor将一些统计信息叠加到3d VTK场景上。这样可以正常工作,但有时很难看到文本,具体取决于3D场景中显示的内容。

出于这个原因,我想在我的文字演员后面添加一个2d半透明的“盒子”,以提供更暗的背景。

哪个VTK对象适合这个?到目前为止我已经尝试过了:

  • vtkLegendBoxActor:不是我想要的,但我可以在没有文字的情况下使用它来在屏幕上显示半透明的框。我无法直接调整大小,因此我收到有关未初始化某些内容的警告。
  • vtkImageData:尝试手动创建图像数据并将其添加到场景中;我相信它被放置在3d场景中而不是用作叠加层。如果情况并非如此,那么我根本无法展示它。
  • vtkCornerAnnotation:窗口大小的缩放比例固定在一个角落,无法设置背景不透明度AFAIK。
  • vtkTextActor:无法设置背景颜色或不透明度

有谁能告诉我他们如何实现我在VTK中所追求的目标?

2 个答案:

答案 0 :(得分:1)

我找到了一种方法,vtkPolyMapper2D似乎可行。这似乎是一种非常愚蠢的方式。如果有更优雅的东西,我会全力以赴。

import vtk
extents = [[0,0],[620,0],[620,220],[0,220]]

polyPoints = vtk.vtkPoints()

for x, y in extents:
    polyPoints.InsertNextPoint(x, y, 0)

num_corners = len(extents)
polyCells = vtk.vtkCellArray()
polyCells.InsertNextCell(num_corners + 1)

for i in range(0, num_corners):
    polyCells.InsertCellPoint(i)

polyCells.InsertCellPoint(0) ## Rejoin at the end

poly_profile = vtk.vtkPolyData()
poly_profile.SetPoints(polyPoints)
poly_profile.SetPolys(polyCells) ## Goes solid

cut_triangles = vtk.vtkTriangleFilter()
cut_triangles.SetInput(poly_profile)

_poly_mapper = vtk.vtkPolyDataMapper2D()
_poly_mapper.SetInput(poly_profile)
_poly_mapper.SetInputConnection(cut_triangles.GetOutputPort())

_actor = vtk.vtkActor2D()
_actor.SetMapper(_poly_mapper)
_actor.GetProperty().SetColor([0.1,0.1,0.1])
_actor.GetProperty().SetOpacity(0.5)
#Add to renderer as normal  

答案 1 :(得分:0)

只需使用vtktexture,vtkimagedata&通过降低像水印这样的不透明度,将您自己的图像作为纹理背景添加到vtkrenderer。多数民众赞成