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

Posted jhcelue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}


结果的几个角度截图


技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享


















以上是关于VTK学习之路——画画我的小苹果的主要内容,如果未能解决你的问题,请参考以下文章

我的Python学习之路(day1)

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

Python vtk学习

python 学习之路

我的黑苹果之路

Python+vtk 实现激光点云数据可视化学习(2021.7.12)