00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00040 #ifndef __vtkObjectFactory_h
00041 #define __vtkObjectFactory_h
00042
00043
00044
00045
00046 #include "vtkObject.h"
00047
00048 class vtkObjectFactoryCollection;
00049 class vtkOverrideInformationCollection;
00050 class vtkCollection;
00051
00052 class VTK_COMMON_EXPORT vtkObjectFactory : public vtkObject
00053 {
00054 public:
00055
00056
00061 static vtkObject* CreateInstance(const char* vtkclassname);
00062
00064
00067 static void CreateAllInstance(const char* vtkclassname,
00068 vtkCollection* retList);
00069
00070
00071
00072 static void ReHash();
00073
00074
00075 static void RegisterFactory(vtkObjectFactory* );
00076
00077
00078 static void UnRegisterFactory(vtkObjectFactory*);
00079
00080
00081 static void UnRegisterAllFactories();
00083
00086 static vtkObjectFactoryCollection* GetRegisteredFactories();
00087
00090 static int HasOverrideAny(const char* className);
00091
00093
00095 static void GetOverrideInformation(const char* name,
00096 vtkOverrideInformationCollection*);
00098
00100
00102 static void SetAllEnableFlags(int flag,
00103 const char* className);
00104
00105
00106
00107 static void SetAllEnableFlags(int flag,
00108 const char* className,
00109 const char* subclassName);
00111
00112
00113
00114
00115 vtkTypeRevisionMacro(vtkObjectFactory,vtkObject);
00117 virtual void PrintSelf(ostream& os, vtkIndent indent);
00118
00125 virtual const char* GetVTKSourceVersion() = 0;
00126
00128 virtual const char* GetDescription() = 0;
00129
00131 virtual int GetNumberOfOverrides();
00132
00134 virtual const char* GetClassOverrideName(int index);
00135
00138 virtual const char* GetClassOverrideWithName(int index);
00139
00141 virtual int GetEnableFlag(int index);
00142
00144 virtual const char* GetOverrideDescription(int index);
00145
00147
00149 virtual void SetEnableFlag(int flag,
00150 const char* className,
00151 const char* subclassName);
00152 virtual int GetEnableFlag(const char* className,
00153 const char* subclassName);
00155
00157
00158 virtual int HasOverride(const char* className);
00159
00160
00161 virtual int HasOverride(const char* className, const char* subclassName);
00163
00166 virtual void Disable(const char* className);
00167
00169
00170 vtkGetStringMacro(LibraryPath);
00172
00173
00174 typedef vtkObject* (*CreateFunction)();
00175
00176 protected:
00177
00178
00180
00181 void RegisterOverride(const char* classOverride,
00182 const char* overrideClassName,
00183 const char* description,
00184 int enableFlag,
00185 CreateFunction createFunction);
00187
00188
00189
00190
00194 virtual vtkObject* CreateObject(const char* vtkclassname );
00195
00196 vtkObjectFactory();
00197 ~vtkObjectFactory();
00198
00199 struct OverrideInformation
00200 {
00201 char* Description;
00202 char* OverrideWithName;
00203 int EnabledFlag;
00204 CreateFunction CreateCallback;
00205 };
00206
00207 OverrideInformation* OverrideArray;
00208 char** OverrideClassNames;
00209 int SizeOverrideArray;
00210 int OverrideArrayLength;
00211
00212 private:
00213 void GrowOverrideArray();
00214
00216
00218 static void Init();
00219
00220
00221 static void RegisterDefaults();
00222
00223
00224 static void LoadDynamicFactories();
00225
00226
00227 static void LoadLibrariesInPath( const char*);
00229
00230
00231 static vtkObjectFactoryCollection* RegisteredFactories;
00232
00233
00234
00235 void* LibraryHandle;
00236 char* LibraryVTKVersion;
00237 char* LibraryCompilerUsed;
00238 char* LibraryPath;
00239 private:
00240 vtkObjectFactory(const vtkObjectFactory&);
00241 void operator=(const vtkObjectFactory&);
00242 };
00243
00244
00245
00246
00247 #define VTK_CREATE_CREATE_FUNCTION(classname) \
00248 static vtkObject* vtkObjectFactoryCreate##classname() \
00249 { return classname::New(); }
00250
00251 #endif
00252
00253
00254 #ifdef _WIN32
00255 #define VTK_FACTORY_INTERFACE_EXPORT __declspec( dllexport )
00256 #else
00257 #define VTK_FACTORY_INTERFACE_EXPORT
00258 #endif
00259
00260
00261
00262
00263
00264
00265 #define VTK_FACTORY_INTERFACE_IMPLEMENT(factoryName) \
00266 extern "C" \
00267 VTK_FACTORY_INTERFACE_EXPORT \
00268 const char* vtkGetFactoryCompilerUsed() \
00269 { \
00270 return VTK_CXX_COMPILER; \
00271 } \
00272 extern "C" \
00273 VTK_FACTORY_INTERFACE_EXPORT \
00274 const char* vtkGetFactoryVersion() \
00275 { \
00276 return VTK_SOURCE_VERSION; \
00277 } \
00278 extern "C" \
00279 VTK_FACTORY_INTERFACE_EXPORT \
00280 vtkObjectFactory* vtkLoad() \
00281 { \
00282 return factoryName ::New(); \
00283 }