From 16c035bc383f9b5f734dfa7a7bfb6743a86f7993 Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Thu, 27 Feb 2025 17:31:35 +0000 Subject: [PATCH 1/8] Gui: Refactor `StdCmdRefresh::activated`. --- src/Gui/CommandDoc.cpp | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 6d9274b69a..5a1324fe32 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -1507,24 +1507,25 @@ StdCmdRefresh::StdCmdRefresh() eType = eType | NoTransaction; } -void StdCmdRefresh::activated(int iMsg) +void StdCmdRefresh::activated([[maybe_unused]] int iMsg) { - Q_UNUSED(iMsg); - if (getActiveGuiDocument()) { - App::AutoTransaction trans((eType & NoTransaction) ? nullptr : "Recompute"); - try { - doCommand(Doc,"App.activeDocument().recompute(None,True,True)"); - } - catch (Base::Exception& /*e*/) { - auto ret = QMessageBox::warning(getMainWindow(), QObject::tr("Dependency error"), - qApp->translate("Std_Refresh", "The document contains dependency cycles.\n" - "Please check the Report View for more details.\n\n" - "Do you still want to proceed?"), - QMessageBox::Yes, QMessageBox::No); - if(ret == QMessageBox::No) - return; - doCommand(Doc,"App.activeDocument().recompute(None,True)"); - } + if (!getActiveGuiDocument()) { + return; + } + + App::AutoTransaction trans((eType & NoTransaction) ? nullptr : "Recompute"); + try { + doCommand(Doc,"App.activeDocument().recompute(None,True,True)"); + } + catch (Base::Exception& /*e*/) { + auto ret = QMessageBox::warning(getMainWindow(), QObject::tr("Dependency error"), + qApp->translate("Std_Refresh", "The document contains dependency cycles.\n" + "Please check the Report View for more details.\n\n" + "Do you still want to proceed?"), + QMessageBox::Yes, QMessageBox::No); + if(ret == QMessageBox::No) + return; + doCommand(Doc,"App.activeDocument().recompute(None,True)"); } } From 842a89c30e4f0b60b29c36306d6c6c1a88fdaa6c Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Fri, 28 Feb 2025 11:41:18 +0000 Subject: [PATCH 2/8] PartDesign: Refactor `Command::finishFeature`. --- src/Mod/PartDesign/Gui/Command.cpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/Mod/PartDesign/Gui/Command.cpp b/src/Mod/PartDesign/Gui/Command.cpp index 44222d1005..3aa89d77c6 100644 --- a/src/Mod/PartDesign/Gui/Command.cpp +++ b/src/Mod/PartDesign/Gui/Command.cpp @@ -528,17 +528,18 @@ bool CmdPartDesignNewSketch::isActive() // Common utility functions for all features creating solids //=========================================================================== -void finishFeature(const Gui::Command* cmd, App::DocumentObject *Feat, +static void finishFeature(const Gui::Command* cmd, App::DocumentObject *feature, App::DocumentObject* prevSolidFeature = nullptr, const bool hidePrevSolid = true, const bool updateDocument = true) { - PartDesign::Body *pcActiveBody; + PartDesign::Body *activeBody; if (prevSolidFeature) { - pcActiveBody = PartDesignGui::getBodyFor(prevSolidFeature, /*messageIfNot = */false); - } else { // insert into the same body as the given previous one - pcActiveBody = PartDesignGui::getBody(/*messageIfNot = */false); + // insert into the same body as the given previous one + activeBody = PartDesignGui::getBodyFor(prevSolidFeature, /*messageIfNot = */false); + } else { + activeBody = PartDesignGui::getBody(/*messageIfNot = */false); } if (hidePrevSolid && prevSolidFeature) @@ -547,27 +548,24 @@ void finishFeature(const Gui::Command* cmd, App::DocumentObject *Feat, if (updateDocument) cmd->updateActive(); - auto base = dynamic_cast(Feat); + auto base = dynamic_cast(feature); if (base) base = dynamic_cast(base->getBaseObject(true)); App::DocumentObject *obj = base; if (!obj) - obj = pcActiveBody; + obj = activeBody; // Do this before calling setEdit to avoid to override the 'Shape preview' mode (#0003621) if (obj) { - cmd->copyVisual(Feat, "ShapeAppearance", obj); - cmd->copyVisual(Feat, "LineColor", obj); - cmd->copyVisual(Feat, "PointColor", obj); - cmd->copyVisual(Feat, "Transparency", obj); - cmd->copyVisual(Feat, "DisplayMode", obj); + cmd->copyVisual(feature, "ShapeAppearance", obj); + cmd->copyVisual(feature, "LineColor", obj); + cmd->copyVisual(feature, "PointColor", obj); + cmd->copyVisual(feature, "Transparency", obj); + cmd->copyVisual(feature, "DisplayMode", obj); } - // #0001721: use '0' as edit value to avoid switching off selection in - // ViewProviderGeometryObject::setEditViewer - PartDesignGui::setEdit(Feat,pcActiveBody); + PartDesignGui::setEdit(feature, activeBody); cmd->doCommand(cmd->Gui,"Gui.Selection.clearSelection()"); - //cmd->doCommand(cmd->Gui,"Gui.Selection.addSelection(App.ActiveDocument.ActiveObject)"); } //=========================================================================== From 57d890a590ba35a37041951fa5378c7937786d43 Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Fri, 28 Feb 2025 11:42:06 +0000 Subject: [PATCH 3/8] Gui: Remove unused `Command::updateAll`. --- src/Gui/Command.cpp | 12 ------------ src/Gui/Command.h | 2 -- 2 files changed, 14 deletions(-) diff --git a/src/Gui/Command.cpp b/src/Gui/Command.cpp index 2837dc0d54..074b987a50 100644 --- a/src/Gui/Command.cpp +++ b/src/Gui/Command.cpp @@ -861,18 +861,6 @@ bool Command::isActiveObjectValid() return object->isValid(); } -/// Updates the (all or listed) documents (propagate changes) -void Command::updateAll(std::list cList) -{ - if (!cList.empty()) { - for (auto & it : cList) - it->onUpdate(); - } - else { - Gui::Application::Instance->onUpdate(); - } -} - //-------------------------------------------------------------------------- // Online help handling //-------------------------------------------------------------------------- diff --git a/src/Gui/Command.h b/src/Gui/Command.h index 9c399e3721..cce11e8594 100644 --- a/src/Gui/Command.h +++ b/src/Gui/Command.h @@ -418,8 +418,6 @@ public: static bool hasPendingCommand(); /// Updates the (active) document (propagate changes) static void updateActive(); - /// Updates the (all or listed) documents (propagate changes) - static void updateAll(std::list cList); /// Checks if the active object of the active document is valid static bool isActiveObjectValid(); /// Translate command From 60605cc2db7450afd50e5867145dd47108935db4 Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Fri, 28 Feb 2025 11:56:06 +0000 Subject: [PATCH 4/8] App: Refactor with early exit in `Document::recomputeFeature`. --- src/App/Document.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/App/Document.cpp b/src/App/Document.cpp index ecf12cc3a7..5df163ff77 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -3391,26 +3391,25 @@ int Document::_recomputeFeature(DocumentObject* Feat) return 0; } -bool Document::recomputeFeature(DocumentObject* Feat, bool recursive) +bool Document::recomputeFeature(DocumentObject* feature, bool recursive) { // delete recompute log - d->clearRecomputeLog(Feat); + d->clearRecomputeLog(feature); // verify that the feature is (active) part of the document - if (Feat->isAttachedToDocument()) { - if (recursive) { - bool hasError = false; - recompute({Feat}, true, &hasError); - return !hasError; - } - else { - _recomputeFeature(Feat); - signalRecomputedObject(*Feat); - return Feat->isValid(); - } + if (!feature->isAttachedToDocument()) { + return false; + } + + if (recursive) { + bool hasError = false; + recompute({feature}, true, &hasError); + return !hasError; } else { - return false; + _recomputeFeature(feature); + signalRecomputedObject(*feature); + return feature->isValid(); } } From 08523fe1acf1f6141d36adef40b6ae0e074c6244 Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Fri, 28 Feb 2025 12:04:59 +0000 Subject: [PATCH 5/8] Part/PartDesign/TechDraw: Simplify calls to `DocumentObject::recomputeFeature`. --- src/Mod/Part/Gui/TaskAttacher.cpp | 2 +- src/Mod/PartDesign/Gui/TaskFeatureParameters.cpp | 2 +- src/Mod/TechDraw/Gui/TaskBalloon.cpp | 2 +- src/Mod/TechDraw/Gui/TaskDimension.cpp | 2 +- src/Mod/TechDraw/Gui/TaskLeaderLine.cpp | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Mod/Part/Gui/TaskAttacher.cpp b/src/Mod/Part/Gui/TaskAttacher.cpp index 56f6d010e6..c40a719547 100644 --- a/src/Mod/Part/Gui/TaskAttacher.cpp +++ b/src/Mod/Part/Gui/TaskAttacher.cpp @@ -676,7 +676,7 @@ void TaskAttacher::onCheckFlip(bool on) Part::AttachExtension* pcAttach = ViewProvider->getObject()->getExtensionByType(); pcAttach->MapReversed.setValue(on); - ViewProvider->getObject()->getDocument()->recomputeFeature(ViewProvider->getObject()); + ViewProvider->getObject()->recomputeFeature(); } void TaskAttacher::onButtonRef(const bool checked, unsigned idx) diff --git a/src/Mod/PartDesign/Gui/TaskFeatureParameters.cpp b/src/Mod/PartDesign/Gui/TaskFeatureParameters.cpp index 5551828935..4585ef4924 100644 --- a/src/Mod/PartDesign/Gui/TaskFeatureParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskFeatureParameters.cpp @@ -72,7 +72,7 @@ void TaskFeatureParameters::recomputeFeature() if (!blockUpdate) { App::DocumentObject* obj = getObject(); assert (obj); - obj->getDocument()->recomputeFeature (obj); + obj->recomputeFeature(); } } diff --git a/src/Mod/TechDraw/Gui/TaskBalloon.cpp b/src/Mod/TechDraw/Gui/TaskBalloon.cpp index 2b0e37f0d7..fefa0bc115 100644 --- a/src/Mod/TechDraw/Gui/TaskBalloon.cpp +++ b/src/Mod/TechDraw/Gui/TaskBalloon.cpp @@ -157,7 +157,7 @@ void TaskBalloon::recomputeFeature() { App::DocumentObject* objVP = m_balloonVP->getObject(); assert(objVP); - objVP->getDocument()->recomputeFeature(objVP); + objVP->recomputeFeature(); } void TaskBalloon::onTextChanged() diff --git a/src/Mod/TechDraw/Gui/TaskDimension.cpp b/src/Mod/TechDraw/Gui/TaskDimension.cpp index 7f83ed375a..d33110f549 100644 --- a/src/Mod/TechDraw/Gui/TaskDimension.cpp +++ b/src/Mod/TechDraw/Gui/TaskDimension.cpp @@ -180,7 +180,7 @@ void TaskDimension::recomputeFeature() } App::DocumentObject* objVP = m_dimensionVP->getObject(); assert(objVP); - objVP->getDocument()->recomputeFeature(objVP); + objVP->recomputeFeature(); } void TaskDimension::onTheoreticallyExactChanged() diff --git a/src/Mod/TechDraw/Gui/TaskLeaderLine.cpp b/src/Mod/TechDraw/Gui/TaskLeaderLine.cpp index cebae32948..959e1d378b 100644 --- a/src/Mod/TechDraw/Gui/TaskLeaderLine.cpp +++ b/src/Mod/TechDraw/Gui/TaskLeaderLine.cpp @@ -296,7 +296,7 @@ void TaskLeaderLine::recomputeFeature() { App::DocumentObject* objVP = m_lineVP->getObject(); assert(objVP); - objVP->getDocument()->recomputeFeature(objVP); + objVP->recomputeFeature(); } void TaskLeaderLine::onStartSymbolChanged() From 26437bb86d731cbf67e059a97b6e779463deacbe Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Fri, 28 Feb 2025 13:33:35 +0000 Subject: [PATCH 6/8] PartDesign: Refactor `ViewProviderTransformed::recomputeFeature`. --- .../PartDesign/Gui/ViewProviderTransformed.cpp | 16 ++++++++++------ src/Mod/PartDesign/Gui/ViewProviderTransformed.h | 5 +++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp b/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp index a76a4472cb..cca6ab97d7 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderTransformed.cpp @@ -158,12 +158,7 @@ bool ViewProviderTransformed::onDelete(const std::vector &s) return ViewProvider::onDelete(s); } -void ViewProviderTransformed::recomputeFeature(bool recompute) -{ - PartDesign::Transformed* pcTransformed = getObject(); - if(recompute || (pcTransformed->isError() || pcTransformed->mustExecute())) - pcTransformed->recomputeFeature(true); - +void ViewProviderTransformed::handleTranformedResult(PartDesign::Transformed* pcTransformed) { unsigned rejected = 0; TopoDS_Shape cShape = pcTransformed->rejected; TopExp_Explorer xp; @@ -209,6 +204,15 @@ void ViewProviderTransformed::recomputeFeature(bool recompute) } } +void ViewProviderTransformed::recomputeFeature(bool recompute) +{ + PartDesign::Transformed* pcTransformed = getObject(); + if(recompute || (pcTransformed->isError() || pcTransformed->mustExecute())) + pcTransformed->recomputeFeature(true); + + handleTranformedResult(pcTransformed); +} + void ViewProviderTransformed::showRejectedShape(TopoDS_Shape shape) { try { diff --git a/src/Mod/PartDesign/Gui/ViewProviderTransformed.h b/src/Mod/PartDesign/Gui/ViewProviderTransformed.h index 4927030e66..cce875cff5 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderTransformed.h +++ b/src/Mod/PartDesign/Gui/ViewProviderTransformed.h @@ -26,6 +26,10 @@ #include "ViewProvider.h" +namespace PartDesign { + class Transformed; +} + namespace PartDesignGui { class TaskDlgTransformedParameters; @@ -58,6 +62,7 @@ protected: void unsetEdit(int ModNum) override; bool checkDlgOpen(TaskDlgTransformedParameters* transformedDlg); + void handleTranformedResult(PartDesign::Transformed* transformed); // node for the representation of rejected repetitions SoGroup * pcRejectedRoot{nullptr}; From 127cdc20ff9c8fa21c3a79ea15ab7e8e328036e4 Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Fri, 28 Feb 2025 15:31:22 +0000 Subject: [PATCH 7/8] App: Reorder includes in `App/private/DocumentP.h`. --- src/App/private/DocumentP.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/App/private/DocumentP.h b/src/App/private/DocumentP.h index 98b6457939..ae89b1b206 100644 --- a/src/App/private/DocumentP.h +++ b/src/App/private/DocumentP.h @@ -31,17 +31,18 @@ #include #include #include +#include +#include + +#include +#include + +#include #include #include #include #include -#include -#include -#include -#include -#include - // using VertexProperty = boost::property; using DependencyList = boost::adjacency_list< From ec2a281d66632dcbdebf144b5d42f1ab7d006367 Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Fri, 28 Feb 2025 15:31:59 +0000 Subject: [PATCH 8/8] App: Capitalize exception message in `Document.cpp`. --- src/App/Document.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App/Document.cpp b/src/App/Document.cpp index 5df163ff77..ba0d639a76 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -3367,7 +3367,7 @@ int Document::_recomputeFeature(DocumentObject* Feat) return 1; } catch (std::exception& e) { - FC_ERR("exception in " << Feat->getFullName() << " thrown: " << e.what()); + FC_ERR("Exception in " << Feat->getFullName() << " thrown: " << e.what()); d->addRecomputeLog(e.what(), Feat); return 1; }