vtkSplineWidget
是一个交互式的控件,主要用于在 VTK 中创建和编辑样条曲线。
splineWidget.SetInteractor(renderWindowInteractor)
splineWidget.SetEnabled(1) # 或使用 splineWidget.EnabledOn()
splineWidget.SetEnabled(0) # 或使用 splineWidget.EnabledOff()
splineWidget.SetHandleSize(0.01)
splineWidget.SetResolution(20)
splineWidget.SetNumberOfHandles(4)
splineWidget.SetProjectionNormalToXAxis()
splineWidget.SetProjectionNormalToYAxis()
splineWidget.SetProjectionNormalToZAxis()
splineWidget.SetProjectionPosition(0.5)
splineWidget.ProjectToXPlaneOn()
splineWidget.ProjectToYPlaneOn()
splineWidget.ProjectToZPlaneOn()
splineWidget.ProjectToPlaneOff()
parametricSpline = splineWidget.GetParametricSpline()
splineWidget.ClosedOn()
splineWidget.ClosedOff()
splineWidget.SetVisibility(1)
splineWidget.VisibilityOn()
这个示例展示了如何创建一个 vtkSplineWidget,并设置其一些属性,然后启动渲染流程。
import vtk
# 创建一个回调函数,当样条曲线改变时,打印控制点的位置
def SplineCallback(obj, event):
spline = obj.GetParametricSpline()
points = spline.GetPoints()
for i in range(points.GetNumberOfPoints()):
print(f"Point {i}: {points.GetPoint(i)}")
# 创建渲染器、渲染窗口和交互器
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
# 创建 vtkSplineWidget
splineWidget = vtk.vtkSplineWidget()
splineWidget.SetInteractor(renderWindowInteractor)
splineWidget.SetNumberOfHandles(6)
splineWidget.SetResolution(50)
splineWidget.SetHandleSize(0.05)
splineWidget.SetProjectionNormalToYAxis()
splineWidget.SetProjectionPosition(0.5)
splineWidget.ClosedOn()
# 注册回调函数
splineWidget.AddObserver('EndInteractionEvent', SplineCallback)
# 激活 widget
splineWidget.On()
# 开始渲染流程
renderWindow.Render()
renderWindowInteractor.Initialize()
renderWindowInteractor.Start()
在这个例子中,创建了一个有6个控制点的样条曲线 widget,设置其分辨率为50(曲线将在控制点之间有更多细分点),并将其投影到 Y 轴。
当样条曲线的编辑操作结束时,会通过回调函数打印每个控制点的位置。
通过调用 renderWindowInteractor.Start() 开始了渲染和交互循环,用户可以拖动控制点来编辑曲线。