diff --git a/src/Mod/Material/App/MaterialPyImpl.cpp b/src/Mod/Material/App/MaterialPyImpl.cpp index 449a81e521..b59d51f404 100644 --- a/src/Mod/Material/App/MaterialPyImpl.cpp +++ b/src/Mod/Material/App/MaterialPyImpl.cpp @@ -23,6 +23,7 @@ #include +#include #include #include #include @@ -46,12 +47,15 @@ std::string MaterialPy::representation() const str << ptr->getName().toStdString(); str << "), UUID=("; str << ptr->getUUID().toStdString(); - str << "), Library Name=("; - str << ptr->getLibrary()->getName().toStdString(); - str << "), Library Root=("; - str << ptr->getLibrary()->getDirectoryPath().toStdString(); - str << "), Library Icon=("; - str << ptr->getLibrary()->getIconPath().toStdString(); + auto library = ptr->getLibrary(); + if (library) { + str << "), Library Name=("; + str << ptr->getLibrary()->getName().toStdString(); + str << "), Library Root=("; + str << ptr->getLibrary()->getDirectoryPath().toStdString(); + str << "), Library Icon=("; + str << ptr->getLibrary()->getIconPath().toStdString(); + } str << "), Directory=("; str << ptr->getDirectory().toStdString(); // str << "), URL=("; @@ -91,17 +95,20 @@ int MaterialPy::PyInit(PyObject* /*args*/, PyObject* /*kwd*/) Py::String MaterialPy::getLibraryName() const { - return Py::String(getMaterialPtr()->getLibrary()->getName().toStdString()); + auto library = getMaterialPtr()->getLibrary(); + return Py::String(library ? library->getName().toStdString() : ""); } Py::String MaterialPy::getLibraryRoot() const { - return Py::String(getMaterialPtr()->getLibrary()->getDirectoryPath().toStdString()); + auto library = getMaterialPtr()->getLibrary(); + return Py::String(library ? library->getDirectoryPath().toStdString() : ""); } Py::String MaterialPy::getLibraryIcon() const { - return Py::String(getMaterialPtr()->getLibrary()->getIconPath().toStdString()); + auto library = getMaterialPtr()->getLibrary(); + return Py::String(library ? library->getIconPath().toStdString() : ""); } Py::String MaterialPy::getName() const @@ -347,7 +354,7 @@ Py::Dict MaterialPy::getAppearanceProperties() const static PyObject* _pyObjectFromVariant(const QVariant& value) { if (value.isNull()) { - return new PyObject(); + Py_RETURN_NONE; } if (value.userType() == qMetaTypeId()) { @@ -366,7 +373,7 @@ static PyObject* _pyObjectFromVariant(const QVariant& value) return PyLong_FromLong(value.toInt()); } else if (value.userType() == QMetaType::Bool) { - return value.toBool() ? Py_True : Py_False; + return Py::new_reference_to(Py::Boolean(value.toBool())); } else if (value.userType() == QMetaType::QString) { return PyUnicode_FromString(value.toString().toStdString().c_str()); diff --git a/src/Mod/Material/App/ModelPyImpl.cpp b/src/Mod/Material/App/ModelPyImpl.cpp index f450ee1f0b..1c8c769b1c 100644 --- a/src/Mod/Material/App/ModelPyImpl.cpp +++ b/src/Mod/Material/App/ModelPyImpl.cpp @@ -40,12 +40,15 @@ std::string ModelPy::representation() const str << ptr->getName().toStdString(); str << "), UUID=("; str << ptr->getUUID().toStdString(); - str << "), Library Name=("; - str << ptr->getLibrary()->getName().toStdString(); - str << "), Library Root=("; - str << ptr->getLibrary()->getDirectoryPath().toStdString(); - str << "), Library Icon=("; - str << ptr->getLibrary()->getIconPath().toStdString(); + auto library = ptr->getLibrary(); + if (library) { + str << "), Library Name=("; + str << ptr->getLibrary()->getName().toStdString(); + str << "), Library Root=("; + str << ptr->getLibrary()->getDirectoryPath().toStdString(); + str << "), Library Icon=("; + str << ptr->getLibrary()->getIconPath().toStdString(); + } str << "), Directory=("; str << ptr->getDirectory().toStdString(); str << "), URL=("; @@ -85,17 +88,20 @@ int ModelPy::PyInit(PyObject* /*args*/, PyObject* /*kwd*/) Py::String ModelPy::getLibraryName() const { - return Py::String(getModelPtr()->getLibrary()->getName().toStdString()); + auto library = getModelPtr()->getLibrary(); + return Py::String(library ? library->getName().toStdString() : ""); } Py::String ModelPy::getLibraryRoot() const { - return Py::String(getModelPtr()->getLibrary()->getDirectoryPath().toStdString()); + auto library = getModelPtr()->getLibrary(); + return Py::String(library ? library->getDirectoryPath().toStdString() : ""); } Py::String ModelPy::getLibraryIcon() const { - return Py::String(getModelPtr()->getLibrary()->getIconPath().toStdString()); + auto library = getModelPtr()->getLibrary(); + return Py::String(library ? library->getIconPath().toStdString() : ""); } Py::String ModelPy::getName() const