Part: Geometry Extensions

This commit is contained in:
Abdullah Tahiri
2019-01-10 07:16:16 +01:00
committed by wmayer
parent 348160d4ea
commit 2400d63d70
3 changed files with 100 additions and 3 deletions

View File

@@ -180,6 +180,16 @@ const char* gce_ErrorStatusText(gce_ErrorType et)
}
}
// ---------------------------------------------------------------
TYPESYSTEM_SOURCE_ABSTRACT(Part::GeometryExtension,Base::Persistence)
GeometryExtension::~GeometryExtension()
{
}
// ---------------------------------------------------------------
TYPESYSTEM_SOURCE_ABSTRACT(Part::Geometry,Base::Persistence)
@@ -202,16 +212,52 @@ unsigned int Geometry::getMemSize (void) const
void Geometry::Save(Base::Writer &writer) const
{
if( extensions.size()>0 ) {
writer.incInd();
writer.Stream() << writer.ind() << "<GeoExtensions count=\"" << extensions.size() << "\">" << endl;
for(auto att:extensions) {
att.second->Save(writer);
}
writer.decInd();
writer.Stream() << writer.ind() << "</GeoExtensions>" << endl;
}
const char c = Construction?'1':'0';
writer.Stream() << writer.ind() << "<Construction value=\"" << c << "\"/>" << endl;
}
void Geometry::Restore(Base::XMLReader &reader)
{
// read my Element
reader.readElement("Construction");
// get the value of my Attribute
reader.readElement();
if(strcmp(reader.localName(),"GeoExtensions") == 0) {
int count = reader.getAttributeAsInteger("count");
for (int i = 0; i < count; i++) {
reader.readElement("GeoExtension");
const char* TypeName = reader.getAttribute("type");
Base::Type type = Base::Type::fromName(TypeName);
GeometryExtension *newE = (GeometryExtension *)type.createInstance();
newE->Restore(reader);
extensions[type] = newE;
}
reader.readEndElement("GeoExtensions");
reader.readElement("Construction"); // prepare for reading construction attribute
}
else if(strcmp(reader.localName(),"Construction") != 0) { // ignore anything not known
reader.readElement("Construction");
}
Construction = (int)reader.getAttributeAsInteger("value")==0?false:true;
}
boost::uuids::uuid Geometry::getTag() const
@@ -219,6 +265,31 @@ boost::uuids::uuid Geometry::getTag() const
return tag;
}
std::map<Base::Type, GeometryExtension *> & Geometry::getExtensions()
{
return this->extensions;
}
void Geometry::setExtensions(std::map<Base::Type, GeometryExtension *> exts)
{
this->extensions=exts;
}
bool Geometry::hasExtension(Base::Type type) const
{
return this->extensions.find(type) != extensions.end();
}
GeometryExtension * Geometry::getExtension(Base::Type type)
{
return this->extensions[type];
}
void Geometry::setExtension(GeometryExtension *geo)
{
this->extensions[geo->getTypeId()]=geo;
}
void Geometry::createNewTag()
{
// Initialize a random number generator, to avoid Valgrind false positives.
@@ -246,6 +317,7 @@ Geometry *Geometry::clone(void) const
{
Geometry* cpy = this->copy();
cpy->tag = this->tag;
cpy->extensions = this->extensions;
return cpy;
}