[Sketcher] Safeguard against spurious pre-selection

Preselection is sometimes not updated under some circumstances
1. when deleting an object through python;
2. before autoconstraint when deleting previous pole in bspline creation mode.

When the preselected curve is the deleted object, segfault/crash can happen.
This commit is contained in:
Ajinkya Dahale
2022-03-08 05:28:01 -05:00
committed by abdullahtahiriyo
parent 3fa1735088
commit f10ccfc0fb
2 changed files with 11 additions and 6 deletions

View File

@@ -411,12 +411,15 @@ int DrawSketchHandler::seekAutoConstraint(std::vector<AutoConstraint> &suggested
if (preSelPnt != -1)
sketchgui->getSketchObject()->getGeoVertexIndex(preSelPnt, GeoId, PosId);
else if (preSelCrv != -1){
GeoId = preSelCrv;
const Part::Geometry *geom = sketchgui->getSketchObject()->getGeometry(GeoId);
const Part::Geometry *geom = sketchgui->getSketchObject()->getGeometry(preSelCrv);
if(geom->getTypeId() == Part::GeomLineSegment::getClassTypeId()){
const Part::GeomLineSegment *line = static_cast<const Part::GeomLineSegment *>(geom);
hitShapeDir= line->getEndPoint()-line->getStartPoint();
// ensure geom exists in case object was called before preselection is updated
if (geom) {
GeoId = preSelCrv;
if (geom->getTypeId() == Part::GeomLineSegment::getClassTypeId()) {
const Part::GeomLineSegment *line = static_cast<const Part::GeomLineSegment *>(geom);
hitShapeDir= line->getEndPoint()-line->getStartPoint();
}
}
}