38 #ifndef vtkObjectFactory_h
39 #define vtkObjectFactory_h
41 #include "vtkCommonCoreModule.h"
66 static vtkObject* CreateInstance(
const char* vtkclassname,
bool isAbstract =
false);
74 static void CreateAllInstance(
const char* vtkclassname,
vtkCollection* retList);
91 static void UnRegisterAllFactories();
103 static int HasOverrideAny(
const char* className);
115 static void SetAllEnableFlags(
vtkTypeBool flag,
const char* className);
120 static void SetAllEnableFlags(
vtkTypeBool flag,
const char* className,
const char* subclassName);
138 virtual const char* GetVTKSourceVersion() = 0;
143 virtual const char* GetDescription() = 0;
148 virtual int GetNumberOfOverrides();
153 virtual const char* GetClassOverrideName(
int index);
159 virtual const char* GetClassOverrideWithName(
int index);
170 virtual const char* GetOverrideDescription(
int index);
177 virtual void SetEnableFlag(
vtkTypeBool flag,
const char* className,
const char* subclassName);
178 virtual vtkTypeBool GetEnableFlag(
const char* className,
const char* subclassName);
184 virtual int HasOverride(
const char* className);
188 virtual int HasOverride(
const char* className,
const char* subclassName);
195 virtual void Disable(
const char* className);
201 vtkGetStringMacro(LibraryPath);
210 void RegisterOverride(
const char* classOverride,
const char* overrideClassName,
211 const char*
description,
int enableFlag, CreateFunction createFunction);
218 virtual vtkObject* CreateObject(
const char* vtkclassname);
237 void GrowOverrideArray();
247 static void RegisterDefaults();
251 static void LoadDynamicFactories();
255 static void LoadLibrariesInPath(
const std::string&);
263 char* LibraryVTKVersion;
264 char* LibraryCompilerUsed;
288 #define VTK_CREATE_CREATE_FUNCTION(classname) \
289 static vtkObject* vtkObjectFactoryCreate##classname() { return classname::New(); }
293 #define VTK_FACTORY_INTERFACE_EXPORT VTKCOMMONCORE_EXPORT
300 #define VTK_FACTORY_INTERFACE_IMPLEMENT(factoryName) \
301 extern "C" VTK_FACTORY_INTERFACE_EXPORT const char* vtkGetFactoryCompilerUsed() \
303 return VTK_CXX_COMPILER; \
305 extern "C" VTK_FACTORY_INTERFACE_EXPORT const char* vtkGetFactoryVersion() \
307 return VTK_SOURCE_VERSION; \
309 extern "C" VTK_FACTORY_INTERFACE_EXPORT vtkObjectFactory* vtkLoad() \
311 return factoryName ::New(); \
315 #define VTK_OBJECT_FACTORY_NEW_BODY(thisClass) \
316 vtkObject* ret = vtkObjectFactory::CreateInstance(#thisClass, false); \
319 return static_cast<thisClass*>(ret); \
321 auto result = new thisClass; \
322 result->InitializeObjectBase(); \
328 #define VTK_ABSTRACT_OBJECT_FACTORY_NEW_BODY(thisClass) \
329 vtkObject* ret = vtkObjectFactory::CreateInstance(#thisClass, true); \
332 return static_cast<thisClass*>(ret); \
334 vtkGenericWarningMacro("Error: no override found for '" #thisClass "'."); \
338 #if defined(VTK_ALL_NEW_OBJECT_FACTORY)
339 #define VTK_STANDARD_NEW_BODY(thisClass) VTK_OBJECT_FACTORY_NEW_BODY(thisClass)
341 #define VTK_STANDARD_NEW_BODY(thisClass) \
342 auto result = new thisClass; \
343 result->InitializeObjectBase(); \
348 #define vtkStandardNewMacro(thisClass) \
349 thisClass* thisClass::New() { VTK_STANDARD_NEW_BODY(thisClass); }
352 #define vtkObjectFactoryNewMacro(thisClass) \
353 thisClass* thisClass::New() { VTK_OBJECT_FACTORY_NEW_BODY(thisClass); }
358 #define vtkAbstractObjectFactoryNewMacro(thisClass) \
359 thisClass* thisClass::New() { VTK_ABSTRACT_OBJECT_FACTORY_NEW_BODY(thisClass); }