You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
194 lines
5.5 KiB
194 lines
5.5 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: ObjectFactory.cxx,v $
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
|
|
#include "vtkDebugLeaks.h"
|
|
#include "vtkObjectFactory.h"
|
|
#include "vtkObjectFactoryCollection.h"
|
|
#include "vtkOutputWindow.h"
|
|
#include "vtkOverrideInformation.h"
|
|
#include "vtkOverrideInformationCollection.h"
|
|
#include "vtkVersion.h"
|
|
#include "vtkVertex.h"
|
|
|
|
int failed = 0;
|
|
|
|
class vtkTestVertex : public vtkVertex
|
|
{
|
|
public:
|
|
// Methods from vtkObject
|
|
~vtkTestVertex()
|
|
{
|
|
}
|
|
|
|
vtkTypeRevisionMacro(vtkTestVertex,vtkVertex);
|
|
static vtkTestVertex* New() { return new vtkTestVertex; }
|
|
vtkTestVertex() { }
|
|
private:
|
|
vtkTestVertex(const vtkTestVertex&);
|
|
void operator=(const vtkTestVertex&);
|
|
};
|
|
|
|
vtkCxxRevisionMacro(vtkTestVertex, "$Revision: 1.23 $");
|
|
|
|
class vtkTestVertex2 : public vtkVertex
|
|
{
|
|
public:
|
|
~vtkTestVertex2()
|
|
{
|
|
}
|
|
|
|
// Methods from vtkObject
|
|
vtkTypeRevisionMacro(vtkTestVertex2,vtkVertex);
|
|
static vtkTestVertex2* New() { return new vtkTestVertex2; }
|
|
vtkTestVertex2() { }
|
|
private:
|
|
vtkTestVertex2(const vtkTestVertex2&);
|
|
void operator=(const vtkTestVertex2&);
|
|
};
|
|
|
|
vtkCxxRevisionMacro(vtkTestVertex2, "$Revision: 1.23 $");
|
|
|
|
VTK_CREATE_CREATE_FUNCTION(vtkTestVertex);
|
|
VTK_CREATE_CREATE_FUNCTION(vtkTestVertex2);
|
|
|
|
class VTK_EXPORT TestFactory : public vtkObjectFactory
|
|
{
|
|
public:
|
|
TestFactory();
|
|
static TestFactory* New() { return new TestFactory;}
|
|
virtual const char* GetVTKSourceVersion() { return VTK_SOURCE_VERSION; }
|
|
const char* GetDescription() { return "A fine Test Factory"; }
|
|
|
|
protected:
|
|
TestFactory(const TestFactory&);
|
|
void operator=(const TestFactory&);
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TestFactory::TestFactory()
|
|
{
|
|
this->RegisterOverride("vtkVertex",
|
|
"vtkTestVertex",
|
|
"test vertex factory override",
|
|
1,
|
|
vtkObjectFactoryCreatevtkTestVertex);
|
|
this->RegisterOverride("vtkVertex", "vtkTestVertex2",
|
|
"test vertex factory override 2",
|
|
0,
|
|
vtkObjectFactoryCreatevtkTestVertex2);
|
|
}
|
|
|
|
void TestNewVertex(vtkVertex* v, const char* expectedClassName)
|
|
{
|
|
if(strcmp(v->GetClassName(), expectedClassName) != 0)
|
|
{
|
|
failed = 1;
|
|
cout << "Test Failed" << endl;
|
|
}
|
|
}
|
|
|
|
|
|
int ObjectFactory(int, char *[])
|
|
{
|
|
vtkOutputWindow::GetInstance()->PromptUserOff();
|
|
vtkGenericWarningMacro("Test Generic Warning");
|
|
TestFactory* factory = TestFactory::New();
|
|
vtkObjectFactory::RegisterFactory(factory);
|
|
factory->Delete();
|
|
vtkVertex* v = vtkVertex::New();
|
|
TestNewVertex(v, "vtkTestVertex");
|
|
v->Delete();
|
|
|
|
// disable all vtkVertex creation with the
|
|
factory->Disable("vtkVertex");
|
|
v = vtkVertex::New();
|
|
TestNewVertex(v, "vtkVertex");
|
|
|
|
factory->SetEnableFlag(1, "vtkVertex", "vtkTestVertex2");
|
|
v->Delete();
|
|
v = vtkVertex::New();
|
|
TestNewVertex(v, "vtkTestVertex2");
|
|
|
|
factory->SetEnableFlag(0, "vtkVertex", "vtkTestVertex2");
|
|
factory->SetEnableFlag(1, "vtkVertex", "vtkTestVertex");
|
|
v->Delete();
|
|
v = vtkVertex::New();
|
|
TestNewVertex(v, "vtkTestVertex");
|
|
v->Delete();
|
|
vtkOverrideInformationCollection* oic =
|
|
vtkOverrideInformationCollection::New();
|
|
vtkObjectFactory::GetOverrideInformation("vtkVertex", oic);
|
|
vtkOverrideInformation* oi;
|
|
if(oic->GetNumberOfItems() != 2)
|
|
{
|
|
cout << "Incorrect number of overrides for vtkVertex, expected 2, got: "
|
|
<< oic->GetNumberOfItems() << "\n";
|
|
failed = 1;
|
|
if(oic->GetNumberOfItems() < 2)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
vtkCollectionSimpleIterator oicit;
|
|
oic->InitTraversal(oicit);
|
|
oi = oic->GetNextOverrideInformation(oicit);
|
|
oi->GetObjectFactory();
|
|
|
|
if(strcmp(oi->GetClassOverrideName(), "vtkVertex"))
|
|
{
|
|
cout << "failed: GetClassOverrideName should be vtkVertex, is: "
|
|
<< oi->GetClassOverrideName() << "\n";
|
|
failed = 1;
|
|
}
|
|
if(strcmp(oi->GetClassOverrideWithName(), "vtkTestVertex"))
|
|
{
|
|
cout << "failed: GetClassOverrideWithName should be vtkTestVertex, is: "
|
|
<< oi->GetClassOverrideWithName() << "\n";
|
|
failed = 1;
|
|
}
|
|
if(strcmp(oi->GetDescription(), "test vertex factory override"))
|
|
{
|
|
cout << "failed: GetClassOverrideWithName should be test vertex factory override, is: "
|
|
<< oi->GetDescription() << "\n";
|
|
failed = 1;
|
|
}
|
|
|
|
oi = oic->GetNextOverrideInformation(oicit);
|
|
if(strcmp(oi->GetClassOverrideName(), "vtkVertex"))
|
|
{
|
|
cout << "failed: GetClassOverrideName should be vtkVertex, is: "
|
|
<< oi->GetClassOverrideName() << "\n";
|
|
failed = 1;
|
|
}
|
|
if(strcmp(oi->GetClassOverrideWithName(), "vtkTestVertex2"))
|
|
{
|
|
cout << "failed: GetClassOverrideWithName should be vtkTestVertex2, is: "
|
|
<< oi->GetClassOverrideWithName() << "\n";
|
|
failed = 1;
|
|
}
|
|
if(strcmp(oi->GetDescription(), "test vertex factory override 2"))
|
|
{
|
|
cout << "failed: GetClassOverrideWithName should be test vertex factory override 2, is: "
|
|
<< oi->GetDescription() << "\n";
|
|
failed = 1;
|
|
}
|
|
oic->Delete();
|
|
vtkObjectFactory::UnRegisterAllFactories();
|
|
return failed;
|
|
}
|
|
|