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学习之路——画画我的小苹果的更多相关文章
- jQuery学习之路(1)-选择器
▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- RPC远程过程调用学习之路(一):用最原始代码还原PRC框架
RPC: Remote Procedure Call 远程过程调用,即业务的具体实现不是在自己系统中,需要从其他系统中进行调用实现,所以在系统间进行数据交互时经常使用. rpc的实现方式有很多,可以通 ...
- webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口
webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...
- [精品书单] C#/.NET 学习之路——从入门到放弃
C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...
- Redis——学习之路四(初识主从配置)
首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...
- Redis——学习之路三(初识redis config配置)
我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. ...
- Redis——学习之路二(初识redis服务器命令)
上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息 s ...
- 踏上Salesforce的学习之路(一)
相信通过前面的学习,大家已经拥有了一个属于自己的Salesforce开发者账号,下面,我们将用这个账号正式踏上Salesforce的学习之路. 首先,点击网址:https://developer.sa ...
随机推荐
- linux下的用户管理(二)
创建帐号: 手工创建-> 1.在/etc/passwd中添加一条记录 2.创建用户主目录 3.在用户的家目录下设置默认的配置文件 4.设置用户初始口令 命令创建-> useradd或add ...
- [LeetCode] Remove Duplicates from Sorted List 链表
Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...
- vim技巧记录底行模式的使用(1)
若正在编辑文件,临时须要查看目录: (1)直接在底行模式下使用ls命令,完整的为:!ls 在我这里就显示如下的结果: functionpointer helloWorld.s tes ...
- [SaltStack] Return日志入库审计
SaltStack日志return审计 在我们执行salt任务时, 默认日志是屏幕打印的, 对于我们审计任务运行情况带来很不方便, 因此我们对日志结果进行了二次开发, 将job日志处理后入库, 方便查 ...
- Viewpager禁止滑动
参考:http://www.jianshu.com/p/d3d766cf73d7 public class NoScrollViewPager extends ViewPager { private ...
- Android布局实现阴影效果
最近某个模块的UI,设计想要卡片式阴影效果.之前查阅过资料,用传统的xml方式作为布局的background <?xml version="1.0" encoding=&qu ...
- ngrx/store effects 使用总结2:列表展示
第一个计数器案例:http://www.cnblogs.com/axel10/p/8589122.html 完成了计数器案例后,现在开始比较能够完整的展示angular2+开发流程的案例:在线获取用户 ...
- Azure CDN 服务详解
Azure CDN概述 Azure CDN(内容分发网络)是一种用于分发高带宽内容的全球CDN解决方案,它可以托管在Azure中,也可以通过在任何其他位置,借助Azure CDN,可以托管到任何其 ...
- 10.1综合强化刷题 Day2 afternoon
最大值(max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n的 ...
- SQLite FTS5使用小技巧
SQLite FTS5使用小技巧 在SQLite中,全文索引功能以扩展模块存在.使用全文索引,可以快速对大段文字进行搜索.SQLite提供FTS3.FTS4.FTS5三个模块.其中,FTS5是最新 ...