我发现了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))
答案 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几乎可以肯定的是,如果某些面孔正在访问不存在的点。