Python vtkInterface0.9.3库示例不起作用

时间:2018-07-24 13:59:50

标签: python vtk

我发现了vtkInterface,这是一个便于vtk绘制的Python vtk包装器。

尝试通过在此页面vtkInterface.PolyData下的Initialize from Numpy Arrays下运行他们的第一个示例,只需简单地按原样运行代码,它会导致一个灰色的渲染窗口,其中没有任何内容。
其他一些示例确实可以工作,但这正是我目前所需要的,并且想知道是否有人尝试过并且知道什么地方可能出了问题。

示例代码:

import numpy as np
import vtkInterface

# mesh points
vertices = np.array([[0, 0, 0],
                     [1, 0, 0],
                     [1, 1, 0],
                     [0, 1, 0]])

# mesh faces
faces = np.hstack([[4, 0, 1, 2, 3],  # square
                   [3, 0, 1, 4],     # triangle
                   [3, 1, 2, 4]])    # triangle

surf = vtkInterface.PolyData(vertices, faces)

# plot each face with a different color
surf.Plot(scalars=np.arange(3))

1 个答案:

答案 0 :(得分:2)

该示例是错误的。它缺乏第五点。例如,这将起作用。

vertices = np.array([[0, 0, 0],
                    [1, 0, 0],
                    [1, 1, 0],
                    [0, 1, 0],
                    [0.5, 0.5, -1]])

说明:在VTK中,人脸的编码方式如下:

face_j = [ n, i_0, i_1, ..., i_n ]

在这里,n是每个面的点数,i_k是顶点阵列中这些点的索引。通过将点vertices[i_k]k in range(0,n)连接起来形成面。只需将单个人脸规范串联即可创建人脸列表:

np.hstack([face_0, face_1, ..., face_j, ...])

此编码的优点是每个面n使用的点数可以变化。因此,网格可以由线,三角形,四边形等组成。

在此示例中,id为4的顶点用于第二和第三张面。因此,vertices必须至少包含五个条目。令人惊讶的是,该样本并没有崩溃,因为VTK几乎可以肯定的是,如果某些面孔正在访问不存在的点。