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
(并可能更改因子)
我想在 Paraview 中创建线段。每个线段的输入数据格式为:x0,y0,z0,x1,y1,z1,width 我尝试使用“Line”命令并使用
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
(并可能更改因子)