From d7c49329a2cc03279be24d4e6430272228f83e49 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 30 Oct 2024 19:28:41 +0100 Subject: [PATCH] DAG: Add method hasRecord() and use it in Model::slotChangeObject to avoid a possible failing assert(). Fixes #17572 --- src/Gui/DAGView/DAGModel.cpp | 18 ++++++++++++------ src/Gui/DAGView/DAGModelGraph.cpp | 8 ++++++++ src/Gui/DAGView/DAGModelGraph.h | 1 + 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/Gui/DAGView/DAGModel.cpp b/src/Gui/DAGView/DAGModel.cpp index b005fc4453..2db0d5fea4 100644 --- a/src/Gui/DAGView/DAGModel.cpp +++ b/src/Gui/DAGView/DAGModel.cpp @@ -308,15 +308,21 @@ void Model::slotChangeObject(const ViewProviderDocumentObject &VPDObjectIn, cons //renaming of objects. if (std::string("Label") == name) { - const GraphLinkRecord &record = findRecord(&VPDObjectIn, *graphLink); - auto text = (*theGraph)[record.vertex].text.get(); - text->setPlainText(QString::fromUtf8(record.DObject->Label.getValue())); + if (hasRecord(&VPDObjectIn, *graphLink)) + { + const GraphLinkRecord &record = findRecord(&VPDObjectIn, *graphLink); + auto text = (*theGraph)[record.vertex].text.get(); + text->setPlainText(QString::fromUtf8(record.DObject->Label.getValue())); + } } else if (propertyIn.isDerivedFrom(App::PropertyLinkBase::getClassTypeId())) { - const GraphLinkRecord &record = findRecord(&VPDObjectIn, *graphLink); - boost::clear_vertex(record.vertex, *theGraph); - graphDirty = true; + if (hasRecord(&VPDObjectIn, *graphLink)) + { + const GraphLinkRecord &record = findRecord(&VPDObjectIn, *graphLink); + boost::clear_vertex(record.vertex, *theGraph); + graphDirty = true; + } } } diff --git a/src/Gui/DAGView/DAGModelGraph.cpp b/src/Gui/DAGView/DAGModelGraph.cpp index f57171c3a9..f5e4ee6959 100644 --- a/src/Gui/DAGView/DAGModelGraph.cpp +++ b/src/Gui/DAGView/DAGModelGraph.cpp @@ -55,6 +55,14 @@ bool Gui::DAG::hasRecord(const App::DocumentObject* dObjectIn, const GraphLinkCo return it != list.end(); } +bool Gui::DAG::hasRecord(const ViewProviderDocumentObject* VPDObjectIn, const GraphLinkContainer &containerIn) +{ + using List = GraphLinkContainer::index::type; + const List &list = containerIn.get(); + List::const_iterator it = list.find(VPDObjectIn); + return it != list.end(); +} + const GraphLinkRecord& Gui::DAG::findRecord(Vertex vertexIn, const GraphLinkContainer &containerIn) { using List = GraphLinkContainer::index::type; diff --git a/src/Gui/DAGView/DAGModelGraph.h b/src/Gui/DAGView/DAGModelGraph.h index 27d0641e28..e0e547f684 100644 --- a/src/Gui/DAGView/DAGModelGraph.h +++ b/src/Gui/DAGView/DAGModelGraph.h @@ -284,6 +284,7 @@ namespace Gui >; bool hasRecord(const App::DocumentObject* dObjectIn, const GraphLinkContainer &containerIn); + bool hasRecord(const ViewProviderDocumentObject* VPDObjectIn, const GraphLinkContainer &containerIn); const GraphLinkRecord& findRecord(Vertex vertexIn, const GraphLinkContainer &containerIn); const GraphLinkRecord& findRecord(const App::DocumentObject* dObjectIn, const GraphLinkContainer &containerIn); const GraphLinkRecord& findRecord(const Gui::ViewProviderDocumentObject* VPDObjectIn, const GraphLinkContainer &containerIn);