// SPDX-License-Identifier: LGPL-2.1-or-later /*************************************************************************** * Copyright (c) 2013 Werner Mayer * * * * This file is part of the FreeCAD CAx development system. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Library General Public License for more details. * * * * You should have received a copy of the GNU Library General Public * * License along with this library; see the file COPYING.LIB. If not, * * write to the Free Software Foundation, Inc., 59 Temple Place, * * Suite 330, Boston, MA 02111-1307, USA * * * ***************************************************************************/ #ifndef IMPORT_EXPORTOCAF_H #define IMPORT_EXPORTOCAF_H #include #include #include #include #include #include #include #include #include class TDF_Label; class TopLoc_Location; namespace App { class Document; class DocumentObject; class Part; } // namespace App namespace Part { class Feature; } namespace Import { class ImportExport ExportOCAF { public: ExportOCAF(Handle(TDocStd_Document) hDoc, bool explicitPlacement); virtual ~ExportOCAF(); void exportObjects(std::vector& objs); int exportObject(App::DocumentObject* obj, std::vector& hierarchical_label, std::vector& hierarchical_loc, std::vector& hierarchical_part); int saveShape(Part::Feature* part, const std::vector&, std::vector& hierarchical_label, std::vector& hierarchical_loc, std::vector& hierarchical_part); void getPartColors(std::vector hierarchical_part, std::vector FreeLabels, std::vector part_id, std::vector>& Colors) const; void reallocateFreeShape(std::vector hierarchical_part, std::vector FreeLabels, std::vector part_id, std::vector>& Colors); void getFreeLabels(std::vector& hierarchical_label, std::vector& labels, std::vector& label_part_id); void createNode(App::Part* part, int& root_it, std::vector& hierarchical_label, std::vector& hierarchical_loc, std::vector& hierarchical_part); void pushNode(int root, int node, std::vector& hierarchical_label, std::vector& hierarchical_loc); private: virtual void findColors(Part::Feature*, std::vector&) const {} std::vector filterPart(App::Part* part) const; private: Handle(TDocStd_Document) pDoc; Handle(XCAFDoc_ShapeTool) aShapeTool; Handle(XCAFDoc_ColorTool) aColorTool; TDF_Label rootLabel; bool keepExplicitPlacement; bool filterBaseFeature {true}; }; class ImportExport ExportOCAFCmd: public ExportOCAF { public: ExportOCAFCmd(Handle(TDocStd_Document) h, bool explicitPlacement); void setPartColorsMap(const std::map>& colors) { partColors = colors; } private: void findColors(Part::Feature*, std::vector&) const override; private: std::map> partColors; }; } // namespace Import #endif // IMPORT_EXPORTOCAF_H