LODProp3D实例

    

  1 #ifndef INITIAL_OPENGL
  2 #define INITIAL_OPENGL
  3 #include <vtkAutoInit.h>
  4 VTK_MODULE_INIT(vtkRenderingOpenGL)
  5 VTK_MODULE_INIT(vtkInteractionStyle)
  6 VTK_MODULE_INIT(vtkRenderingFreeType)
  7 #endif
  8 #include <iostream>
  9 using namespace std;
 10 #include <vtkSmartPointer.h>
 11 #include <vtkPolyDataMapper.h>
 12 #include <vtkLODProp3D.h>
 13 #include <vtkRenderWindow.h>
 14 #include <vtkRenderer.h>
 15 #include <vtkRenderWindowInteractor.h>
 16 #include <vtkPolyData.h>
 17 #include <vtkSphereSource.h>
 18 #include <vtkCallbackCommand.h>
 19 #include <vtkProperty.h>
 20 /*关于static_cast的介绍网址:
 21  * http://www.cnblogs.com/chio/archive/2007/07/18/822389.html
 22 static_cast:
 23 用法:static_cast < type-id > ( expression )
 24 说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。
 25 来源:为什么需要static_cast强制转换?
 26 情况1:void指针->其他类型指针
 27 情况2:改变通常的标准转换
 28 情况3:避免出现可能多种转换的歧义
 29 它主要有如下几种用法:
 30     用于类层次结构中基类和子类之间指针或引用的转换。
 31         进行上行转换(把子类的指针或引用转换成基类表示)是安全的;
 32         进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。
 33     用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
 34     把void指针转换成目标类型的指针(不安全!!)
 35     把任何类型的表达式转换成void类型。
 36 注意:static_cast不能转换掉expression的const、volitale、或者__unaligned属性。
 37 ///////////////////////////////
 38 **关于vtkCommand::ModifiedEvent
 39 **
 40  */
 41
 42 void RefreshCallback(vtkObject* caller,
 43                      long unsigned int eventId,
 44                      void* clientData,
 45                      void* callData)
 46 {
 47     vtkSmartPointer<vtkLODProp3D>lodProp=static_cast<vtkLODProp3D*>(clientData);
 48     cout<<"Last rendered LOD:"<<lodProp->GetLastRenderedLODID()<<endl;
 49 }
 50
 51 int main()
 52 {
 53 //创建高分辨率的圆球
 54     vtkSmartPointer<vtkSphereSource> highResSphere=vtkSmartPointer<vtkSphereSource>::New();
 55     int res=100;
 56     highResSphere->SetThetaResolution(res);
 57     highResSphere->SetPhiResolution(res);
 58     highResSphere->Update();
 59     //高分辨率球的映射器
 60     vtkSmartPointer<vtkPolyDataMapper> highResMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
 61     highResMapper->SetInputConnection(highResSphere->GetOutputPort());
 62 //创建低分辨率的圆球
 63     vtkSmartPointer<vtkSphereSource>lowResSphere=vtkSmartPointer<vtkSphereSource>::New();
 64     //低分辨率球的映射器
 65     vtkSmartPointer<vtkPolyDataMapper> lowResMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
 66     lowResMapper->SetInputConnection(lowResSphere->GetOutputPort());
 67 //分别创建高、低分辨率属性property
 68     //低分辨率属性
 69     vtkSmartPointer<vtkProperty> lowResProperty=vtkSmartPointer<vtkProperty>::New();
 70     lowResProperty->SetDiffuseColor(0.89,0.81,0.34);
 71     lowResProperty->SetInterpolationToFlat();
 72     //高分辨率属性
 73     vtkSmartPointer<vtkProperty> highResProperty=vtkSmartPointer<vtkProperty>::New();
 74     highResProperty->SetDiffuseColor(1,0.3882,0.2784);
 75     highResProperty->SetInterpolationToFlat();
 76 //创建vtkLODProp3D
 77     vtkSmartPointer<vtkLODProp3D> prop=vtkSmartPointer<vtkLODProp3D>::New();
 78     prop->AddLOD(highResMapper,highResProperty,0);
 79     prop->AddLOD(lowResMapper,lowResProperty,0);
 80
 81     std::cout<<"There are "<<prop->GetNumberOfLODs()<<" LODs"<<std::endl;
 82
 83 //创建显示窗口
 84     //renderer、window和interactor
 85     vtkSmartPointer<vtkRenderer> renderer=vtkSmartPointer<vtkRenderer>::New();
 86     vtkSmartPointer<vtkRenderWindow> renderWindow=vtkSmartPointer<vtkRenderWindow>::New();
 87     vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor=vtkSmartPointer<vtkRenderWindowInteractor>::New();
 88     renderWindow->AddRenderer(renderer);
 89     renderWindowInteractor->SetRenderWindow(renderWindow);
 90
 91     //用prop修改渲染时间
 92     prop->SetAllocatedRenderTime(1e-1,renderer);
 93     renderer->AddActor(prop);
 94     //创建回调命令对象,并将自定义的函数设定为该对象的回调函数
 95     vtkSmartPointer<vtkCallbackCommand> refreshCallback=vtkSmartPointer<vtkCallbackCommand>::New();
 96     refreshCallback->SetCallback(RefreshCallback);
 97     refreshCallback->SetClientData(prop);
 98     //添加ModifiedEvent事件侦听器
 99     renderWindow->AddObserver(vtkCommand::ModifiedEvent,refreshCallback);
100 renderWindowInteractor->Start();
101     return 0;
102 }
#ifndefINITIAL_OPENGL
#defineINITIAL_OPENGL
#include<vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
#endif
#include<iostream>
usingnamespacestd;
#include<vtkSmartPointer.h>
#include<vtkPolyDataMapper.h>
#include<vtkLODProp3D.h>
#include<vtkRenderWindow.h>
#include<vtkRenderer.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkPolyData.h>
#include<vtkSphereSource.h>
#include<vtkCallbackCommand.h>
#include<vtkProperty.h>
/*关于static_cast的介绍网址:
*http://www.cnblogs.com/chio/archive/2007/07/18/822389.html
static_cast:
用法:static_cast<type-id>(expression)
说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。
来源:为什么需要static_cast强制转换?
情况1:void指针->其他类型指针
情况2:改变通常的标准转换
情况3:避免出现可能多种转换的歧义
它主要有如下几种用法:
用于类层次结构中基类和子类之间指针或引用的转换。
进行上行转换(把子类的指针或引用转换成基类表示)是安全的;
进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。
用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
把void指针转换成目标类型的指针(不安全!!)
把任何类型的表达式转换成void类型。
注意:static_cast不能转换掉expression的const、volitale、或者__unaligned属性。
///////////////////////////////
**关于vtkCommand::ModifiedEvent
**
*/

