1# This file provides several helper macros/functions to aid in overrideing 2# the VTK object factories. These methods should be used to ensure that certain 3# interface classes have valid overrides provided in implementation modules. 4# If the interface class doesn't use one of the object factory based new macros 5# in C++ then the overrides will not work as expected. 6 7# Add a new override, base is the base class name and override is the name of 8# the class that should override. For example, 9# vtk_add_override(vtkRenderer vtkOpenGLRenderer) 10macro(vtk_add_override base override) 11 list(APPEND vtk_module_overrides ${base}) 12 set(vtk_module_${base}_override ${override}) 13endmacro() 14 15# Create the relevant object factory files from the override list. This uses 16# ${vtk-module} to construct the file names (${vtk-module}ObjectFactory.[h,cxx] 17# in the current binary directory. 18function(vtk_object_factory_configure override_list) 19 # Now we iterate and create that class file... 20 foreach(_class ${override_list}) 21 set(_override ${vtk_module_${_class}_override}) 22 set(_vtk_override_includes 23 "${_vtk_override_includes}\n#include \"${_override}.h\"") 24 set(_vtk_override_creates "${_vtk_override_creates} 25 VTK_CREATE_CREATE_FUNCTION(${_override})") 26 set(_vtk_override_do "${_vtk_override_do} 27 this->RegisterOverride(\"${_class}\", 28 \"${_override}\", 29 \"Override for ${vtk-module} module\", 1, 30 vtkObjectFactoryCreate${_override});") 31 endforeach() 32 string(TOUPPER ${vtk-module} VTK-MODULE) 33 configure_file(${VTK_CMAKE_DIR}/vtkObjectFactory.h.in 34 ${CMAKE_CURRENT_BINARY_DIR}/${vtk-module}ObjectFactory.h) 35 configure_file(${VTK_CMAKE_DIR}/vtkObjectFactory.cxx.in 36 ${CMAKE_CURRENT_BINARY_DIR}/${vtk-module}ObjectFactory.cxx) 37endfunction() 38