55struct type_caster<T, enable_if_t<
std::is_base_of_v<vtkObjectBase, T>>>
64 bool load(handle src,
bool)
66 std::string thisStr =
"__this__";
68 PyObject *obj = src.ptr();
71 if (!PyObject_HasAttrString(obj, thisStr.c_str()))
76 PyObject *thisAttr = PyObject_GetAttrString(obj, thisStr.c_str());
77 if (thisAttr ==
nullptr)
82 std::string str = PyUnicode_AsUTF8(thisAttr);
89 auto iter = str.find(
"_p_vtk");
90 if (iter == std::string::npos)
95 auto className = str.substr(iter).find(
"vtk");
96 if (className == std::string::npos)
101 long address = stol(str.substr(1, 17));
102 vtkObjectBase *vtkObject = (vtkObjectBase *)((
void *)address);
104 if (vtkObject->IsA(str.substr(className).c_str()))
113 static handle
cast(
const T *src, return_value_policy policy, handle parent)
117 return none().release();
120 std::ostringstream oss;
121 oss << (vtkObjectBase *)src;
122 std::string address_str = oss.str();
126 py::object obj = py::module_::import(
"vtkmodules.vtkCommonCore")
127 .attr(
"vtkObjectBase")(address_str);
128 return obj.release();
130 catch (py::error_already_set &)
140 py::module_::import(
"vtk").attr(
"vtkObjectBase")(address_str);
141 return obj.release();
143 catch (py::error_already_set &)
146 throw NekError(
"Unable to import VTK.");
150 return none().release();