From df8315d7473e6e39489d7a583c8a43ab6393e3e9 Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Mon, 15 Jul 2024 22:58:12 -0500 Subject: [PATCH] Sketcher: Fix crash on recompute with points Fixes #15154. --- src/Mod/Sketcher/App/SketchObject.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 884b054edc..1284ee9902 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -262,24 +262,29 @@ void SketchObject::buildShape() std::vector shapes; std::vector vertices; - unsigned i=0; + int geoId =0; for(auto geo : getInternalGeometry()) { - ++i; - if(GeometryFacade::getConstruction(geo)) + ++geoId; + if(GeometryFacade::getConstruction(geo)) { continue; + } if (geo->isDerivedFrom()) #ifdef FC_USE_TNP_FIX { Part::TopoShape vertex(TopoDS::Vertex(geo->toShape())); - int idx = getVertexIndexGeoPos(i-1, Sketcher::PointPos::start); + int idx = getVertexIndexGeoPos(geoId -1, Sketcher::PointPos::start); std::string name = convertSubName(Data::IndexedName::fromConst("Vertex", idx+1), false); + if (!vertex.hasElementMap()) { + // TODO: Eventually this will likely be made obsolete, when TopoShapes always have an element map + vertex.resetElementMap(std::make_shared()); + } vertex.setElementName(Data::IndexedName::fromConst("Vertex", 1), Data::MappedName::fromRawData(name.c_str()), 0L); vertices.push_back(vertex); vertices.back().copyElementMap(vertex, Part::OpCodes::Sketch); } else { - auto indexedName = Data::IndexedName::fromConst("Edge", i); + auto indexedName = Data::IndexedName::fromConst("Edge", geoId); shapes.push_back(getEdge(geo,convertSubName(indexedName, false).c_str())); } @@ -296,7 +301,7 @@ void SketchObject::buildShape() } // FIXME: Commented since ExternalGeometryFacade is not added - for(i=2;itestFlag(ExternalGeometryExtension::Defining))