From 2d4bcbba3451497306db3f059948187e6170eba7 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 2 Oct 2023 13:52:23 +0200 Subject: [PATCH] Import: fix legacy STEP/IGES/glTF export function to support colors per face See issue #10861 --- src/Mod/Import/App/AppImportPy.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/Mod/Import/App/AppImportPy.cpp b/src/Mod/Import/App/AppImportPy.cpp index 7655329ff4..fa274046e0 100644 --- a/src/Mod/Import/App/AppImportPy.cpp +++ b/src/Mod/Import/App/AppImportPy.cpp @@ -278,12 +278,28 @@ private: try { Py::Sequence list(object); std::vector objs; + std::map> partColor; for (Py::Sequence::iterator it = list.begin(); it != list.end(); ++it) { PyObject* item = (*it).ptr(); if (PyObject_TypeCheck(item, &(App::DocumentObjectPy::Type))) { auto pydoc = static_cast(item); objs.push_back(pydoc->getDocumentObjectPtr()); } + else if (PyTuple_Check(item) && PyTuple_Size(item) == 2) { + Py::Tuple tuple(*it); + Py::Object item0 = tuple.getItem(0); + Py::Object item1 = tuple.getItem(1); + if (PyObject_TypeCheck(item0.ptr(), &(App::DocumentObjectPy::Type))) { + auto pydoc = static_cast(item0.ptr()); + App::DocumentObject* obj = pydoc->getDocumentObjectPtr(); + objs.push_back(obj); + if (Part::Feature* part = dynamic_cast(obj)) { + App::PropertyColorList colors; + colors.setPyObject(item1.ptr()); + partColor[part] = colors.getValues(); + } + } + } } Handle(XCAFApp_Application) hApp = XCAFApp_Application::GetApplication(); @@ -301,6 +317,7 @@ private: else { bool keepExplicitPlacement = true; ExportOCAFCmd ocaf(hDoc, keepExplicitPlacement); + ocaf.setPartColorsMap(partColor); ocaf.exportObjects(objs); }