From be5796b2d0d06adb69c81eece63df54b64965bd6 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 29 Dec 2018 15:27:32 +0100 Subject: [PATCH] add method restoreFinished and reimplement it in SketchObject --- src/Base/Persistence.cpp | 1 + src/Base/Persistence.h | 8 ++++++++ src/Mod/Sketcher/App/SketchObject.cpp | 15 +++++++++++++++ src/Mod/Sketcher/App/SketchObject.h | 1 + 4 files changed, 25 insertions(+) diff --git a/src/Base/Persistence.cpp b/src/Base/Persistence.cpp index ba14ec766d..bb9bf7c98d 100644 --- a/src/Base/Persistence.cpp +++ b/src/Base/Persistence.cpp @@ -129,4 +129,5 @@ void Persistence::restoreFromStream(std::istream& stream) reader.readElement("Content"); Restore(reader); reader.readFiles(zipstream); + restoreFinished(); } diff --git a/src/Base/Persistence.h b/src/Base/Persistence.h index 2a48c2ad4a..17837b658b 100644 --- a/src/Base/Persistence.h +++ b/src/Base/Persistence.h @@ -154,6 +154,14 @@ public: //restore the binary persistence data from a stream. Must have the format used by dumpToStream void restoreFromStream(std::istream& stream); + +private: + /** This method is used at the end of restoreFromStream() + * after all data files have been read in. + * A subclass can set up some internals. The default + * implementation does nothing. + */ + virtual void restoreFinished() {} }; } //namespace Base diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 3b4003c5d2..e80ba0c8bd 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -6614,6 +6614,21 @@ void SketchObject::onDocumentRestored() } } +void SketchObject::restoreFinished() +{ + try { + Constraints.acceptGeometry(getCompleteGeometry()); + // this may happen when saving a sketch directly in edit mode + // but never performed a recompute before + if (Shape.getValue().IsNull() && hasConflicts() == 0) { + if (this->solve(true) == 0) + Shape.setValue(solvedSketch.toShape()); + } + } + catch (...) { + } +} + void SketchObject::getGeoVertexIndex(int VertexId, int &GeoId, PointPos &PosId) const { if (VertexId < 0 || VertexId >= int(VertexId2GeoId.size())) { diff --git a/src/Mod/Sketcher/App/SketchObject.h b/src/Mod/Sketcher/App/SketchObject.h index dff6ea7376..dbf4449905 100644 --- a/src/Mod/Sketcher/App/SketchObject.h +++ b/src/Mod/Sketcher/App/SketchObject.h @@ -403,6 +403,7 @@ protected: /// get called by the container when a property has changed virtual void onChanged(const App::Property* /*prop*/); virtual void onDocumentRestored(); + virtual void restoreFinished(); virtual void setExpression(const App::ObjectIdentifier &path, boost::shared_ptr expr, const char * comment = 0);