diff --git a/src/Mod/TechDraw/App/DrawProjGroupItem.cpp b/src/Mod/TechDraw/App/DrawProjGroupItem.cpp index c0bfbe6c30..6d1465f01d 100644 --- a/src/Mod/TechDraw/App/DrawProjGroupItem.cpp +++ b/src/Mod/TechDraw/App/DrawProjGroupItem.cpp @@ -170,6 +170,7 @@ void DrawProjGroupItem::autoPosition() void DrawProjGroupItem::onDocumentRestored() { // Base::Console().Message("DPGI::onDocumentRestored() - %s\n", getNameInDocument()); + DrawView::onDocumentRestored(); App::DocumentObjectExecReturn* rc = DrawProjGroupItem::execute(); if (rc) { delete rc; diff --git a/src/Mod/TechDraw/App/DrawView.cpp b/src/Mod/TechDraw/App/DrawView.cpp index 0ad06292b1..0d1467ba07 100644 --- a/src/Mod/TechDraw/App/DrawView.cpp +++ b/src/Mod/TechDraw/App/DrawView.cpp @@ -239,8 +239,33 @@ void DrawView::onDocumentRestored() { handleXYLock(); setScaleAttribute(); + validateScale(); DrawView::execute(); } + +//in versions before 0.20 Scale and ScaleType were mishandled. +//In order to not introduce unintended drawing changes in later +//versions, ScaleType Page must be modified if view Scale does +//not match Page Scale +void DrawView::validateScale() +{ + if (ScaleType.isValue("Custom")) { + //nothing to do here + return; + } + DrawPage* page = findParentPage(); + if (page) { + if (ScaleType.isValue("Page")) { + double pageScale = page->Scale.getValue(); + double myScale = Scale.getValue(); + if (!DrawUtil::fpCompare(pageScale, myScale)) { + ScaleType.setValue("Custom"); + ScaleType.purgeTouched(); + } + } + } +} + /** * @brief DrawView::countParentPages * Fixes a crash in TechDraw when user creates duplicate page without dependencies diff --git a/src/Mod/TechDraw/App/DrawView.h b/src/Mod/TechDraw/App/DrawView.h index ba0a2e903a..b9dd95fbf3 100644 --- a/src/Mod/TechDraw/App/DrawView.h +++ b/src/Mod/TechDraw/App/DrawView.h @@ -109,6 +109,7 @@ public: protected: virtual void onChanged(const App::Property* prop) override; + virtual void validateScale(); std::string pageFeatName; bool autoPos; bool mouseMove;