From eb2c6bf73fca56afec787a84274756bc364b663c Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 13 Apr 2025 17:49:44 +0200 Subject: [PATCH] TD: Fix loading project files With PR 19941 there is a regression where parts of the document won't be restored. This is caused by overriding the virtual method handleChangedPropertyType() but not calling the method of the base class. While searching for a fix another problem showed up where (due to the incomplete loading) exceptions are thrown but not handled within TD. Therefore the method recompute() is overridden in DrawView to also handle OCC exceptions. --- src/Mod/TechDraw/App/DrawView.cpp | 14 ++++++++++++++ src/Mod/TechDraw/App/DrawView.h | 1 + src/Mod/TechDraw/App/DrawViewPart.cpp | 2 ++ src/Mod/TechDraw/App/DrawViewSection.cpp | 2 ++ 4 files changed, 19 insertions(+) diff --git a/src/Mod/TechDraw/App/DrawView.cpp b/src/Mod/TechDraw/App/DrawView.cpp index b23adfd5fa..31e4b95f83 100644 --- a/src/Mod/TechDraw/App/DrawView.cpp +++ b/src/Mod/TechDraw/App/DrawView.cpp @@ -110,6 +110,20 @@ DrawView::DrawView(): } +App::DocumentObjectExecReturn* DrawView::recompute() +{ + try { + return App::DocumentObject::recompute(); + } + catch (Standard_Failure& e) { + auto ret = new App::DocumentObjectExecReturn(e.GetMessageString()); + if (ret->Why.empty()) { + ret->Why = "Unknown OCC exception"; + } + return ret; + } +} + App::DocumentObjectExecReturn *DrawView::execute() { // Base::Console().message("DV::execute() - %s touched: %d\n", getNameInDocument(), isTouched()); diff --git a/src/Mod/TechDraw/App/DrawView.h b/src/Mod/TechDraw/App/DrawView.h index 092f0a14f4..ee8e3878ed 100644 --- a/src/Mod/TechDraw/App/DrawView.h +++ b/src/Mod/TechDraw/App/DrawView.h @@ -65,6 +65,7 @@ public: /** @name methods override Feature */ //@{ + App::DocumentObjectExecReturn* recompute() override; /// recalculate the Feature App::DocumentObjectExecReturn *execute() override; void onDocumentRestored() override; diff --git a/src/Mod/TechDraw/App/DrawViewPart.cpp b/src/Mod/TechDraw/App/DrawViewPart.cpp index 85b91cebc2..f2be301429 100644 --- a/src/Mod/TechDraw/App/DrawViewPart.cpp +++ b/src/Mod/TechDraw/App/DrawViewPart.cpp @@ -1537,6 +1537,8 @@ void DrawViewPart::handleChangedPropertyType(Base::XMLReader &reader, const char } return; } + + DrawView::handleChangedPropertyType(reader, TypeName, prop); } // true if owner->element is a cosmetic vertex diff --git a/src/Mod/TechDraw/App/DrawViewSection.cpp b/src/Mod/TechDraw/App/DrawViewSection.cpp index e9155b7f0a..e2452e5f9e 100644 --- a/src/Mod/TechDraw/App/DrawViewSection.cpp +++ b/src/Mod/TechDraw/App/DrawViewSection.cpp @@ -1254,6 +1254,8 @@ void DrawViewSection::handleChangedPropertyType(Base::XMLReader &reader, const c } return; } + + DrawViewPart::handleChangedPropertyType(reader, TypeName, prop); } // checks that SectionNormal and XDirection are perpendicular and that Direction is the same as