From fcdb80eab3f43c1babcbc7a35aec155551c0675b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Tue, 5 May 2015 17:30:58 +0200 Subject: [PATCH] Prevent origin and base entities from transforming --- src/Gui/ViewProviderLine.cpp | 11 +++++++++++ src/Gui/ViewProviderLine.h | 3 +++ src/Gui/ViewProviderOrigin.cpp | 11 +++++++++++ src/Gui/ViewProviderOrigin.h | 5 ++++- src/Gui/ViewProviderPart.cpp | 13 ++++++++++--- src/Gui/ViewProviderPlane.cpp | 11 +++++++++++ src/Gui/ViewProviderPlane.h | 3 +++ 7 files changed, 53 insertions(+), 4 deletions(-) diff --git a/src/Gui/ViewProviderLine.cpp b/src/Gui/ViewProviderLine.cpp index 0aec0e2d2..92fc1fefd 100644 --- a/src/Gui/ViewProviderLine.cpp +++ b/src/Gui/ViewProviderLine.cpp @@ -226,6 +226,17 @@ bool ViewProviderLine::isSelectable(void) const { return true; } + +bool ViewProviderLine::setEdit(int ModNum) +{ + return true; +} + +void ViewProviderLine::unsetEdit(int ModNum) +{ + +} + // ---------------------------------------------------------------------------- diff --git a/src/Gui/ViewProviderLine.h b/src/Gui/ViewProviderLine.h index aa9baee08..a108c0d5e 100644 --- a/src/Gui/ViewProviderLine.h +++ b/src/Gui/ViewProviderLine.h @@ -65,6 +65,9 @@ public: /// return a hit element to the selection path or 0 virtual std::string getElement(const SoDetail *) const; virtual SoDetail* getDetail(const char*) const; + + virtual bool setEdit(int ModNum); + virtual void unsetEdit(int ModNum); protected: void onChanged(const App::Property* prop); diff --git a/src/Gui/ViewProviderOrigin.cpp b/src/Gui/ViewProviderOrigin.cpp index 18f80161b..d7a9ada33 100644 --- a/src/Gui/ViewProviderOrigin.cpp +++ b/src/Gui/ViewProviderOrigin.cpp @@ -68,6 +68,17 @@ ViewProviderOrigin::~ViewProviderOrigin() { } +bool ViewProviderOrigin::setEdit(int ModNum) +{ + return true; +} + +void ViewProviderOrigin::unsetEdit(int ModNum) +{ + +} + + // Python feature ----------------------------------------------------------------------- namespace Gui { diff --git a/src/Gui/ViewProviderOrigin.h b/src/Gui/ViewProviderOrigin.h index 6d8b72c1a..14dc415bd 100644 --- a/src/Gui/ViewProviderOrigin.h +++ b/src/Gui/ViewProviderOrigin.h @@ -42,7 +42,10 @@ public: /// constructor. ViewProviderOrigin(); /// destructor. - virtual ~ViewProviderOrigin(); + virtual ~ViewProviderOrigin(); + + virtual bool setEdit(int ModNum); + virtual void unsetEdit(int ModNum); }; typedef ViewProviderPythonFeatureT ViewProviderOriginPython; diff --git a/src/Gui/ViewProviderPart.cpp b/src/Gui/ViewProviderPart.cpp index 94eb475ec..fece78362 100644 --- a/src/Gui/ViewProviderPart.cpp +++ b/src/Gui/ViewProviderPart.cpp @@ -29,6 +29,7 @@ #endif #include +#include #include #include #include @@ -92,6 +93,7 @@ void ViewProviderPart::onObjectChanged(const App::DocumentObject& obj, const App { App::Part* part = static_cast(pcObject); if(static_cast(pcObject)->hasObject(&obj) && + obj.getTypeId() != App::Origin::getClassTypeId() && obj.getTypeId() != App::Plane::getClassTypeId() && obj.getTypeId() != App::Line::getClassTypeId()) { @@ -101,7 +103,8 @@ void ViewProviderPart::onObjectChanged(const App::DocumentObject& obj, const App //calculate for everything but planes SbBox3f bbox(0.0001f,0.0001f,0.0001f,0.0001f,0.0001f,0.0001f); for(App::DocumentObject* obj : part->getObjects()) { - if(obj->getTypeId() != App::Plane::getClassTypeId() && + if(obj->getTypeId() != App::Origin::getClassTypeId() && + obj->getTypeId() != App::Plane::getClassTypeId() && obj->getTypeId() != App::Line::getClassTypeId() ) { bboxAction.apply(Gui::Application::Instance->getViewProvider(obj)->getRoot()); bbox.extendBy(bboxAction.getBoundingBox()); @@ -113,8 +116,12 @@ void ViewProviderPart::onObjectChanged(const App::DocumentObject& obj, const App SbVec3f max = bbox.getMax()*1.3; SbVec3f min = bbox.getMin()*1.3; + App::Origin* origin = static_cast(part->getObjectsOfType(App::Origin::getClassTypeId()).front()); + if(!origin) + return; + //get the planes and set their values - std::vector planes = part->getObjectsOfType(App::Plane::getClassTypeId()); + std::vector planes = origin->getObjectsOfType(App::Plane::getClassTypeId()); for (std::vector::const_iterator p = planes.begin(); p != planes.end(); p++) { Gui::ViewProviderPlane* vp = dynamic_cast(Gui::Application::Instance->getViewProvider(*p)); @@ -145,7 +152,7 @@ void ViewProviderPart::onObjectChanged(const App::DocumentObject& obj, const App } //get the lines and set their values - std::vector lines = part->getObjectsOfType(App::Line::getClassTypeId()); + std::vector lines = origin->getObjectsOfType(App::Line::getClassTypeId()); for (std::vector::const_iterator p = lines.begin(); p != lines.end(); p++) { Gui::ViewProviderLine* vp = dynamic_cast(Gui::Application::Instance->getViewProvider(*p)); diff --git a/src/Gui/ViewProviderPlane.cpp b/src/Gui/ViewProviderPlane.cpp index 9c6eff071..eb3ebc07e 100644 --- a/src/Gui/ViewProviderPlane.cpp +++ b/src/Gui/ViewProviderPlane.cpp @@ -229,6 +229,17 @@ bool ViewProviderPlane::isSelectable(void) const { return true; } + +bool ViewProviderPlane::setEdit(int ModNum) +{ + return true; +} + +void ViewProviderPlane::unsetEdit(int ModNum) +{ + +} + // ---------------------------------------------------------------------------- diff --git a/src/Gui/ViewProviderPlane.h b/src/Gui/ViewProviderPlane.h index cc9d6bbf1..d8251e634 100644 --- a/src/Gui/ViewProviderPlane.h +++ b/src/Gui/ViewProviderPlane.h @@ -66,6 +66,9 @@ public: virtual std::string getElement(const SoDetail *) const; virtual SoDetail* getDetail(const char*) const; + virtual bool setEdit(int ModNum); + virtual void unsetEdit(int ModNum); + protected: void onChanged(const App::Property* prop);