Map wrapped classes by both ClassName() and Python type name
This change is needed by the wrappers to handle an edge case for templated classes.
For templated VTK classes, the GetClassName()
method returns the result of typeid(type).name()
. Since the wrappers rely on GetClassName()
for VTK RTTI, the Python ClassMap
also uses typeid(type).name()
as the key for templated classes.
The issue that this MR aims to fix is that the ClassMap
is used for more than just GetClassName()
lookups. It is also used in some places where the Python class name is known, but not the VTK ClassName. As an example, consider vtkSOADataArrayTemplate<float>
which has a VTK ClassName of "23vtkSOADataArrayTemplateIfE"
(on linux-gcc) but has a Python class name of "vtkSOADataArrayTemplate_IfE"
(since the VTK ClassName isn't a legal Python identifier).
One specific edge case is vtkPythonOverload.cxx
, which performs overload resolution to figure out which C++ method to call as the result of a Python method call. To resolve overloads, the wrappers have a list parameter types for each overloaded method signature. The Python class name is used in this list, and the ClassMap
is used to retrieve the actual PyType
object which is then used for parameter type checking. So that ClassMap
must be able to take the Python class name as a key, or else overload resolution based on templated VTK classes will not work.