VTK教程之十一 可视化基础算法-方…

来源:互联网 发布:c语言开源web服务框架 编辑:程序博客网 时间:2024/05/16 11:00

矢量是有大小和方向的量,矢量数据在我们日常生活中经常见到,如:物体在某点的运动速度、计算有限元节点的位移、应力等,矢量数据一般和某个位置点相关,一般表示某个位置点的大小和方向,方向线是矢量数据可视化方法之一,该方法的主要目的是用方向线标识某点的矢量方向,在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();

    return0;

}

该示例程序读取一个规则网格点数据集,然后用vtkHedgeHog类提取每个点的矢量方向,根据每个点的标量值,确定要绘制的方向线的颜色,然后绘制每个点的方向线,示例程序所读取的数据是一个文本文件,可以用记事本打开文件,看一看文件的结构和数据,程序运行结果如下图所示:


#Vtk
0 0
原创粉丝点击