https://blog.csdn.net/zy2317878/article/details/78744825
Tuple(元组)的概念
许多可视化数据是由多个数据分量组成的,如RGB颜色数据由红、绿、蓝三个分量组成,为了在连续数组中表达这一类数据,VTK引入了元组(Tuple)的概念。元组是数据数组的子数组,用于存储数据类型相同的分量数据,图6.13所示的NumberOfComponents,表示的就是数据数组里元组的个数。元组的大小在给定后不会改变,图6.14所示的数据数组由n个元组组成,每个元组存储三个分量数据。
图6.14数据数组结构
vtkDataArray存储的是数值数据,如属性数据(Attribute Data)和点数据(Point)等。有些属性数据,如点、矢量、法向量和张量等,在定义时就需要指定元组的大小。例如,点、矢量和法向量等属性数据,元组的大小是3,而张量属性数据的元组大小是9 (即3×3的矩阵),标量属性数据对于元组的大小则没有任何要求,对于处理标量属性数据的算法,通常都是只处理标量每一个元组数据的第一个分量。VTK提供了将多分量的数据数组分离成单一分量的数据数组,以及将单一分量的数据数组合并成多分量的数据数组的类,即vtkSplitField和vtkMergeFields。
下列代码演示了如何创建固定长度及动态的数据数组,以加深对Data Array及Tuple概念的理解:
/**************************************************************************
固定长度的数据数组(DataArray)。下列代码创建了容量为20个元组(Tuple)的数据数组,
每个元组的分量个数为1,通过方法SetComponent()和GetComponent()设置及获取相应
的元组的值。
**************************************************************************/
vtkSmartPointer arr = vtkSmartPointer< vtkFloatArray >::New();
arr->SetNumberOfComponents(1);//设置元组的分量个数为1
arr->SetNumberOfTuples(20);//指定数据数组的长度为20个元组
arr->SetComponent(10,0, 10.0); //指定第10个元组的第0个分量的值为10.0
arr->SetTuple1(11,9.0); //指定第11个元组的值为9.0
doubleb = arr->GetComponent(10, 0); //获取第10个Tuple的第0个分量的值
/**************************************************************************
动态长度的数据数组。下列代码创建了一个具有动态长度的数据数组,每个元组的分
量个数为1,通过方法InsertNextTuple1()插入一个单分量的元组。与InsertNextTuple1()
类似的还有InsertNextTuple2()/InsertNextTuple3()/InsertNextTuple4()/InsertNextTuple9()等。
**************************************************************************/
vtkSmartPointer arr = vtkSmartPointer< vtkFloatArray >::New();
arr->SetNumberOfComponents(1);//设置元组的分量个数为1
arr->InsertNextTuple1(5); //插入一个单分量的元组,其值为5
arr->InsertNextTuple1(10);
doubleb = arr->GetComponent(1, 0);