diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 0b5431b775..c5fc2703a7 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -2737,6 +2737,48 @@ int SketchObject::delExternal(int ExtGeoId) return 0; } +int SketchObject::delAllExternal() +{ + // get the actual lists of the externals + std::vector Objects = ExternalGeometry.getValues(); + std::vector SubElements = ExternalGeometry.getSubValues(); + + const std::vector originalObjects = Objects; + const std::vector originalSubElements = SubElements; + + Objects.clear(); + + SubElements.clear(); + + const std::vector< Constraint * > &constraints = Constraints.getValues(); + std::vector< Constraint * > newConstraints(0); + + for (std::vector::const_iterator it = constraints.begin(); it != constraints.end(); ++it) { + if ((*it)->First > -3 && (*it)->Second > -3 && (*it)->Third > -3) { + Constraint *copiedConstr = (*it)->clone(); + + newConstraints.push_back(copiedConstr); + } + } + + ExternalGeometry.setValues(Objects,SubElements); + try { + rebuildExternalGeometry(); + } + catch (const Base::Exception& e) { + Base::Console().Error("%s\n", e.what()); + // revert to original values + ExternalGeometry.setValues(originalObjects,originalSubElements); + return -1; + } + + solverNeedsUpdate=true; + Constraints.setValues(newConstraints); + Constraints.acceptGeometry(getCompleteGeometry()); + rebuildVertexIndex(); + return 0; +} + int SketchObject::delConstraintsToExternal() { const std::vector< Constraint * > &constraints = Constraints.getValuesForce(); diff --git a/src/Mod/Sketcher/App/SketchObject.h b/src/Mod/Sketcher/App/SketchObject.h index c060a9d935..e4be0eeb5e 100644 --- a/src/Mod/Sketcher/App/SketchObject.h +++ b/src/Mod/Sketcher/App/SketchObject.h @@ -97,6 +97,9 @@ public: * external geometry */ int delExternal(int ExtGeoId); + + /** deletes all external geometry */ + int delAllExternal(); /** returns a pointer to a given Geometry index, possible indexes are: * id>=0 for user defined geometries, diff --git a/src/Mod/Sketcher/Gui/Command.cpp b/src/Mod/Sketcher/Gui/Command.cpp index 1f3c960da7..d074940495 100644 --- a/src/Mod/Sketcher/Gui/Command.cpp +++ b/src/Mod/Sketcher/Gui/Command.cpp @@ -277,6 +277,7 @@ void CmdSketcherReorientSketch::activated(int iMsg) if (ret == QMessageBox::No) return; sketch->Support.setValue(0); + sketch->delAllExternal(); } // ask user for orientation