fixes 0003165: Color information lost in STEP export

This commit is contained in:
wmayer
2018-09-28 11:49:04 +02:00
parent 0812fb06df
commit 02ab1c9424
3 changed files with 45 additions and 1 deletions

View File

@@ -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<Part::Feature*, std::vector<App::Color> > 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());

View File

@@ -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<App::Color>& colors)
{
partColors[part] = colors;
}
// ----------------------------------------------------------------------------
ExportOCAF::ExportOCAF(Handle(TDocStd_Document) h, bool explicitPlacement)
: pDoc(h)
, keepExplicitPlacement(explicitPlacement)

View File

@@ -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<Part::Feature*, std::vector<App::Color> > getPartColorsMap() const {
return partColors;
}
private:
void applyColors(Part::Feature* part, const std::vector<App::Color>& colors);
private:
std::map<Part::Feature*, std::vector<App::Color> > partColors;
};
class ImportExport ExportOCAF
{
public: