python - Paraview VtkPolyData 为线段添加宽度
问题描述
我想在 Paraview 中创建线段。每个线段的输入数据格式为:x0,y0,z0,x1,y1,z1,width 我尝试使用“Line”命令并使用https://stackoverflow.com/a/64140580/14367898 @ Nico Vuaille 的https://stackoverflow.com/users/10219194/nico-vuaille回答我设法做到了。但是,由于我的线段数量非常多,我需要一种运行速度更快的方法。我搜索并找到了这种方法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)
它运行得非常快,但线段没有宽度。我想知道如何使用上述(或任何其他适当的)方法为每个段绘制具有特定宽度的线条。您的帮助将不胜感激,问候, Hamid Rajabi。
解决方案
您可以将宽度添加为数据数组:
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
(并可能更改因子)
推荐阅读
- python - Python请求“显示该请求已访问网站”
- reactjs - docker-compose 与 nginx,react 和 spring api,react 无法访问 API
- python - 使用 python 调用私有 API
- java - 如何在java中编写增加文件名的方法
- html - html float:left 不会将 div 放在一起
- html - 如何允许用户下载整个文件夹、目录或至少多个图像?(烧瓶)
- c++ - 不理解 C++ 中的 setprecision 函数
- kotlin - 为什么仍然会创建一个复合 ID 列之一为空的引用实体?
- react-native - Microsoft Azure 登录成功返回空范围 - react-native-app-auth - 获取 401
- asynchronous - 回调函数是如何触发的?