From 449cbbd5bdddce17b6f5392111c7be59f0ede6ef Mon Sep 17 00:00:00 2001 From: WandererFan Date: Mon, 4 Jul 2016 20:15:02 -0400 Subject: [PATCH] View does not appear on Redo Crash in Page on Redo View --- src/Mod/TechDraw/App/DrawViewDimension.cpp | 2 +- src/Mod/TechDraw/App/DrawViewPart.cpp | 5 +++-- src/Mod/TechDraw/Gui/MDIViewPage.cpp | 10 +++++++++- src/Mod/TechDraw/Gui/QGIViewPart.cpp | 6 ++++++ src/Mod/TechDraw/Gui/QGVPage.cpp | 5 +++++ src/Mod/TechDraw/Gui/ViewProviderPage.cpp | 5 +++++ 6 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawViewDimension.cpp b/src/Mod/TechDraw/App/DrawViewDimension.cpp index f122e97e46..bf6f02d3f7 100644 --- a/src/Mod/TechDraw/App/DrawViewDimension.cpp +++ b/src/Mod/TechDraw/App/DrawViewDimension.cpp @@ -195,7 +195,7 @@ App::DocumentObjectExecReturn *DrawViewDimension::execute(void) //TODO: if MeasureType = Projected and the Projected shape changes, the Dimension may become invalid (see tilted Cube example) - return App::DocumentObject::StdReturn; + return App::DocumentObject::execute();; } std::string DrawViewDimension::getFormatedValue() const diff --git a/src/Mod/TechDraw/App/DrawViewPart.cpp b/src/Mod/TechDraw/App/DrawViewPart.cpp index c75fe1b6c3..8d486d9419 100644 --- a/src/Mod/TechDraw/App/DrawViewPart.cpp +++ b/src/Mod/TechDraw/App/DrawViewPart.cpp @@ -114,7 +114,7 @@ DrawViewPart::DrawViewPart(void) : geometryObject(0) //ADD_PROPERTY_TYPE(ShowIsoLines ,(false),group,App::Prop_None,"Iso u,v lines on/off"); ADD_PROPERTY_TYPE(LineWidth,(0.7f),vgroup,App::Prop_None,"The thickness of visible lines"); ADD_PROPERTY_TYPE(HiddenWidth,(0.15),vgroup,App::Prop_None,"The thickness of hidden lines, if enabled"); - ADD_PROPERTY_TYPE(Tolerance,(0.05f),vgroup,App::Prop_None,"The tessellation tolerance"); + ADD_PROPERTY_TYPE(Tolerance,(0.05f),vgroup,App::Prop_None,"The tessellation tolerance"); //tessellation? Tolerance.setConstraints(&floatRange); ADD_PROPERTY_TYPE(XAxisDirection ,(1,0,0) ,group,App::Prop_None,"Direction to use as X-axis in projection"); @@ -189,6 +189,7 @@ short DrawViewPart::mustExecute() const ShowSmoothLines.isTouched() || ShowSeamLines.isTouched() || LineWidth.isTouched() || + Tolerance.isTouched() || HiddenWidth.isTouched()); return result; } @@ -203,7 +204,7 @@ void DrawViewPart::onChanged(const App::Property* prop) prop == &ScaleType || prop == &ShowHiddenLines || prop == &ShowSmoothLines || - prop == &ShowSeamLines || + prop == &ShowSeamLines || prop == &LineWidth || prop == &HiddenWidth ) { try { diff --git a/src/Mod/TechDraw/Gui/MDIViewPage.cpp b/src/Mod/TechDraw/Gui/MDIViewPage.cpp index 88fea04eb5..ac15520a47 100644 --- a/src/Mod/TechDraw/Gui/MDIViewPage.cpp +++ b/src/Mod/TechDraw/Gui/MDIViewPage.cpp @@ -103,7 +103,7 @@ MDIViewPage::MDIViewPage(ViewProviderPage *pageVp, Gui::Document* doc, QWidget* m_exportSVGAction = new QAction(tr("&Export SVG"), this); connect(m_exportSVGAction, SIGNAL(triggered()), this, SLOT(saveSVG())); - //m_outlineAction is obs? never set to Enabled? + //m_outlineAction is obs? never set to Enabled? m_outlineAction = new QAction(tr("&Outline"), this); m_outlineAction->setEnabled(false); m_outlineAction->setCheckable(true); @@ -1080,6 +1080,14 @@ void MDIViewPage::selectionChanged() continue; TechDraw::DrawView *dimObj = dimItem->getViewObject(); + if (!dimObj) { + continue; + } + const char* name = dimObj->getNameInDocument(); + if (!name) { //can happen during undo/redo if Dim is selected??? + //Base::Console().Log("INFO - MDIVP::selectionChanged - dimObj name is null!\n"); + continue; + } //bool accepted = static_cast (Gui::Selection().addSelection(dimObj->getDocument()->getName(),dimObj->getNameInDocument())); diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.cpp b/src/Mod/TechDraw/Gui/QGIViewPart.cpp index 23a96c0c01..49f115e4c5 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewPart.cpp @@ -123,8 +123,12 @@ void QGIViewPart::tidy() void QGIViewPart::setViewPartFeature(TechDraw::DrawViewPart *obj) { + if (!obj) + return; + // called from QGVPage setViewFeature(static_cast(obj)); + draw(); } QPainterPath QGIViewPart::drawPainterPath(TechDrawGeometry::BaseGeom *baseGeom) const @@ -280,6 +284,8 @@ void QGIViewPart::updateView(bool update) } } draw(); + } else { + QGIView::draw(); } } diff --git a/src/Mod/TechDraw/Gui/QGVPage.cpp b/src/Mod/TechDraw/Gui/QGVPage.cpp index 82f91c0053..4c777dd3f7 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.cpp +++ b/src/Mod/TechDraw/Gui/QGVPage.cpp @@ -127,6 +127,11 @@ void QGVPage::drawBackground(QPainter *p, const QRectF &) if(!drawBkg) return; + if (!pageGui->getPageObject()) { + //Base::Console().Log("TROUBLE - QGVP::drawBackground - no Page Object!\n"); + return; + } + p->save(); p->resetTransform(); diff --git a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp index f7f4919a3b..6711b7c682 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp @@ -337,5 +337,10 @@ void ViewProviderPage::finishRestoring() TechDraw::DrawPage* ViewProviderPage::getPageObject() const { + //during redo, pcObject can become invalid, but non-zero?? + if (!pcObject) { + Base::Console().Message("TROUBLE - VPP::getPageObject - no Page Object!\n"); + return nullptr; + } return dynamic_cast(pcObject); }