有时候即使获取了所有属性,我们仍无法满足我们的需求,比如对于矢量数据,我们有时候也需要将其中的X,Y,Z值,以及模值读出或者算出进行scalar形式的显示。这里的算法思路大概就是新实例化一个属性类,然后将原属性的值,一一计算后重新赋给新属性实例,然后再显示。
以下是显示矢量模值,X,Y,Z等分量的代码,张量同理
vtkIdType numPoints=yMeshPoints->GetNumberOfPoints();
vtkSmartPointer<vtkFloatArray> tempDataset=vtkSmartPointer<vtkFloatArray>::New();
tempDataset->Reset();
tempDataset->SetNumberOfComponents(1);
tempDataset->SetNumberOfTuples(numPoints);
vtkSmartPointer<vtkDataArray> vectorData=yDatasetAttributesPoint->GetVectors(name.c_str());
double *temP;
for(int i=0;i<numPoints;i++){
temP=vectorData->GetTuple3(i);
switch(n){
case 0:{
double n1=qPow(temP[0],2)+qPow(temP[1],2)+qPow(temP[2],2);
double magnitude=qPow(n1,0.5);
tempDataset->InsertTuple1(i,magnitude);
break;
}
case 1:{
tempDataset->InsertTuple1(i,temP[0]);
break;
}
case 2:{
tempDataset->InsertTuple1(i,temP[1]);
break;
}
case 3:{
tempDataset->InsertTuple1(i,temP[2]);
break;
}
}
}
polyData->GetPointData()->SetScalars(tempDataset);