00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00064 #ifndef __vtkObjectFactory_h
00065 #define __vtkObjectFactory_h
00066
00067
00068
00069
00070 #include "vtkObject.h"
00071
00072 class vtkObjectFactoryCollection;
00073
00074 class VTK_EXPORT vtkObjectFactory : public vtkObject
00075 {
00076 public:
00077
00078 vtkTypeMacro(vtkObjectFactory,vtkObject);
00080 virtual void PrintSelf(ostream& os, vtkIndent indent);
00081
00082
00083
00088 static vtkObject* CreateInstance(const char* vtkclassname);
00091 static void ReHash();
00093 static void RegisterFactory(vtkObjectFactory* );
00095 static void UnRegisterFactory(vtkObjectFactory*);
00097 static void UnRegisterAllFactories();
00098
00101 static vtkObjectFactoryCollection* GetRegisteredFactories();
00102
00109 virtual const char* GetVTKSourceVersion() = 0;
00110
00112 virtual const char* GetDescription() = 0;
00113
00115 virtual int GetNumberOfOverrides();
00116
00118 virtual const char* GetClassOverrideName(int index);
00119
00122 virtual const char* GetClassOverrideWithName(int index);
00123
00125 virtual int GetEnableFlag(int index);
00126
00128 virtual const char* GetDescription(int index);
00129
00131 virtual void SetEnableFlag(int flag,
00132 const char* className,
00133 const char* subclassName);
00134 virtual int GetEnableFlag(const char* className,
00135 const char* subclassName);
00136
00139 virtual void Disable(const char* className);
00140
00142 vtkGetStringMacro(LibraryPath);
00143
00144
00145 typedef vtkObject* (*CreateFunction)();
00146
00147 protected:
00148
00149
00151 void RegisterOverride(const char* classOverride,
00152 const char* overrideClassName,
00153 const char* description,
00154 int enableFlag,
00155 CreateFunction createFunction);
00156
00157
00158
00159
00163 virtual vtkObject* CreateObject(const char* vtkclassname );
00164
00165 vtkObjectFactory();
00166 ~vtkObjectFactory();
00167 vtkObjectFactory(const vtkObjectFactory&) {};
00168 void operator=(const vtkObjectFactory&) {};
00169
00170 struct OverrideInformation
00171 {
00172 char* Description;
00173 char* OverrideWithName;
00174 int EnabledFlag;
00175 CreateFunction CreateCallback;
00176 };
00177
00178 OverrideInformation* OverrideArray;
00179 char** OverrideClassNames;
00180 int SizeOverrideArray;
00181 int OverrideArrayLength;
00182
00183 private:
00184 void GrowOverrideArray();
00185
00188 static void Init();
00190 static void RegisterDefaults();
00192 static void LoadDynamicFactories();
00194 static void LoadLibrariesInPath( const char*);
00195
00196
00197 static vtkObjectFactoryCollection* RegisteredFactories;
00198
00199
00200
00201 void* LibraryHandle;
00202 unsigned long LibraryDate;
00203 char* LibraryPath;
00204 };
00205
00206
00207
00208
00209 #define VTK_CREATE_CREATE_FUNCTION(classname) \
00210 static vtkObject* vtkObjectFactoryCreate##classname() \
00211 { return classname::New(); }
00212
00213 #endif