41 #ifndef vtkObjectFactory_h
42 #define vtkObjectFactory_h
44 #include "vtkCommonCoreModule.h"
46 #include "vtkFeatures.h"
70 static vtkObject* CreateInstance(
const char* vtkclassname,
bool isAbstract =
false);
78 static void CreateAllInstance(
const char* vtkclassname,
vtkCollection* retList);
95 static void UnRegisterAllFactories();
107 static int HasOverrideAny(
const char* className);
119 static void SetAllEnableFlags(
vtkTypeBool flag,
const char* className);
124 static void SetAllEnableFlags(
vtkTypeBool flag,
const char* className,
const char* subclassName);
142 virtual const char* GetVTKSourceVersion() = 0;
147 virtual const char* GetDescription() = 0;
152 virtual int GetNumberOfOverrides();
157 virtual const char* GetClassOverrideName(
int index);
163 virtual const char* GetClassOverrideWithName(
int index);
174 virtual const char* GetOverrideDescription(
int index);
181 virtual void SetEnableFlag(
vtkTypeBool flag,
const char* className,
const char* subclassName);
182 virtual vtkTypeBool GetEnableFlag(
const char* className,
const char* subclassName);
188 virtual int HasOverride(
const char* className);
192 virtual int HasOverride(
const char* className,
const char* subclassName);
199 virtual void Disable(
const char* className);
205 vtkGetFilePathMacro(LibraryPath);
214 void RegisterOverride(
const char* classOverride,
const char* overrideClassName,
215 const char*
description,
int enableFlag, CreateFunction createFunction);
222 virtual vtkObject* CreateObject(
const char* vtkclassname);
241 void GrowOverrideArray();
251 static void RegisterDefaults();
255 static void LoadDynamicFactories();
259 static void LoadLibrariesInPath(
const std::string&);
267 char* LibraryVTKVersion;
291 #define VTK_CREATE_CREATE_FUNCTION(classname) \
292 static vtkObject* vtkObjectFactoryCreate##classname() { return classname::New(); }
296 #define VTK_FACTORY_INTERFACE_EXPORT VTKCOMMONCORE_EXPORT
303 #define VTK_FACTORY_INTERFACE_IMPLEMENT(factoryName) \
304 extern "C" VTK_FACTORY_INTERFACE_EXPORT const char* vtkGetFactoryVersion() \
306 return VTK_SOURCE_VERSION; \
308 extern "C" VTK_FACTORY_INTERFACE_EXPORT vtkObjectFactory* vtkLoad() \
310 return factoryName ::New(); \
314 #define VTK_OBJECT_FACTORY_NEW_BODY(thisClass) \
315 vtkObject* ret = vtkObjectFactory::CreateInstance(#thisClass, false); \
318 return static_cast<thisClass*>(ret); \
320 auto result = new thisClass; \
321 result->InitializeObjectBase(); \
327 #define VTK_ABSTRACT_OBJECT_FACTORY_NEW_BODY(thisClass) \
328 vtkObject* ret = vtkObjectFactory::CreateInstance(#thisClass, true); \
331 return static_cast<thisClass*>(ret); \
333 vtkGenericWarningMacro("Error: no override found for '" #thisClass "'."); \
337 #if defined(VTK_ALL_NEW_OBJECT_FACTORY)
338 #define VTK_STANDARD_NEW_BODY(thisClass) VTK_OBJECT_FACTORY_NEW_BODY(thisClass)
340 #define VTK_STANDARD_NEW_BODY(thisClass) \
341 auto result = new thisClass; \
342 result->InitializeObjectBase(); \
347 #define vtkStandardNewMacro(thisClass) \
348 thisClass* thisClass::New() { VTK_STANDARD_NEW_BODY(thisClass); }
352 #define vtkStandardExtendedNewMacro(thisClass) \
353 thisClass* thisClass::ExtendedNew() \
355 auto mkhold = vtkMemkindRAII(true); \
357 return thisClass::New(); \
361 #define vtkObjectFactoryNewMacro(thisClass) \
362 thisClass* thisClass::New() { VTK_OBJECT_FACTORY_NEW_BODY(thisClass); }
367 #define vtkAbstractObjectFactoryNewMacro(thisClass) \
368 thisClass* thisClass::New() { VTK_ABSTRACT_OBJECT_FACTORY_NEW_BODY(thisClass); }
abstract base class for most VTK objects
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static vtkObjectFactoryRegistryCleanup vtkObjectFactoryRegistryCleanupInstance
a simple class to control print indentation
OverrideInformation * OverrideArray
maintain a list of object factories
char ** OverrideClassNames
create and manipulate ordered lists of objects
abstract base class for vtkObjectFactories