矢量是有大小和方向的量,矢量数据在我们日常生活中经常见到,如:物体在某点的运动速度、计算有限元节点的位移、应力等,矢量数据一般和某个位置点相关,一般表示某个位置点的大小和方向,方向线是矢量数据可视化方法之一,该方法的主要目的是用方向线标识某点的矢量方向,在VTK中方向线有多种表现形式,除了用线标识矢量的方向外,还可以用箭头标识矢量的方向或根据矢量的大小(及其它标量值,如温度、压力)把矢量线绘制成不同的颜色以及用2D或3D几何符号代替方向线,用几何符号代替方向线也被称为方向符号,方向线的表现形式如下图所示:
方向线 方向符号
应该根据实际的要求使用方向线技术,如果在矢量数据场中要标识许多点的矢量方向的话,大量使用方向线技术,将使点的矢量方向变得难以辨别,这就失去了矢量数据可视化的意义,下面给出一个方向线的示例程序。
#include "stdafx.h"
#include <vtkSmartPointer.h>
#include <vtkStructuredPointsReader.h>
#include <vtkHedgeHog.h>
#include <vtkLookupTable.h>
#include <vtkPolyDataMapper.h>
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
int _tmain(int argc, _TCHAR* argv[])
{
/读取结构化的网格数据文件
vtkSmartPointer<vtkStructuredPointsReader>pStructGrid=vtkStructuredPointsReader::New();
pStructGrid->SetFileName("carotid.vtk");
pStructGrid->Update();
/创建矢量数据的方向线
vtkSmartPointer<vtkHedgeHog>pHedHog=vtkHedgeHog::New();
pHedHog->SetInput((vtkDataObject *)pStructGrid->GetOutput());
/设置缩放因子,控制方向线的长度
pHedHog->SetScaleFactor(0.3);
/颜色表
vtkSmartPointer<vtkLookupTable>pLookTable=vtkLookupTable::New();
pLookTable->Build();
/pLookTable->SetHueRange(0.667,0);
/创建映射器
vtkSmartPointer<vtkPolyDataMapper>pMapper=vtkPolyDataMapper::New();
pMapper->SetInput(pHedHog->GetOutput());
pMapper->SetLookupTable(pLookTable);
/确定用颜色标识矢量数据标量值大小的范围
pMapper->SetScalarRange(50,550);
pMapper->SetScalarVisibility(1);
vtkSmartPointer<vtkActor>pActor = vtkActor::New();
pActor->SetMapper(pMapper);
/绘制
vtkSmartPointer<vtkRenderer>renderer = vtkRenderer::New();
vtkSmartPointer<vtkRenderWindow>renWin = vtkRenderWindow::New();
renWin->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor>iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
renderer->AddActor(pActor);
renderer->ResetCamera();
renderer->SetBackground(1,1,1);
renWin->SetSize(300,300);
renWin->Render();
iren->Start();
return 0;
}
该示例程序读取一个规则网格点数据集,然后用vtkHedgeHog类提取每个点的矢量方向,根据每个点的标量值,确定要绘制的方向线的颜色,然后绘制每个点的方向线,示例程序所读取的数据是一个文本文件,可以用记事本打开文件,看一看文件的结构和数据,程序运行结果如下图所示: