Main Page Namespace List Class Hierarchy Compound List File List Namespace Members Compound Members File Members Related Pages
introduction
This is an example where we define the class MyMemReleaser
by deriving MemReleaser
, an existing X3D processor which deletes the default X3DNodes and X3DGLNodes. We want here to print the name of the nodes deleted.
deriving MemReleaserAbstractVisitor
The name of the node is an attribute of X3DAbstractNode
, so we only need to define the function enterX3DAbstractNode
of MyMemReleaserAbstractVisitor
. We also add the definition of an enterCylinder
function to show the validation of functions. Cylinder
doesn't belong to the Abstract component, so there will be an error message.
deriving MemReleaser
We derive the processor MemReleaser
in MyMemReleaser
. We have then to plug MyMemReleaserAbstractVisitor
to MyMemReleaser
in the constructor.
code
MyMemReleaserAbstractVisitor.h
#ifndef MYMEMRELEASERABSTRACTVISITOR_H
#define MYMEMRELEASERABSTRACTVISITOR_H
#include <X3DTK/kernel.h>
namespace X3DTK {
class MyMemReleaserAbstractVisitor : public MemReleaserAbstractVisitor
{
public:
MyMemReleaserAbstractVisitor();
virtual void enterX3DAbstractNode(X3DAbstractNode *N) const;
virtual void enterCylinder(X3D::Cylinder *C) const;
};
}
#endif
MyMemReleaserAbstractVisitor.cpp
#include "MyMemReleaserAbstractVisitor.h"
#include <iostream>
using namespace X3DTK;
using namespace std;
MyMemReleaserAbstractVisitor::MyMemReleaserAbstractVisitor()
: MemReleaserAbstractVisitor()
{
defineNewEnterFunction<MyMemReleaserAbstractVisitor, X3DAbstractNode>(&MyMemReleaserAbstractVisitor::enterX3DAbstractNode);
defineNewEnterFunction<MyMemReleaserAbstractVisitor, X3D::Cylinder>(&MyMemReleaserAbstractVisitor::enterCylinder);
}
void MyMemReleaserAbstractVisitor::enterX3DAbstractNode(X3DAbstractNode *N) const
{
cout << N->getTypeName() << " released " << endl;
MemReleaserAbstractVisitor::enterX3DAbstractNode(N);
}
void MyMemReleaserAbstractVisitor::enterCylinder(X3D::Cylinder *C) const
{
}
MyMemReleaser.h
#ifndef MYMEMRELEASER_H
#define MYMEMRELEASER_H
#include <X3DTK/kernel.h>
namespace X3DTK {
class MyMemReleaser : public MemReleaser
{
public:
MyMemReleaser();
};
}
#endif
MyMemReleaser.cpp
#include "MyMemReleaser.h"
#include "MyMemReleaserAbstractVisitor.h"
#include <iostream>
using namespace std;
using namespace X3DTK;
MyMemReleaser::MyMemReleaser()
: MemReleaser()
{
setComponentVisitor(new MyMemReleaserAbstractVisitor());
}
main.cpp
#include "MyMemReleaser.h"
#include <X3DTK/kernel.h>
#include <iostream>
using namespace X3DTK;
using namespace std;
int main(int argc, char *argv[])
{
if (argc <= 1)
{
cerr << "usage: mymemreleaser input" << endl;
exit(0);
}
X3DLoader *loader = new DefaultLoader();
MemReleaser *releaser = new MyMemReleaser();
X3D::Scene *s = loader->load(argv[1]);
releaser->release(s);
return 1;
}
Generated on Wed Sep 10 11:25:16 2003 for X3DToolKit by
1.3