Part: Extend Geometry Extension to have a name
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user