diff --git a/src/Mod/Sketcher/App/planegcs/GCS.cpp b/src/Mod/Sketcher/App/planegcs/GCS.cpp index 636f9899fe..4a3dd4e58a 100644 --- a/src/Mod/Sketcher/App/planegcs/GCS.cpp +++ b/src/Mod/Sketcher/App/planegcs/GCS.cpp @@ -1298,19 +1298,19 @@ int System::addConstraintInternalAlignmentBSplineControlPoint(BSpline &b, Circle //points are supplied, p is used for first curve and p2 for second, yielding a //remote angle computation (this is useful when the endpoints haven't) been //made coincident yet -double System::calculateAngleViaPoint(Curve &crv1, Curve &crv2, Point &p) +double System::calculateAngleViaPoint(const Curve &crv1, const Curve &crv2, Point &p) const { return calculateAngleViaPoint(crv1, crv2, p, p); } -double System::calculateAngleViaPoint(Curve &crv1, Curve &crv2, Point &p1, Point &p2) +double System::calculateAngleViaPoint(const Curve &crv1, const Curve &crv2, Point &p1, Point &p2) const { GCS::DeriVector2 n1 = crv1.CalculateNormal(p1); GCS::DeriVector2 n2 = crv2.CalculateNormal(p2); return atan2(-n2.x*n1.y+n2.y*n1.x, n2.x*n1.x + n2.y*n1.y); } -void System::calculateNormalAtPoint(Curve &crv, Point &p, double &rtnX, double &rtnY) +void System::calculateNormalAtPoint(const Curve &crv, const Point &p, double &rtnX, double &rtnY) const { GCS::DeriVector2 n1 = crv.CalculateNormal(p); rtnX = n1.x; diff --git a/src/Mod/Sketcher/App/planegcs/GCS.h b/src/Mod/Sketcher/App/planegcs/GCS.h index 14a7fb4bba..7c5f3ee916 100644 --- a/src/Mod/Sketcher/App/planegcs/GCS.h +++ b/src/Mod/Sketcher/App/planegcs/GCS.h @@ -325,9 +325,9 @@ namespace GCS int addConstraintInternalAlignmentParabolaFocus(Parabola &e, Point &p1, int tagId=0, bool driving = true); int addConstraintInternalAlignmentBSplineControlPoint(BSpline &b, Circle &c, int poleindex, int tag=0, bool driving = true); - double calculateAngleViaPoint(Curve &crv1, Curve &crv2, Point &p); - double calculateAngleViaPoint(Curve &crv1, Curve &crv2, Point &p1, Point &p2); - void calculateNormalAtPoint(Curve &crv, Point &p, double &rtnX, double &rtnY); + double calculateAngleViaPoint(const Curve &crv1, const Curve &crv2, Point &p) const; + double calculateAngleViaPoint(const Curve &crv1, const Curve &crv2, Point &p1, Point &p2) const; + void calculateNormalAtPoint(const Curve &crv, const Point &p, double &rtnX, double &rtnY) const; // Calculates errors of all constraints which have a tag equal to // the one supplied. Individual errors are summed up using RMS. diff --git a/src/Mod/Sketcher/App/planegcs/Geo.cpp b/src/Mod/Sketcher/App/planegcs/Geo.cpp index d805a8be47..fe96c9fbc3 100644 --- a/src/Mod/Sketcher/App/planegcs/Geo.cpp +++ b/src/Mod/Sketcher/App/planegcs/Geo.cpp @@ -30,7 +30,7 @@ namespace GCS{ -DeriVector2::DeriVector2(const Point &p, double *derivparam) +DeriVector2::DeriVector2(const Point &p, const double *derivparam) { x=*p.x; y=*p.y; dx=0.0; dy=0.0; @@ -88,7 +88,7 @@ DeriVector2 DeriVector2::divD(double val, double dval) const ); } -DeriVector2 Curve::Value(double /*u*/, double /*du*/, double* /*derivparam*/) +DeriVector2 Curve::Value(double /*u*/, double /*du*/, const double* /*derivparam*/) const { assert(false /*Value() is not implemented*/); return DeriVector2(); @@ -96,15 +96,16 @@ DeriVector2 Curve::Value(double /*u*/, double /*du*/, double* /*derivparam*/) //----------------Line -DeriVector2 Line::CalculateNormal(Point &/*p*/, double* derivparam) +DeriVector2 Line::CalculateNormal(const Point &p, const double* derivparam) const { + (void) p; DeriVector2 p1v(p1, derivparam); DeriVector2 p2v(p2, derivparam); return p2v.subtr(p1v).rotate90ccw(); } -DeriVector2 Line::Value(double u, double du, double* derivparam) +DeriVector2 Line::Value(double u, double du, const double* derivparam) const { DeriVector2 p1v(p1, derivparam); DeriVector2 p2v(p2, derivparam); @@ -138,7 +139,7 @@ Line* Line::Copy() //---------------circle -DeriVector2 Circle::CalculateNormal(Point &p, double* derivparam) +DeriVector2 Circle::CalculateNormal(const Point &p, const double* derivparam) const { DeriVector2 cv (center, derivparam); DeriVector2 pv (p, derivparam); @@ -146,7 +147,7 @@ DeriVector2 Circle::CalculateNormal(Point &p, double* derivparam) return cv.subtr(pv); } -DeriVector2 Circle::Value(double u, double du, double* derivparam) +DeriVector2 Circle::Value(double u, double du, const double* derivparam) const { //(x,y) = center + cos(u)*(r,0) + sin(u)*(0,r) @@ -214,7 +215,7 @@ Arc* Arc::Copy() //--------------ellipse //this function is exposed to allow reusing pre-filled derivectors in constraints code -double Ellipse::getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj) +double Ellipse::getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj) const { double cf, dcf; cf = f1.subtr(center).length(dcf); @@ -224,7 +225,7 @@ double Ellipse::getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, doub } //returns major radius. The derivative by derivparam is returned into ret_dRadMaj argument. -double Ellipse::getRadMaj(double *derivparam, double &ret_dRadMaj) +double Ellipse::getRadMaj(double *derivparam, double &ret_dRadMaj) const { DeriVector2 c(center, derivparam); DeriVector2 f1(focus1, derivparam); @@ -232,13 +233,13 @@ double Ellipse::getRadMaj(double *derivparam, double &ret_dRadMaj) } //returns the major radius (plain value, no derivatives) -double Ellipse::getRadMaj() +double Ellipse::getRadMaj() const { double dradmaj;//dummy return getRadMaj(0,dradmaj); } -DeriVector2 Ellipse::CalculateNormal(Point &p, double* derivparam) +DeriVector2 Ellipse::CalculateNormal(const Point &p, const double* derivparam) const { //fill some vectors in DeriVector2 cv (center, derivparam); @@ -279,7 +280,7 @@ DeriVector2 Ellipse::CalculateNormal(Point &p, double* derivparam) return ret; } -DeriVector2 Ellipse::Value(double u, double du, double* derivparam) +DeriVector2 Ellipse::Value(double u, double du, const double* derivparam) const { //In local coordinate system, value() of ellipse is: //(a*cos(u), b*sin(u)) @@ -370,7 +371,7 @@ ArcOfEllipse* ArcOfEllipse::Copy() //---------------hyperbola //this function is exposed to allow reusing pre-filled derivectors in constraints code -double Hyperbola::getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj) +double Hyperbola::getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj) const { double cf, dcf; cf = f1.subtr(center).length(dcf); @@ -382,7 +383,7 @@ double Hyperbola::getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, do } //returns major radius. The derivative by derivparam is returned into ret_dRadMaj argument. -double Hyperbola::getRadMaj(double *derivparam, double &ret_dRadMaj) +double Hyperbola::getRadMaj(double *derivparam, double &ret_dRadMaj) const { DeriVector2 c(center, derivparam); DeriVector2 f1(focus1, derivparam); @@ -390,13 +391,13 @@ double Hyperbola::getRadMaj(double *derivparam, double &ret_dRadMaj) } //returns the major radius (plain value, no derivatives) -double Hyperbola::getRadMaj() +double Hyperbola::getRadMaj() const { double dradmaj;//dummy return getRadMaj(0,dradmaj); } -DeriVector2 Hyperbola::CalculateNormal(Point &p, double* derivparam) +DeriVector2 Hyperbola::CalculateNormal(const Point &p, const double* derivparam) const { //fill some vectors in DeriVector2 cv (center, derivparam); @@ -416,7 +417,7 @@ DeriVector2 Hyperbola::CalculateNormal(Point &p, double* derivparam) return ret; } -DeriVector2 Hyperbola::Value(double u, double du, double* derivparam) +DeriVector2 Hyperbola::Value(double u, double du, const double* derivparam) const { //In local coordinate system, value() of hyperbola is: @@ -505,7 +506,7 @@ ArcOfHyperbola* ArcOfHyperbola::Copy() //---------------parabola -DeriVector2 Parabola::CalculateNormal(Point &p, double* derivparam) +DeriVector2 Parabola::CalculateNormal(const Point &p, const double* derivparam) const { //fill some vectors in DeriVector2 cv (vertex, derivparam); @@ -522,7 +523,7 @@ DeriVector2 Parabola::CalculateNormal(Point &p, double* derivparam) return ret; } -DeriVector2 Parabola::Value(double u, double du, double* derivparam) +DeriVector2 Parabola::Value(double u, double du, const double* derivparam) const { //In local coordinate system, value() of parabola is: @@ -607,7 +608,7 @@ ArcOfParabola* ArcOfParabola::Copy() } // bspline -DeriVector2 BSpline::CalculateNormal(Point& p, double* derivparam) +DeriVector2 BSpline::CalculateNormal(const Point &p, const double* derivparam) const { // place holder DeriVector2 ret; @@ -651,7 +652,7 @@ DeriVector2 BSpline::CalculateNormal(Point& p, double* derivparam) return ret; } -DeriVector2 BSpline::Value(double /*u*/, double /*du*/, double* /*derivparam*/) +DeriVector2 BSpline::Value(double /*u*/, double /*du*/, const double* /*derivparam*/) const { // place holder DeriVector2 ret = DeriVector2(); diff --git a/src/Mod/Sketcher/App/planegcs/Geo.h b/src/Mod/Sketcher/App/planegcs/Geo.h index cb234285f0..0fd9b3a2bb 100644 --- a/src/Mod/Sketcher/App/planegcs/Geo.h +++ b/src/Mod/Sketcher/App/planegcs/Geo.h @@ -55,7 +55,7 @@ namespace GCS DeriVector2(){x=0; y=0; dx=0; dy=0;} DeriVector2(double x, double y) {this->x = x; this->y = y; this->dx = 0; this->dy = 0;} DeriVector2(double x, double y, double dx, double dy) {this->x = x; this->y = y; this->dx = dx; this->dy = dy;} - DeriVector2(const Point &p, double* derivparam); + DeriVector2(const Point &p, const double* derivparam); double x, dx; double y, dy; @@ -100,7 +100,7 @@ namespace GCS //derivparam is a pointer to a curve parameter (or point coordinate) to // compute the derivative for. The derivative is returned through dx,dy // fields of DeriVector2. - virtual DeriVector2 CalculateNormal(Point &p, double* derivparam = 0) = 0; + virtual DeriVector2 CalculateNormal(const Point &p, const double* derivparam = 0) const = 0; /** * @brief Value: returns point (vector) given the value of parameter @@ -109,7 +109,7 @@ namespace GCS * @param derivparam: pointer to sketch parameter to calculate the derivative for * @return */ - virtual DeriVector2 Value(double u, double du, double* derivparam = 0); + virtual DeriVector2 Value(double u, double du, const double* derivparam = 0) const; //adds curve's parameters to pvec (used by constraints) virtual int PushOwnParams(VEC_pD &pvec) = 0; @@ -126,11 +126,11 @@ namespace GCS virtual ~Line(){} Point p1; Point p2; - DeriVector2 CalculateNormal(Point &p, double* derivparam = 0); - DeriVector2 Value(double u, double du, double* derivparam = 0); - virtual int PushOwnParams(VEC_pD &pvec); - virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt); - virtual Line* Copy(); + DeriVector2 CalculateNormal(const Point &p, const double* derivparam = 0) const override; + DeriVector2 Value(double u, double du, const double* derivparam = 0) const override; + virtual int PushOwnParams(VEC_pD &pvec) override; + virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt) override; + virtual Line* Copy() override; }; class Circle: public Curve @@ -140,11 +140,11 @@ namespace GCS virtual ~Circle(){} Point center; double *rad; - DeriVector2 CalculateNormal(Point &p, double* derivparam = 0); - DeriVector2 Value(double u, double du, double* derivparam = 0); - virtual int PushOwnParams(VEC_pD &pvec); - virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt); - virtual Circle* Copy(); + DeriVector2 CalculateNormal(const Point &p, const double* derivparam = 0) const override; + DeriVector2 Value(double u, double du, const double* derivparam = 0) const override; + virtual int PushOwnParams(VEC_pD &pvec) override; + virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt) override; + virtual Circle* Copy() override; }; class Arc: public Circle @@ -158,19 +158,19 @@ namespace GCS Point start; Point end; //Point center; //inherited - virtual int PushOwnParams(VEC_pD &pvec); - virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt); - virtual Arc* Copy(); + virtual int PushOwnParams(VEC_pD &pvec) override; + virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt) override; + virtual Arc* Copy() override; }; class MajorRadiusConic: public Curve { public: virtual ~MajorRadiusConic(){} - virtual double getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj) = 0; - virtual double getRadMaj(double* derivparam, double &ret_dRadMaj) = 0; - virtual double getRadMaj() = 0; - DeriVector2 CalculateNormal(Point &p, double* derivparam = 0) = 0; + virtual double getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj) const = 0; + virtual double getRadMaj(double* derivparam, double &ret_dRadMaj) const = 0; + virtual double getRadMaj() const = 0; + //DeriVector2 CalculateNormal(Point &p, double* derivparam = 0) = 0; }; class Ellipse: public MajorRadiusConic @@ -181,14 +181,14 @@ namespace GCS Point center; Point focus1; double *radmin; - virtual double getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj); - virtual double getRadMaj(double* derivparam, double &ret_dRadMaj); - virtual double getRadMaj(); - DeriVector2 CalculateNormal(Point &p, double* derivparam = 0); - DeriVector2 Value(double u, double du, double* derivparam = 0); - virtual int PushOwnParams(VEC_pD &pvec); - virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt); - virtual Ellipse* Copy(); + virtual double getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj) const override; + virtual double getRadMaj(double* derivparam, double &ret_dRadMaj) const override; + virtual double getRadMaj() const override; + DeriVector2 CalculateNormal(const Point &p, const double* derivparam = 0) const override; + DeriVector2 Value(double u, double du, const double* derivparam = 0) const override; + virtual int PushOwnParams(VEC_pD &pvec) override; + virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt) override; + virtual Ellipse* Copy() override; }; class ArcOfEllipse: public Ellipse @@ -204,9 +204,9 @@ namespace GCS //Point center; //inherited //double *focus1.x; //inherited //double *focus1.y; //inherited - virtual int PushOwnParams(VEC_pD &pvec); - virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt); - virtual ArcOfEllipse* Copy(); + virtual int PushOwnParams(VEC_pD &pvec) override; + virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt) override; + virtual ArcOfEllipse* Copy() override; }; class Hyperbola: public MajorRadiusConic @@ -217,14 +217,14 @@ namespace GCS Point center; Point focus1; double *radmin; - virtual double getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj); - virtual double getRadMaj(double* derivparam, double &ret_dRadMaj); - virtual double getRadMaj(); - DeriVector2 CalculateNormal(Point &p, double* derivparam = 0); - virtual DeriVector2 Value(double u, double du, double* derivparam = 0); - virtual int PushOwnParams(VEC_pD &pvec); - virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt); - virtual Hyperbola* Copy(); + virtual double getRadMaj(const DeriVector2 ¢er, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj) const override; + virtual double getRadMaj(double* derivparam, double &ret_dRadMaj) const override; + virtual double getRadMaj() const override; + DeriVector2 CalculateNormal(const Point &p, const double* derivparam = 0) const override;; + virtual DeriVector2 Value(double u, double du, const double* derivparam = 0) const override; + virtual int PushOwnParams(VEC_pD &pvec) override; + virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt) override; + virtual Hyperbola* Copy() override; }; class ArcOfHyperbola: public Hyperbola @@ -238,9 +238,9 @@ namespace GCS Point start; Point end; // interface helpers - virtual int PushOwnParams(VEC_pD &pvec); - virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt); - virtual ArcOfHyperbola* Copy(); + virtual int PushOwnParams(VEC_pD &pvec) override; + virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt) override; + virtual ArcOfHyperbola* Copy() override; }; class Parabola: public Curve @@ -250,11 +250,11 @@ namespace GCS virtual ~Parabola(){} Point vertex; Point focus1; - DeriVector2 CalculateNormal(Point &p, double* derivparam = 0); - virtual DeriVector2 Value(double u, double du, double* derivparam = 0); - virtual int PushOwnParams(VEC_pD &pvec); - virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt); - virtual Parabola* Copy(); + DeriVector2 CalculateNormal(const Point &p, const double* derivparam = 0) const override; + virtual DeriVector2 Value(double u, double du, const double* derivparam = 0) const override; + virtual int PushOwnParams(VEC_pD &pvec) override; + virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt) override; + virtual Parabola* Copy() override; }; class ArcOfParabola: public Parabola @@ -268,9 +268,9 @@ namespace GCS Point start; Point end; // interface helpers - virtual int PushOwnParams(VEC_pD &pvec); - virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt); - virtual ArcOfParabola* Copy(); + virtual int PushOwnParams(VEC_pD &pvec) override; + virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt) override; + virtual ArcOfParabola* Copy() override; }; class BSpline: public Curve @@ -293,11 +293,11 @@ namespace GCS bool periodic; VEC_I knotpointGeoids; // geoids of knotpoints as to index Geom array // interface helpers - DeriVector2 CalculateNormal(Point &p, double* derivparam = 0); - virtual DeriVector2 Value(double u, double du, double* derivparam = 0); - virtual int PushOwnParams(VEC_pD &pvec); - virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt); - virtual BSpline* Copy(); + DeriVector2 CalculateNormal(const Point &p, const double* derivparam = 0) const override;; + virtual DeriVector2 Value(double u, double du, const double* derivparam = 0) const override; + virtual int PushOwnParams(VEC_pD &pvec) override; + virtual void ReconstructOnNewPvec (VEC_pD &pvec, int &cnt) override; + virtual BSpline* Copy() override; }; } //namespace GCS