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

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学习之路——画画我的小苹果的更多相关文章

  1. jQuery学习之路(1)-选择器

    ▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...

  2. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  3. RPC远程过程调用学习之路(一):用最原始代码还原PRC框架

    RPC: Remote Procedure Call 远程过程调用,即业务的具体实现不是在自己系统中,需要从其他系统中进行调用实现,所以在系统间进行数据交互时经常使用. rpc的实现方式有很多,可以通 ...

  4. webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口

    webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...

  5. [精品书单] C#/.NET 学习之路——从入门到放弃

    C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...

  6. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  7. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  8. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  9. 踏上Salesforce的学习之路(一)

    相信通过前面的学习,大家已经拥有了一个属于自己的Salesforce开发者账号,下面,我们将用这个账号正式踏上Salesforce的学习之路. 首先,点击网址:https://developer.sa ...

随机推荐

  1. 平滑升级nginx

    平滑升级nginx版本技术文档 作者 联系方式 日期 版本号 马坤 852115346@qq.com 2017-12-31 V1.0.0 备注:作者水平有限,难免出现错误.如若发现错误,请您及时与作者 ...

  2. 洛谷P1279 字串距离

    题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X ...

  3. [CODEVS1051]接龙游戏

    题目描述 给出了N个单词,已经按长度排好了序.如果某单词i是某单词j的前缀,i->j算一次接龙(两个相同的单词不能算接龙). 你的任务是:对于输入的单词,找出最长的龙. 输入描述 Input D ...

  4. Replacing Accented characters(Diacritic) .NET

    原文发布时间为:2012-02-17 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Collections.Generic;using Syste ...

  5. 给页面上所有的a标签增加随机数每次点击保证最新

    $(document).click(function(){ $("a").each(function(){ if($(this).parent().parent().hasClas ...

  6. dhcp 学习整理

    centos 6.5 rpm: dhcp-4.1.1-25.P1.el6.x86_64 dhcp-common-4.1.1-25.P1.el6.x86_64 服务: /etc/rc.d/init.d/ ...

  7. Guice 4.1教程

    Guice是Google开发的一个开源轻量级的依赖注入框架,运行速度快,使用简单. 项目地址:https://github.com/google/guice/ 最新的版本是4.1,本文基于此版本. 0 ...

  8. 牛客网 牛客小白月赛2 B.小马过河-简单的计算几何

    B.小马过河 链接:https://www.nowcoder.com/acm/contest/86/B 这个题是一个简单的几何题???套个板子就过了,就是直线上两点确定的这条直线和直线外一点的垂足的坐 ...

  9. POJ 1703 Find them, Catch them 并查集的应用

    题意:城市中有两个帮派,输入中有情报和询问.情报会告知哪两个人是对立帮派中的人.询问会问具体某两个人的关系. 思路:并查集的应用.首先,将每一个情报中的两人加入并查集,在询问时先判断一下两人是否在一个 ...

  10. linux运维(重点)

    linux 添加系统变量: export log="log-all-$(date +%Y-%m-%d).php" export log="log-all-$(date + ...