4 In VTK, certain classes can have what are called 
"implementations". When the
 
    5 base 
class is requested, it instead looks into a list of available
 
    6 implementations. One of the implementations is then constructed and returned
 
   10 constructed, it instead actually returns a window for the X window system,
 
   11 Cocoa, or Win32 depending 
on what is available.
 
   13 VTK's implementation utilizes the [autoinit](@ref module-autoinit) logic of the
 
   14 module system. A module which contains an object factory must declare itself as
 
   15 `IMPLEMENTABLE` and modules which contain an implementation of an object
 
   16 factory must claim that they `IMPLEMENTS` modules containing those base object
 
   17 factories (a module may contain the object factory and an implementation; it
 
   18 then says that it `IMPLEMENTS` itself).
 
   21 set(_vtkObjectFactory_source_dir 
"${CMAKE_CURRENT_LIST_DIR}")
 
   24 @brief Declare a factory 
override 
   26 Declare that a 
class in this module (the implementation) is an `OVERRIDE` for a
 
   32   OVERRIDE  <implementation>)
 
   36   cmake_parse_arguments(_vtk_object_factory_declare
 
   42   if (_vtk_object_factory_declare_UNPARSED_ARGUMENTS)
 
   44       "Unparsed arguments for vtk_object_factory_declare: " 
   45       "${_vtk_object_factory_declare_UNPARSED_ARGUMENTS}")
 
   48   if (NOT DEFINED _vtk_object_factory_declare_BASE)
 
   50       "The `BASE` argument is required.")
 
   53   if (NOT DEFINED _vtk_object_factory_declare_OVERRIDE)
 
   55       "The `OVERRIDE` argument is required.")
 
   58   set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}
" APPEND 
   60       _vtk_object_factory_overrides "${_vtk_object_factory_declare_OVERRIDE}
") 
   61   set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}
" APPEND 
   63       "_vtk_object_factory_override_${_vtk_object_factory_declare_OVERRIDE}
" "${_vtk_object_factory_declare_BASE}
") 
   67 @brief Generate source for overrides in a module 
   69 A module may only have a single declaration of all its object factory 
   70 implementations. This function generates the source for all of the overrides 
   71 declared using @ref vtk_object_factory_declare. 
   74 vtk_object_factory_configure( 
   75   SOURCE_FILE <variable> 
   76   [HEADER_FILE <variable>] 
   77   [EXPORT_MACRO <macro>] 
   79   [EXTRA_INCLUDES <include>...]) 
   82   - `SOURCE_FILE`: (Required) A variable to set to the path to generated source 
   84   - `HEADER_FILE`: (Recommended) A variable to set to the path to generated 
   85     header file. This should not be treated as a public header. 
   86   - `EXPORT_MACRO`: (Recommended) The export macro to add to the generated 
   88   - `INITIAL_CODE`: C++ code to run when the object factory is initialized. 
   89   - `EXTRA_INCLUDES`: A list of headers to include. The header names need to 
   90     include the `<>` or `""` quoting. 
   92 function (vtk_object_factory_configure) 
   93   if (NOT DEFINED _vtk_build_module) 
   98   cmake_parse_arguments(_vtk_object_factory_configure 
  100     "SOURCE_FILE;HEADER_FILE;INITIAL_CODE;EXPORT_MACRO
" 
  104   if (_vtk_object_factory_configure_UNPARSED_ARGUMENTS) 
  107       "${_vtk_object_factory_configure_UNPARSED_ARGUMENTS}
") 
  110   get_property(_vtk_object_factory_done 
  112     PROPERTY "_vtk_object_factory_${_vtk_build_module}
" 
  114   if (_vtk_object_factory_done) 
  116       "An 
object factory has already been created 
for ${_vtk_build_module}.
") 
  120         "_vtk_object_factory_${_vtk_build_module}
" 1) 
  123   get_property(_vtk_object_factory_overrides 
  125     PROPERTY _vtk_object_factory_overrides) 
  127   if (NOT _vtk_object_factory_overrides) 
  129       "The ${_vtk_build_module} is generating an 
object factory, but does not have any declared overrides.
") 
  132   set(_vtk_object_factory_doc 
  133     "Override 
for ${_vtk_build_module} module
") 
  135   set(_vtk_object_factory_includes "") 
  136   set(_vtk_object_factory_functions "") 
  137   set(_vtk_object_factory_calls "") 
  139   foreach (_vtk_object_factory_extra_include IN LISTS _vtk_object_factory_configure_EXTRA_INCLUDES) 
  140     set(_vtk_object_factory_includes 
  141       "${_vtk_object_factory_includes}#include ${_vtk_object_factory_extra_include}\n
") 
  144   foreach (_vtk_object_factory_override IN LISTS _vtk_object_factory_overrides) 
  145     get_property(_vtk_object_factory_base 
  147       PROPERTY "_vtk_object_factory_override_${_vtk_object_factory_override}
") 
  148     set(_vtk_object_factory_includes 
  149       "${_vtk_object_factory_includes}#include \
"${_vtk_object_factory_override}.h\"\n")
 
  150     set(_vtk_object_factory_functions
 
  151       "${_vtk_object_factory_functions}VTK_CREATE_CREATE_FUNCTION(${_vtk_object_factory_override})\n")
 
  152     set(_vtk_object_factory_calls
 
  153       "${_vtk_object_factory_calls}this->RegisterOverride(\"${_vtk_object_factory_base}\", \"${_vtk_object_factory_override}\", \"${_vtk_object_factory_doc}\", 1, vtkObjectFactoryCreate${_vtk_object_factory_override});\n")
 
  156   get_property(_vtk_object_factory_library_name GLOBAL
 
  157     PROPERTY "_vtk_module_${_vtk_build_module}_library_name
") 
  159   set(_vtk_object_factory_overrides_header 
  160     "${CMAKE_CURRENT_BINARY_DIR}/${_vtk_object_factory_library_name}ObjectFactory.h
") 
  161   set(_vtk_object_factory_overrides_source 
  162     "${CMAKE_CURRENT_BINARY_DIR}/${_vtk_object_factory_library_name}ObjectFactory.cxx
") 
  166     "${_vtk_object_factory_overrides_header}
" 
  170     "${_vtk_object_factory_overrides_source}
" 
  173   if (_vtk_object_factory_configure_HEADER_FILE) 
  174     set("${_vtk_object_factory_configure_HEADER_FILE}
" 
  175       "${_vtk_object_factory_overrides_header}
" 
  179   set("${_vtk_object_factory_configure_SOURCE_FILE}
" 
  180     "${_vtk_object_factory_overrides_source}
"