voidRefreshCallback(vtkObject*caller,
longunsignedinteventId,
void*clientData,
void*callData)
{
vtkSmartPointer<vtkLODProp3D>lodProp=static_cast<vtkLODProp3D*>(clientData);
cout<<"LastrenderedLOD:"<<lodProp->GetLastRenderedLODID()<<endl;
}

intmain()
{
//创建高分辨率的圆球
vtkSmartPointer<vtkSphereSource>highResSphere=vtkSmartPointer<vtkSphereSource>::New();
intres=100;
highResSphere->SetThetaResolution(res);
highResSphere->SetPhiResolution(res);
highResSphere->Update();
//高分辨率球的映射器
vtkSmartPointer<vtkPolyDataMapper>highResMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
highResMapper->SetInputConnection(highResSphere->GetOutputPort());
//创建低分辨率的圆球
vtkSmartPointer<vtkSphereSource>lowResSphere=vtkSmartPointer<vtkSphereSource>::New();
//低分辨率球的映射器
vtkSmartPointer<vtkPolyDataMapper>lowResMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
lowResMapper->SetInputConnection(lowResSphere->GetOutputPort());
//分别创建高、低分辨率属性property
//低分辨率属性
vtkSmartPointer<vtkProperty>lowResProperty=vtkSmartPointer<vtkProperty>::New();
lowResProperty->SetDiffuseColor(0.89,0.81,0.34);
lowResProperty->SetInterpolationToFlat();
//高分辨率属性
vtkSmartPointer<vtkProperty>highResProperty=vtkSmartPointer<vtkProperty>::New();
highResProperty->SetDiffuseColor(1,0.3882,0.2784);
highResProperty->SetInterpolationToFlat();
//创建vtkLODProp3D
vtkSmartPointer<vtkLODProp3D>prop=vtkSmartPointer<vtkLODProp3D>::New();
prop->AddLOD(highResMapper,highResProperty,0);
prop->AddLOD(lowResMapper,lowResProperty,0);

std::cout<<"Thereare"<<prop->GetNumberOfLODs()<<"LODs"<<std::endl;

//创建显示窗口
//renderer、window和interactor
vtkSmartPointer<vtkRenderer>renderer=vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow>renderWindow=vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkRenderWindowInteractor>renderWindowInteractor=vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindow->AddRenderer(renderer);
renderWindowInteractor->SetRenderWindow(renderWindow);

//用prop修改渲染时间
prop->SetAllocatedRenderTime(1e-1,renderer);
renderer->AddActor(prop);
//创建回调命令对象,并将自定义的函数设定为该对象的回调函数
vtkSmartPointer<vtkCallbackCommand>refreshCallback=vtkSmartPointer<vtkCallbackCommand>::New();
refreshCallback->SetCallback(RefreshCallback);
refreshCallback->SetClientData(prop);
//添加ModifiedEvent事件侦听器
renderWindow->AddObserver(vtkCommand::ModifiedEvent,refreshCallback);
renderWindowInteractor->Start();
return0;
}

				



				
时间: 12-13

