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")
165 "${_vtkObjectFactory_source_dir}/vtkObjectFactory.h.in" 166 "${_vtk_object_factory_overrides_header}" 169 "${_vtkObjectFactory_source_dir}/vtkObjectFactory.cxx.in" 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}"
function vtk_object_factory_declare()
Declare a factory override
function vtk_object_factory_configure()
Generate source for overrides in a module
create a window for renderers to draw into
abstract base class for vtkObjectFactories