vtk中vtkActor各函数解析

vtkActor用来代表一个整个的渲染场景。他继承的方法有与actors position相关的函数还有vtkProp中的相关函数。actor还有缩放和保持与定义的几何结构(例如mapper)的联系,渲染属性,或者还有纹理映射。vtkActor通过一个4*4的变换矩阵把这些东西组合起来:[x y z 1] = [x y z 1] Translate(-origin)Scale(scale) Rot(y) Rot(x) Rot (z) Trans(origin) Trans(position)

【 vtkProperty vtkTexture vtkMapper vtkAssembly vtkFollower vtkLODActor】

#ifndef __vtkActor_h
#define __vtkActor_h

#include "vtkRenderingCoreModule.h" // For export macro导入宏
#include "vtkProp3D.h"继承vtkProp3D中的一些方法,父类

class vtkRenderer;
class vtkPropCollection;
class vtkActorCollection;
class vtkTexture;
class vtkMapper;
class vtkProperty;

public:

1.vtkTypeMacro(vtkActor, vtkProp3D);定义vtkProp3D为vtkActor的父类。

2.void PrintSelf(ostream& os, vtkIndent indent);输出自己的各个设置和元素值

3.static vtkActor *New();初始化。采用工厂类判断vtkActor是否有重载。并且创建的actor默认origin(0,0,0),position=(0,0,0) scale=(1,1,1) visibility=1 pickable=1 dragable=1,orientation=(0,0,0). No user defined matrix and no texture map.

4.virtual void GetActors(vtkPropCollection *);对于一些出口接口和其他的一些操作,必须收集所有的actors和volumes,这些方法会在进程中使用

支持标准的渲染方法 virtual int RenderOpaqueGeometry(vtkViewport *viewport)不透明的; virtual int RenderTranslucentPolygonalGeometry(vtkViewport *viewport)透明的几何体;

5.virtual int HasTranslucentPolygonalGeometry();判断这个prop中是否有不透明的几何体

6.virtual void Render(vtkRenderer *, vtkMapper *) {};这使得这个actor将会被渲染,将会渲染actor's property, texture map and then mapper。property如果没有声明,则会自动创建一个。这个方法的运行将会导致流水线的更新

7.void ShallowCopy(vtkProp *prop);浅复制,重载the virtual vtkProp method

8.void ReleaseGraphicsResources(vtkWindow *);释放由这个actor消耗的图形资源,参数window用来决定那些图形资源将要被释放

9.void SetProperty(vtkProperty *lut); vtkProperty *GetProperty();获取或者设置控制这个actor面属性的属性对象。这可以是vtkProperty对象的一个实例。每一个actor都必须需由一个属性与之联系。如果没有特指一个,那么会自动创建。多个actors可以共享一个属性对象。

10.virtual vtkProperty* MakeProperty();创建一个适合当前actor的属性对象,例如vtkMesaActor需要创建一个vtkMesaProperty,默认是直接执行vtkProperty::New

11.同上9,不过控制的是backface面属性。void SetBackfaceProperty(vtkProperty *lut);vtkGetObjectMacro(BackfaceProperty,vtkProperty);

12.设置和获得一个纹理对象去控制渲染的纹理映射。这会是一个vtkTexture对象。一个actor并不一定需要有一个相关的纹理对象。并且不同的actors可以共享一个纹理对象 virtual void SetTexture(vtkTexture*);vtkGetObjectMacro(Texture, vtkTexture);

13.关联actor和可视化流水线的末端。例如mapper,是vtkMapper的子类,典型的vtkPolyDataMapper and vtkDataSetMapper将会被使用。virtual void SetMapper(vtkMapper *);

流水线的末端是mapper

14.返回他得到数据的mappervtkGetObjectMacro(Mapper, vtkMapper);

15.获得这个Actor的边界(Xmin,Xmax,Ymin,Ymax,Zmin,Zmax)由父类提供,void GetBounds(double bounds[6]) {this->vtkProp3D::GetBounds( bounds );}
  double *GetBounds();

16.应用现在的属性量到各方面从而组成这个actor。这个方法在 vtkAssembly中重载了,从而递归的应用集成的属性量到所有的部分。典型的,这个方法的使用是为了设置想要的在装配之中的属性,并且通过ApplyProperties()方法把属性应用到各个集成部分。virtual void ApplyProperties() {

17.获得actor的修改时间mtime加上确认他的属性和纹理如果设置了。unsigned long int GetMTime();

18.返回任何会使渲染的图形显示不一样的是后的修改的修改时间,通常这包括prop的修改时间和像这个actor所依赖的其他的对象,像properties, textures。virtual unsigned long GetRedrawMTime();

19.内部函数: virtual bool GetSupportsSelection();硬件环境检查

protected:
  vtkActor();
  ~vtkActor();


  // is this actor opaque
  int GetIsOpaque();


  vtkProperty *Property;
  vtkProperty *BackfaceProperty;
  vtkTexture *Texture;
  vtkMapper *Mapper;

 // Bounds are cached in an actor - the MapperBounds are also cache to help know when the Bounds need to be recomputed.
  double MapperBounds[6];
  vtkTimeStamp BoundsMTime;
private:
  vtkActor(const vtkActor&);  // Not implemented.
  void operator=(const vtkActor&);  // Not implemented.

总结:从上面我们可以知道的是mapper只是actor的一个属性,它还有纹理,渲染属性等。父类是vtkProp3D(可以看一下)。然后就是设置属性,分face和backface,设置纹理和mapper。边界,修改时间等,应用现在的属性量到各方面从而组成这个actor,是否透明等。

你可能感兴趣的:(vtk中vtkActor各函数解析)