Paraview VtkPolyData 向线段添加宽度

Paraview VtkPolyData adding width to the line segments

我想在 Paraview 中创建线段。每个线段的输入数据格式为:x0,y0,z0,x1,y1,z1,width 我尝试使用“Line”命令并使用 @Nico Vuaille's https://whosebug.com/users/10219194/nico-vuaille answer 我设法做到了。但是,由于我的线段数量非常多,我需要一种运行速度更快的方法。 我搜索并找到了这个方法 https://discourse.paraview.org/t/rendering-a-few-lines-takes-an-unreasonable-amount-of-memory/667/2:

import vtk
from random import uniform
points = vtk.vtkPoints()
lines = vtk.vtkCellArray()
for i in xrange(600):
  pt1 = points.InsertNextPoint(uniform(0, 100), uniform(0, 100), 0)
  pt2 = points.InsertNextPoint(uniform(0, 100), uniform(0, 100), 0)
  lines.InsertNextCell(2, [pt1, pt2])

output.SetPoints(points)
output.SetLines(lines)

它运行得非常快,但线段没有宽度。 我想知道如何使用上述(或任何其他适当的)方法为每个段绘制具有特定宽度的线条。 非常感谢您的帮助, 问候, 哈米德·拉贾比。

您可以将宽度添加为数据数组:

import vtk
from random import uniform
points = vtk.vtkPoints()
lines = vtk.vtkCellArray()
widths = vtk.vtkDoubleArray()
widths.SetName("width")

for i in range(60):
  pt1 = points.InsertNextPoint(uniform(0, 100), uniform(0, 100), 0)
  pt2 = points.InsertNextPoint(uniform(0, 100), uniform(0, 100), 0)
  w = uniform(0,3)
  widths.InsertNextValue(w)
  widths.InsertNextValue(w)
  lines.InsertNextCell(2, [pt1, pt2])

output.SetPoints(points)
output.GetPointData().AddArray(widths)
output.SetLines(lines)

然后添加一个 Tube 过滤器,选择 Vary Radius / By Absolute Scalar(并可能更改因子)