From 27c2dc216b7b607be32cd6f057173083d6487f88 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 11 Feb 2022 17:25:28 +0100 Subject: [PATCH] Part: handle to load old project files with Part::Ellipse --- src/Mod/Part/App/PrimitiveFeature.cpp | 25 +++++++++++++++++++++++++ src/Mod/Part/App/PrimitiveFeature.h | 4 ++++ 2 files changed, 29 insertions(+) diff --git a/src/Mod/Part/App/PrimitiveFeature.cpp b/src/Mod/Part/App/PrimitiveFeature.cpp index a9b9a98a51..572d893a69 100644 --- a/src/Mod/Part/App/PrimitiveFeature.cpp +++ b/src/Mod/Part/App/PrimitiveFeature.cpp @@ -1062,3 +1062,28 @@ void Ellipse::onChanged(const App::Property* prop) } Part::Primitive::onChanged(prop); } + +void Ellipse::Restore(Base::XMLReader &reader) +{ + Base::ObjectStatusLocker lock(App::Property::User1, &Angle2, false); + Primitive::Restore(reader); + + if (Angle2.testStatus(App::Property::User1)) { + double tmp = Angle1.getValue(); + Angle1.setValue(Angle2.getValue()); + Angle2.setValue(tmp); + } +} + +void Ellipse::handleChangedPropertyName(Base::XMLReader &reader, const char * TypeName, const char *PropName) +{ + Base::Type type = Base::Type::fromName(TypeName); + if (Angle2.getTypeId() == type && strcmp(PropName, "Angle0") == 0) { + Angle2.Restore(reader); + // set the flag to swap Angle1/Angle2 afterwards + Angle2.setStatus(App::Property::User1, true); + } + else { + Primitive::handleChangedPropertyName(reader, TypeName, PropName); + } +} diff --git a/src/Mod/Part/App/PrimitiveFeature.h b/src/Mod/Part/App/PrimitiveFeature.h index cde36e4975..585efd19ef 100644 --- a/src/Mod/Part/App/PrimitiveFeature.h +++ b/src/Mod/Part/App/PrimitiveFeature.h @@ -421,6 +421,10 @@ public: } //@} +protected: + void Restore(Base::XMLReader &reader); + void handleChangedPropertyName(Base::XMLReader &reader, const char * TypeName, const char *PropName); + private: static App::PropertyQuantityConstraint::Constraints angleRange; };