Part: Extend Geometry Extension to have a name

This commit is contained in:
Abdullah Tahiri
2019-02-10 17:22:42 +01:00
committed by wmayer
parent a4cb781d81
commit aaea1285d4
8 changed files with 72 additions and 11 deletions

View File

@@ -37,9 +37,9 @@ using namespace Part;
//---------- Geometry Extension
template <typename T>
GeometryDefaultExtension<T>::GeometryDefaultExtension(const T& val):value(val)
GeometryDefaultExtension<T>::GeometryDefaultExtension(const T& val, std::string name):value(val)
{
setName(name);
}
// Persistence implementer
@@ -53,13 +53,21 @@ template <typename T>
void GeometryDefaultExtension<T>::Save(Base::Writer &writer) const
{
writer.Stream() << writer.ind() << "<GeoExtension type=\"" << this->getTypeId().getName()
<< "\" value=\"" << value << "\"/>" << std::endl;
writer.Stream() << writer.ind() << "<GeoExtension type=\"" << this->getTypeId().getName();
const std::string name = getName();
if(name.size() > 0)
writer.Stream() << "\" name=\"" << name;
writer.Stream() << "\" value=\"" << value << "\"/>" << std::endl;
}
template <typename T>
void GeometryDefaultExtension<T>::Restore(Base::XMLReader &reader)
{
restoreNameAttribute(reader);
value = reader.getAttribute("value");
}
@@ -69,6 +77,7 @@ std::unique_ptr<Part::GeometryExtension> GeometryDefaultExtension<T>::copy(void)
std::unique_ptr<GeometryDefaultExtension<T>> cpy = std::make_unique<GeometryDefaultExtension<T>>();
cpy->value = this->value;
cpy->setName(this->getName());
return cpy;
// Don't std::move(cpy); RVO optimization Item 25, if the compiler fails to elide, would have to move it anyway
@@ -92,12 +101,14 @@ TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryIntExtension,Part::GeometryExtension)
template <>
PyObject * GeometryDefaultExtension<long>::getPyObject(void)
{
return new GeometryIntExtensionPy(new GeometryIntExtension(this->value));
return new GeometryIntExtensionPy(new GeometryIntExtension(*this));
}
template <>
void GeometryDefaultExtension<long>::Restore(Base::XMLReader &reader)
{
restoreNameAttribute(reader);
value = reader.getAttributeAsInteger("value");
}
@@ -107,7 +118,7 @@ TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryStringExtension,Part::GeometryExtensi
template <>
PyObject * GeometryDefaultExtension<std::string>::getPyObject(void)
{
return new GeometryStringExtensionPy(new GeometryStringExtension(this->value));
return new GeometryStringExtensionPy(new GeometryStringExtension(*this));
}

View File

@@ -35,7 +35,7 @@ namespace Part {
TYPESYSTEM_HEADER();
public:
GeometryDefaultExtension() = default;
GeometryDefaultExtension(const T& val);
GeometryDefaultExtension(const T& val, std::string name = std::string());
virtual ~GeometryDefaultExtension() = default;
inline void setValue(const T& val) {value = val;};
@@ -50,6 +50,9 @@ namespace Part {
virtual PyObject *getPyObject(void);
private:
GeometryDefaultExtension(const GeometryDefaultExtension<T>&) = default;
private:
T value;
};

View File

@@ -37,6 +37,10 @@ GeometryExtension::GeometryExtension()
{
}
GeometryExtension::~GeometryExtension()
void GeometryExtension::restoreNameAttribute(Base::XMLReader &reader)
{
if(reader.hasAttribute("name")) {
std::string name = reader.getAttribute("name");
setName(name);
}
}

View File

@@ -26,6 +26,7 @@
#include <Base/Persistence.h>
#include <memory>
#include <string>
namespace std {
template<typename T, typename... Args>
@@ -41,7 +42,7 @@ class PartExport GeometryExtension: public Base::Persistence
{
TYPESYSTEM_HEADER();
public:
virtual ~GeometryExtension();
virtual ~GeometryExtension() = default;
// Persistence implementer ---------------------
virtual unsigned int getMemSize(void) const = 0;
@@ -51,8 +52,18 @@ public:
virtual std::unique_ptr<GeometryExtension> copy(void) const = 0;
virtual PyObject *getPyObject(void) = 0;
inline void setName(const std::string& str) {name = str;}
inline const std::string &getName () const {return name;}
protected:
GeometryExtension();
GeometryExtension(const GeometryExtension &obj) = default;
void restoreNameAttribute(Base::XMLReader &/*reader*/);
private:
std::string name;
};
}

View File

@@ -20,5 +20,11 @@
<UserDocu>Create a copy of this geometry extension.</UserDocu>
</Documentation>
</Methode>
<Attribute Name="Name" ReadOnly="false">
<Documentation>
<UserDocu>Sets/returns the name of this extension.</UserDocu>
</Documentation>
<Parameter Name="Name" Type="String"/>
</Attribute>
</PythonExport>
</GenerateModel>

View File

@@ -76,6 +76,19 @@ PyObject* GeometryExtensionPy::copy(PyObject *args)
return cpy;
}
Py::String GeometryExtensionPy::getName(void) const
{
std::string name = this->getGeometryExtensionPtr()->getName();
return Py::String(name);
}
void GeometryExtensionPy::setName(Py::String arg)
{
std::string name = arg.as_std_string();
this->getGeometryExtensionPtr()->setName(name);
}
PyObject *GeometryExtensionPy::getCustomAttributes(const char* /*attr*/) const
{

View File

@@ -35,7 +35,14 @@ std::string GeometryIntExtensionPy::representation(void) const
{
std::stringstream str;
long id = getGeometryIntExtensionPtr()->getValue();
str << "<GeometryIntExtension (" << id << ") >";
str << "<GeometryIntExtension (" ;
if(getGeometryIntExtensionPtr()->getName().size()>0)
str << "\'" << getGeometryIntExtensionPtr()->getName() << "\', ";
str << id << ") >";
return str.str();
}

View File

@@ -38,7 +38,13 @@ using namespace Part;
std::string GeometryStringExtensionPy::representation(void) const
{
std::stringstream str;
str << "<GeometryStringExtension (" << getGeometryStringExtensionPtr()->getValue() << ") >";
str << "<GeometryStringExtension (" ;
if(getGeometryStringExtensionPtr()->getName().size()>0)
str << "\'" << getGeometryStringExtensionPtr()->getName() << "\', ";
str << getGeometryStringExtensionPtr()->getValue() << ") >";
return str.str();
}