GCS: Const correctness and override qualifier

=============================================

Make several functions operate as const.
Use the override qualifier
This commit is contained in:
Abdullah Tahiri
2020-12-25 07:16:13 +01:00
committed by abdullahtahiriyo
parent 4d6257895d
commit 99c530bcf1
4 changed files with 82 additions and 81 deletions

View File

@@ -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;

View File

@@ -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.

View File

@@ -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 &center, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj)
double Ellipse::getRadMaj(const DeriVector2 &center, 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 &center, 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 &center, const DeriVector2 &f1, double b, double db, double &ret_dRadMaj)
double Hyperbola::getRadMaj(const DeriVector2 &center, 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 &center, 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();

View File

@@ -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 &center, 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 &center, 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 &center, 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 &center, 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 &center, 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 &center, 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