| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| | #include <boost/uuid/uuid_io.hpp>
|
| |
|
| |
|
| | #include "GeometryFacade.h"
|
| | #include "GeometryFacadePy.h"
|
| |
|
| |
|
| | using namespace Sketcher;
|
| |
|
| | TYPESYSTEM_SOURCE(Sketcher::GeometryFacade, Base::BaseClass)
|
| |
|
| | GeometryFacade::GeometryFacade()
|
| | : Geo(nullptr)
|
| | , OwnerGeo(false)
|
| | , SketchGeoExtension(nullptr)
|
| | {}
|
| |
|
| | GeometryFacade::GeometryFacade(const Part::Geometry* geometry, bool owner)
|
| | : Geo(geometry)
|
| | , OwnerGeo(owner)
|
| | {
|
| | assert(geometry);
|
| |
|
| | initExtension();
|
| | }
|
| |
|
| | GeometryFacade::~GeometryFacade()
|
| | {
|
| | if (OwnerGeo && Geo) {
|
| | delete Geo;
|
| | }
|
| | }
|
| |
|
| | std::unique_ptr<GeometryFacade> GeometryFacade::getFacade(const Part::Geometry* geometry, bool owner)
|
| | {
|
| | if (geometry) {
|
| | return std::unique_ptr<GeometryFacade>(new GeometryFacade(geometry, owner));
|
| | }
|
| | else {
|
| | return std::unique_ptr<GeometryFacade>(nullptr);
|
| | }
|
| |
|
| |
|
| | }
|
| |
|
| | void GeometryFacade::setGeometry(Part::Geometry* geometry)
|
| | {
|
| | Geo = geometry;
|
| |
|
| | if (geometry) {
|
| | initExtension();
|
| | }
|
| | else {
|
| | THROWM(Base::ValueError, "GeometryFacade initialized with Geometry null pointer");
|
| | }
|
| | }
|
| |
|
| | void GeometryFacade::initExtension()
|
| | {
|
| | if (!Geo->hasExtension(SketchGeometryExtension::getClassTypeId())) {
|
| |
|
| | getGeo()->setExtension(std::make_unique<SketchGeometryExtension>());
|
| |
|
| |
|
| |
|
| | }
|
| |
|
| | SketchGeoExtension = std::static_pointer_cast<const SketchGeometryExtension>(
|
| | (Geo->getExtension(SketchGeometryExtension::getClassTypeId())).lock()
|
| | );
|
| | }
|
| |
|
| | void GeometryFacade::initExtension() const
|
| | {
|
| |
|
| | if (!Geo->hasExtension(SketchGeometryExtension::getClassTypeId())) {
|
| | THROWM(
|
| | Base::ValueError,
|
| | "Cannot create a GeometryFacade out of a const Geometry pointer not having a "
|
| | "SketchGeometryExtension!"
|
| | );
|
| | }
|
| |
|
| | auto ext = std::static_pointer_cast<const SketchGeometryExtension>(
|
| | Geo->getExtension(SketchGeometryExtension::getClassTypeId()).lock()
|
| | );
|
| |
|
| | const_cast<GeometryFacade*>(this)->SketchGeoExtension = ext;
|
| | }
|
| |
|
| | void GeometryFacade::throwOnNullPtr(const Part::Geometry* geo)
|
| | {
|
| | if (!geo) {
|
| | THROWM(Base::ValueError, "Geometry is nullptr!");
|
| | }
|
| | }
|
| |
|
| | void GeometryFacade::ensureSketchGeometryExtension(Part::Geometry* geometry)
|
| | {
|
| | throwOnNullPtr(geometry);
|
| |
|
| | if (!geometry->hasExtension(SketchGeometryExtension::getClassTypeId())) {
|
| | geometry->setExtension(std::make_unique<SketchGeometryExtension>());
|
| | }
|
| | }
|
| |
|
| | void GeometryFacade::copyId(const Part::Geometry* src, Part::Geometry* dst)
|
| | {
|
| | throwOnNullPtr(src);
|
| | throwOnNullPtr(dst);
|
| |
|
| | auto gfsrc = GeometryFacade::getFacade(src);
|
| | auto gfdst = GeometryFacade::getFacade(dst);
|
| | gfdst->setId(gfsrc->getId());
|
| | }
|
| |
|
| | int GeometryFacade::getId(const Part::Geometry* geometry)
|
| | {
|
| | auto gf = GeometryFacade::getFacade(geometry);
|
| | return gf->getId();
|
| | }
|
| |
|
| | void GeometryFacade::setId(const Part::Geometry* geometry, int id)
|
| | {
|
| | auto gf = GeometryFacade::getFacade(geometry);
|
| | gf->setId(id);
|
| | }
|
| |
|
| | bool GeometryFacade::getConstruction(const Part::Geometry* geometry)
|
| | {
|
| | throwOnNullPtr(geometry);
|
| |
|
| | auto gf = GeometryFacade::getFacade(geometry);
|
| | return gf->getConstruction();
|
| | }
|
| |
|
| | void GeometryFacade::setConstruction(Part::Geometry* geometry, bool construction)
|
| | {
|
| | throwOnNullPtr(geometry);
|
| |
|
| | auto gf = GeometryFacade::getFacade(geometry);
|
| | gf->setConstruction(construction);
|
| | }
|
| |
|
| | bool GeometryFacade::isInternalType(const Part::Geometry* geometry, InternalType::InternalType type)
|
| | {
|
| | throwOnNullPtr(geometry);
|
| |
|
| | auto gf = GeometryFacade::getFacade(geometry);
|
| | return gf->getInternalType() == type;
|
| | }
|
| |
|
| | bool GeometryFacade::isInternalAligned(const Part::Geometry* geometry)
|
| | {
|
| | throwOnNullPtr(geometry);
|
| |
|
| | auto gf = GeometryFacade::getFacade(geometry);
|
| | return gf->isInternalAligned();
|
| | }
|
| |
|
| | InternalType::InternalType GeometryFacade::getInternalType(const Part::Geometry* geometry)
|
| | {
|
| | throwOnNullPtr(geometry);
|
| |
|
| | auto gf = GeometryFacade::getFacade(geometry);
|
| | return gf->getInternalType();
|
| | }
|
| |
|
| | void GeometryFacade::setInternalType(Part::Geometry* geometry, InternalType::InternalType type)
|
| | {
|
| | throwOnNullPtr(geometry);
|
| |
|
| | auto gf = GeometryFacade::getFacade(geometry);
|
| | gf->setInternalType(type);
|
| | }
|
| |
|
| | bool GeometryFacade::getBlocked(const Part::Geometry* geometry)
|
| | {
|
| | throwOnNullPtr(geometry);
|
| |
|
| | auto gf = GeometryFacade::getFacade(geometry);
|
| | return gf->getBlocked();
|
| | }
|
| |
|
| | PyObject* GeometryFacade::getPyObject()
|
| | {
|
| | return new GeometryFacadePy(new GeometryFacade(this->Geo));
|
| | }
|
| |
|