首页 > 解决方案 > Python vtkInterface0.9.3 库示例不起作用

问题描述

我发现了一个便于绘图 vtkInterface的 pythonvtk包装器。vtk

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

示例代码:

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))

标签: pythonvtk

解决方案


这个例子是错误的。它缺少第五点。例如,这将起作用。

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 几乎肯定会崩溃。


推荐阅读