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); }