From 2a4f24695a501d60f7a939deecd42f6d3a2d7e3a Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Wed, 8 Feb 2017 16:04:44 +0100 Subject: [PATCH] Sketcher: Information Layer show/hide node support --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 44 ++++++++++++++++++--- src/Mod/Sketcher/Gui/ViewProviderSketch.h | 5 +++ 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 292ea37e4..2ad86fa21 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -271,7 +271,8 @@ PROPERTY_SOURCE(SketcherGui::ViewProviderSketch, PartGui::ViewProvider2DObject) ViewProviderSketch::ViewProviderSketch() : edit(0), - Mode(STATUS_NONE) + Mode(STATUS_NONE), + visibleInformationChanged(true) { ADD_PROPERTY_TYPE(Autoconstraints,(true),"Auto Constraints",(App::PropertyType)(App::Prop_None),"Create auto constraints"); ADD_PROPERTY_TYPE(TempoVis,(Py::None()),"Visibility automation",(App::PropertyType)(App::Prop_None),"Object that handles hiding and showing other objects when entering/leaving sketch."); @@ -326,6 +327,7 @@ ViewProviderSketch::ViewProviderSketch() //rubberband selection rubberband = new Gui::Rubberband(); + } ViewProviderSketch::~ViewProviderSketch() @@ -3209,6 +3211,8 @@ void ViewProviderSketch::draw(bool temp /*=false*/, bool rebuildinformationlayer int currentInfoNode = 0; + ParameterGrp::handle hGrpsk = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher/General"); + // end information layer int GeoId = 0; @@ -3448,6 +3452,10 @@ void ViewProviderSketch::draw(bool temp /*=false*/, bool rebuildinformationlayer midp /= poles.size(); if(rebuildinformationlayer) { + SoSwitch *sw = new SoSwitch(); + + sw->whichChild = hGrpsk->GetBool("BSplineDegreeVisible", true)?SO_SWITCH_ALL:SO_SWITCH_NONE; + SoSeparator *sep = new SoSeparator(); sep->ref(); // no caching for fluctuand data structures @@ -3473,13 +3481,20 @@ void ViewProviderSketch::draw(bool temp /*=false*/, bool rebuildinformationlayer sep->addChild(mat); sep->addChild(font); sep->addChild(degreetext); + + sw->addChild(sep); - edit->infoGroup->addChild(sep); + edit->infoGroup->addChild(sw); sep->unref(); mat->unref(); } else { - SoSeparator *sep = static_cast(edit->infoGroup->getChild(currentInfoNode)); + SoSwitch *sw = static_cast(edit->infoGroup->getChild(currentInfoNode)); + + if(visibleInformationChanged) + sw->whichChild = hGrpsk->GetBool("BSplineDegreeVisible", true)?SO_SWITCH_ALL:SO_SWITCH_NONE; + + SoSeparator *sep = static_cast(sw->getChild(0)); static_cast(sep->getChild(GEOINFO_BSPLINE_DEGREE_POS))->translation.setValue(midp.x,midp.y,zInfo); @@ -3491,6 +3506,10 @@ void ViewProviderSketch::draw(bool temp /*=false*/, bool rebuildinformationlayer //---------------------------------------------------------- // control polygon if(rebuildinformationlayer) { + SoSwitch *sw = new SoSwitch(); + + sw->whichChild = hGrpsk->GetBool("BSplineControlPolygonVisible", true)?SO_SWITCH_ALL:SO_SWITCH_NONE; + SoSeparator *sep = new SoSeparator(); sep->ref(); // no caching for fluctuand data structures @@ -3530,12 +3549,19 @@ void ViewProviderSketch::draw(bool temp /*=false*/, bool rebuildinformationlayer sep->addChild(coords); sep->addChild(lineset); - edit->infoGroup->addChild(sep); + sw->addChild(sep); + + edit->infoGroup->addChild(sw); sep->unref(); mat->unref(); } else { - SoSeparator *sep = static_cast(edit->infoGroup->getChild(currentInfoNode)); + SoSwitch *sw = static_cast(edit->infoGroup->getChild(currentInfoNode)); + + if(visibleInformationChanged) + sw->whichChild = hGrpsk->GetBool("BSplineControlPolygonVisible", true)?SO_SWITCH_ALL:SO_SWITCH_NONE; + + SoSeparator *sep = static_cast(sw->getChild(0)); SoCoordinate3 *coords = static_cast(sep->getChild(GEOINFO_BSPLINE_POLYGON)); @@ -3565,6 +3591,8 @@ void ViewProviderSketch::draw(bool temp /*=false*/, bool rebuildinformationlayer else { } } + + visibleInformationChanged=false; // whatever that changed in Information layer is already updated edit->CurvesCoordinate->point.setNum(Coords.size()); edit->CurveSet->numVertices.setNum(Index.size()); @@ -5460,3 +5488,9 @@ Base::Placement ViewProviderSketch::getPlacement() { return Plz; } +void ViewProviderSketch::showRestoreInformationLayer() { + + visibleInformationChanged = true ; + draw(false,false); +} + diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index 8e95ec4e4..cd53c2100 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -122,6 +122,9 @@ public: /// Observer message from the Selection virtual void onSelectionChanged(const Gui::SelectionChanges& msg); + /// Show/Hide nodes from information layer + void showRestoreInformationLayer(); + /** @name handler control */ //@{ /// sets an DrawSketchHandler in control @@ -401,6 +404,8 @@ protected: Gui::Rubberband* rubberband; App::Part* parentPart = nullptr; Part::BodyBase* parentBody = nullptr; + + bool visibleInformationChanged; }; } // namespace PartGui