diff --git a/src/Mod/Sketcher/App/ExternalGeometryFacade.h b/src/Mod/Sketcher/App/ExternalGeometryFacade.h index 788ffbcb0b..bbec6668f7 100644 --- a/src/Mod/Sketcher/App/ExternalGeometryFacade.h +++ b/src/Mod/Sketcher/App/ExternalGeometryFacade.h @@ -90,6 +90,9 @@ public: virtual bool testGeometryMode(int flag) const override { return getGeoExt()->testGeometryMode(flag); } virtual void setGeometryMode(int flag, bool v=true) override { getGeoExt()->setGeometryMode(flag, v); } + virtual int getGeometryLayerId() const override { return getGeoExt()->getGeometryLayerId();} + virtual void setGeometryLayerId(int geolayer) override { getGeoExt()->setGeometryLayerId(geolayer);} + // Convenience accessor bool getBlocked() const { return this->testGeometryMode(GeometryMode::Blocked);} void setBlocked(bool status = true) {this->setGeometryMode(GeometryMode::Blocked, status);} diff --git a/src/Mod/Sketcher/App/ExternalGeometryFacadePy.xml b/src/Mod/Sketcher/App/ExternalGeometryFacadePy.xml index 290e9767ce..906f3dea9b 100644 --- a/src/Mod/Sketcher/App/ExternalGeometryFacadePy.xml +++ b/src/Mod/Sketcher/App/ExternalGeometryFacadePy.xml @@ -47,6 +47,14 @@ + + + + Returns the Id of the geometry Layer in which the geometry is located. + + + + diff --git a/src/Mod/Sketcher/App/ExternalGeometryFacadePyImp.cpp b/src/Mod/Sketcher/App/ExternalGeometryFacadePyImp.cpp index adfb68ea05..bc8fdf6bd4 100644 --- a/src/Mod/Sketcher/App/ExternalGeometryFacadePyImp.cpp +++ b/src/Mod/Sketcher/App/ExternalGeometryFacadePyImp.cpp @@ -506,6 +506,16 @@ void ExternalGeometryFacadePy::setConstruction(Py::Boolean arg) getExternalGeometryFacadePtr()->setConstruction(arg); } +Py::Long ExternalGeometryFacadePy::getGeometryLayerId(void) const +{ + return Py::Long(this->getExternalGeometryFacadePtr()->getGeometryLayerId()); +} + +void ExternalGeometryFacadePy::setGeometryLayerId(Py::Long Id) +{ + this->getExternalGeometryFacadePtr()->setGeometryLayerId(long(Id)); +} + Py::String ExternalGeometryFacadePy::getTag(void) const { std::string tmp = boost::uuids::to_string(getExternalGeometryFacadePtr()->getTag()); diff --git a/src/Mod/Sketcher/App/GeometryFacade.h b/src/Mod/Sketcher/App/GeometryFacade.h index dea75d0fdf..c243dcc418 100644 --- a/src/Mod/Sketcher/App/GeometryFacade.h +++ b/src/Mod/Sketcher/App/GeometryFacade.h @@ -147,6 +147,9 @@ public: virtual bool testGeometryMode(int flag) const override { return getGeoExt()->testGeometryMode(flag); } virtual void setGeometryMode(int flag, bool v=true) override { getGeoExt()->setGeometryMode(flag, v); } + virtual int getGeometryLayerId() const override { return getGeoExt()->getGeometryLayerId();} + virtual void setGeometryLayerId(int geolayer) override { getGeoExt()->setGeometryLayerId(geolayer);} + // Convenience accessor bool getBlocked() const { return this->testGeometryMode(GeometryMode::Blocked);} void setBlocked(bool status = true) {this->setGeometryMode(GeometryMode::Blocked, status);} diff --git a/src/Mod/Sketcher/App/GeometryFacadePy.xml b/src/Mod/Sketcher/App/GeometryFacadePy.xml index 55e299f08a..d9c0fdfb2d 100644 --- a/src/Mod/Sketcher/App/GeometryFacadePy.xml +++ b/src/Mod/Sketcher/App/GeometryFacadePy.xml @@ -56,6 +56,14 @@ + + + + Returns the Id of the geometry Layer in which the geometry is located. + + + + Performs the symmetrical transformation of this geometric object diff --git a/src/Mod/Sketcher/App/GeometryFacadePyImp.cpp b/src/Mod/Sketcher/App/GeometryFacadePyImp.cpp index b99d9a0340..89a94e2f5c 100644 --- a/src/Mod/Sketcher/App/GeometryFacadePyImp.cpp +++ b/src/Mod/Sketcher/App/GeometryFacadePyImp.cpp @@ -483,6 +483,16 @@ void GeometryFacadePy::setConstruction(Py::Boolean arg) getGeometryFacadePtr()->setConstruction(arg); } +Py::Long GeometryFacadePy::getGeometryLayerId(void) const +{ + return Py::Long(this->getGeometryFacadePtr()->getGeometryLayerId()); +} + +void GeometryFacadePy::setGeometryLayerId(Py::Long Id) +{ + this->getGeometryFacadePtr()->setGeometryLayerId(long(Id)); +} + Py::String GeometryFacadePy::getTag(void) const { std::string tmp = boost::uuids::to_string(getGeometryFacadePtr()->getTag()); diff --git a/src/Mod/Sketcher/App/SketchGeometryExtension.cpp b/src/Mod/Sketcher/App/SketchGeometryExtension.cpp index ef1df0c262..939203d274 100644 --- a/src/Mod/Sketcher/App/SketchGeometryExtension.cpp +++ b/src/Mod/Sketcher/App/SketchGeometryExtension.cpp @@ -41,12 +41,16 @@ TYPESYSTEM_SOURCE(Sketcher::SketchGeometryExtension,Part::GeometryPersistenceExt // scoped within the class, multithread ready std::atomic SketchGeometryExtension::_GeometryID; -SketchGeometryExtension::SketchGeometryExtension():Id(++SketchGeometryExtension::_GeometryID),InternalGeometryType(InternalType::None) +SketchGeometryExtension::SketchGeometryExtension(): Id(++SketchGeometryExtension::_GeometryID), + InternalGeometryType(InternalType::None), + GeometryLayer(0) { } -SketchGeometryExtension::SketchGeometryExtension(long cid):Id(cid),InternalGeometryType(InternalType::None) +SketchGeometryExtension::SketchGeometryExtension(long cid): Id(cid), + InternalGeometryType(InternalType::None), + GeometryLayer(0) { } @@ -58,6 +62,7 @@ void SketchGeometryExtension::copyAttributes(Part::GeometryExtension * cpy) cons static_cast(cpy)->Id = this->Id; static_cast(cpy)->InternalGeometryType = this->InternalGeometryType; static_cast(cpy)->GeometryModeFlags = this->GeometryModeFlags; + static_cast(cpy)->GeometryLayer = this->GeometryLayer; } void SketchGeometryExtension::restoreAttributes(Base::XMLReader &reader) @@ -70,6 +75,10 @@ void SketchGeometryExtension::restoreAttributes(Base::XMLReader &reader) InternalGeometryType = (InternalType::InternalType) reader.getAttributeAsInteger("internalGeometryType"); GeometryModeFlags = GeometryModeFlagType(reader.getAttribute("geometryModeFlags")); + + if(reader.hasAttribute("geometryLayer")) + GeometryLayer = reader.getAttributeAsInteger("geometryLayer"); + } void SketchGeometryExtension::saveAttributes(Base::Writer &writer) const @@ -78,7 +87,8 @@ void SketchGeometryExtension::saveAttributes(Base::Writer &writer) const writer.Stream() // << "\" id=\"" << Id // This is removed as the stored Id is not used and it may interfere with RT's future implementation << "\" internalGeometryType=\"" << (int) InternalGeometryType - << "\" geometryModeFlags=\"" << GeometryModeFlags.to_string(); + << "\" geometryModeFlags=\"" << GeometryModeFlags.to_string() + << "\" geometryLayer=\"" << GeometryLayer; } std::unique_ptr SketchGeometryExtension::copy(void) const diff --git a/src/Mod/Sketcher/App/SketchGeometryExtension.h b/src/Mod/Sketcher/App/SketchGeometryExtension.h index e51ea8c853..653cc4e0eb 100644 --- a/src/Mod/Sketcher/App/SketchGeometryExtension.h +++ b/src/Mod/Sketcher/App/SketchGeometryExtension.h @@ -71,6 +71,9 @@ public: // Geometry functional mode virtual bool testGeometryMode(int flag) const = 0; virtual void setGeometryMode(int flag, bool v=true) = 0; + + virtual int getGeometryLayerId() const = 0; + virtual void setGeometryLayerId(int geolayer) = 0; }; class SketcherExport SketchGeometryExtension : public Part::GeometryPersistenceExtension, private ISketchGeometryExtension @@ -95,6 +98,9 @@ public: virtual bool testGeometryMode(int flag) const override { return GeometryModeFlags.test((size_t)(flag)); }; virtual void setGeometryMode(int flag, bool v=true) override { GeometryModeFlags.set((size_t)(flag), v); }; + virtual int getGeometryLayerId() const override { return GeometryLayer;} + virtual void setGeometryLayerId(int geolayer) override { GeometryLayer = geolayer;} + constexpr static std::array internaltype2str {{ "None", "EllipseMajorDiameter", "EllipseMinorDiameter","EllipseFocus1", "EllipseFocus2", "HyperbolaMajor", "HyperbolaMinor", "HyperbolaFocus", "ParabolaFocus", "BSplineControlPoint", "BSplineKnotPoint" }}; constexpr static std::array geometrymode2str {{ "Blocked", "Construction" }}; @@ -116,6 +122,7 @@ private: long Id; InternalType::InternalType InternalGeometryType; GeometryModeFlagType GeometryModeFlags; + int GeometryLayer; private: static std::atomic _GeometryID; diff --git a/src/Mod/Sketcher/App/SketchGeometryExtensionPy.xml b/src/Mod/Sketcher/App/SketchGeometryExtensionPy.xml index 6f3619cd4f..4c946d1a76 100644 --- a/src/Mod/Sketcher/App/SketchGeometryExtensionPy.xml +++ b/src/Mod/Sketcher/App/SketchGeometryExtensionPy.xml @@ -55,5 +55,13 @@ + + + + Returns the Id of the geometry Layer in which the geometry is located. + + + + diff --git a/src/Mod/Sketcher/App/SketchGeometryExtensionPyImp.cpp b/src/Mod/Sketcher/App/SketchGeometryExtensionPyImp.cpp index efed2ae53a..833953a63a 100644 --- a/src/Mod/Sketcher/App/SketchGeometryExtensionPyImp.cpp +++ b/src/Mod/Sketcher/App/SketchGeometryExtensionPyImp.cpp @@ -173,6 +173,16 @@ PyObject* SketchGeometryExtensionPy::setGeometryMode(PyObject *args) Py_Return; } +Py::Long SketchGeometryExtensionPy::getGeometryLayerId(void) const +{ + return Py::Long(this->getSketchGeometryExtensionPtr()->getGeometryLayerId()); +} + +void SketchGeometryExtensionPy::setGeometryLayerId(Py::Long Id) +{ + this->getSketchGeometryExtensionPtr()->setGeometryLayerId(long(Id)); +} + PyObject *SketchGeometryExtensionPy::getCustomAttributes(const char* /*attr*/) const { return 0; @@ -182,3 +192,4 @@ int SketchGeometryExtensionPy::setCustomAttributes(const char* /*attr*/, PyObjec { return 0; } +