2010-11-13 44 views
1

我有一个包含一组3维数据点的txt文件,我想根据这些点创建一个vtkPolyData。如何基于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结构?

回答

2

它看起来像你对我有一个定期网格一系列点的,对不对?如果是这样,vtkImageData可能是一个更好的选择。如果您确实需要这种方式,您可以随后使用几何过滤器转换为polydata。

  1. 创建一个vtkImageData实例。
  2. 将其尺寸设置为(6,6,1)(忽略第三个维度)。
  3. 将其数据类型设置为适当的类型(我想是float还是double)。
  4. Call AllocateScalars();
  5. 如果C++,

    1. 呼叫GetScalarPointer()和将它转换为在3
    2. 数据类型设置该指针将指向大小36的阵列可以只是填充每个点作为你通常会。
  6. 如果在另一种语言(TCL/Python/Java)中,使用参数(x,y,0,0,value)在图像数据上调用SetScalarComponentFromFloat。第一个0是第三个维度,第二个是第一个组件。

这会给你一个网格,它会比polydata有更高的内存效率。

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

0

these examples有用吗?特别是,this确实生成点和多边形,所以应该可以适应。核心似乎是(与很多离开了):

# ... 
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 

# ... 
+0

我已经达到您的代码中的循环点。我设法从txt文件中读取一行,但我不知道如何使用tcl语言将该字符串转换为浮点数据点。 – Simon 2010-11-15 15:29:04

+0

你不会投在Tcl中。它根据需要在“幕后”为您做到。尝试使用“InsertPoint”中的值。 – 2010-11-16 09:23:13