vtkAlgorithm 函数分析

vtkAlgorithm 

NAME 

vtkAlgorithm - 在VTK中所有源代码、滤波器、槽的父类。 (Superclass for all sources, filters, and sinks in VTK.)

Sources 通过读取(Reader 对象)或者创建数据对象(程序源对象)两种方式来产生数据;

Filters 处理输入数据并产生新的数据对象;

sinks []


Mappers 接收数据并将其转换为可被渲染引擎绘制的可视化表达;

Introduction

vtkAlgorithm 只能是一个算法、函数、滤波器。它的实例: 描述算法属性; 有 information 对象(vtkInformation)来描述输入、输出端的特性,这个算法主要的方法是 ProcessRequest().


【它的子类重要的就是改写 ProRequest() 这个方法】


SECTION Description

它定义了一个通用的接口来处理算法中的数据,包括可视化管线连接的输入、输出数据, 她们的类型是无关的。

可视化关系那楼是被 vtkExecutive 的实例控制的(Pipelines are controlled by instances of vtkExecutive)。

当 vtkAlgorithm 的实例被用在管线流程时,都会自动关联一个 vtkExecutive 的实例, vtkExecutive 主要控制数据流。


协作图




 vtkFeatureEdges


示例:

#include <vtkSmartPointer.h>
#include <vtkFeatureEdges.h>
#include <vtkPolyData.h>
#include <vtkDiskSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>

int main(int, char *[])
{
	vtkSmartPointer<vtkDiskSource> diskSource =	vtkSmartPointer<vtkDiskSource>::New();
	diskSource->Update();

	vtkSmartPointer<vtkFeatureEdges> featureEdges =	vtkSmartPointer<vtkFeatureEdges>::New();
	featureEdges->SetInputConnection(diskSource->GetOutputPort());
	featureEdges->BoundaryEdgesOn();
	featureEdges->FeatureEdgesOff();
	featureEdges->ManifoldEdgesOff();
	featureEdges->NonManifoldEdgesOff();
	featureEdges->SetBoundaryEdges(100);
	featureEdges->Update();

	// Visualize
	vtkSmartPointer<vtkPolyDataMapper> edgeMapper =	vtkSmartPointer<vtkPolyDataMapper>::New();
	edgeMapper->SetInputConnection(featureEdges->GetOutputPort());
	vtkSmartPointer<vtkActor> edgeActor = vtkSmartPointer<vtkActor>::New();
	edgeActor->SetMapper(edgeMapper);
	

	vtkSmartPointer<vtkPolyDataMapper> diskMapper =	vtkSmartPointer<vtkPolyDataMapper>::New();
	diskMapper->SetInputConnection(diskSource->GetOutputPort());
	vtkSmartPointer<vtkActor> diskActor = vtkSmartPointer<vtkActor>::New();
	diskActor->SetMapper(diskMapper);

	// Create a renderer, render window, and interactor
	vtkSmartPointer<vtkRenderer> renderer =	vtkSmartPointer<vtkRenderer>::New();
	vtkSmartPointer<vtkRenderWindow> renderWindow =	vtkSmartPointer<vtkRenderWindow>::New();
	renderWindow->AddRenderer(renderer);
	vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =	vtkSmartPointer<vtkRenderWindowInteractor>::New();
	renderWindowInteractor->SetRenderWindow(renderWindow);

	renderer->AddActor(edgeActor);
	renderer->AddActor(diskActor);
	renderer->SetBackground(.3, .6, .3); // Background color green

	renderWindow->Render();
	renderWindowInteractor->Start();

	return EXIT_SUCCESS;
}

其实 vtkFeatureEdges 并没有重写 父类的 Update()


执行过程中结合 F11 和 F10 分析上述代码。

在执行 vtkAlgorithm::Update() 时,会调用 

  1. vtkExecutive* vtkAlgorithm::GetExecutive()
  2. int vtkStreamingDemandDrivenPipeline::Update(int port)
  3. int vtkExecutive::CheckAlgorithm(const char* method,
                                     vtkInformation* request)
  4. int vtkDemandDrivenPipeline::UpdateDataObject()
  5. int vtkPolyDataAlgorithm::ProcessRequest(vtkInformation* request,
                                             vtkInformationVector** inputVector,
                                             vtkInformationVector* outputVector)
  6. int vtkFeatureEdges::RequestData(
    vtkInformation *vtkNotUsed(request),
    vtkInformationVector **inputVector,
    vtkInformationVector *outputVector)

vtkPolyDataAlgorithm 是 vtkAlgorithm 的子类重写 ProcessRequest(), 该函数中调用 RequestData(), 而 vtkFeatureEdges 是vtkPolyDataAlgorithm  子类vtkFeatureEdges重写了 RequestData() 这个函数


vtkExecutive

是所有管线指向的父类 (Superclass for all pipeline executives in VTK.)

包含了如果连接管线和执行管线的逻辑,这个类是所有 执行程序 executive 的父类。可执行程序是分布式的(相对集中),每一个滤波或者算法都有自己的可执行程序和其他可执行程序联系。

子类 vtkDemandDrivenPipeline, 这个类也有一个子类 vtkStreamingDemandDrivenPipeline。

vtkStreamingDemandDrivenPipeline 为旧版的 VTK管线提供了大部分的功能, 对于很多 algorithm 是默认执行的。


contains the logic of how to connect and execute a pipeline. This class is the superclass of all executives. Executives are distributed (as opposed to centralized) and each filter/algorithm has its own executive that communicates with other executives. vtkExecutive has a subclass called vtkDemandDrivenPipeline which in turn has a subclass called vtkStreamingDemandDrivenPipeline. vtkStreamingDemandDrivenPipeline provides most of the functionality that was found in the old VTK pipeline and is the default executive for all algorithms if you do not specify one.


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值