ParaView:如何使用可编程滤波器基于现有矢量创建新矢量

问题描述 投票:0回答:1

我在 Paraview 中加载的 VTI 文件有一个名为

MyVelocity
的 3D 数据数组。我想创建一个新的速度向量,如下所示:

unew = -u
vnew = -v
wnew =  w

我正在尝试使用

Programmable Filter
来创建这个数组。

import numpy

u=inputs[0].PointData["MyVelocity"][:,0]
v=inputs[0].PointData["MyVelocity"][:,1]
w=inputs[0].PointData["MyVelocity"][:,2]
output.PointData.append([-u,-v,w], "vector")

但是,我遇到了以下错误。

Traceback (most recent call last):
  File "<string>", line 22, in <module>
  File "<string>", line 7, in RequestData
  File "C:\Program Files\ParaView 5.13.0\bin\Lib\site-packages\vtkmodules\numpy_interface\dataset_adapter.py", line 763, in append
    arr = numpyTovtkDataArray(copy, name)
  File "C:\Program Files\ParaView 5.13.0\bin\Lib\site-packages\vtkmodules\numpy_interface\dataset_adapter.py", line 146, in numpyTovtkDataArray
    vtkarray = numpy_support.numpy_to_vtk(array, array_type=array_type)
  File "C:\Program Files\ParaView 5.13.0\bin\Lib\site-packages\vtkmodules\util\numpy_support.py", line 146, in numpy_to_vtk
    vtk_typecode = get_vtk_array_type(z.dtype)
  File "C:\Program Files\ParaView 5.13.0\bin\Lib\site-packages\vtkmodules\util\numpy_support.py", line 69, in get_vtk_array_type
    raise TypeError(
TypeError: Could not find a suitable VTK type for object

这是创建新 3D 矢量的正确方法吗?

python paraview
1个回答
0
投票

append
的第一个参数应该是一个numpy数组,而不是一个列表。 我想你可以使用
make_vector(-u, -v, w)

此外,对于这种操作,您还可以使用

Python Calculator
过滤器(和
multinline
表达式)

u = MyVelocity[:,0]
v = MyVelocity[:,1]
w = MyVelocity[:,2]

outputArray=make_vector((-u, -v, w))
return outputArray

文档中的一些细节:

https://docs.paraview.org/en/latest/ReferenceManual/vtkNumPyIntegration.html

https://docs.paraview.org/en/latest/UsersGuide/filteringData.html#python-calculator

© www.soinside.com 2019 - 2024. All rights reserved.