VTK学习之路——画画我的小苹果

数据集主要由描写叙述数据集几何形状的点集数据及构成数据集的单元构成,因此构建数据集的主要任务就是确定点集和构建单元,本演示样例程序构建了一个苹果的实体,然后绘制苹果。演示样例程序运行的过程例如以下:
1、首先确定苹果外轮廓的控制点。形成点集。


2、构建一个线单元。


3、构建多边形数据。把这些点集连接起来绘制一条线。
4、採用压制过滤器旋转轮廓线,构成苹果的表面实体。
5、绘制苹果

演示样例程序的代码例如以下:

#include "stdafx.h"
#include <vtkPoints.h>
#include <vtkSmartPointer.h>
#include <vtkCellArray.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRotationalExtrusionFilter.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
int _tmain(int argc, _TCHAR* argv[])
{
     //定义苹果轮廓线的点坐标
    vtkSmartPointer<vtkPoints>pPoints=vtkPoints::New();
    pPoints->InsertPoint(0,0.0,0.0,1.5);
    pPoints->InsertPoint(1,1.0,0.0,1);
    pPoints->InsertPoint(2,2.0,0.0,1.5);
    pPoints->InsertPoint(3,3.0,0.0,2.5);
    pPoints->InsertPoint(4,3.5,0.0,3.0);
    pPoints->InsertPoint(5,4.0,0.0,5.0);
    pPoints->InsertPoint(6,3.5,0.0,6.0);
    pPoints->InsertPoint(7,2.0,0.0,7.0);
    pPoints->InsertPoint(8,1.0,0.0,6.0);
    pPoints->InsertPoint(9,0.0,0.0,5.0);
    //构建线单元。绘制轮廓线
    vtkSmartPointer<vtkCellArray>pLineCell=vtkCellArray::New();
    //构建一个单元,由10个点构成
    pLineCell->InsertNextCell(10);
    //构成单元点集的索引號
    pLineCell->InsertCellPoint(0);
    pLineCell->InsertCellPoint(1);
    pLineCell->InsertCellPoint(2);
    pLineCell->InsertCellPoint(3);
    pLineCell->InsertCellPoint(4);
    pLineCell->InsertCellPoint(5);
    pLineCell->InsertCellPoint(6);
    pLineCell->InsertCellPoint(7);
    pLineCell->InsertCellPoint(8);
    pLineCell->InsertCellPoint(9);
    //定义多边形数据集
    vtkSmartPointer<vtkPolyData>pPolyData=vtkPolyData::New();
    //设置构成多边形的几何数据
    pPolyData->SetPoints(pPoints);
    //设置单元类型,线单元
    pPolyData->SetLines(pLineCell);
    //压制轮廓线,形成苹果实体
    vtkSmartPointer<vtkRotationalExtrusionFilter>pExtruFilter=vtkRotationalExtrusionFilter::New();
    pExtruFilter->SetInput(pPolyData);
    //设置生成苹果表面的光滑度參数,苹果的表面由多少个面构成
    pExtruFilter->SetResolution(10);
    //将数据映射到图形系统进行绘制
    vtkSmartPointer<vtkPolyDataMapper>pMap=vtkPolyDataMapper::New();
   pMap->SetInput(pExtruFilter->GetOutput());
   vtkSmartPointer<vtkActor>pActor=vtkActor::New();
   pActor->SetMapper(pMap);
   pActor->GetProperty()->SetColor(0.0,1.0,0.0);
    //绘制
   vtkSmartPointer<vtkRenderer>pRen=vtkRenderer::New();
   pRen->AddActor(pActor);
   //创建绘制窗口
   vtkSmartPointer<vtkRenderWindow>pRenWin=vtkRenderWindow::New();
   pRenWin->AddRenderer(pRen);
   //创建交互器
   vtkSmartPointer<vtkRenderWindowInteractor>pIren=vtkRenderWindowInteractor::New();
   pIren->SetRenderWindow(pRenWin);
    //设置背景颜色
   pRen->SetBackground(1,1,1);
   //设置窗口尺寸
   pRenWin->SetSize(300,300);
   pRenWin->Render();
   pRen->ResetCamera();
   //開始绘制
   pIren->Initialize();
   pIren->Start();
   return 0;
}


结果的几个角度截图










原文地址:https://www.cnblogs.com/jhcelue/p/6814446.html