From fc4a1c6081e6625840d891a52bebcd57bd9cc522 Mon Sep 17 00:00:00 2001 From: Jean-Marie Verdun Date: Sun, 29 Jan 2017 17:20:51 +0100 Subject: [PATCH] Activate only UI tree leaf as to display properly colors when browsing a STEP (there is currently a limitation within the reader which creates compound which are totally grey) and accelerate browsing by de-activating Compound rendering --- src/Mod/Import/App/ImportOCAF.cpp | 6 ++++++ src/Mod/Import/App/ImportOCAF.h | 10 ++++++++++ src/Mod/Import/Gui/AppImportGuiPy.cpp | 14 ++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/Mod/Import/App/ImportOCAF.cpp b/src/Mod/Import/App/ImportOCAF.cpp index c819edd9e..f4f57fa50 100644 --- a/src/Mod/Import/App/ImportOCAF.cpp +++ b/src/Mod/Import/App/ImportOCAF.cpp @@ -75,6 +75,9 @@ #include #include +#include +#include + #ifdef HAVE_TBB #include #include @@ -214,6 +217,7 @@ void ImportOCAF::loadShapes(const TDF_Label& label, const TopLoc_Location& loc, if (pcCompound) { pcCompound->Links.setValues(localValue); lValue.push_back(pcCompound); + Node_Shapes.push_back(pcCompound->getNameInDocument()); } } } @@ -244,6 +248,7 @@ void ImportOCAF::createShape(const TDF_Label& label, const TopLoc_Location& loc, pcCompound->Links.setValues(localValue); lValue.push_back(pcCompound); + Node_Shapes.push_back(pcCompound->getNameInDocument()); if (ctSolids > 0 || ctShells > 0) return; } @@ -260,6 +265,7 @@ void ImportOCAF::createShape(const TopoDS_Shape& aShape, const TopLoc_Location& else part->Shape.setValue(aShape); part->Label.setValue(name); + Leaf_Shapes.push_back(part->getNameInDocument()); lvalue.push_back(part); Quantity_Color aColor; diff --git a/src/Mod/Import/App/ImportOCAF.h b/src/Mod/Import/App/ImportOCAF.h index 595e2ee7d..7d145882f 100644 --- a/src/Mod/Import/App/ImportOCAF.h +++ b/src/Mod/Import/App/ImportOCAF.h @@ -57,6 +57,12 @@ public: ImportOCAF(Handle_TDocStd_Document h, App::Document* d, const std::string& name); virtual ~ImportOCAF(); void loadShapes(); + std::vector return_leaf() const { + return Leaf_Shapes; + } + std::vector return_node() const { + return Node_Shapes; + } private: void loadShapes(const TDF_Label& label, const TopLoc_Location&, const std::string& partname, const std::string& assembly, bool isRef, std::vector &); @@ -72,6 +78,10 @@ private: std::string default_name; std::set myRefShapes; static const int HashUpper = INT_MAX; + // These variables are used to transfer Shape names to the UI backend and decide + // to activate / deactivate the right members for performance improvements + std::vector Leaf_Shapes; + std::vector Node_Shapes; }; class ImportExport ExportOCAF diff --git a/src/Mod/Import/Gui/AppImportGuiPy.cpp b/src/Mod/Import/Gui/AppImportGuiPy.cpp index 321f650eb..cd05af12c 100644 --- a/src/Mod/Import/Gui/AppImportGuiPy.cpp +++ b/src/Mod/Import/Gui/AppImportGuiPy.cpp @@ -112,6 +112,10 @@ #include #include +#include +#include +#include + class OCAFBrowser { public: @@ -403,6 +407,16 @@ private: ImportOCAFExt ocaf(hDoc, pcDoc, file.fileNamePure()); ocaf.loadShapes(); + + // Shape are loaded we must now sort the one we want to display and the one we do want to hide + Gui::Document *guiDoc = Gui::Application::Instance->activeDocument(); + std::vectorkeep_leaf= ocaf.return_leaf(); + for (std::vector::iterator it = keep_leaf.begin() ; it != keep_leaf.end(); ++it) + guiDoc->setShow((*it)); + std::vectorhide_node= ocaf.return_node(); + for (std::vector::iterator it = hide_node.begin() ; it != hide_node.end(); ++it) + guiDoc->setHide((*it)); + pcDoc->recompute(); } catch (Standard_Failure) {