这一节我们主要讲解vtkActor被继承后,如何重新实现,首先说一下为什么要重新实现vtkActor, 网上大多数文章重新实现vtkActor主要目的是将重新实现的actor变成具有一定功能的类,比如做一个测量控件,测量显示模型包含2个端点球模型、一条线段、一个刻度。将这些单一模型都放在了新的actor中进行创建与计算,最后当成一个整体使用。但是我个人感觉这样做不是很好,actor主要目的是处理各种显示问题,里面有很多显示处理相关函数,如果都放在一起写,里面还要有模型处理与计算相关函数,这样设计不是很合理。但是我重写vtkActor主要目的是想处理一些vtk没有提供的方法,都是一些显示相关的,比如我们在做模型标注功能时,往往采用绘制一个小球当做标记点,我们是希望小球大小与视口是固定不变的,相机是否无论怎么缩放小球显示大小不应该变化。起初我认为vtk应该有相关设置接口,但是我没找到,所以我就重写实现vtkActor将这个功能加进去。
这个功能需要添加在Render函数中,这个函数当Renderer更新会调用这个虚函数,原理其实很简单,就是获取相机缩放系数,actor做相应的变化。
void FreeActor::Render(vtkRenderer *ren)
{
this->Device->SetProperty(this->Property);
th