python - 如何从 tvtk PolyData 实例中提取顶点数据?

标签 python vtk enthought mayavi

我正在尝试从 tvtk.PolyData 实例中提取顶点数据。例如:

from numpy import array
from tvtk.api import tvtk
from mayavi.sources.vtk_data_source import VTKDataSource
from mayavi.modules.surface import Surface
from mayavi import mlab

pointArr=array([[0,0,0],[1,0,0],[1,1,0],[0,1,0],[0,1,1],[1,1,1]],dtype="float64")
faceArr=array([[0,1,2,3],[2,3,4,5]])
faces = tvtk.PolyData()
faces.points=pointArr
print faces.points
faces.polys=faceArr
faces.point_data.scalars = pointArr[:,2]
faces.point_data.scalars.name = 'Height'
src = VTKDataSource(data = faces)
mlab.pipeline.surface(src, opacity=1.)
mlab.show()

这会打印

vtkPoints (0x9811398)
  Debug: Off
  Modified Time: 838816
  Reference Count: 2
  Registered Events: 
    Registered Observers:
      vtkObserver (0x98112b8)
        Event: 33
        EventName: ModifiedEvent
        Command: 0x9811688
        Priority: 0
        Tag: 1
  Data: 0x9811480
  Data Array Name: Points
  Number Of Points: 6
  Bounds: 
    Xmin,Xmax: (0, 1)
    Ymin,Ymax: (0, 1)
    Zmin,Zmax: (0, 1)

这里发生了什么?我期望看到 NumPy 数组:

[[ 0.  0.  0.]
 [ 1.  0.  0.]
 [ 1.  1.  0.]
 [ 0.  1.  0.]
 [ 0.  1.  1.]
 [ 1.  1.  1.]]

最佳答案

tvtk 的重点是处理 python 对象(包括 numpy 数组)和 VTK 对象保存类之间的转换。如果您研究 faces.points,您会发现它实际上是一个名为 Points 的 tvtk 类实例,但您可以使用轻松获取 numpy 表示

np.array( faces.points )

不同的 View 不应该复制内存,所以这一切都非常有效。

编辑:tvtk 自然也提供了基于事件的 API 和图形编辑元素

关于python - 如何从 tvtk PolyData 实例中提取顶点数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25809845/

相关文章:

Python 按第一个键对二维字典进行排序

python - 使用 Python Quickfix 读取自定义消息中的重复组

python - 在更大的更长整数列表集中快速搜索整数列表

c++ - Linux 上的 QT、VTK 项目未运行

VTK:如何仅显示特定范围的数据

python - 如何在 Mayavi2 中加入/连接/分组多个对象

ipython - 无法在 ipython 终端中运行魔法函数

python - 在 Mac OS X 10.8.5 (Mountain Lion) 上使用 Enthought Canopy python 编辑器运行 matplotlib.pyplot 时没有显示绘图窗口

python - Matplotlib交互环境不起作用

python - 如何将我的输出按列保存到 csv