Sketcher: Addition of layerId field to SketcherGeometryExtension, GeometryFacade and ExternalGeometryFacade, and their Python wrappers

This commit is contained in:
Abdullah Tahiri
2021-12-04 07:45:52 +01:00
parent 01d37cdaad
commit f7deb780a5
10 changed files with 81 additions and 3 deletions

View File

@@ -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);}

View File

@@ -47,6 +47,14 @@
</Documentation>
<Parameter Name="Construction" Type="Boolean"/>
</Attribute>
<Attribute Name="GeometryLayerId" ReadOnly="false">
<Documentation>
<UserDocu>
Returns the Id of the geometry Layer in which the geometry is located.
</UserDocu>
</Documentation>
<Parameter Name="GeometryLayerId" Type="Long"/>
</Attribute>
<Attribute Name="InternalType" ReadOnly="false">
<Documentation>
<UserDocu>

View File

@@ -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());

View File

@@ -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);}

View File

@@ -56,6 +56,14 @@
</Documentation>
<Parameter Name="Construction" Type="Boolean"/>
</Attribute>
<Attribute Name="GeometryLayerId" ReadOnly="false">
<Documentation>
<UserDocu>
Returns the Id of the geometry Layer in which the geometry is located.
</UserDocu>
</Documentation>
<Parameter Name="GeometryLayerId" Type="Long"/>
</Attribute>
<Methode Name="mirror">
<Documentation>
<UserDocu>Performs the symmetrical transformation of this geometric object</UserDocu>

View File

@@ -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());

View File

@@ -41,12 +41,16 @@ TYPESYSTEM_SOURCE(Sketcher::SketchGeometryExtension,Part::GeometryPersistenceExt
// scoped within the class, multithread ready
std::atomic<long> 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<SketchGeometryExtension *>(cpy)->Id = this->Id;
static_cast<SketchGeometryExtension *>(cpy)->InternalGeometryType = this->InternalGeometryType;
static_cast<SketchGeometryExtension *>(cpy)->GeometryModeFlags = this->GeometryModeFlags;
static_cast<SketchGeometryExtension *>(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<Part::GeometryExtension> SketchGeometryExtension::copy(void) const

View File

@@ -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<const char *,InternalType::NumInternalGeometryType> internaltype2str {{ "None", "EllipseMajorDiameter", "EllipseMinorDiameter","EllipseFocus1", "EllipseFocus2", "HyperbolaMajor", "HyperbolaMinor", "HyperbolaFocus", "ParabolaFocus", "BSplineControlPoint", "BSplineKnotPoint" }};
constexpr static std::array<const char *,GeometryMode::NumGeometryMode> geometrymode2str {{ "Blocked", "Construction" }};
@@ -116,6 +122,7 @@ private:
long Id;
InternalType::InternalType InternalGeometryType;
GeometryModeFlagType GeometryModeFlags;
int GeometryLayer;
private:
static std::atomic<long> _GeometryID;

View File

@@ -55,5 +55,13 @@
</Documentation>
<Parameter Name="Construction" Type="Boolean"/>
</Attribute>
<Attribute Name="GeometryLayerId" ReadOnly="false">
<Documentation>
<UserDocu>
Returns the Id of the geometry Layer in which the geometry is located.
</UserDocu>
</Documentation>
<Parameter Name="GeometryLayerId" Type="Long"/>
</Attribute>
</PythonExport>
</GenerateModel>

View File

@@ -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;
}