如何继承 vtkActor?
how to subclass vtkActor?
我正在尝试子class vtkActor class。但是我的 class 一直收到错误 "undefined reference to `vtkIntraLatticeObject::New()"
我找到了这个 link. I tried it but I get "undefined reference to vtkIntraLatticeObject::vtkIntraLatticeObject()". I am also not 100% convinced this is the way to go. I managed to get the following example to work。所以我很难理解我的代码有什么不同。
这是我的代码 class。
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";
}
原来这是我的 cmake 文件,我没有做递归 glob。有问题的文件位于下面两层。所以当编译器运行时,它找不到.cc文件。
我唯一要补充的是 vtkActor 是一个抽象 class。所以实际上并没有实现几个功能。所以当我试图显示我的 vtkActor 时,它是不可见的。这是通过 subclassing vtkOpenGlActor 而不是 vtkActor 或实现缺失的函数来解决的。
我正在尝试子class vtkActor class。但是我的 class 一直收到错误 "undefined reference to `vtkIntraLatticeObject::New()"
我找到了这个 link. I tried it but I get "undefined reference to vtkIntraLatticeObject::vtkIntraLatticeObject()". I am also not 100% convinced this is the way to go. I managed to get the following example to work。所以我很难理解我的代码有什么不同。
这是我的代码 class。
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";
}
原来这是我的 cmake 文件,我没有做递归 glob。有问题的文件位于下面两层。所以当编译器运行时,它找不到.cc文件。
我唯一要补充的是 vtkActor 是一个抽象 class。所以实际上并没有实现几个功能。所以当我试图显示我的 vtkActor 时,它是不可见的。这是通过 subclassing vtkOpenGlActor 而不是 vtkActor 或实现缺失的函数来解决的。