1

我有一个包含一组 3 维数据点的 txt 文件,我想根据这些点创建一个 vtkPolyData。

在文件中,我有第一行上的点数,在我的情况下它们是 6 x 6。然后是每个点的实际坐标。文件的内容是这样的。

6 6 
1 1 3
2 1 3.4
3 1 3.6
4 1 3.6
5 1 3.4
6 1 3
1 2 3
2 2 3.8
3 2 4.2
4 2 4.2
5 2 3.8
6 2 3
1 3 3
2 3 3
3 3 3
4 3 3
5 3 3
6 3 3
1 4 3
2 4 3
3 4 3
4 4 3
5 4 3
6 4 3
1 5 3
2 5 3.8
3 5 4.2
4 5 4.2
5 5 3.8
6 5 3
1 6 3
2 6 3.4
3 6 3.6
4 6 3.6
5 6 3.4
6 6 3

如何使用包含此数据的 txt 文件构建 vtkPolyData 结构?

4

2 回答 2

3

在我看来,您有一系列定期网格化的点,对吗?如果是这样,vtkImageData 可能是更好的选择。如果您真的需要,您可以随时使用几何过滤器将其转换为多数据。

  1. 创建一个 vtkImageData 实例。
  2. 将其尺寸设置为 (6, 6, 1)(忽略第三个尺寸)。
  3. 将其数据类型设置为适当的类型(我猜是浮点数或双精度数)。
  4. 调用 AllocateScalars();
  5. 如果在 C++ 中,

    1. 调用 GetScalarPointer() 并将其转换为 3 中设置的数据类型。
    2. 该指针将指向一个大小为 36 的数组。您可以像往常一样填充每个点。
  6. 如果使用另一种语言 (TCL/Python/Java),请使用参数 (x, y, 0, 0, value) 对图像数据调用 SetScalarComponentFromFloat。第一个 0 是第 3 个维度,第二个是第一个组件。

这将为您提供一个网格,并且它的内存效率将比 polydata 高得多。

如果您只想可视化点,请使用 vtkDataSetMapper,并使用 SetRepresentationToPoints() 设置 actor 的属性,设置适当的点大小。这将做一个简单的可视化工作。

于 2011-06-18T15:23:42.330 回答
0

这些例子有用吗?特别是,会生成点和多边形,因此应该可以适应。核心似乎是(有很多遗漏):

# ...
vtkPolyData shell
vtkFloatPoints points
vtkCellArray strips

# Generate points...
loop {
   ...
   points InsertPoint $k $x0 $x1 $x2
}
shell SetPoints points
points Delete

# Generate triangles/polygons...
loop {
   strips InsertNextCell $NP2
   # ...
   strips InsertCellPoint [expr $kb +$ke ]
   # ...
   strips InsertCellPoint [expr $kb +$ke ]
}
shell SetStrips strips
strips Delete

# ...
于 2010-11-15T15:15:18.057 回答