From e37ad4af5bff2deb5629bb22d4939046ffe77438 Mon Sep 17 00:00:00 2001 From: mpv Date: Wed, 11 Feb 2015 10:27:49 +0300 Subject: [PATCH] Fix for issue #400 : crash on undo of sketch with sub elements. Sketch can be erased before the subs are removed. --- src/SketchPlugin/SketchPlugin_Sketch.cpp | 42 ++---------------------- 1 file changed, 2 insertions(+), 40 deletions(-) diff --git a/src/SketchPlugin/SketchPlugin_Sketch.cpp b/src/SketchPlugin/SketchPlugin_Sketch.cpp index 28bb02e15..67fd1be89 100644 --- a/src/SketchPlugin/SketchPlugin_Sketch.cpp +++ b/src/SketchPlugin/SketchPlugin_Sketch.cpp @@ -135,6 +135,8 @@ std::shared_ptr SketchPlugin_Sketch::addFeature(std::string th void SketchPlugin_Sketch::removeFeature(ModelAPI_Feature* theFeature) { + if (!data().get()) // sketch is already removed (case on undo of sketch), sync is not needed + return; list aSubs = data()->reflist(SketchPlugin_Sketch::FEATURES_ID())->list(); list::iterator aSubIt = aSubs.begin(), aLastIt = aSubs.end(); bool isRemoved = false; @@ -238,46 +240,6 @@ std::shared_ptr SketchPlugin_Sketch::plane() return std::shared_ptr(new GeomAPI_Pln(anOrigin->pnt(), aNorm->dir())); } -//void addPlane(double theX, double theY, double theZ, -// std::list >& theShapes) -//{ -// std::shared_ptr anOrigin(new GeomAPI_Pnt(0, 0, 0)); -// std::shared_ptr aNormal(new GeomAPI_Dir(theX, theY, theZ)); -// double aSize = Config_PropManager::integer("Sketch planes", "Size of planes", PLANE_SIZE); -// std::shared_ptr aFace = GeomAlgoAPI_FaceBuilder::square(anOrigin, aNormal, -// aSize); -// theShapes.push_back(aFace); -//} - -//AISObjectPtr SketchPlugin_Sketch::getAISObject(AISObjectPtr thePrevious) -//{ -// std::shared_ptr aNorm = std::dynamic_pointer_cast( -// data()->attribute(SketchPlugin_Sketch::NORM_ID())); -// -// if (!aNorm || (aNorm->x() == 0 && aNorm->y() == 0 && aNorm->z() == 0)) { -// AISObjectPtr aAIS = thePrevious; -// if (!aAIS) { -// std::list > aFaces; -// -// addPlane(1, 0, 0, aFaces); // YZ plane -// addPlane(0, 1, 0, aFaces); // XZ plane -// addPlane(0, 0, 1, aFaces); // XY plane -// std::shared_ptr aCompound = GeomAlgoAPI_CompoundBuilder::compound(aFaces); -// aAIS = AISObjectPtr(new GeomAPI_AISObject()); -// aAIS->createShape(aCompound); -// -// std::vector aRGB = Config_PropManager::color("Sketch planes", "planes_color", -// SKETCH_PLANE_COLOR); -// aAIS->setColor(aRGB[0], aRGB[1], aRGB[2]); -// -// aAIS->setWidth(Config_PropManager::integer("Sketch planes", "planes_thickness", -// SKETCH_WIDTH)); -// } -// return aAIS; -// } -// return AISObjectPtr(); -//} - void SketchPlugin_Sketch::erase() { std::shared_ptr aRefList = std::dynamic_pointer_cast< -- 2.39.2