From 02ab1c9424944bbf289931ac31045efbce0b1e0d Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 28 Sep 2018 11:49:04 +0200 Subject: [PATCH] fixes 0003165: Color information lost in STEP export --- src/Mod/Import/App/AppImportPy.cpp | 19 ++++++++++++++++++- src/Mod/Import/App/ImportOCAF.cpp | 12 ++++++++++++ src/Mod/Import/App/ImportOCAF.h | 15 +++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/Mod/Import/App/AppImportPy.cpp b/src/Mod/Import/App/AppImportPy.cpp index d13c85af05..cc8ce86f6a 100644 --- a/src/Mod/Import/App/AppImportPy.cpp +++ b/src/Mod/Import/App/AppImportPy.cpp @@ -198,7 +198,7 @@ private: } #if 1 - Import::ImportOCAF ocaf(hDoc, pcDoc, file.fileNamePure()); + Import::ImportOCAFCmd ocaf(hDoc, pcDoc, file.fileNamePure()); ocaf.loadShapes(); #else Import::ImportXCAF xcaf(hDoc, pcDoc, file.fileNamePure()); @@ -206,6 +206,23 @@ private: #endif pcDoc->recompute(); hApp->Close(hDoc); + + std::map > colorMap = ocaf.getPartColorsMap(); + if (!colorMap.empty()) { + Py::List list; + for (auto it : colorMap) { + Py::Tuple tuple(2); + tuple.setItem(0, Py::asObject(it.first->getPyObject())); + + App::PropertyColorList colors; + colors.setValues(it.second); + tuple.setItem(1, Py::asObject(colors.getPyObject())); + + list.append(tuple); + } + + return list; + } } catch (Standard_Failure& e) { throw Py::Exception(Base::BaseExceptionFreeCADError, e.GetMessageString()); diff --git a/src/Mod/Import/App/ImportOCAF.cpp b/src/Mod/Import/App/ImportOCAF.cpp index b01413aa0e..0cc39ccbf5 100644 --- a/src/Mod/Import/App/ImportOCAF.cpp +++ b/src/Mod/Import/App/ImportOCAF.cpp @@ -478,6 +478,18 @@ void ImportOCAF::createShape(const TopoDS_Shape& aShape, const TopLoc_Location& // ---------------------------------------------------------------------------- +ImportOCAFCmd::ImportOCAFCmd(Handle(TDocStd_Document) h, App::Document* d, const std::string& name) + : ImportOCAF(h, d, name) +{ +} + +void ImportOCAFCmd::applyColors(Part::Feature* part, const std::vector& colors) +{ + partColors[part] = colors; +} + +// ---------------------------------------------------------------------------- + ExportOCAF::ExportOCAF(Handle(TDocStd_Document) h, bool explicitPlacement) : pDoc(h) , keepExplicitPlacement(explicitPlacement) diff --git a/src/Mod/Import/App/ImportOCAF.h b/src/Mod/Import/App/ImportOCAF.h index 9c497d2eab..598872b687 100644 --- a/src/Mod/Import/App/ImportOCAF.h +++ b/src/Mod/Import/App/ImportOCAF.h @@ -77,6 +77,21 @@ private: static const int HashUpper = INT_MAX; }; +class ImportExport ImportOCAFCmd : public ImportOCAF +{ +public: + ImportOCAFCmd(Handle(TDocStd_Document) h, App::Document* d, const std::string& name); + std::map > getPartColorsMap() const { + return partColors; + } + +private: + void applyColors(Part::Feature* part, const std::vector& colors); + +private: + std::map > partColors; +}; + class ImportExport ExportOCAF { public: