如何判断一个vtkActor的类型

原创 2016年08月31日 14:12:24

在VTK管线流程中,有个重要的角色就是vtkActor,本文旨在学习示例代码,学习使用方法。


#include <vtkSmartPointer.h>

#include <vtkActor.h>
#include <vtkActorCollection.h>
#include <vtkCubeAxesActor.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSphereSource.h>

int main(int, char *[])
{
	// Sphere
	vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
	sphereSource->Update();

	vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	mapper->SetInputConnection(sphereSource->GetOutputPort());

	vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
	actor->SetMapper(mapper);

	// Cube axes
	vtkSmartPointer<vtkCubeAxesActor> cubeAxesActor = vtkSmartPointer<vtkCubeAxesActor>::New();

	// Create a renderer and render window
	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	cubeAxesActor->SetCamera(renderer->GetActiveCamera());

	renderer->AddActor(actor);
	renderer->AddActor(cubeAxesActor);

	// Determine the types of the actors - method 1
	{
		std::cout << "Method 1:" << std::endl;
		vtkActorCollection* actorCollection = renderer->GetActors();
		actorCollection->InitTraversal();

		for(vtkIdType i = 0; i < actorCollection->GetNumberOfItems(); i++)
		{
			vtkActor* nextActor = actorCollection->GetNextActor();
			std::cout << "nextActor " << i << " : " << nextActor->GetClassName() << std::endl;
			std::string className = nextActor->GetClassName();
			std::string wantedClass = "vtkCubeAxesActor";
			if(className == wantedClass)
			{
				std::cout << "nextActor " << i << " is a vtkCubeAxesActor!" << std::endl;
			}
			else
			{
				std::cout << "nextActor " << i << " is NOT a vtkCubeAxesActor!" << std::endl;
			}
		}
	}

	// Determine the types of the actors - method 2
	{
		std::cout << "Method 2:" << std::endl;
		vtkActorCollection* actorCollection = renderer->GetActors();
		actorCollection->InitTraversal();

		for(vtkIdType i = 0; i < actorCollection->GetNumberOfItems(); i++)
		{
			vtkActor* nextActor = actorCollection->GetNextActor();
			std::cout << "nextActor " << i << " : " << nextActor->GetClassName() << std::endl;
			if(nextActor->IsA("vtkCubeAxesActor"))
			{
				std::cout << "nextActor " << i << " is a vtkCubeAxesActor!" << std::endl;
			}
			else
			{
				std::cout << "nextActor " << i << " is NOT a vtkCubeAxesActor!" << std::endl;
			}
		}
	}

	// Determine the types of the actors - method 3
	{
		std::cout << "Method 3:" << std::endl;
		vtkActorCollection* actorCollection = renderer->GetActors();
		actorCollection->InitTraversal();

		for(vtkIdType i = 0; i < actorCollection->GetNumberOfItems(); i++)
		{
			vtkActor* nextActor = actorCollection->GetNextActor();
			std::cout << "nextActor " << i << " : " << nextActor->GetClassName() << std::endl;

			if(vtkCubeAxesActor::SafeDownCast(nextActor) != 0)
			{
				std::cout << "nextActor " << i << " is a vtkCubeAxesActor!" << std::endl;
			}
			else
			{
				std::cout << "nextActor " << i << " is NOT a vtkCubeAxesActor!" << std::endl;
			}
		}
	}

	// Determine the types of the actors - method 4
	{
		std::cout << "Method 4:" << std::endl;
		vtkActorCollection* actorCollection = renderer->GetActors();
		actorCollection->InitTraversal();

		for(vtkIdType i = 0; i < actorCollection->GetNumberOfItems(); i++)
		{
			vtkActor* nextActor = actorCollection->GetNextActor();
			std::cout << "nextActor " << i << " : " << nextActor->GetClassName() << std::endl;

			if(dynamic_cast<vtkCubeAxesActor*>(nextActor) != 0)
			{
				std::cout << "nextActor " << i << " is a vtkCubeAxesActor!" << std::endl;
			}
			else
			{
				std::cout << "nextActor " << i << " is NOT a vtkCubeAxesActor!" << std::endl;
			}
		}
	}

	// Render the scene
	vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
	renderWindow->AddRenderer(renderer);

	vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = 
		vtkSmartPointer<vtkRenderWindowInteractor>::New();
	renderWindowInteractor->SetRenderWindow(renderWindow);

	renderer->ResetCamera();
	renderWindow->Render();
	renderWindowInteractor->Initialize();
	renderWindowInteractor->Start();

	return EXIT_SUCCESS;
}

