From c3592c8ff4cfd6efc5b496950d11fe8d7fffdd0b Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Sat, 20 Oct 2018 15:47:53 +0200 Subject: [PATCH] Part: Geometry Arcs inheriting from GeomTrimmedCurve --- src/Mod/Part/App/AppPart.cpp | 2 +- src/Mod/Part/App/Geometry.cpp | 170 +++++++++++++++++----------------- src/Mod/Part/App/Geometry.h | 74 +++++++-------- 3 files changed, 120 insertions(+), 126 deletions(-) diff --git a/src/Mod/Part/App/AppPart.cpp b/src/Mod/Part/App/AppPart.cpp index e3edc18b67..1ed848bdcc 100644 --- a/src/Mod/Part/App/AppPart.cpp +++ b/src/Mod/Part/App/AppPart.cpp @@ -477,6 +477,7 @@ PyMOD_INIT_FUNC(Part) Part::GeomBezierCurve ::init(); Part::GeomBSplineCurve ::init(); Part::GeomConic ::init(); + Part::GeomTrimmedCurve ::init(); Part::GeomArcOfConic ::init(); Part::GeomCircle ::init(); Part::GeomArcOfCircle ::init(); @@ -489,7 +490,6 @@ PyMOD_INIT_FUNC(Part) Part::GeomLine ::init(); Part::GeomLineSegment ::init(); Part::GeomOffsetCurve ::init(); - Part::GeomTrimmedCurve ::init(); Part::GeomSurface ::init(); Part::GeomBezierSurface ::init(); Part::GeomBSplineSurface ::init(); diff --git a/src/Mod/Part/App/Geometry.cpp b/src/Mod/Part/App/Geometry.cpp index ed16f37370..f2195774ac 100644 --- a/src/Mod/Part/App/Geometry.cpp +++ b/src/Mod/Part/App/Geometry.cpp @@ -1441,7 +1441,89 @@ bool GeomConic::isReversed() const // ------------------------------------------------- -TYPESYSTEM_SOURCE_ABSTRACT(Part::GeomArcOfConic,Part::GeomCurve) +TYPESYSTEM_SOURCE(Part::GeomTrimmedCurve,Part::GeomCurve) + +GeomTrimmedCurve::GeomTrimmedCurve() +{ +} + +GeomTrimmedCurve::GeomTrimmedCurve(const Handle(Geom_TrimmedCurve)& c) +{ + setHandle(c); +} + +GeomTrimmedCurve::~GeomTrimmedCurve() +{ +} + +void GeomTrimmedCurve::setHandle(const Handle(Geom_TrimmedCurve)& c) +{ + this->myCurve = Handle(Geom_TrimmedCurve)::DownCast(c->Copy()); +} + +const Handle(Geom_Geometry)& GeomTrimmedCurve::handle() const +{ + return myCurve; +} + +Geometry *GeomTrimmedCurve::copy(void) const +{ + GeomTrimmedCurve *newCurve = new GeomTrimmedCurve(myCurve); + newCurve->Construction = this->Construction; + return newCurve; +} + +// Persistence implementer +unsigned int GeomTrimmedCurve::getMemSize (void) const {assert(0); return 0;/* not implemented yet */} +void GeomTrimmedCurve::Save (Base::Writer &/*writer*/) const {assert(0); /* not implemented yet */} +void GeomTrimmedCurve::Restore (Base::XMLReader &/*reader*/) {assert(0); /* not implemented yet */} + +PyObject *GeomTrimmedCurve::getPyObject(void) +{ + return 0; +} + +bool GeomTrimmedCurve::intersectBasisCurves( const GeomTrimmedCurve * c, + std::vector>& points, + double tol) const +{ + Handle(Geom_TrimmedCurve) curve1 = Handle(Geom_TrimmedCurve)::DownCast(handle()); + Handle(Geom_TrimmedCurve) curve2 = Handle(Geom_TrimmedCurve)::DownCast(c->handle()); + + Handle(Geom_Conic) bcurve1 = Handle(Geom_Conic)::DownCast( curve1->BasisCurve() ); + Handle(Geom_Conic) bcurve2 = Handle(Geom_Conic)::DownCast( curve2->BasisCurve() ); + + try { + + if(!bcurve1.IsNull() && !bcurve2.IsNull()) { + + GeomAPI_ExtremaCurveCurve intersector(bcurve1, bcurve2); + + if (intersector.NbExtrema() == 0 || intersector.LowerDistance() > tol) { + // No intersection + return false; + } + + for (int i = 1; i <= intersector.NbExtrema(); i++) { + if (intersector.Distance(i) > tol) + continue; + + gp_Pnt p1, p2; + intersector.Points(i, p1, p2); + points.emplace_back(Base::Vector3d(p1.X(),p1.Y(),p1.Z()),Base::Vector3d(p2.X(),p2.Y(),p2.Z())); + } + + return points.size()>0?true:false; + } + return false; + } + catch (Standard_Failure& e) { + return false; + } +} + +// ------------------------------------------------- +TYPESYSTEM_SOURCE_ABSTRACT(Part::GeomArcOfConic,Part::GeomTrimmedCurve) GeomArcOfConic::GeomArcOfConic() { @@ -1641,45 +1723,6 @@ void GeomArcOfConic::setXAxisDir(const Base::Vector3d& newdir) } } -bool GeomArcOfConic::intersectBasisCurves( const GeomArcOfConic * c, - std::vector>& points, - double tol) const -{ - Handle(Geom_TrimmedCurve) curve1 = Handle(Geom_TrimmedCurve)::DownCast(handle()); - Handle(Geom_TrimmedCurve) curve2 = Handle(Geom_TrimmedCurve)::DownCast(c->handle()); - - Handle(Geom_Conic) bcurve1 = Handle(Geom_Conic)::DownCast( curve1->BasisCurve() ); - Handle(Geom_Conic) bcurve2 = Handle(Geom_Conic)::DownCast( curve2->BasisCurve() ); - - try { - - if(!bcurve1.IsNull() && !bcurve2.IsNull()) { - - GeomAPI_ExtremaCurveCurve intersector(bcurve1, bcurve2); - - if (intersector.NbExtrema() == 0 || intersector.LowerDistance() > tol) { - // No intersection - return false; - } - - for (int i = 1; i <= intersector.NbExtrema(); i++) { - if (intersector.Distance(i) > tol) - continue; - - gp_Pnt p1, p2; - intersector.Points(i, p1, p2); - points.emplace_back(Base::Vector3d(p1.X(),p1.Y(),p1.Z()),Base::Vector3d(p2.X(),p2.Y(),p2.Z())); - } - - return points.size()>0?true:false; - } - return false; - } - catch (Standard_Failure& e) { - return false; - } -} - // ------------------------------------------------- TYPESYSTEM_SOURCE(Part::GeomCircle,Part::GeomConic) @@ -3673,6 +3716,10 @@ GeomOffsetCurve::GeomOffsetCurve(const Handle(Geom_Curve)& c, double offset, con this->myCurve = new Geom_OffsetCurve(c, offset, dir); } +GeomOffsetCurve::GeomOffsetCurve(const Handle(Geom_Curve)& c, double offset, Base::Vector3d& dir):GeomOffsetCurve(c,offset,gp_Dir(dir.x,dir.y,dir.z)) +{ +} + GeomOffsetCurve::GeomOffsetCurve(const Handle(Geom_OffsetCurve)& c) { setHandle(c); @@ -3711,49 +3758,6 @@ PyObject *GeomOffsetCurve::getPyObject(void) // ------------------------------------------------- -TYPESYSTEM_SOURCE(Part::GeomTrimmedCurve,Part::GeomCurve) - -GeomTrimmedCurve::GeomTrimmedCurve() -{ -} - -GeomTrimmedCurve::GeomTrimmedCurve(const Handle(Geom_TrimmedCurve)& c) -{ - setHandle(c); -} - -GeomTrimmedCurve::~GeomTrimmedCurve() -{ -} - -void GeomTrimmedCurve::setHandle(const Handle(Geom_TrimmedCurve)& c) -{ - this->myCurve = Handle(Geom_TrimmedCurve)::DownCast(c->Copy()); -} - -const Handle(Geom_Geometry)& GeomTrimmedCurve::handle() const -{ - return myCurve; -} - -Geometry *GeomTrimmedCurve::copy(void) const -{ - GeomTrimmedCurve *newCurve = new GeomTrimmedCurve(myCurve); - newCurve->Construction = this->Construction; - return newCurve; -} - -// Persistence implementer -unsigned int GeomTrimmedCurve::getMemSize (void) const {assert(0); return 0;/* not implemented yet */} -void GeomTrimmedCurve::Save (Base::Writer &/*writer*/) const {assert(0); /* not implemented yet */} -void GeomTrimmedCurve::Restore (Base::XMLReader &/*reader*/) {assert(0); /* not implemented yet */} - -PyObject *GeomTrimmedCurve::getPyObject(void) -{ - return 0; -} - -// ------------------------------------------------- TYPESYSTEM_SOURCE_ABSTRACT(Part::GeomSurface,Part::Geometry) diff --git a/src/Mod/Part/App/Geometry.h b/src/Mod/Part/App/Geometry.h index 50ea19a682..12881b8024 100644 --- a/src/Mod/Part/App/Geometry.h +++ b/src/Mod/Part/App/Geometry.h @@ -328,7 +328,36 @@ public: const Handle(Geom_Geometry)& handle() const = 0; }; -class PartExport GeomArcOfConic : public GeomCurve +class PartExport GeomTrimmedCurve : public GeomCurve +{ + TYPESYSTEM_HEADER(); +public: + GeomTrimmedCurve(); + GeomTrimmedCurve(const Handle(Geom_TrimmedCurve)&); + virtual ~GeomTrimmedCurve(); + virtual Geometry *copy(void) const; + + // Persistence implementer --------------------- + virtual unsigned int getMemSize(void) const; + virtual void Save(Base::Writer &/*writer*/) const; + virtual void Restore(Base::XMLReader &/*reader*/); + // Base implementer ---------------------------- + virtual PyObject *getPyObject(void); + + void setHandle(const Handle(Geom_TrimmedCurve)&); + const Handle(Geom_Geometry)& handle() const; + + bool intersectBasisCurves( const GeomTrimmedCurve * c, + std::vector>& points, + double tol = Precision::Confusion()) const; + +protected: + Handle(Geom_TrimmedCurve) myCurve; +}; + + + +class PartExport GeomArcOfConic : public GeomTrimmedCurve { TYPESYSTEM_HEADER(); @@ -369,10 +398,6 @@ public: virtual PyObject *getPyObject(void) = 0; const Handle(Geom_Geometry)& handle() const = 0; - - bool intersectBasisCurves( const GeomArcOfConic * c, - std::vector>& points, - double tol = Precision::Confusion()) const; }; class PartExport GeomCircle : public GeomConic @@ -430,8 +455,6 @@ public: void setHandle(const Handle(Geom_Circle)&); const Handle(Geom_Geometry)& handle() const; -private: - Handle(Geom_TrimmedCurve) myCurve; }; class PartExport GeomEllipse : public GeomConic @@ -495,9 +518,6 @@ public: void setHandle(const Handle(Geom_TrimmedCurve)&); void setHandle(const Handle(Geom_Ellipse)&); const Handle(Geom_Geometry)& handle() const; - -private: - Handle(Geom_TrimmedCurve) myCurve; }; @@ -560,9 +580,6 @@ public: void setHandle(const Handle(Geom_TrimmedCurve)&); void setHandle(const Handle(Geom_Hyperbola)&); const Handle(Geom_Geometry)& handle() const; - -private: - Handle(Geom_TrimmedCurve) myCurve; }; class PartExport GeomParabola : public GeomConic @@ -620,9 +637,6 @@ public: void setHandle(const Handle(Geom_TrimmedCurve)&); void setHandle(const Handle(Geom_Parabola)&); const Handle(Geom_Geometry)& handle() const; - -private: - Handle(Geom_TrimmedCurve) myCurve; }; class PartExport GeomLine : public GeomCurve @@ -653,7 +667,7 @@ private: Handle(Geom_Line) myCurve; }; -class PartExport GeomLineSegment : public GeomCurve +class PartExport GeomLineSegment : public GeomTrimmedCurve { TYPESYSTEM_HEADER(); public: @@ -679,8 +693,6 @@ public: void setHandle(const Handle(Geom_Line)&); const Handle(Geom_Geometry)& handle() const; -private: - Handle(Geom_TrimmedCurve) myCurve; }; class PartExport GeomOffsetCurve : public GeomCurve @@ -689,6 +701,7 @@ class PartExport GeomOffsetCurve : public GeomCurve public: GeomOffsetCurve(); GeomOffsetCurve(const Handle(Geom_Curve)&, double, const gp_Dir&); + GeomOffsetCurve(const Handle(Geom_Curve)&, double, Base::Vector3d&); GeomOffsetCurve(const Handle(Geom_OffsetCurve)&); virtual ~GeomOffsetCurve(); virtual Geometry *copy(void) const; @@ -707,29 +720,6 @@ private: Handle(Geom_OffsetCurve) myCurve; }; -class PartExport GeomTrimmedCurve : public GeomCurve -{ - TYPESYSTEM_HEADER(); -public: - GeomTrimmedCurve(); - GeomTrimmedCurve(const Handle(Geom_TrimmedCurve)&); - virtual ~GeomTrimmedCurve(); - virtual Geometry *copy(void) const; - - // Persistence implementer --------------------- - virtual unsigned int getMemSize(void) const; - virtual void Save(Base::Writer &/*writer*/) const; - virtual void Restore(Base::XMLReader &/*reader*/); - // Base implementer ---------------------------- - virtual PyObject *getPyObject(void); - - void setHandle(const Handle(Geom_TrimmedCurve)&); - const Handle(Geom_Geometry)& handle() const; - -private: - Handle(Geom_TrimmedCurve) myCurve; -}; - class PartExport GeomSurface : public Geometry { TYPESYSTEM_HEADER();