VTK使用矢量数据弯曲几何体
vtkWarpVector is a filter that modifies point coordinates by moving points along vector times the scale factor. Useful for showing flow profiles or mechanical deformation. The filter passes both its point data and cell data to its output.
沿法向膨胀

#!/usr/bin/env python import vtk inputPolyData = vtk.vtkPolyData() sphereSource = vtk.vtkSphereSource() sphereSource.SetPhiResolution(15) sphereSource.SetThetaResolution(15) sphereSource.Update() inputPolyData = sphereSource.GetOutput() # merge duplicate points, and/or remove unused points and/or remove degenerate cells clean = vtk.vtkCleanPolyData() clean.SetInputData(inputPolyData) # Generate normals normals = vtk.vtkPolyDataNormals() normals.SetInputConnection(clean.GetOutputPort()) normals.SplittingOff() # vtkWarpVector is a filter that modifies point coordinates by moving points along vector times the scale factor # Warp using the normals (deform geometry with vector data) warp = vtk.vtkWarpVector() warp.SetInputConnection(normals.GetOutputPort()) # Set the input data arrays that this algorithm will process # The fieldAssociation refers to which field in the data object the array is stored warp.SetInputArrayToProcess(0, 0, 0,vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS, vtk.vtkDataSetAttributes.NORMALS) # Specify value to scale displacement warp.SetScaleFactor(1.0) # Visualize the original and warped models colors = vtk.vtkNamedColors() mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(warp.GetOutputPort()) warpedActor = vtk.vtkActor() warpedActor.SetMapper(mapper) warpedActor.GetProperty().SetColor(colors.GetColor3d("Flesh")) originalMapper = vtk.vtkPolyDataMapper() originalMapper.SetInputConnection(normals.GetOutputPort()) originalActor = vtk.vtkActor() originalActor.SetMapper(originalMapper) originalActor.GetProperty().SetInterpolationToFlat() # Set the shading interpolation method for an object originalActor.GetProperty().SetColor(colors.GetColor3d("Flesh")) renderWindow =vtk.vtkRenderWindow() renderWindow.SetSize(640, 480) # Create a camera for all renderers camera = vtk.vtkCamera() # Define viewport ranges: (xmin, ymin, xmax, ymax) leftViewport = [0.0, 0.0, 0.5, 1.0] rightViewport =[0.5, 0.0, 1.0, 1.0] # Setup both renderers leftRenderer = vtk.vtkRenderer() leftRenderer.SetViewport(leftViewport) leftRenderer.SetBackground(colors.GetColor3d("Burlywood")) leftRenderer.SetActiveCamera(camera) rightRenderer = vtk.vtkRenderer() rightRenderer.SetViewport(rightViewport) rightRenderer.SetBackground(colors.GetColor3d("CornFlower")) rightRenderer.SetActiveCamera(camera) leftRenderer.AddActor(originalActor) rightRenderer.AddActor(warpedActor) rightRenderer.ResetCamera() renderWindow.AddRenderer(rightRenderer) renderWindow.AddRenderer(leftRenderer) style = vtk.vtkInteractorStyleTrackballCamera() interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) interactor.SetInteractorStyle(style) renderWindow.Render() interactor.Start()
膨胀导入的STL模型

#!/usr/bin/env python import vtk inputPolyData = vtk.vtkPolyData() readerSTL = vtk.vtkSTLReader() readerSTL.SetFileName("Suzanne.stl") readerSTL.Update() inputPolyData = readerSTL.GetOutput() # merge duplicate points, and/or remove unused points and/or remove degenerate cells clean = vtk.vtkCleanPolyData() clean.SetInputData(inputPolyData) # Generate normals normals = vtk.vtkPolyDataNormals() normals.SetInputConnection(clean.GetOutputPort()) normals.SplittingOff() # Turn off the splitting of sharp edges # vtkWarpVector is a filter that modifies point coordinates by moving points along vector times the scale factor # Warp using the normals (deform geometry with vector data) warp = vtk.vtkWarpVector() warp.SetInputConnection(normals.GetOutputPort()) # Set the input data arrays that this algorithm will process # The fieldAssociation refers to which field in the data object the array is stored warp.SetInputArrayToProcess(0, 0, 0,vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS, vtk.vtkDataSetAttributes.NORMALS) # Specify value to scale displacement warp.SetScaleFactor(0.3) # Visualize the original and warped models colors = vtk.vtkNamedColors() mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(warp.GetOutputPort()) warpedActor = vtk.vtkActor() warpedActor.SetMapper(mapper) warpedActor.GetProperty().SetColor(colors.GetColor3d("Flesh")) originalMapper = vtk.vtkPolyDataMapper() originalMapper.SetInputConnection(normals.GetOutputPort()) originalActor = vtk.vtkActor() originalActor.SetMapper(originalMapper) originalActor.GetProperty().SetInterpolationToFlat() # Set the shading interpolation method for an object originalActor.GetProperty().SetColor(colors.GetColor3d("Flesh")) renderWindow =vtk.vtkRenderWindow() renderWindow.SetSize(640, 480) # Create a camera for all renderers camera = vtk.vtkCamera() # Define viewport ranges: (xmin, ymin, xmax, ymax) leftViewport = [0.0, 0.0, 0.5, 1.0] rightViewport =[0.5, 0.0, 1.0, 1.0] # Setup both renderers leftRenderer = vtk.vtkRenderer() leftRenderer.SetViewport(leftViewport) leftRenderer.SetBackground(colors.GetColor3d("Burlywood")) leftRenderer.SetActiveCamera(camera) rightRenderer = vtk.vtkRenderer() rightRenderer.SetViewport(rightViewport) rightRenderer.SetBackground(colors.GetColor3d("CornFlower")) rightRenderer.SetActiveCamera(camera) leftRenderer.AddActor(originalActor) rightRenderer.AddActor(warpedActor) rightRenderer.ResetCamera() renderWindow.AddRenderer(rightRenderer) renderWindow.AddRenderer(leftRenderer) style = vtk.vtkInteractorStyleTrackballCamera() interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) interactor.SetInteractorStyle(style) renderWindow.Render() interactor.Start()
参考:
VTK: vtkWarpVector Class Reference
VTK/Examples/Cxx/PolyData/WarpSurface
VTK/Examples/Python/PolyData/WarpVector.py
An algorithm for inflating/deflating (offsetting, buffering) polygons
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律