如何子类化vtkActor?

时间:2017-09-04 18:52:28

标签: c++ oop c++11 vtk

我正在尝试子类化vtkActor类。但是我的课程一直得到错误"未定义的引用`vtkIntraLatticeObject :: New()"

我发现了link。我尝试了但是我得到了对vtkIntraLatticeObject :: vtkIntraLatticeObject()"的未定义引用。我也不是100%确信这是要走的路。我设法将以下示例转到work。所以我很难理解我的代码与我的代码有什么不同。

所以这是我的代码类。
vtkIntraLatticeObject.h

#ifndef VTKINTRALATTICEOBJECT_H
#define VTKINTRALATTICEOBJECT_H


#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkObjectFactory.h>
#include <vtkRenderingCoreModule.h>
#include <vtkProperty.h>
#include <string.h>
#include <vtkActor.h>

class VTKRENDERINGCORE_EXPORT vtkIntraLatticeObject : public vtkActor
{
    public:

        vtkTypeMacro(vtkIntraLatticeObject, vtkActor);
        static vtkIntraLatticeObject* New();

        int assignID();

        std::string getObjectTypeName();


    protected:
        int ID;
        static int intralatticeActorCounter;

        vtkActor* Device;

        vtkIntraLatticeObject();
        ~vtkIntraLatticeObject();

};


#endif

vtkIntraLatticeObject.cc

#include "vtkIntraLatticeObject.h"

vtkStandardNewMacro(vtkIntraLatticeObject);

int vtkIntraLatticeObject::intralatticeActorCounter = 0;

vtkIntraLatticeObject::vtkIntraLatticeObject()
{
    int ID = -1;
    this -> Device = vtkActor::New();
}

vtkIntraLatticeObject::~vtkIntraLatticeObject()
{
    this -> Device -> Delete();
}

int vtkIntraLatticeObject::assignID()
{
    ID = intralatticeActorCounter;
    intralatticeActorCounter++;
    return ID;
}

std::string vtkIntraLatticeObject::getObjectTypeName()
{
    return "generic intralattice Object";
}

1 个答案:

答案 0 :(得分:0)

原来这是我的cmake文件,我没有做一个递归的glob。有问题的文件位于下面的两层。因此,当编译器运行时,它找不到.cc文件 我唯一要补充的是vtkActor是一个抽象类。所以实际上并没有实现一些功能。所以当我试图显示我的vtkActor时,它是不可见的。这是通过继承vtkOpenGlActor而不是vtkActor或实现缺少的函数来解决的。