diff --git a/src/App/Document.cpp b/src/App/Document.cpp index 158fa6d9db..44aaf00cc6 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -3370,7 +3370,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; } @@ -3394,26 +3394,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(); } } 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< diff --git a/src/Gui/Command.cpp b/src/Gui/Command.cpp index 2739030847..c434a9cfe6 100644 --- a/src/Gui/Command.cpp +++ b/src/Gui/Command.cpp @@ -853,18 +853,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 diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 8ed8880d7e..10f62a07c8 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -1487,24 +1487,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)"); } } 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/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)"); } //=========================================================================== 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/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}; diff --git a/src/Mod/TechDraw/Gui/TaskBalloon.cpp b/src/Mod/TechDraw/Gui/TaskBalloon.cpp index b4cde3dc2d..9bdb4efc9c 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 ad9b4777d0..4da35c5c67 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 3c2593cb96..e1d5713b45 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()