From 1a87644f44d567df1f347f36ad60c4a35daf2545 Mon Sep 17 00:00:00 2001 From: WandererFan Date: Tue, 12 Jul 2016 15:20:08 -0400 Subject: [PATCH] DrawViewSymbol forgets Scale on restore --- src/Mod/TechDraw/App/DrawView.cpp | 9 +++++---- src/Mod/TechDraw/Gui/QGIView.cpp | 4 +++- src/Mod/TechDraw/Gui/QGIViewSymbol.cpp | 5 ++++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawView.cpp b/src/Mod/TechDraw/App/DrawView.cpp index 9239260816b2..c8d6d25e48c9 100644 --- a/src/Mod/TechDraw/App/DrawView.cpp +++ b/src/Mod/TechDraw/App/DrawView.cpp @@ -70,7 +70,7 @@ DrawView::DrawView(void) ScaleType.setEnums(ScaleTypeEnums); ADD_PROPERTY_TYPE(ScaleType,((long)0),group, App::Prop_None, "Scale Type"); ADD_PROPERTY_TYPE(Scale ,(1.0),group,App::Prop_None,"Scale factor of the view"); - Scale.setStatus(App::Property::ReadOnly,true); + //Scale.setStatus(App::Property::ReadOnly,true); autoPos = true; @@ -119,14 +119,15 @@ void DrawView::onChanged(const App::Property* prop) TechDraw::DrawPage *page = findParentPage(); if(page) { if(std::abs(page->Scale.getValue() - Scale.getValue()) > FLT_EPSILON) { - Scale.setValue(page->Scale.getValue()); // Recalculate scale from page + Scale.setValue(page->Scale.getValue()); // Reset scale from page Scale.touch(); } } Scale.setStatus(App::Property::ReadOnly,true); App::GetApplication().signalChangePropertyEditor(Scale); - } else if (ScaleType.isValue("Custom") && - Scale.testStatus(App::Property::ReadOnly)) { + } else if ( ScaleType.isValue("Custom") ) { +// } else if (ScaleType.isValue("Custom") && +// Scale.testStatus(App::Property::ReadOnly)) { Scale.setStatus(App::Property::ReadOnly,false); App::GetApplication().signalChangePropertyEditor(Scale); } diff --git a/src/Mod/TechDraw/Gui/QGIView.cpp b/src/Mod/TechDraw/Gui/QGIView.cpp index 90f2a9a7cff9..8729ea4c3f26 100644 --- a/src/Mod/TechDraw/Gui/QGIView.cpp +++ b/src/Mod/TechDraw/Gui/QGIView.cpp @@ -251,7 +251,9 @@ void QGIView::updateView(bool update) if (update || getViewObject()->Rotation.isTouched()) { - //NOTE: QPainterPaths have to be rotated individually. This transform handles everything else. + //NOTE: QPainterPaths have to be rotated individually. This transform handles Rotation for everything else. + //Scale is handled in GeometryObject for DVP & descendents + //Objects not descended from DVP must setScale for themselves double rot = getViewObject()->Rotation.getValue(); QPointF centre = boundingRect().center(); setTransform(QTransform().translate(centre.x(), centre.y()).rotate(-rot).translate(-centre.x(), -centre.y())); diff --git a/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp b/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp index e59ab7a87f1f..c794637a580c 100644 --- a/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewSymbol.cpp @@ -89,7 +89,6 @@ void QGIViewSymbol::updateView(bool update) } if (viewSymbol->Scale.isTouched()) { - setScale(viewSymbol->Scale.getValue()); draw(); } @@ -102,6 +101,10 @@ void QGIViewSymbol::draw() return; } +//note: svg's are overscaled by (72 pixels(pts actually) /in)*(1 in/25.4 mm) = 2.834645669 (could be 96/25.4(CSS)? 110/25.4?) +//due to 1 sceneUnit (1mm) = 1 pixel for some QtSvg functions + TechDraw::DrawViewSymbol *viewSymbol = dynamic_cast(getViewObject()); + setScale(viewSymbol->Scale.getValue()); drawSvg(); if (borderVisible) { drawBorder();