Transfer in code from linkstage3
This commit is contained in:
@@ -498,6 +498,7 @@ PyMOD_INIT_FUNC(Part)
|
||||
Part::GeometryBoolExtension ::init();
|
||||
Part::GeometryDoubleExtension ::init();
|
||||
Part::GeometryMigrationExtension ::init();
|
||||
Part::GeometryMigrationPersistenceExtension ::init();
|
||||
Part::Geometry ::init();
|
||||
Part::GeomPoint ::init();
|
||||
Part::GeomCurve ::init();
|
||||
|
||||
@@ -29,14 +29,22 @@
|
||||
|
||||
using namespace Part;
|
||||
|
||||
TYPESYSTEM_SOURCE_ABSTRACT(Part::GeometryMigrationPersistenceExtension, Part::GeometryPersistenceExtension)
|
||||
|
||||
//---------- Geometry Extension
|
||||
TYPESYSTEM_SOURCE(Part::GeometryMigrationExtension,Part::GeometryExtension)
|
||||
|
||||
|
||||
void GeometryMigrationExtension::copyAttributes(Part::GeometryExtension * cpy) const
|
||||
{
|
||||
Part::GeometryExtension::copyAttributes(cpy);
|
||||
static_cast<GeometryMigrationExtension *>(cpy)->ConstructionState = this->ConstructionState;
|
||||
static_cast<GeometryMigrationExtension *>(cpy)->GeometryMigrationFlags = this->GeometryMigrationFlags;
|
||||
|
||||
static_cast<GeometryMigrationExtension *>(cpy)->Id = this->Id;
|
||||
static_cast<GeometryMigrationExtension *>(cpy)->Flags = this->Flags;
|
||||
static_cast<GeometryMigrationExtension *>(cpy)->Ref = this->Ref;
|
||||
static_cast<GeometryMigrationExtension *>(cpy)->RefIndex = this->RefIndex;
|
||||
}
|
||||
|
||||
std::unique_ptr<Part::GeometryExtension> GeometryMigrationExtension::copy() const
|
||||
|
||||
@@ -49,6 +49,8 @@ public:
|
||||
enum MigrationType {
|
||||
None = 0,
|
||||
Construction = 1,
|
||||
GeometryId = 2,
|
||||
ExternalReference = 3,
|
||||
NumMigrationType // Must be the last
|
||||
};
|
||||
|
||||
@@ -61,7 +63,21 @@ public:
|
||||
|
||||
|
||||
virtual bool getConstruction() const {return ConstructionState;}
|
||||
virtual void setConstruction(bool construction) {ConstructionState = construction;}
|
||||
virtual void setConstruction(bool construction)
|
||||
{ConstructionState = construction; setMigrationType(Construction);}
|
||||
|
||||
long getId() const {return Id;}
|
||||
void setId(long id) {Id = id; setMigrationType(GeometryId);}
|
||||
|
||||
const std::string &getRef() const {return Ref;}
|
||||
int getRefIndex() const {return RefIndex;}
|
||||
unsigned long getFlags() const {return Flags;}
|
||||
void setReference(const char *ref, int index, unsigned long flags) {
|
||||
Ref = ref ? ref : "";
|
||||
RefIndex = index;
|
||||
Flags = flags;
|
||||
setMigrationType(ExternalReference);
|
||||
}
|
||||
|
||||
virtual bool testMigrationType(int flag) const { return GeometryMigrationFlags.test((size_t)(flag)); };
|
||||
virtual void setMigrationType(int flag, bool v=true) { GeometryMigrationFlags.set((size_t)(flag), v); };
|
||||
@@ -76,7 +92,21 @@ private:
|
||||
using MigrationTypeFlagType = std::bitset<32>;
|
||||
MigrationTypeFlagType GeometryMigrationFlags;
|
||||
bool ConstructionState{false};
|
||||
long Id = 0;
|
||||
int RefIndex = -1;
|
||||
unsigned long Flags = 0;
|
||||
std::string Ref;
|
||||
};
|
||||
|
||||
|
||||
class PartExport GeometryMigrationPersistenceExtension : public Part::GeometryPersistenceExtension
|
||||
{
|
||||
TYPESYSTEM_HEADER();
|
||||
public:
|
||||
// Called to save data as attributes in 'Geometry' XML tag
|
||||
virtual void preSave(Base::Writer &/*writer*/) const {}
|
||||
// Called to save data after 'GeometryExtensions' XML elements
|
||||
virtual void postSave(Base::Writer &/*writer*/) const {}
|
||||
};
|
||||
|
||||
} //namespace Part
|
||||
|
||||
@@ -36,13 +36,14 @@ using namespace Sketcher;
|
||||
constexpr std::array<const char*, ExternalGeometryExtension::NumFlags>
|
||||
ExternalGeometryExtension::flag2str;
|
||||
|
||||
TYPESYSTEM_SOURCE(Sketcher::ExternalGeometryExtension, Part::GeometryPersistenceExtension)
|
||||
TYPESYSTEM_SOURCE(Sketcher::ExternalGeometryExtension, Part::GeometryMigrationPersistenceExtension)
|
||||
|
||||
void ExternalGeometryExtension::copyAttributes(Part::GeometryExtension* cpy) const
|
||||
{
|
||||
Part::GeometryPersistenceExtension::copyAttributes(cpy);
|
||||
|
||||
static_cast<ExternalGeometryExtension*>(cpy)->Ref = this->Ref;
|
||||
static_cast<ExternalGeometryExtension*>(cpy)->RefIndex = this->RefIndex;
|
||||
static_cast<ExternalGeometryExtension*>(cpy)->Flags = this->Flags;
|
||||
}
|
||||
|
||||
@@ -50,15 +51,35 @@ void ExternalGeometryExtension::restoreAttributes(Base::XMLReader& reader)
|
||||
{
|
||||
Part::GeometryPersistenceExtension::restoreAttributes(reader);
|
||||
|
||||
Ref = reader.getAttribute("Ref");
|
||||
Flags = FlagType(reader.getAttribute("Flags"));
|
||||
Ref = reader.getAttribute("Ref", "");
|
||||
RefIndex = reader.getAttributeAsInteger("RefIndex", "-1");
|
||||
Flags = FlagType(reader.getAttributeAsUnsigned("Flags", "0"));
|
||||
}
|
||||
|
||||
void ExternalGeometryExtension::saveAttributes(Base::Writer& writer) const
|
||||
{
|
||||
Part::GeometryPersistenceExtension::saveAttributes(writer);
|
||||
// For compatibility with upstream FreeCAD, always save 'Ref' and 'Flags'.
|
||||
// if (Ref.size())
|
||||
writer.Stream() << "\" Ref=\"" << Base::Persistence::encodeAttribute(Ref);
|
||||
// if (Flags.any())
|
||||
writer.Stream() << "\" Flags=\"" << Flags.to_ulong();
|
||||
if (RefIndex >= 0) {
|
||||
writer.Stream() << "\" RefIndex=\"" << RefIndex;
|
||||
}
|
||||
}
|
||||
|
||||
writer.Stream() << "\" Ref=\"" << Ref << "\" Flags=\"" << Flags.to_string();
|
||||
void ExternalGeometryExtension::preSave(Base::Writer& writer) const
|
||||
{
|
||||
if (Ref.size()) {
|
||||
writer.Stream() << " ref=\"" << Base::Persistence::encodeAttribute(Ref) << "\"";
|
||||
}
|
||||
if (RefIndex >= 0) {
|
||||
writer.Stream() << " refIndex=\"" << RefIndex << "\"";
|
||||
}
|
||||
if (Flags.any()) {
|
||||
writer.Stream() << " flags=\"" << Flags.to_ulong() << "\"";
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<Part::GeometryExtension> ExternalGeometryExtension::copy() const
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <bitset>
|
||||
|
||||
#include <Mod/Part/App/Geometry.h>
|
||||
#include <Mod/Part/App/GeometryMigrationExtension.h>
|
||||
#include <Mod/Sketcher/SketcherGlobal.h>
|
||||
|
||||
|
||||
@@ -40,18 +41,29 @@ public:
|
||||
// START_CREDIT_BLOCK: Credit under LGPL for this block to Zheng, Lei (realthunder)
|
||||
// <realthunder.dev@gmail.com>
|
||||
virtual bool testFlag(int flag) const = 0;
|
||||
|
||||
virtual void setFlag(int flag, bool v = true) = 0;
|
||||
|
||||
virtual unsigned long getFlags() const = 0;
|
||||
|
||||
virtual void setFlags(unsigned long flags) = 0;
|
||||
// END_CREDIT_BLOCK: Credit under LGPL for this block to Zheng, Lei (realthunder)
|
||||
// <realthunder.dev@gmail.com>
|
||||
|
||||
virtual bool isClear() const = 0;
|
||||
|
||||
virtual size_t flagSize() const = 0;
|
||||
|
||||
virtual const std::string& getRef() const = 0;
|
||||
|
||||
virtual void setRef(const std::string& ref) = 0;
|
||||
|
||||
virtual int getRefIndex() const = 0;
|
||||
|
||||
virtual void setRefIndex(int index) = 0;
|
||||
};
|
||||
|
||||
class SketcherExport ExternalGeometryExtension: public Part::GeometryPersistenceExtension,
|
||||
class SketcherExport ExternalGeometryExtension: public Part::GeometryMigrationPersistenceExtension,
|
||||
private ISketchExternalGeometryExtension
|
||||
{
|
||||
TYPESYSTEM_HEADER_WITH_OVERRIDE();
|
||||
@@ -76,6 +88,7 @@ public:
|
||||
|
||||
public:
|
||||
ExternalGeometryExtension() = default;
|
||||
|
||||
~ExternalGeometryExtension() override = default;
|
||||
|
||||
std::unique_ptr<Part::GeometryExtension> copy() const override;
|
||||
@@ -88,10 +101,21 @@ public:
|
||||
{
|
||||
return Flags.test((size_t)(flag));
|
||||
}
|
||||
|
||||
void setFlag(int flag, bool v = true) override
|
||||
{
|
||||
Flags.set((size_t)(flag), v);
|
||||
}
|
||||
|
||||
unsigned long getFlags() const override
|
||||
{
|
||||
return Flags.to_ulong();
|
||||
}
|
||||
|
||||
void setFlags(unsigned long flags) override
|
||||
{
|
||||
Flags = flags;
|
||||
}
|
||||
// END_CREDIT_BLOCK: Credit under LGPL for this block to Zheng, Lei (realthunder)
|
||||
// <realthunder.dev@gmail.com>
|
||||
|
||||
@@ -99,6 +123,7 @@ public:
|
||||
{
|
||||
return Flags.none();
|
||||
}
|
||||
|
||||
size_t flagSize() const override
|
||||
{
|
||||
return Flags.size();
|
||||
@@ -108,18 +133,33 @@ public:
|
||||
{
|
||||
return Ref;
|
||||
}
|
||||
|
||||
void setRef(const std::string& ref) override
|
||||
{
|
||||
Ref = ref;
|
||||
}
|
||||
|
||||
int getRefIndex() const override
|
||||
{
|
||||
return RefIndex;
|
||||
}
|
||||
|
||||
void setRefIndex(int index) override
|
||||
{
|
||||
RefIndex = index;
|
||||
}
|
||||
|
||||
static bool getFlagsFromName(std::string str, ExternalGeometryExtension::Flag& flag);
|
||||
|
||||
protected:
|
||||
void copyAttributes(Part::GeometryExtension* cpy) const override;
|
||||
|
||||
void restoreAttributes(Base::XMLReader& reader) override;
|
||||
|
||||
void saveAttributes(Base::Writer& writer) const override;
|
||||
|
||||
void preSave(Base::Writer& writer) const override;
|
||||
|
||||
private:
|
||||
ExternalGeometryExtension(const ExternalGeometryExtension&) = default;
|
||||
|
||||
@@ -128,6 +168,7 @@ private:
|
||||
// START_CREDIT_BLOCK: Credit under LGPL for this block to Zheng, Lei (realthunder)
|
||||
// <realthunder.dev@gmail.com>
|
||||
std::string Ref;
|
||||
int RefIndex = -1;
|
||||
FlagType Flags;
|
||||
// END_CREDIT_BLOCK: Credit under LGPL for this block to Zheng, Lei (realthunder)
|
||||
// <realthunder.dev@gmail.com>
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "ExternalGeometryFacade.h"
|
||||
#include "ExternalGeometryFacadePy.h"
|
||||
|
||||
FC_LOG_LEVEL_INIT("Sketch", true, true);
|
||||
|
||||
using namespace Sketcher;
|
||||
|
||||
@@ -160,6 +161,31 @@ void ExternalGeometryFacade::copyId(const Part::Geometry* src, Part::Geometry* d
|
||||
gfdst->setId(gfsrc->getId());
|
||||
}
|
||||
|
||||
void ExternalGeometryFacade::copyFlags(const Part::Geometry* src, Part::Geometry* dst)
|
||||
{
|
||||
auto gfsrc = ExternalGeometryFacade::getFacade(src);
|
||||
auto gfdst = ExternalGeometryFacade::getFacade(dst);
|
||||
gfdst->setFlags(gfsrc->getFlags());
|
||||
}
|
||||
|
||||
void ExternalGeometryFacade::setRef(const std::string& ref)
|
||||
{
|
||||
if (ref.size() && getId() < 0) {
|
||||
FC_ERR("Cannot set reference on root geometries");
|
||||
}
|
||||
else {
|
||||
getExternalGeoExt()->setRef(ref);
|
||||
}
|
||||
}
|
||||
|
||||
// void ExternalGeometryFacade::setRef(const std::string &ref)
|
||||
//{
|
||||
// if (ref.size() && getId() < 0)
|
||||
// FC_ERR("Cannot set reference on root geometries");
|
||||
// else
|
||||
// getExternalGeoExt()->setRef(ref);
|
||||
// }
|
||||
|
||||
PyObject* ExternalGeometryFacade::getPyObject()
|
||||
{
|
||||
return new ExternalGeometryFacadePy(new ExternalGeometryFacade(this->Geo));
|
||||
|
||||
@@ -68,6 +68,7 @@ public: // Factory methods
|
||||
public: // Utility methods
|
||||
static void ensureSketchGeometryExtensions(Part::Geometry* geometry);
|
||||
static void copyId(const Part::Geometry* src, Part::Geometry* dst);
|
||||
static void copyFlags(const Part::Geometry* src, Part::Geometry* dst);
|
||||
|
||||
public:
|
||||
void setGeometry(Part::Geometry* geometry);
|
||||
@@ -82,6 +83,15 @@ public:
|
||||
getExternalGeoExt()->setFlag(flag, v);
|
||||
}
|
||||
|
||||
unsigned long getFlags() const override
|
||||
{
|
||||
return getExternalGeoExt()->getFlags();
|
||||
}
|
||||
void setFlags(unsigned long flags) override
|
||||
{
|
||||
getExternalGeoExt()->setFlags(flags);
|
||||
}
|
||||
|
||||
bool isClear() const override
|
||||
{
|
||||
return getExternalGeoExt()->isClear();
|
||||
@@ -95,9 +105,16 @@ public:
|
||||
{
|
||||
return getExternalGeoExt()->getRef();
|
||||
}
|
||||
void setRef(const std::string& ref) override
|
||||
void setRef(const std::string& ref) override;
|
||||
|
||||
int getRefIndex() const override
|
||||
{
|
||||
getExternalGeoExt()->setRef(ref);
|
||||
return getExternalGeoExt()->getRefIndex();
|
||||
}
|
||||
|
||||
void setRefIndex(int index) override
|
||||
{
|
||||
getExternalGeoExt()->setRefIndex(index);
|
||||
}
|
||||
|
||||
/** GeometryExtension Interface **/
|
||||
|
||||
@@ -146,6 +146,18 @@ void GeometryFacade::copyId(const Part::Geometry* src, Part::Geometry* dst)
|
||||
gfdst->setId(gfsrc->getId());
|
||||
}
|
||||
|
||||
int GeometryFacade::getId(const Part::Geometry* geometry)
|
||||
{
|
||||
auto gf = GeometryFacade::getFacade(geometry);
|
||||
return gf->getId();
|
||||
}
|
||||
|
||||
void GeometryFacade::setId(Part::Geometry* geometry, int id)
|
||||
{
|
||||
auto gf = GeometryFacade::getFacade(geometry);
|
||||
return gf->setId(id);
|
||||
}
|
||||
|
||||
bool GeometryFacade::getConstruction(const Part::Geometry* geometry)
|
||||
{
|
||||
throwOnNullPtr(geometry);
|
||||
|
||||
@@ -131,6 +131,8 @@ public: // Utility methods
|
||||
static InternalType::InternalType getInternalType(const Part::Geometry* geometry);
|
||||
static void setInternalType(Part::Geometry* geometry, InternalType::InternalType type);
|
||||
static bool getBlocked(const Part::Geometry* geometry);
|
||||
static int getId(const Part::Geometry* geometry);
|
||||
static void setId(Part::Geometry* geometry, int id);
|
||||
|
||||
public:
|
||||
// Explicit deletion to show intent (not that it is needed)
|
||||
|
||||
@@ -93,6 +93,17 @@ void SketchGeometryExtension::saveAttributes(Base::Writer& writer) const
|
||||
<< GeometryModeFlags.to_string() << "\" geometryLayer=\"" << GeometryLayer;
|
||||
}
|
||||
|
||||
void SketchGeometryExtension::preSave(Base::Writer& writer) const
|
||||
{
|
||||
writer.Stream() << " id=\"" << Id << "\"";
|
||||
}
|
||||
|
||||
void SketchGeometryExtension::postSave(Base::Writer& writer) const
|
||||
{
|
||||
writer.Stream() << writer.ind() << "<Construction value=\""
|
||||
<< (GeometryModeFlags.test(GeometryMode::Construction) ? 1 : 0) << "\"/>\n";
|
||||
}
|
||||
|
||||
std::unique_ptr<Part::GeometryExtension> SketchGeometryExtension::copy() const
|
||||
{
|
||||
auto cpy = std::make_unique<SketchGeometryExtension>();
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <bitset>
|
||||
|
||||
#include <Mod/Part/App/Geometry.h>
|
||||
#include <Mod/Part/App/GeometryMigrationExtension.h>
|
||||
#include <Mod/Sketcher/SketcherGlobal.h>
|
||||
|
||||
|
||||
@@ -84,7 +85,7 @@ public:
|
||||
virtual void setGeometryLayerId(int geolayer) = 0;
|
||||
};
|
||||
|
||||
class SketcherExport SketchGeometryExtension: public Part::GeometryPersistenceExtension,
|
||||
class SketcherExport SketchGeometryExtension: public Part::GeometryMigrationPersistenceExtension,
|
||||
private ISketchGeometryExtension
|
||||
{
|
||||
TYPESYSTEM_HEADER_WITH_OVERRIDE();
|
||||
@@ -159,6 +160,8 @@ protected:
|
||||
void copyAttributes(Part::GeometryExtension* cpy) const override;
|
||||
void restoreAttributes(Base::XMLReader& reader) override;
|
||||
void saveAttributes(Base::Writer& writer) const override;
|
||||
void preSave(Base::Writer& writer) const override;
|
||||
void postSave(Base::Writer& writer) const override;
|
||||
|
||||
private:
|
||||
SketchGeometryExtension(const SketchGeometryExtension&) = default;
|
||||
|
||||
Reference in New Issue
Block a user