From 5bb5c2a9cfb0db9bf0ce3cb263b3af26f2827f12 Mon Sep 17 00:00:00 2001 From: David Carter Date: Thu, 30 May 2024 17:31:35 -0400 Subject: [PATCH] Materials: Inheritance API API changes to inherit a material --- src/Mod/Material/App/MaterialManagerPy.xml | 5 +++++ .../Material/App/MaterialManagerPyImpl.cpp | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/Mod/Material/App/MaterialManagerPy.xml b/src/Mod/Material/App/MaterialManagerPy.xml index f518062bc6..354c403351 100644 --- a/src/Mod/Material/App/MaterialManagerPy.xml +++ b/src/Mod/Material/App/MaterialManagerPy.xml @@ -25,6 +25,11 @@ Get a material object by specifying its path and library name + + + Create a new material object by specifying the UUID of its parent + + List of Material libraries. diff --git a/src/Mod/Material/App/MaterialManagerPyImpl.cpp b/src/Mod/Material/App/MaterialManagerPyImpl.cpp index bd31992db6..833fdb0d6c 100644 --- a/src/Mod/Material/App/MaterialManagerPyImpl.cpp +++ b/src/Mod/Material/App/MaterialManagerPyImpl.cpp @@ -111,6 +111,27 @@ PyObject* MaterialManagerPy::getMaterialByPath(PyObject* args) } } +PyObject* MaterialManagerPy::inheritMaterial(PyObject* args) +{ + char* uuid {}; + if (!PyArg_ParseTuple(args, "s", &uuid)) { + return nullptr; + } + + try { + auto parent = getMaterialManagerPtr()->getMaterial(QString::fromStdString(uuid)); + + // Found the parent. Create a new material with this as parent + auto material = new Material(); + material->setParentUUID(QString::fromLatin1(uuid)); + return new MaterialPy(material); // Transfers ownership + } + catch (const MaterialNotFound&) { + PyErr_SetString(PyExc_LookupError, "Material not found"); + return nullptr; + } +} + Py::List MaterialManagerPy::getMaterialLibraries() const { auto libraries = getMaterialManagerPtr()->getMaterialLibraries();