diff --git a/src/Mod/PartDesign/App/FeatureTransformed.cpp b/src/Mod/PartDesign/App/FeatureTransformed.cpp
index f0ee0b0b3..1cf864b7e 100644
--- a/src/Mod/PartDesign/App/FeatureTransformed.cpp
+++ b/src/Mod/PartDesign/App/FeatureTransformed.cpp
@@ -46,6 +46,7 @@
#include
#include
#include
+#include
#include
#include
@@ -103,6 +104,58 @@ App::DocumentObject* Transformed::getSketchObject() const
}
}
+void Transformed::Restore(Base::XMLReader &reader)
+{
+ reader.readElement("Properties");
+ int Cnt = reader.getAttributeAsInteger("Count");
+
+ for (int i=0 ;igetTypeId().getName(), TypeName) == 0) {
+ prop->Restore(reader);
+ }
+ else if (prop) {
+ Base::Type inputType = Base::Type::fromName(TypeName);
+ if (prop->getTypeId().isDerivedFrom(App::PropertyFloat::getClassTypeId()) &&
+ inputType.isDerivedFrom(App::PropertyFloat::getClassTypeId())) {
+ // Do not directly call the property's Restore method in case the implmentation
+ // has changed. So, create a temporary PropertyFloat object and assign the value.
+ App::PropertyFloat floatProp;
+ floatProp.Restore(reader);
+ static_cast(prop)->setValue(floatProp.getValue());
+ }
+ }
+ }
+ catch (const Base::XMLParseException&) {
+ throw; // re-throw
+ }
+ catch (const Base::Exception &e) {
+ Base::Console().Error("%s\n", e.what());
+ }
+ catch (const std::exception &e) {
+ Base::Console().Error("%s\n", e.what());
+ }
+ catch (const char* e) {
+ Base::Console().Error("%s\n", e);
+ }
+#ifndef FC_DEBUG
+ catch (...) {
+ Base::Console().Error("Primitive::Restore: Unknown C++ exception thrown");
+ }
+#endif
+
+ reader.readEndElement("Property");
+ }
+ reader.readEndElement("Properties");
+}
+
short Transformed::mustExecute() const
{
if (Originals.isTouched())
diff --git a/src/Mod/PartDesign/App/FeatureTransformed.h b/src/Mod/PartDesign/App/FeatureTransformed.h
index 96f375c2c..fe077931d 100644
--- a/src/Mod/PartDesign/App/FeatureTransformed.h
+++ b/src/Mod/PartDesign/App/FeatureTransformed.h
@@ -80,6 +80,7 @@ public:
const std::list getRejectedTransformations(void) { return rejected; }
protected:
+ void Restore(Base::XMLReader &reader);
virtual void positionBySupport(void);
TopoDS_Shape refineShapeIfActive(const TopoDS_Shape&) const;