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 ...
随机推荐
- django model:auto_now_add 和 auto_now
创建django的model时,有DateTimeField.DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着datetime().date().time()三中对象 ...
- 【BZOJ4300】绝世好题(二进制,DP)
题意: n<=100000,ai<=2*10^9 思路:按二进制逐位考虑,只要有至少1位取and后为1就可以接下去 设dp[i]为第i位取and之后为1的最长的序列长度,意会一下 #inc ...
- AspNetPager分页控件的使用以及常见错误
原文发布时间为:2009-05-25 -- 来源于本人的百度文章 [由搬家工具导入] 【Repeater采用AspNetPager分页成功↓】 using System;using System.Co ...
- 调用Outlook发送邮件
#region 查找与指定文件关联在一起的程序的文件名 /// <summary> /// 查找与指定文件关联在一起的程序的文件名 /// </summary> /// < ...
- 恶补一下DP+背包专题(刷刷水题)L2
开心的金明 题目大意 就是求一定背包容量的最大值 思路 想必大家都知道,一看到这种题目,就会想起01背包 虽然特别简单但是还是讲一下吧 状态设置 由于这题差不多是一个01背包的版子题,那么我们就只需要 ...
- spingboot 邮件模板发送;
<!-- 邮件start --><dependency> <groupId>javax.mail</groupId> <artifactId> ...
- Web测试框架SeleniumBase
前几天逛GitHub发现一个基于Selenium和unittest单元测试框架的一个测试框架SeleniumBase. Github地址:https://github.com/seleniumbase ...
- NOI模拟题4 Problem C: 填格子(board)
Solution 首先我们要有敏锐的直觉: 我们将每一列中不选哪种颜色看作是一个序列, 则我们发现这个序列要求相邻两位的颜色不同. 我们还发现, 一个这样的序列对应两种不同的合法的棋盘, 因此统计合法 ...
- 解决官网下载jdk只有5k大小的错误
问题现象 官网 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 我选择linu ...
- Linux内核的引导
1,当系统上电或复位时,CPU会将PC指针赋值为一个特定的地址0xFFFF0并执行该地址处的指令.在PC机中,该地址位于BIOS中,它保存在主板上的ROM或Flash中 2,BIOS运行时按照CMOS ...