LODProp3D实例的相关文章

solr分布式索引【实战一、分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例】

1 private static Properties prop = new Properties(); 2 3 private static String confFilePath = "conf" + File.separator + "config.properties";// 配置文件目录 4 static { 5 // 加载properties 6 InputStream is = null; 7 InputStreamReader isr = null;

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

【Kettle】4、SQL SERVER到SQL SERVER数据转换抽取实例

1.系统版本信息 System:Windows旗舰版 Service Pack1 Kettle版本:6.1.0.1-196 JDK版本:1.8.0_72 2.连接数据库 本次实例连接数据库时使用全局变量. 2.1 创建新转换:spoon启动后,点击Ctrl+N创建新转换 2.2 在新转换界面中,右键点击DB连接,系统会弹出[数据库连接]界面. windows系统环境下,可用${}获取变量的内容. 说明: 连接名称:配置数据源使用名称.(必填) 主机名称:数据库主机IP地址,此处演示使用本地IP(

ORACLE11g R2【RAC+ASM→单实例FS】

ORACLE11g R2[RAC+ASM→单实例FS] 11g R2 RAC+ASMà单实例FS的DG,建议禁用OMF. 本演示案例所用环境:   primary standby OS Hostname node1,node2 std OS Version RHEL6.5 RHEL6.5 DB Version 11.2.0.4 11.2.0.4 db_name stephen stephen db_unique_name stephen standby service_names stephen

Laravel 5.4 中的异常处理器和HTTP异常处理实例教程

错误和异常是处理程序开发中不可回避的议题,在本地开发中我们往往希望能捕获程序抛出的异常并将其显示打印出来,以便直观的知道程序在哪里出了问题并予以解决,而在线上环境我们不希望将程序错误或异常显示在浏览器中(出于安全考虑),这个时候我们仍然要捕获异常,只不过不是显示到浏览器中,而是记录到日志中,方便日后排查问题. 百牛信息技术bainiu.ltd整理发布于博客园 Laravel当然支持PHP原生的错误和异常处理,但是在此基础上进行了一些封装处理,从而更方便在不同开发环境切换以及对错误和异常的处理.

Hibernate简述及入门实例

一.Hibernate简述 总的概括,Hibernate是一个ORM的轻量级持久层框架,解决了对象和关系数据库中表的不匹配问题(阻抗不匹配)以及拥有开发代码不用去继承hibernate类或接口的优势(无侵入性).hibernate框架实现使得开发人员可以避免反复地编写javajdbc部分代码,应用面向对象的思维操作关系型数据库. 二.使用myeclipse创建hibernate实例两种方法(以hibernate3.5.2及mysql为例) a)手动编写hibernate.cfg.xml及*.hb

linux下mysql多实例安装(转)

转自:http://www.cnblogs.com/xuchenliang/p/6843990.html 1.MySQL多实例介绍 1.1.什么是MySQL多实例 MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务:: 1.2.MySQL多实例的特点有以下几点 1:有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务. 2:节约服务器资源 3:资源互相

微信小程序实例教程(一)

序言 开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小程序」开发指南) 本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序的首页将会显示欢迎语以及当前用户的微信头像,点击头像,可以在新开的页面中查看当前小程序的启动日志. 1. 获取微信小程序的 AppID 首先,我们需要拥有一个帐号,如果你能看到该文档,我们应当已经邀请并为你创建好一个帐号.注意不可直接使用服务号或订阅号的 AppID. 利用提供的帐号,登录https

mybatis中的mapper接口文件以及example类的实例函数以及详解

##Example example = new ##Example(); example.setOrderByClause("字段名 ASC"); //升序排列,desc为降序排列. example.setDistinct(false)//去除重复,boolean型,true为选择不重复的记录. Criteria criteria = new Example().createCriteria(); is null;is not null; equal to(value);not equ

shell脚本交互:expect学习笔记及实例详解

最近项目需求,需要写一些shell脚本交互,管道不够用时,expect可以很好的实现脚本之间交互,搜索资料,发现网上好多文章都是转载的,觉得这篇文章还不错,所以简单修改之后拿过来和大家分享一下~ 1. expect是spawn: 后面加上需要执行的shell命令,比如说spawn sudo touch testfile 1.3 expect: 只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,Li