DAG: Add method hasRecord() and use it in Model::slotChangeObject

to avoid a possible failing assert().

Fixes #17572
This commit is contained in:
wmayer
2024-10-30 19:28:41 +01:00
committed by Yorik van Havre
parent 7e72d641df
commit 4143c551bb
3 changed files with 21 additions and 6 deletions

View File

@@ -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;
}
}
}

View File

@@ -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<GraphLinkRecord::ByVPDObject>::type;
const List &list = containerIn.get<GraphLinkRecord::ByVPDObject>();
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<GraphLinkRecord::ByVertex>::type;

View File

@@ -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);