python - 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))
解决方案
这个例子是错误的。它缺少第五点。例如,这将起作用。
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 几乎肯定会崩溃。
推荐阅读
- ios - Swift 5 - 无法通过 FCM 接收推送通知
- react-native - 在 React Native v0.63.2 中获取 unsupported_grant_type
- apache-spark - 广播数据帧正在形成排序合并连接
- python - 关于网页抓取和缺失数据
- reactjs - 如何在没有重新渲染器的情况下按一个条件过滤数组?
- sql-server - 如何跟踪 SQL 表删除创建事件
- stripe-payments - Stripe Payouts API,如何获取交易?
- google-apps-script - 当该工作表的任何用户编辑单元格时,我们如何使用 appscript 在 google 电子表格中的单元格附近添加时间戳
- c++ - C ++ cout 和 cin 练习错误:main.cpp:在函数“int main()”中
- azure-eventhub - 用于在线拍卖的 Azure 事件中心/服务总线吞吐量