获取当前vtkRenderer的所有ACTORS:

vtkActorCollection* actorCollection = renderer->GetActors();
遍历:

actorCollection->InitTraversal();

for(vtkIdType i = 0; i < actorCollection->GetNumberOfItems(); i++)
{
	vtkActor* nextActor = actorCollection->GetNextActor();
	···
}

获取ACTOR类名

std::string className = nextActor->GetClassName();

四种不同的判断方法

/****************方法一**************************/
std::string wantedClass = "vtkCubeAxesActor";
if(className == wantedClass)
{
	// true
}
else
{
	// false
}

/****************方法二**************************/
if(nextActor->IsA("vtkCubeAxesActor"))
{
	// true
}
else
{
	// false
}

/****************方法三**************************/
if(vtkCubeAxesActor::SafeDownCast(nextActor) != 0)
{
	// true
}
else
{
	// false
}

/****************方法四**************************/
if(dynamic_cast<vtkCubeAxesActor*>(nextActor) != 0)
{
	// true
}
else
{
	// false
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

如何判断一个基本类型的变量的类型呢?

我们知道当变量是引用类型的时候,可以通过反射来判断一个变量的类型。 科室当这个变量的类型是基本类型的时候呢,我们无法用反射来判断他的类型,这个时候我们可以采用instanceof操作符来判断。下面我...
  • qq_36748278
  • qq_36748278
  • 2017年10月22日 21:55
  • 157

java如何通过一个字段的get属性来判断类型

package com.tset;   import java.lang.reflect.Field;   public class Person{     privat...
  • a137268431
  • a137268431
  • 2014年10月20日 13:50
  • 979

如何判断一个变量是数组Array类型

在很多时候,我们都需要对一个变量进行数组类型的判断。JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助。...
  • LiMengXiaoLong
  • LiMengXiaoLong
  • 2013年09月13日 08:46
  • 14931

vtkActor在Render中移动的方法

本文由Markdown语法编辑器编辑完成。 1.问题提出: 由于已知在一个vtkRenderer可以加入多个vtkActor。那么现在遇到的需求是,我只需要移动(平移或旋转)其中的一个Acto...
  • inter_peng
  • inter_peng
  • 2016年07月19日 21:03
  • 1897

Groovy 是没有类型的 Java 代码

 很可能将 Groovy 当成是没有规则的 Java 代码。但实际上,Groovy 只是规则少一些。这一节的重点是使用 Groovy 编写 Java 应用程序时可以不用考虑的一个 Java 编程的具体...
  • scorpio3k
  • scorpio3k
  • 2008年12月14日 10:40
  • 1024

js如何判断变量的数据类型?

转自:http://www.cnblogs.com/mofish/p/3388427.html js数据类型判断和数组判断 这么基础的东西实在不应该再记录了,不过嘛,温故知...
  • suyu_yuan
  • suyu_yuan
  • 2017年02月21日 14:36
  • 442

判断获取的数据是不是number类型

var val=$(“#id).val(); If(typeof val==”number”){ 是数字类型} else{ 不是数字类型}...
  • u013565133
  • u013565133
  • 2017年04月18日 16:51
  • 380

sql判断数据库类型

用工具暂无法判断数据库类型,可以调用某些SQL函数也可判断数据库类型,虽然SQL语句大部分是通用 的。但一些内置的函数还是有一定的区别。 len和length 在mssql和...
  • p656456564545
  • p656456564545
  • 2013年12月03日 22:41
  • 1000

DeviceDriver Windows NT 驱动程序类型 (转载)

  发信人: kingchurch (老人与海~沙漠海), 信区: Programming 标  题: [范文][DeviceDriver]Windows NT 驱动程序类型 (转载) 发信站: BB...
  • ghj1976
  • ghj1976
  • 2000年12月17日 09:53
  • 1454

jquery判断类型是不是number类型

判断获取的数据是不是number类型 var val=$(“#id).val(); If(typeof val==”number”){ 是数字类型 }else{ 不是数字类型 }...
  • u012516166
  • u012516166
  • 2016年05月16日 09:16
  • 3282
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何判断一个vtkActor的类型
举报原因:
原因补充:

(最多只允许输入30个字)