vtk面向3d空间中的边界框

时间:2017-01-11 22:52:29

标签: vtk

我在3D空间中有一组数据点,并希望为它们安装一个边界框。我知道vtkOBBTree :: ComputeOBB可以为我做这个。但我似乎无法弄清楚如何可视化定向边界框。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

对于边界框,您可以使用vtkOutlineFilter。您只需将要配合的3D数据设置为输入即可。然后创建映射器和actor,并将其添加到场景中,就像在典型的VTK场景中一样。以下是Python中的一个工作示例:

from vtk import *

quadric = vtkQuadric()
quadric.SetCoefficients(.5, 1, .2, 0, .1, 0, 0, .2, 0, 0)

sample = vtkSampleFunction()
sample.SetSampleDimensions(50,50,50)
sample.SetImplicitFunction(quadric)

contour = vtkContourFilter()
contour.SetInputConnection(sample.GetOutputPort())
contour.GenerateValues(5,0,1)

contourMapper = vtkPolyDataMapper()
contourMapper.SetInputConnection(contour.GetOutputPort())
contourMapper.SetScalarRange(0,1.2)

contourActor = vtkActor()
contourActor.SetMapper(contourMapper)

outline = vtkOutlineFilter()
outline.SetInputConnection(sample.GetOutputPort())

outlineMapper = vtkPolyDataMapper()
outlineMapper.SetInputConnection(outline.GetOutputPort())

outlineActor = vtkActor()
outlineActor.SetMapper(outlineMapper)
outlineActor.GetProperty().SetColor(1,1,1)

ren = vtkRenderer()
ren.SetBackground(0.188,0.373,0.647)
ren.AddActor(contourActor)
ren.AddActor(outlineActor)

renWin = vtkRenderWindow()
renWin.AddRenderer(ren)
renWin.SetWindowName("IsoSurface")
renWin.SetSize(500,500)

iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

renWin.Render()
iren.Initialize()
iren.Start()