Material: Add mapping and sequence protocols to MaterialPy object

This commit is contained in:
marioalexis
2025-01-05 17:51:12 -03:00
committed by Yorik van Havre
parent 90ed7ea793
commit 864fcf996a
2 changed files with 48 additions and 0 deletions

View File

@@ -553,3 +553,35 @@ PyObject* MaterialPy::setAppearanceValue(PyObject* args)
Py_INCREF(Py_None);
return Py_None;
}
PyObject* MaterialPy::keys()
{
return Py::new_reference_to(this->getProperties().keys());
}
PyObject* MaterialPy::values()
{
return Py::new_reference_to(this->getProperties().values());
}
Py_ssize_t MaterialPy::sequence_length(PyObject *self)
{
return static_cast<MaterialPy*>(self)->getProperties().size();
}
PyObject* MaterialPy::sequence_item(PyObject* self, Py_ssize_t item)
{
Py::List keys = static_cast<MaterialPy*>(self)->getProperties().keys();
return Py::new_reference_to(keys.getItem(item));
}
int MaterialPy::sequence_contains(PyObject* self, PyObject* key)
{
return PyDict_Contains(static_cast<MaterialPy*>(self)->getProperties().ptr(), key);
}
PyObject* MaterialPy::mapping_subscript(PyObject* self, PyObject* key)
{
Py::Dict dict = static_cast<MaterialPy*>(self)->getProperties();
return Py::new_reference_to(dict.getItem(Py::Object(key)));
}