From aeb0c17e6e47f911876e426be4a02eebb3f4353e Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 23 Oct 2020 11:56:17 +0200 Subject: [PATCH] Sketcher: [skip ci] fix crash when deleting a selected geometry directly with delGeometry() --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index f7ad15815a..4ee51bb9da 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -2683,6 +2683,14 @@ void ViewProviderSketch::updateColor(void) float zConstrLine = (topid==2?zHighLines:midid==2?zMidLines:zLowLines); float zExtLine = (topid==3?zHighLines:midid==3?zMidLines:zLowLines); + // use a lambda function to only access the geometry when needed + // and properly handle the case where it's null + auto isConstructionGeom = [](Sketcher::SketchObject* obj, int GeoId) -> bool { + const Part::Geometry* geom = obj->getGeometry(GeoId); + if (geom) + return geom->Construction; + return false; + }; int j=0; // vertexindex @@ -2724,7 +2732,7 @@ void ViewProviderSketch::updateColor(void) verts[j] = SbVec3f(x,y,zExtLine); } } - else if (getSketchObject()->getGeometry(GeoId)->Construction) { + else if (isConstructionGeom(getSketchObject(), GeoId)) { color[i] = CurveDraftColor; for (int k=j; j