From 9382de15a994a0f04ff6f0e176afdf455cbe960b Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Wed, 5 Apr 2017 22:20:40 +0200 Subject: [PATCH] Part: Geometry creation of copy method to distinguish from clone --- src/Mod/Part/App/Geometry.cpp | 202 ++++++++++++++++++++++++++++++++++ src/Mod/Part/App/Geometry.h | 31 ++++++ 2 files changed, 233 insertions(+) diff --git a/src/Mod/Part/App/Geometry.cpp b/src/Mod/Part/App/Geometry.cpp index c7c58ab0da..b8ac12e56e 100644 --- a/src/Mod/Part/App/Geometry.cpp +++ b/src/Mod/Part/App/Geometry.cpp @@ -258,11 +258,19 @@ const Handle_Geom_Geometry& GeomPoint::handle() const return myPoint; } + void GeomPoint::setHandle(const Handle_Geom_CartesianPoint& p) { myPoint = Handle_Geom_CartesianPoint::DownCast(p->Copy()); } +Geometry *GeomPoint::copy(void) const +{ + GeomPoint *newPoint = new GeomPoint(myPoint); + newPoint->Construction = this->Construction; + return newPoint; +} + Geometry *GeomPoint::clone(void) const { GeomPoint *newPoint = new GeomPoint(myPoint); @@ -606,6 +614,13 @@ const Handle_Geom_Geometry& GeomBezierCurve::handle() const return myCurve; } +Geometry *GeomBezierCurve::copy(void) const +{ + GeomBezierCurve *newCurve = new GeomBezierCurve(myCurve); + newCurve->Construction = this->Construction; + return newCurve; +} + Geometry *GeomBezierCurve::clone(void) const { GeomBezierCurve *newCurve = new GeomBezierCurve(myCurve); @@ -694,6 +709,13 @@ const Handle_Geom_Geometry& GeomBSplineCurve::handle() const return myCurve; } +Geometry *GeomBSplineCurve::copy(void) const +{ + GeomBSplineCurve *newCurve = new GeomBSplineCurve(myCurve); + newCurve->Construction = this->Construction; + return newCurve; +} + Geometry *GeomBSplineCurve::clone(void) const { GeomBSplineCurve *newCurve = new GeomBSplineCurve(myCurve); @@ -1478,11 +1500,19 @@ const Handle_Geom_Geometry& GeomCircle::handle() const return myCurve; } + void GeomCircle::setHandle(const Handle_Geom_Circle& c) { myCurve = Handle_Geom_Circle::DownCast(c->Copy()); } +Geometry *GeomCircle::copy(void) const +{ + GeomCircle *newCirc = new GeomCircle(myCurve); + newCirc->Construction = this->Construction; + return newCirc; +} + Geometry *GeomCircle::clone(void) const { GeomCircle *newCirc = new GeomCircle(myCurve); @@ -1662,6 +1692,14 @@ const Handle_Geom_Geometry& GeomArcOfCircle::handle() const return myCurve; } +Geometry *GeomArcOfCircle::copy(void) const +{ + GeomArcOfCircle* copy = new GeomArcOfCircle(); + copy->setHandle(this->myCurve); + copy->Construction = this->Construction; + return copy; +} + Geometry *GeomArcOfCircle::clone(void) const { GeomArcOfCircle* copy = new GeomArcOfCircle(); @@ -1880,6 +1918,13 @@ void GeomEllipse::setHandle(const Handle_Geom_Ellipse &e) this->myCurve = Handle_Geom_Ellipse::DownCast(e->Copy()); } +Geometry *GeomEllipse::copy(void) const +{ + GeomEllipse *newEllipse = new GeomEllipse(myCurve); + newEllipse->Construction = this->Construction; + return newEllipse; +} + Geometry *GeomEllipse::clone(void) const { GeomEllipse *newEllipse = new GeomEllipse(myCurve); @@ -2136,6 +2181,14 @@ const Handle_Geom_Geometry& GeomArcOfEllipse::handle() const return myCurve; } +Geometry *GeomArcOfEllipse::copy(void) const +{ + GeomArcOfEllipse* copy = new GeomArcOfEllipse(); + copy->setHandle(this->myCurve); + copy->Construction = this->Construction; + return copy; +} + Geometry *GeomArcOfEllipse::clone(void) const { GeomArcOfEllipse* copy = new GeomArcOfEllipse(); @@ -2401,11 +2454,19 @@ const Handle_Geom_Geometry& GeomHyperbola::handle() const return myCurve; } + void GeomHyperbola::setHandle(const Handle_Geom_Hyperbola& c) { myCurve = Handle_Geom_Hyperbola::DownCast(c->Copy()); } +Geometry *GeomHyperbola::copy(void) const +{ + GeomHyperbola *newHyp = new GeomHyperbola(myCurve); + newHyp->Construction = this->Construction; + return newHyp; +} + Geometry *GeomHyperbola::clone(void) const { GeomHyperbola *newHyp = new GeomHyperbola(myCurve); @@ -2575,6 +2636,14 @@ const Handle_Geom_Geometry& GeomArcOfHyperbola::handle() const return myCurve; } +Geometry *GeomArcOfHyperbola::copy(void) const +{ + GeomArcOfHyperbola* copy = new GeomArcOfHyperbola(); + copy->setHandle(this->myCurve); + copy->Construction = this->Construction; + return copy; +} + Geometry *GeomArcOfHyperbola::clone(void) const { GeomArcOfHyperbola* copy = new GeomArcOfHyperbola(); @@ -2836,6 +2905,13 @@ void GeomParabola::setHandle(const Handle_Geom_Parabola& c) myCurve = Handle_Geom_Parabola::DownCast(c->Copy()); } +Geometry *GeomParabola::copy(void) const +{ + GeomParabola *newPar = new GeomParabola(myCurve); + newPar->Construction = this->Construction; + return newPar; +} + Geometry *GeomParabola::clone(void) const { GeomParabola *newPar = new GeomParabola(myCurve); @@ -2986,6 +3062,14 @@ const Handle_Geom_Geometry& GeomArcOfParabola::handle() const return myCurve; } +Geometry *GeomArcOfParabola::copy(void) const +{ + GeomArcOfParabola* copy = new GeomArcOfParabola(); + copy->setHandle(this->myCurve); + copy->Construction = this->Construction; + return copy; +} + Geometry *GeomArcOfParabola::clone(void) const { GeomArcOfParabola* copy = new GeomArcOfParabola(); @@ -3210,11 +3294,18 @@ const Handle_Geom_Geometry& GeomLine::handle() const return myCurve; } + void GeomLine::setHandle(const Handle_Geom_Line& l) { this->myCurve = Handle_Geom_Line::DownCast(l->Copy()); } +Geometry *GeomLine::copy(void) const +{ + GeomLine *newLine = new GeomLine(myCurve); + newLine->Construction = this->Construction; + return newLine; +} Geometry *GeomLine::clone(void) const { @@ -3314,6 +3405,14 @@ const Handle_Geom_Geometry& GeomLineSegment::handle() const return myCurve; } +Geometry *GeomLineSegment::copy(void)const +{ + GeomLineSegment *tempCurve = new GeomLineSegment(); + tempCurve->myCurve = Handle_Geom_TrimmedCurve::DownCast(myCurve->Copy()); + tempCurve->Construction = this->Construction; + return tempCurve; +} + Geometry *GeomLineSegment::clone(void)const { GeomLineSegment *tempCurve = new GeomLineSegment(); @@ -3438,6 +3537,13 @@ GeomOffsetCurve::~GeomOffsetCurve() { } +Geometry *GeomOffsetCurve::copy(void) const +{ + GeomOffsetCurve *newCurve = new GeomOffsetCurve(myCurve); + newCurve->Construction = this->Construction; + return newCurve; +} + Geometry *GeomOffsetCurve::clone(void) const { GeomOffsetCurve *newCurve = new GeomOffsetCurve(myCurve); @@ -3493,6 +3599,13 @@ 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; +} + Geometry *GeomTrimmedCurve::clone(void) const { GeomTrimmedCurve *newCurve = new GeomTrimmedCurve(myCurve); @@ -3593,6 +3706,13 @@ void GeomBezierSurface::setHandle(const Handle_Geom_BezierSurface& b) this->mySurface = Handle_Geom_BezierSurface::DownCast(b->Copy()); } +Geometry *GeomBezierSurface::copy(void) const +{ + GeomBezierSurface *newSurf = new GeomBezierSurface(mySurface); + newSurf->Construction = this->Construction; + return newSurf; +} + Geometry *GeomBezierSurface::clone(void) const { GeomBezierSurface *newSurf = new GeomBezierSurface(mySurface); @@ -3653,6 +3773,13 @@ const Handle_Geom_Geometry& GeomBSplineSurface::handle() const return mySurface; } +Geometry *GeomBSplineSurface::copy(void) const +{ + GeomBSplineSurface *newSurf = new GeomBSplineSurface(mySurface); + newSurf->Construction = this->Construction; + return newSurf; +} + Geometry *GeomBSplineSurface::clone(void) const { GeomBSplineSurface *newSurf = new GeomBSplineSurface(mySurface); @@ -3700,6 +3827,14 @@ const Handle_Geom_Geometry& GeomCylinder::handle() const return mySurface; } +Geometry *GeomCylinder::copy(void) const +{ + GeomCylinder *tempCurve = new GeomCylinder(); + tempCurve->mySurface = Handle_Geom_CylindricalSurface::DownCast(mySurface->Copy()); + tempCurve->Construction = this->Construction; + return tempCurve; +} + Geometry *GeomCylinder::clone(void) const { GeomCylinder *tempCurve = new GeomCylinder(); @@ -3748,6 +3883,14 @@ const Handle_Geom_Geometry& GeomCone::handle() const return mySurface; } +Geometry *GeomCone::copy(void) const +{ + GeomCone *tempCurve = new GeomCone(); + tempCurve->mySurface = Handle_Geom_ConicalSurface::DownCast(mySurface->Copy()); + tempCurve->Construction = this->Construction; + return tempCurve; +} + Geometry *GeomCone::clone(void) const { GeomCone *tempCurve = new GeomCone(); @@ -3796,6 +3939,14 @@ const Handle_Geom_Geometry& GeomToroid::handle() const return mySurface; } +Geometry *GeomToroid::copy(void) const +{ + GeomToroid *tempCurve = new GeomToroid(); + tempCurve->mySurface = Handle_Geom_ToroidalSurface::DownCast(mySurface->Copy()); + tempCurve->Construction = this->Construction; + return tempCurve; +} + Geometry *GeomToroid::clone(void) const { GeomToroid *tempCurve = new GeomToroid(); @@ -3844,6 +3995,14 @@ const Handle_Geom_Geometry& GeomSphere::handle() const return mySurface; } +Geometry *GeomSphere::copy(void) const +{ + GeomSphere *tempCurve = new GeomSphere(); + tempCurve->mySurface = Handle_Geom_SphericalSurface::DownCast(mySurface->Copy()); + tempCurve->Construction = this->Construction; + return tempCurve; +} + Geometry *GeomSphere::clone(void) const { GeomSphere *tempCurve = new GeomSphere(); @@ -3892,6 +4051,14 @@ const Handle_Geom_Geometry& GeomPlane::handle() const return mySurface; } +Geometry *GeomPlane::copy(void) const +{ + GeomPlane *tempCurve = new GeomPlane(); + tempCurve->mySurface = Handle_Geom_Plane::DownCast(mySurface->Copy()); + tempCurve->Construction = this->Construction; + return tempCurve; +} + Geometry *GeomPlane::clone(void) const { GeomPlane *tempCurve = new GeomPlane(); @@ -3943,6 +4110,13 @@ const Handle_Geom_Geometry& GeomOffsetSurface::handle() const return mySurface; } +Geometry *GeomOffsetSurface::copy(void) const +{ + GeomOffsetSurface *newSurf = new GeomOffsetSurface(mySurface); + newSurf->Construction = this->Construction; + return newSurf; +} + Geometry *GeomOffsetSurface::clone(void) const { GeomOffsetSurface *newSurf = new GeomOffsetSurface(mySurface); @@ -3999,6 +4173,13 @@ const Handle_Geom_Geometry& GeomPlateSurface::handle() const return mySurface; } +Geometry *GeomPlateSurface::copy(void) const +{ + GeomPlateSurface *newSurf = new GeomPlateSurface(mySurface); + newSurf->Construction = this->Construction; + return newSurf; +} + Geometry *GeomPlateSurface::clone(void) const { GeomPlateSurface *newSurf = new GeomPlateSurface(mySurface); @@ -4055,6 +4236,13 @@ const Handle_Geom_Geometry& GeomTrimmedSurface::handle() const return mySurface; } +Geometry *GeomTrimmedSurface::copy(void) const +{ + GeomTrimmedSurface *newSurf = new GeomTrimmedSurface(mySurface); + newSurf->Construction = this->Construction; + return newSurf; +} + Geometry *GeomTrimmedSurface::clone(void) const { GeomTrimmedSurface *newSurf = new GeomTrimmedSurface(mySurface); @@ -4105,6 +4293,13 @@ const Handle_Geom_Geometry& GeomSurfaceOfRevolution::handle() const return mySurface; } +Geometry *GeomSurfaceOfRevolution::copy(void) const +{ + GeomSurfaceOfRevolution *newSurf = new GeomSurfaceOfRevolution(mySurface); + newSurf->Construction = this->Construction; + return newSurf; +} + Geometry *GeomSurfaceOfRevolution::clone(void) const { GeomSurfaceOfRevolution *newSurf = new GeomSurfaceOfRevolution(mySurface); @@ -4155,6 +4350,13 @@ const Handle_Geom_Geometry& GeomSurfaceOfExtrusion::handle() const return mySurface; } +Geometry *GeomSurfaceOfExtrusion::copy(void) const +{ + GeomSurfaceOfExtrusion *newSurf = new GeomSurfaceOfExtrusion(mySurface); + newSurf->Construction = this->Construction; + return newSurf; +} + Geometry *GeomSurfaceOfExtrusion::clone(void) const { GeomSurfaceOfExtrusion *newSurf = new GeomSurfaceOfExtrusion(mySurface); diff --git a/src/Mod/Part/App/Geometry.h b/src/Mod/Part/App/Geometry.h index fb338e7372..006d4d00a8 100644 --- a/src/Mod/Part/App/Geometry.h +++ b/src/Mod/Part/App/Geometry.h @@ -76,6 +76,8 @@ public: virtual unsigned int getMemSize(void) const; virtual void Save(Base::Writer &/*writer*/) const; virtual void Restore(Base::XMLReader &/*reader*/); + + virtual Geometry *copy(void) const = 0; /// returns a cloned object. A cloned object has the same tag (see getTag) as the original object. /// If you want a clone with another handle, it is possible to clone an object and then assign another handle. /// If you do not desire to have the same tag, then a copy can be performed by using a constructor (which will generate another tag) @@ -109,6 +111,7 @@ public: GeomPoint(const Handle_Geom_CartesianPoint&); GeomPoint(const Base::Vector3d&); virtual ~GeomPoint(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; virtual TopoDS_Shape toShape() const; @@ -185,6 +188,7 @@ public: GeomBezierCurve(); GeomBezierCurve(const Handle_Geom_BezierCurve&); virtual ~GeomBezierCurve(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -213,6 +217,7 @@ public: int degree, bool periodic=false, bool checkrational = true); virtual ~GeomBSplineCurve(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; /*! @@ -289,6 +294,7 @@ protected: public: virtual ~GeomConic(); + virtual Geometry *copy(void) const = 0; virtual Geometry *clone(void) const = 0; /*! @@ -322,6 +328,7 @@ protected: public: virtual ~GeomArcOfConic(); + virtual Geometry *copy(void) const = 0; virtual Geometry *clone(void) const = 0; Base::Vector3d getStartPoint(bool emulateCCWXY=false) const; @@ -363,6 +370,7 @@ public: GeomCircle(); GeomCircle(const Handle_Geom_Circle&); virtual ~GeomCircle(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; double getRadius(void) const; @@ -391,6 +399,7 @@ public: GeomArcOfCircle(); GeomArcOfCircle(const Handle_Geom_Circle&); virtual ~GeomArcOfCircle(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; double getRadius(void) const; @@ -422,6 +431,7 @@ public: GeomEllipse(); GeomEllipse(const Handle_Geom_Ellipse&); virtual ~GeomEllipse(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; double getMajorRadius(void) const; @@ -453,6 +463,7 @@ public: GeomArcOfEllipse(); GeomArcOfEllipse(const Handle_Geom_Ellipse&); virtual ~GeomArcOfEllipse(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; double getMajorRadius(void) const; @@ -489,6 +500,7 @@ public: GeomHyperbola(); GeomHyperbola(const Handle_Geom_Hyperbola&); virtual ~GeomHyperbola(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; double getMajorRadius(void) const; @@ -518,6 +530,7 @@ public: GeomArcOfHyperbola(); GeomArcOfHyperbola(const Handle_Geom_Hyperbola&); virtual ~GeomArcOfHyperbola(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; double getMajorRadius(void) const; @@ -553,6 +566,7 @@ public: GeomParabola(); GeomParabola(const Handle_Geom_Parabola&); virtual ~GeomParabola(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; double getFocal(void) const; @@ -580,6 +594,7 @@ public: GeomArcOfParabola(); GeomArcOfParabola(const Handle_Geom_Parabola&); virtual ~GeomArcOfParabola(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; double getFocal(void) const; @@ -614,6 +629,7 @@ public: GeomLine(const Handle_Geom_Line&); GeomLine(const Base::Vector3d& Pos, const Base::Vector3d& Dir); virtual ~GeomLine(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; void setLine(const Base::Vector3d& Pos, const Base::Vector3d& Dir); @@ -641,6 +657,7 @@ public: GeomLineSegment(); GeomLineSegment(const Handle_Geom_Line& l); virtual ~GeomLineSegment(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; Base::Vector3d getStartPoint() const; @@ -672,6 +689,7 @@ public: GeomOffsetCurve(const Handle_Geom_Curve&, double, const gp_Dir&); GeomOffsetCurve(const Handle_Geom_OffsetCurve&); virtual ~GeomOffsetCurve(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -695,6 +713,7 @@ public: GeomTrimmedCurve(); GeomTrimmedCurve(const Handle_Geom_TrimmedCurve&); virtual ~GeomTrimmedCurve(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -730,6 +749,7 @@ public: GeomBezierSurface(); GeomBezierSurface(const Handle_Geom_BezierSurface&); virtual ~GeomBezierSurface(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -753,6 +773,7 @@ public: GeomBSplineSurface(); GeomBSplineSurface(const Handle_Geom_BSplineSurface&); virtual ~GeomBSplineSurface(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -776,6 +797,7 @@ public: GeomCylinder(); GeomCylinder(const Handle_Geom_CylindricalSurface&); virtual ~GeomCylinder(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -799,6 +821,7 @@ public: GeomCone(); GeomCone(const Handle_Geom_ConicalSurface&); virtual ~GeomCone(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -822,6 +845,7 @@ public: GeomSphere(); GeomSphere(const Handle_Geom_SphericalSurface&); virtual ~GeomSphere(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -845,6 +869,7 @@ public: GeomToroid(); GeomToroid(const Handle_Geom_ToroidalSurface&); virtual ~GeomToroid(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -868,6 +893,7 @@ public: GeomPlane(); GeomPlane(const Handle_Geom_Plane&); virtual ~GeomPlane(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -892,6 +918,7 @@ public: GeomOffsetSurface(const Handle_Geom_Surface&, double); GeomOffsetSurface(const Handle_Geom_OffsetSurface&); virtual ~GeomOffsetSurface(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -917,6 +944,7 @@ public: GeomPlateSurface(const GeomPlate_BuildPlateSurface&); GeomPlateSurface(const Handle_GeomPlate_Surface&); virtual ~GeomPlateSurface(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -940,6 +968,7 @@ public: GeomTrimmedSurface(); GeomTrimmedSurface(const Handle_Geom_RectangularTrimmedSurface&); virtual ~GeomTrimmedSurface(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -964,6 +993,7 @@ public: GeomSurfaceOfRevolution(const Handle_Geom_Curve&, const gp_Ax1&); GeomSurfaceOfRevolution(const Handle_Geom_SurfaceOfRevolution&); virtual ~GeomSurfaceOfRevolution(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer --------------------- @@ -988,6 +1018,7 @@ public: GeomSurfaceOfExtrusion(const Handle_Geom_Curve&, const gp_Dir&); GeomSurfaceOfExtrusion(const Handle_Geom_SurfaceOfLinearExtrusion&); virtual ~GeomSurfaceOfExtrusion(); + virtual Geometry *copy(void) const; virtual Geometry *clone(void) const; // Persistence implementer ---------------------