From 8c2eb14efef0ff0ad5de85164e84cded78105123 Mon Sep 17 00:00:00 2001 From: Florian Foinant-Willig Date: Mon, 23 Jun 2025 17:39:34 +0200 Subject: [PATCH] Sketcher: refactor planecgs/Constraints (#21988) * Sketcher: refactor planecgs/Constraints Remove code duplication * Clarify param push with `Copy()` --- src/Mod/Sketcher/App/planegcs/Constraints.cpp | 585 ++---------------- src/Mod/Sketcher/App/planegcs/Constraints.h | 410 ++++++------ 2 files changed, 243 insertions(+), 752 deletions(-) diff --git a/src/Mod/Sketcher/App/planegcs/Constraints.cpp b/src/Mod/Sketcher/App/planegcs/Constraints.cpp index 336d20e3d2..d6efa6ec5c 100644 --- a/src/Mod/Sketcher/App/planegcs/Constraints.cpp +++ b/src/Mod/Sketcher/App/planegcs/Constraints.cpp @@ -83,16 +83,6 @@ void Constraint::rescale(double coef) scale = coef * 1.0; } -double Constraint::error() -{ - return 0.0; -} - -double Constraint::grad(double* /*param*/) -{ - return 0.0; -} - double Constraint::maxStep(MAP_pD_D& /*dir*/, double lim) { return lim; @@ -114,8 +104,8 @@ int Constraint::findParamInPvec(double* param) // -------------------------------------------------------- // Equal ConstraintEqual::ConstraintEqual(double* p1, double* p2, double p1p2ratio) + : ratio(p1p2ratio) { - ratio = p1p2ratio; pvec.push_back(p1); pvec.push_back(p2); origpvec = pvec; @@ -127,11 +117,6 @@ ConstraintType ConstraintEqual::getTypeId() return Equal; } -void ConstraintEqual::rescale(double coef) -{ - scale = coef * 1.; -} - double ConstraintEqual::error() { return scale * (*param1() - ratio * (*param2())); @@ -171,11 +156,6 @@ ConstraintType ConstraintWeightedLinearCombination::getTypeId() return WeightedLinearCombination; } -void ConstraintWeightedLinearCombination::rescale(double coef) -{ - scale = coef * 1.; -} - double ConstraintWeightedLinearCombination::error() { // Explanation of the math here: @@ -232,9 +212,10 @@ double ConstraintWeightedLinearCombination::grad(double* param) ConstraintCenterOfGravity::ConstraintCenterOfGravity(const std::vector& givenpvec, const std::vector& givenweights) : weights(givenweights) + , numpoints(givenpvec.size() - 1) { pvec = givenpvec; - numpoints = pvec.size() - 1; + assert(pvec.size() > 1); assert(weights.size() == numpoints); origpvec = pvec; @@ -246,11 +227,6 @@ ConstraintType ConstraintCenterOfGravity::getTypeId() return CenterOfGravity; } -void ConstraintCenterOfGravity::rescale(double coef) -{ - scale = coef * 1.; -} - double ConstraintCenterOfGravity::error() { double sum = 0; @@ -332,7 +308,7 @@ ConstraintSlopeAtBSplineKnot::ConstraintSlopeAtBSplineKnot(BSpline& b, Line& l, } origpvec = pvec; - rescale(); + ConstraintSlopeAtBSplineKnot::rescale(); } ConstraintType ConstraintSlopeAtBSplineKnot::getTypeId() @@ -555,11 +531,6 @@ void ConstraintPointOnBSpline::setStartPole(double u) } } -void ConstraintPointOnBSpline::rescale(double coef) -{ - scale = coef * 1.0; -} - double ConstraintPointOnBSpline::error() { if (*theparam() < bsp.flattenedknots[startpole + bsp.degree] @@ -666,11 +637,6 @@ ConstraintType ConstraintDifference::getTypeId() return Difference; } -void ConstraintDifference::rescale(double coef) -{ - scale = coef * 1.; -} - double ConstraintDifference::error() { return scale * (*param2() - *param1() - *difference()); @@ -710,11 +676,6 @@ ConstraintType ConstraintP2PDistance::getTypeId() return P2PDistance; } -void ConstraintP2PDistance::rescale(double coef) -{ - scale = coef * 1.; -} - double ConstraintP2PDistance::error() { double dx = (*p1x() - *p2x()); @@ -811,11 +772,6 @@ ConstraintType ConstraintP2PAngle::getTypeId() return P2PAngle; } -void ConstraintP2PAngle::rescale(double coef) -{ - scale = coef * 1.; -} - double ConstraintP2PAngle::error() { double dx = (*p2x() - *p1x()); @@ -897,11 +853,6 @@ ConstraintType ConstraintP2LDistance::getTypeId() return P2LDistance; } -void ConstraintP2LDistance::rescale(double coef) -{ - scale = coef; -} - double ConstraintP2LDistance::error() { double x0 = *p0x(), x1 = *p1x(), x2 = *p2x(); @@ -1041,11 +992,6 @@ ConstraintType ConstraintPointOnLine::getTypeId() return PointOnLine; } -void ConstraintPointOnLine::rescale(double coef) -{ - scale = coef; -} - double ConstraintPointOnLine::error() { double x0 = *p0x(), x1 = *p1x(), x2 = *p2x(); @@ -1123,11 +1069,6 @@ ConstraintType ConstraintPointOnPerpBisector::getTypeId() return PointOnPerpBisector; } -void ConstraintPointOnPerpBisector::rescale(double coef) -{ - scale = coef; -} - void ConstraintPointOnPerpBisector::errorgrad(double* err, double* grad, double* param) { DeriVector2 p0(Point(p0x(), p0y()), param); @@ -1152,26 +1093,6 @@ void ConstraintPointOnPerpBisector::errorgrad(double* err, double* grad, double* } } -double ConstraintPointOnPerpBisector::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintPointOnPerpBisector::grad(double* param) -{ - // first of all, check that we need to compute anything. - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - // -------------------------------------------------------- // Parallel @@ -1186,7 +1107,7 @@ ConstraintParallel::ConstraintParallel(Line& l1, Line& l2) pvec.push_back(l2.p2.x); pvec.push_back(l2.p2.y); origpvec = pvec; - rescale(); + ConstraintParallel::rescale(); } ConstraintType ConstraintParallel::getTypeId() @@ -1258,7 +1179,7 @@ ConstraintPerpendicular::ConstraintPerpendicular(Line& l1, Line& l2) pvec.push_back(l2.p2.x); pvec.push_back(l2.p2.y); origpvec = pvec; - rescale(); + ConstraintPerpendicular::rescale(); } ConstraintPerpendicular::ConstraintPerpendicular(Point& l1p1, Point& l1p2, Point& l2p1, Point& l2p2) @@ -1272,7 +1193,7 @@ ConstraintPerpendicular::ConstraintPerpendicular(Point& l1p1, Point& l1p2, Point pvec.push_back(l2p2.x); pvec.push_back(l2p2.y); origpvec = pvec; - rescale(); + ConstraintPerpendicular::rescale(); } ConstraintType ConstraintPerpendicular::getTypeId() @@ -1372,11 +1293,6 @@ ConstraintType ConstraintL2LAngle::getTypeId() return L2LAngle; } -void ConstraintL2LAngle::rescale(double coef) -{ - scale = coef * 1.; -} - double ConstraintL2LAngle::error() { double dx1 = (*l1p2x() - *l1p1x()); @@ -1497,11 +1413,6 @@ ConstraintType ConstraintMidpointOnLine::getTypeId() return MidpointOnLine; } -void ConstraintMidpointOnLine::rescale(double coef) -{ - scale = coef * 1; -} - double ConstraintMidpointOnLine::error() { double x0 = ((*l1p1x()) + (*l1p2x())) / 2; @@ -1565,8 +1476,9 @@ ConstraintTangentCircumf::ConstraintTangentCircumf(Point& p1, double* rad1, double* rad2, bool internal_) + : internal(internal_) { - internal = internal_; + pvec.push_back(p1.x); pvec.push_back(p1.y); pvec.push_back(p2.x); @@ -1582,11 +1494,6 @@ ConstraintType ConstraintTangentCircumf::getTypeId() return TangentCircumf; } -void ConstraintTangentCircumf::rescale(double coef) -{ - scale = coef * 1; -} - double ConstraintTangentCircumf::error() { double dx = (*c1x() - *c2x()); @@ -1659,11 +1566,6 @@ ConstraintType ConstraintPointOnEllipse::getTypeId() return PointOnEllipse; } -void ConstraintPointOnEllipse::rescale(double coef) -{ - scale = coef * 1; -} - double ConstraintPointOnEllipse::error() { double X_0 = *p1x(); @@ -1737,12 +1639,13 @@ double ConstraintPointOnEllipse::grad(double* param) // -------------------------------------------------------- // ConstraintEllipseTangentLine ConstraintEllipseTangentLine::ConstraintEllipseTangentLine(Line& l, Ellipse& e) + : l(l) + , e(e) { - this->l = l; - this->l.PushOwnParams(pvec); - this->e = e; + this->l.PushOwnParams(pvec); this->e.PushOwnParams(pvec); // DeepSOIC: hopefully, this won't push arc's parameters + origpvec = pvec; pvecChangedFlag = true; rescale(); @@ -1761,11 +1664,6 @@ ConstraintType ConstraintEllipseTangentLine::getTypeId() return TangentEllipseLine; } -void ConstraintEllipseTangentLine::rescale(double coef) -{ - scale = coef * 1; -} - void ConstraintEllipseTangentLine::errorgrad(double* err, double* grad, double* param) { // DeepSOIC equation @@ -1803,26 +1701,6 @@ void ConstraintEllipseTangentLine::errorgrad(double* err, double* grad, double* } } -double ConstraintEllipseTangentLine::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintEllipseTangentLine::grad(double* param) -{ - // first of all, check that we need to compute anything. - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - // -------------------------------------------------------- // ConstraintInternalAlignmentPoint2Ellipse @@ -1830,13 +1708,13 @@ ConstraintInternalAlignmentPoint2Ellipse::ConstraintInternalAlignmentPoint2Ellip Ellipse& e, Point& p1, InternalAlignmentType alignmentType) + : e(e) + , p(p1) + , AlignmentType(alignmentType) { - this->p = p1; pvec.push_back(p.x); pvec.push_back(p.y); - this->e = e; this->e.PushOwnParams(pvec); - this->AlignmentType = alignmentType; origpvec = pvec; rescale(); } @@ -1857,11 +1735,6 @@ ConstraintType ConstraintInternalAlignmentPoint2Ellipse::getTypeId() return InternalAlignmentPoint2Ellipse; } -void ConstraintInternalAlignmentPoint2Ellipse::rescale(double coef) -{ - scale = coef * 1; -} - void ConstraintInternalAlignmentPoint2Ellipse::errorgrad(double* err, double* grad, double* param) { if (pvecChangedFlag) { @@ -1925,26 +1798,6 @@ void ConstraintInternalAlignmentPoint2Ellipse::errorgrad(double* err, double* gr } } -double ConstraintInternalAlignmentPoint2Ellipse::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintInternalAlignmentPoint2Ellipse::grad(double* param) -{ - // first of all, check that we need to compute anything. - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - // -------------------------------------------------------- // ConstraintInternalAlignmentPoint2Hyperbola @@ -1952,13 +1805,13 @@ ConstraintInternalAlignmentPoint2Hyperbola::ConstraintInternalAlignmentPoint2Hyp Hyperbola& e, Point& p1, InternalAlignmentType alignmentType) + : e(e) + , p(p1) + , AlignmentType(alignmentType) { - this->p = p1; pvec.push_back(p.x); pvec.push_back(p.y); - this->e = e; this->e.PushOwnParams(pvec); - this->AlignmentType = alignmentType; origpvec = pvec; rescale(); } @@ -1979,11 +1832,6 @@ ConstraintType ConstraintInternalAlignmentPoint2Hyperbola::getTypeId() return InternalAlignmentPoint2Hyperbola; } -void ConstraintInternalAlignmentPoint2Hyperbola::rescale(double coef) -{ - scale = coef * 1; -} - void ConstraintInternalAlignmentPoint2Hyperbola::errorgrad(double* err, double* grad, double* param) { if (pvecChangedFlag) { @@ -2052,35 +1900,15 @@ void ConstraintInternalAlignmentPoint2Hyperbola::errorgrad(double* err, double* } } -double ConstraintInternalAlignmentPoint2Hyperbola::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintInternalAlignmentPoint2Hyperbola::grad(double* param) -{ - // first of all, check that we need to compute anything. - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - // -------------------------------------------------------- // ConstraintEqualMajorAxesEllipse ConstraintEqualMajorAxesConic::ConstraintEqualMajorAxesConic(MajorRadiusConic* a1, MajorRadiusConic* a2) + : e1(a1) + , e2(a2) { - this->e1 = a1; this->e1->PushOwnParams(pvec); - this->e2 = a2; this->e2->PushOwnParams(pvec); origpvec = pvec; pvecChangedFlag = true; @@ -2100,11 +1928,6 @@ ConstraintType ConstraintEqualMajorAxesConic::getTypeId() return EqualMajorAxesConic; } -void ConstraintEqualMajorAxesConic::rescale(double coef) -{ - scale = coef * 1; -} - void ConstraintEqualMajorAxesConic::errorgrad(double* err, double* grad, double* param) { if (pvecChangedFlag) { @@ -2122,26 +1945,6 @@ void ConstraintEqualMajorAxesConic::errorgrad(double* err, double* grad, double* } } -double ConstraintEqualMajorAxesConic::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintEqualMajorAxesConic::grad(double* param) -{ - // first of all, check that we need to compute anything. - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - // ConstraintEqualFocalDistance ConstraintEqualFocalDistance::ConstraintEqualFocalDistance(ArcOfParabola* a1, ArcOfParabola* a2) { @@ -2167,11 +1970,6 @@ ConstraintType ConstraintEqualFocalDistance::getTypeId() return EqualFocalDistance; } -void ConstraintEqualFocalDistance::rescale(double coef) -{ - scale = coef * 1; -} - void ConstraintEqualFocalDistance::errorgrad(double* err, double* grad, double* param) { if (pvecChangedFlag) { @@ -2204,37 +2002,17 @@ void ConstraintEqualFocalDistance::errorgrad(double* err, double* grad, double* } } -double ConstraintEqualFocalDistance::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintEqualFocalDistance::grad(double* param) -{ - // first of all, check that we need to compute anything. - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - // -------------------------------------------------------- // ConstraintCurveValue -ConstraintCurveValue::ConstraintCurveValue(Point& p, double* pcoord, Curve& crv, double* u) +ConstraintCurveValue::ConstraintCurveValue(Point& p, double* pcoord, Curve& c, double* u) + : crv(c.Copy()) { pvec.push_back(p.x); pvec.push_back(p.y); pvec.push_back(pcoord); pvec.push_back(u); - crv.PushOwnParams(pvec); - this->crv = crv.Copy(); + crv->PushOwnParams(pvec); pvecChangedFlag = true; origpvec = pvec; rescale(); @@ -2264,11 +2042,6 @@ ConstraintType ConstraintCurveValue::getTypeId() return CurveValue; } -void ConstraintCurveValue::rescale(double coef) -{ - scale = coef * 1; -} - void ConstraintCurveValue::errorgrad(double* err, double* grad, double* param) { if (pvecChangedFlag) { @@ -2307,26 +2080,6 @@ void ConstraintCurveValue::errorgrad(double* err, double* grad, double* param) } } -double ConstraintCurveValue::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintCurveValue::grad(double* param) -{ - // first of all, check that we need to compute anything. - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - double ConstraintCurveValue::maxStep(MAP_pD_D& /*dir*/, double lim) { return lim; @@ -2366,11 +2119,6 @@ ConstraintType ConstraintPointOnHyperbola::getTypeId() return PointOnHyperbola; } -void ConstraintPointOnHyperbola::rescale(double coef) -{ - scale = coef * 1; -} - double ConstraintPointOnHyperbola::error() { double X_0 = *p1x(); @@ -2457,22 +2205,22 @@ double ConstraintPointOnHyperbola::grad(double* param) // -------------------------------------------------------- // ConstraintPointOnParabola ConstraintPointOnParabola::ConstraintPointOnParabola(Point& p, Parabola& e) + : parab(e.Copy()) { pvec.push_back(p.x); pvec.push_back(p.y); - e.PushOwnParams(pvec); - this->parab = e.Copy(); + parab->PushOwnParams(pvec); pvecChangedFlag = true; origpvec = pvec; rescale(); } ConstraintPointOnParabola::ConstraintPointOnParabola(Point& p, ArcOfParabola& e) + : parab(e.Copy()) { pvec.push_back(p.x); pvec.push_back(p.y); - e.PushOwnParams(pvec); - this->parab = e.Copy(); + parab->PushOwnParams(pvec); pvecChangedFlag = true; origpvec = pvec; rescale(); @@ -2500,11 +2248,6 @@ ConstraintType ConstraintPointOnParabola::getTypeId() return PointOnParabola; } -void ConstraintPointOnParabola::rescale(double coef) -{ - scale = coef * 1; -} - void ConstraintPointOnParabola::errorgrad(double* err, double* grad, double* param) { if (pvecChangedFlag) { @@ -2542,38 +2285,18 @@ void ConstraintPointOnParabola::errorgrad(double* err, double* grad, double* par } } -double ConstraintPointOnParabola::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintPointOnParabola::grad(double* param) -{ - // first of all, check that we need to compute anything. - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - // -------------------------------------------------------- // ConstraintAngleViaPoint ConstraintAngleViaPoint::ConstraintAngleViaPoint(Curve& acrv1, Curve& acrv2, Point p, double* angle) + : crv1(acrv1.Copy()) + , crv2(acrv2.Copy()) { pvec.push_back(angle); pvec.push_back(p.x); pvec.push_back(p.y); - acrv1.PushOwnParams(pvec); - acrv2.PushOwnParams(pvec); - crv1 = acrv1.Copy(); - crv2 = acrv2.Copy(); + crv1->PushOwnParams(pvec); + crv2->PushOwnParams(pvec); origpvec = pvec; pvecChangedFlag = true; rescale(); @@ -2605,11 +2328,6 @@ ConstraintType ConstraintAngleViaPoint::getTypeId() return AngleViaPoint; } -void ConstraintAngleViaPoint::rescale(double coef) -{ - scale = coef * 1.; -} - double ConstraintAngleViaPoint::error() { if (pvecChangedFlag) { @@ -2662,16 +2380,16 @@ ConstraintAngleViaTwoPoints::ConstraintAngleViaTwoPoints(Curve& acrv1, Point p1, Point p2, double* angle) + : crv1(acrv1.Copy()) + , crv2(acrv2.Copy()) { pvec.push_back(angle); pvec.push_back(p1.x); pvec.push_back(p1.y); pvec.push_back(p2.x); pvec.push_back(p2.y); - acrv1.PushOwnParams(pvec); - acrv2.PushOwnParams(pvec); - crv1 = acrv1.Copy(); - crv2 = acrv2.Copy(); + crv1->PushOwnParams(pvec); + crv2->PushOwnParams(pvec); origpvec = pvec; pvecChangedFlag = true; rescale(); @@ -2707,11 +2425,6 @@ ConstraintType ConstraintAngleViaTwoPoints::getTypeId() return AngleViaTwoPoints; } -void ConstraintAngleViaTwoPoints::rescale(double coef) -{ - scale = coef * 1.; -} - double ConstraintAngleViaTwoPoints::error() { if (pvecChangedFlag) { @@ -2764,15 +2477,15 @@ ConstraintAngleViaPointAndParam::ConstraintAngleViaPointAndParam(Curve& acrv1, Point p, double* cparam, double* angle) + : crv1(acrv1.Copy()) + , crv2(acrv2.Copy()) { pvec.push_back(angle); pvec.push_back(p.x); pvec.push_back(p.y); pvec.push_back(cparam); - acrv1.PushOwnParams(pvec); - acrv2.PushOwnParams(pvec); - crv1 = acrv1.Copy(); - crv2 = acrv2.Copy(); + crv1->PushOwnParams(pvec); + crv2->PushOwnParams(pvec); origpvec = pvec; pvecChangedFlag = true; rescale(); @@ -2805,11 +2518,6 @@ ConstraintType ConstraintAngleViaPointAndParam::getTypeId() return AngleViaPointAndParam; } -void ConstraintAngleViaPointAndParam::rescale(double coef) -{ - scale = coef * 1.; -} - double ConstraintAngleViaPointAndParam::error() { if (pvecChangedFlag) { @@ -2863,16 +2571,16 @@ ConstraintAngleViaPointAndTwoParams::ConstraintAngleViaPointAndTwoParams(Curve& double* cparam1, double* cparam2, double* angle) + : crv1(acrv1.Copy()) + , crv2(acrv2.Copy()) { pvec.push_back(angle); pvec.push_back(p.x); pvec.push_back(p.y); pvec.push_back(cparam1); pvec.push_back(cparam2); - acrv1.PushOwnParams(pvec); - acrv2.PushOwnParams(pvec); - crv1 = acrv1.Copy(); - crv2 = acrv2.Copy(); + crv1->PushOwnParams(pvec); + crv2->PushOwnParams(pvec); origpvec = pvec; pvecChangedFlag = true; rescale(); @@ -2906,11 +2614,6 @@ ConstraintType ConstraintAngleViaPointAndTwoParams::getTypeId() return AngleViaPointAndTwoParams; } -void ConstraintAngleViaPointAndTwoParams::rescale(double coef) -{ - scale = coef * 1.; -} - double ConstraintAngleViaPointAndTwoParams::error() { if (pvecChangedFlag) { @@ -2959,31 +2662,30 @@ double ConstraintAngleViaPointAndTwoParams::grad(double* param) // -------------------------------------------------------- // ConstraintSnell -ConstraintSnell::ConstraintSnell(Curve& ray1, - Curve& ray2, - Curve& boundary, +ConstraintSnell::ConstraintSnell(Curve& r1, + Curve& r2, + Curve& b, Point p, double* n1, double* n2, bool flipn1, bool flipn2) + : ray1(r1.Copy()) + , ray2(r2.Copy()) + , boundary(b.Copy()) + , flipn1(flipn1) + , flipn2(flipn2) { pvec.push_back(n1); pvec.push_back(n2); pvec.push_back(p.x); pvec.push_back(p.y); - ray1.PushOwnParams(pvec); - ray2.PushOwnParams(pvec); - boundary.PushOwnParams(pvec); - this->ray1 = ray1.Copy(); - this->ray2 = ray2.Copy(); - this->boundary = boundary.Copy(); + ray1->PushOwnParams(pvec); + ray2->PushOwnParams(pvec); + boundary->PushOwnParams(pvec); origpvec = pvec; pvecChangedFlag = true; - this->flipn1 = flipn1; - this->flipn2 = flipn2; - rescale(); } @@ -3017,11 +2719,6 @@ ConstraintType ConstraintSnell::getTypeId() return Snell; } -void ConstraintSnell::rescale(double coef) -{ - scale = coef * 1.; -} - // error and gradient combined. Values are returned through pointers. void ConstraintSnell::errorgrad(double* err, double* grad, double* param) { @@ -3053,35 +2750,14 @@ void ConstraintSnell::errorgrad(double* err, double* grad, double* param) } } -double ConstraintSnell::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintSnell::grad(double* param) -{ - // first of all, check that we need to compute anything. - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return scale * deriv; -} - // -------------------------------------------------------- // ConstraintEqualLineLength ConstraintEqualLineLength::ConstraintEqualLineLength(Line& l1, Line& l2) + : l1(l1) + , l2(l2) { - this->l1 = l1; this->l1.PushOwnParams(pvec); - - this->l2 = l2; this->l2.PushOwnParams(pvec); origpvec = pvec; pvecChangedFlag = true; @@ -3101,11 +2777,6 @@ ConstraintType ConstraintEqualLineLength::getTypeId() return EqualLineLength; } -void ConstraintEqualLineLength::rescale(double coef) -{ - scale = coef * 1; -} - void ConstraintEqualLineLength::errorgrad(double* err, double* grad, double* param) { if (pvecChangedFlag) { @@ -3169,37 +2840,14 @@ void ConstraintEqualLineLength::errorgrad(double* err, double* grad, double* par } } -double ConstraintEqualLineLength::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintEqualLineLength::grad(double* param) -{ - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - - // -------------------------------------------------------- // ConstraintC2CDistance ConstraintC2CDistance::ConstraintC2CDistance(Circle& c1, Circle& c2, double* d) + : c1(c1) + , c2(c2) { - this->d = d; pvec.push_back(d); - - this->c1 = c1; this->c1.PushOwnParams(pvec); - - this->c2 = c2; this->c2.PushOwnParams(pvec); origpvec = pvec; @@ -3221,11 +2869,6 @@ ConstraintType ConstraintC2CDistance::getTypeId() return C2CDistance; } -void ConstraintC2CDistance::rescale(double coef) -{ - scale = coef * 1; -} - void ConstraintC2CDistance::errorgrad(double* err, double* grad, double* param) { if (pvecChangedFlag) { @@ -3282,36 +2925,14 @@ void ConstraintC2CDistance::errorgrad(double* err, double* grad, double* param) } } -double ConstraintC2CDistance::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintC2CDistance::grad(double* param) -{ - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - // -------------------------------------------------------- // ConstraintC2LDistance ConstraintC2LDistance::ConstraintC2LDistance(Circle& c, Line& l, double* d) + : circle(c) + , line(l) { - this->d = d; pvec.push_back(d); - - this->circle = c; this->circle.PushOwnParams(pvec); - - this->line = l; this->line.PushOwnParams(pvec); origpvec = pvec; @@ -3324,11 +2945,6 @@ ConstraintType ConstraintC2LDistance::getTypeId() return C2LDistance; } -void ConstraintC2LDistance::rescale(double coef) -{ - scale = coef; -} - void ConstraintC2LDistance::ReconstructGeomPointers() { int i = 0; @@ -3386,36 +3002,14 @@ void ConstraintC2LDistance::errorgrad(double* err, double* grad, double* param) } } -double ConstraintC2LDistance::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintC2LDistance::grad(double* param) -{ - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - // -------------------------------------------------------- // ConstraintP2CDistance ConstraintP2CDistance::ConstraintP2CDistance(Point& p, Circle& c, double* d) + : circle(c) + , pt(p) { - this->d = d; pvec.push_back(d); - - this->circle = c; this->circle.PushOwnParams(pvec); - - this->pt = p; this->pt.PushOwnParams(pvec); origpvec = pvec; @@ -3428,11 +3022,6 @@ ConstraintType ConstraintP2CDistance::getTypeId() return P2CDistance; } -void ConstraintP2CDistance::rescale(double coef) -{ - scale = coef; -} - void ConstraintP2CDistance::ReconstructGeomPointers() { int i = 0; @@ -3477,33 +3066,12 @@ void ConstraintP2CDistance::errorgrad(double* err, double* grad, double* param) } } -double ConstraintP2CDistance::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintP2CDistance::grad(double* param) -{ - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - // -------------------------------------------------------- // ConstraintArcLength ConstraintArcLength::ConstraintArcLength(Arc& a, double* d) + : arc(a) { - this->d = d; pvec.push_back(d); - - this->arc = a; this->arc.PushOwnParams(pvec); origpvec = pvec; @@ -3524,11 +3092,6 @@ ConstraintType ConstraintArcLength::getTypeId() return ArcLength; } -void ConstraintArcLength::rescale(double coef) -{ - scale = coef; -} - void ConstraintArcLength::errorgrad(double* err, double* grad, double* param) { if (pvecChangedFlag) { @@ -3562,24 +3125,4 @@ void ConstraintArcLength::errorgrad(double* err, double* grad, double* param) } } -double ConstraintArcLength::error() -{ - double err; - errorgrad(&err, nullptr, nullptr); - return scale * err; -} - -double ConstraintArcLength::grad(double* param) -{ - if (findParamInPvec(param) == -1) { - return 0.0; - } - - double deriv; - errorgrad(nullptr, &deriv, param); - - return deriv * scale; -} - - } // namespace GCS diff --git a/src/Mod/Sketcher/App/planegcs/Constraints.h b/src/Mod/Sketcher/App/planegcs/Constraints.h index 52d8d0ac36..e9512e51e9 100644 --- a/src/Mod/Sketcher/App/planegcs/Constraints.h +++ b/src/Mod/Sketcher/App/planegcs/Constraints.h @@ -133,7 +133,7 @@ public: virtual ~Constraint() {} - inline VEC_pD params() + VEC_pD params() { return pvec; } @@ -167,10 +167,38 @@ public: return internalAlignment; } + virtual ConstraintType getTypeId(); virtual void rescale(double coef = 1.); - virtual double error(); - virtual double grad(double*); + + // error and gradient combined. Values are returned through pointers. + virtual void errorgrad(double* err, double* grad, double* param) + { + (void)param; + if (err) { + *err = 0.; + } + if (grad) { + *grad = 0.; + } + }; + virtual double error() + { + double err; + errorgrad(&err, nullptr, nullptr); + return scale * err; + }; + virtual double grad(double* param) + { + if (findParamInPvec(param) == -1) { + return 0.0; + } + + double deriv; + errorgrad(nullptr, &deriv, param); + + return deriv * scale; + }; // virtual void grad(MAP_pD_D &deriv); --> TODO: vectorized grad version virtual double maxStep(MAP_pD_D& dir, double lim = 1.); // Finds first occurrence of param in pvec. This is useful to test if a constraint depends @@ -185,11 +213,11 @@ class ConstraintEqual: public Constraint { private: double ratio; - inline double* param1() + double* param1() { return pvec[0]; } - inline double* param2() + double* param2() { return pvec[1]; } @@ -197,7 +225,6 @@ private: public: ConstraintEqual(double* p1, double* p2, double p1p2ratio = 1.0); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; }; @@ -205,11 +232,11 @@ public: // Center of Gravity class ConstraintCenterOfGravity: public Constraint { - inline double* thecenter() + double* thecenter() { return pvec[0]; } - inline double* pointat(size_t i) + double* pointat(size_t i) { return pvec[1 + i]; } @@ -222,7 +249,6 @@ public: ConstraintCenterOfGravity(const std::vector& givenpvec, const std::vector& givenweights); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; @@ -234,15 +260,15 @@ private: // Weighted Linear Combination class ConstraintWeightedLinearCombination: public Constraint { - inline double* thepoint() + double* thepoint() { return pvec[0]; } - inline double* poleat(size_t i) + double* poleat(size_t i) { return pvec[1 + i]; } - inline double* weightat(size_t i) + double* weightat(size_t i) { return pvec[1 + numpoles + i]; } @@ -264,7 +290,6 @@ public: const std::vector& givenpvec, const std::vector& givenfactors); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; @@ -277,31 +302,31 @@ private: class ConstraintSlopeAtBSplineKnot: public Constraint { private: - inline double* polexat(size_t i) + double* polexat(size_t i) { return pvec[i]; } - inline double* poleyat(size_t i) + double* poleyat(size_t i) { return pvec[numpoles + i]; } - inline double* weightat(size_t i) + double* weightat(size_t i) { return pvec[2 * numpoles + i]; } - inline double* linep1x() + double* linep1x() { return pvec[3 * numpoles + 0]; } - inline double* linep1y() + double* linep1y() { return pvec[3 * numpoles + 1]; } - inline double* linep2x() + double* linep2x() { return pvec[3 * numpoles + 2]; } - inline double* linep2y() + double* linep2y() { return pvec[3 * numpoles + 3]; } @@ -325,20 +350,20 @@ private: class ConstraintPointOnBSpline: public Constraint { private: - inline double* thepoint() + double* thepoint() { return pvec[0]; } // TODO: better name because param has a different meaning here? - inline double* theparam() + double* theparam() { return pvec[1]; } - inline double* poleat(size_t i) + double* poleat(size_t i) { return pvec[2 + (startpole + i) % bsp.poles.size()]; } - inline double* weightat(size_t i) + double* weightat(size_t i) { return pvec[2 + bsp.poles.size() + (startpole + i) % bsp.weights.size()]; } @@ -349,7 +374,6 @@ public: /// coordidx = 0 if x, 1 if y ConstraintPointOnBSpline(double* point, double* initparam, int coordidx, BSpline& b); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; size_t numpoints; @@ -361,15 +385,15 @@ public: class ConstraintDifference: public Constraint { private: - inline double* param1() + double* param1() { return pvec[0]; } - inline double* param2() + double* param2() { return pvec[1]; } - inline double* difference() + double* difference() { return pvec[2]; } @@ -377,7 +401,6 @@ private: public: ConstraintDifference(double* p1, double* p2, double* d); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; }; @@ -386,23 +409,23 @@ public: class ConstraintP2PDistance: public Constraint { private: - inline double* p1x() + double* p1x() { return pvec[0]; } - inline double* p1y() + double* p1y() { return pvec[1]; } - inline double* p2x() + double* p2x() { return pvec[2]; } - inline double* p2y() + double* p2y() { return pvec[3]; } - inline double* distance() + double* distance() { return pvec[4]; } @@ -410,11 +433,10 @@ private: public: ConstraintP2PDistance(Point& p1, Point& p2, double* d); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintP2PDistance() + ConstraintP2PDistance() {} #endif ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; double maxStep(MAP_pD_D& dir, double lim = 1.) override; @@ -424,23 +446,23 @@ public: class ConstraintP2PAngle: public Constraint { private: - inline double* p1x() + double* p1x() { return pvec[0]; } - inline double* p1y() + double* p1y() { return pvec[1]; } - inline double* p2x() + double* p2x() { return pvec[2]; } - inline double* p2y() + double* p2y() { return pvec[3]; } - inline double* angle() + double* angle() { return pvec[4]; } @@ -449,11 +471,10 @@ private: public: ConstraintP2PAngle(Point& p1, Point& p2, double* a, double da_ = 0.); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintP2PAngle() + ConstraintP2PAngle() {} #endif ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; double maxStep(MAP_pD_D& dir, double lim = 1.) override; @@ -463,31 +484,31 @@ public: class ConstraintP2LDistance: public Constraint { private: - inline double* p0x() + double* p0x() { return pvec[0]; } - inline double* p0y() + double* p0y() { return pvec[1]; } - inline double* p1x() + double* p1x() { return pvec[2]; } - inline double* p1y() + double* p1y() { return pvec[3]; } - inline double* p2x() + double* p2x() { return pvec[4]; } - inline double* p2y() + double* p2y() { return pvec[5]; } - inline double* distance() + double* distance() { return pvec[6]; } @@ -495,11 +516,10 @@ private: public: ConstraintP2LDistance(Point& p, Line& l, double* d); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintP2LDistance() + ConstraintP2LDistance() {} #endif ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; double maxStep(MAP_pD_D& dir, double lim = 1.) override; @@ -510,27 +530,27 @@ public: class ConstraintPointOnLine: public Constraint { private: - inline double* p0x() + double* p0x() { return pvec[0]; } - inline double* p0y() + double* p0y() { return pvec[1]; } - inline double* p1x() + double* p1x() { return pvec[2]; } - inline double* p1y() + double* p1y() { return pvec[3]; } - inline double* p2x() + double* p2x() { return pvec[4]; } - inline double* p2y() + double* p2y() { return pvec[5]; } @@ -539,11 +559,10 @@ public: ConstraintPointOnLine(Point& p, Line& l); ConstraintPointOnLine(Point& p, Point& lp1, Point& lp2); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintPointOnLine() + ConstraintPointOnLine() {} #endif ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; }; @@ -552,78 +571,74 @@ public: class ConstraintPointOnPerpBisector: public Constraint { private: - inline double* p0x() + double* p0x() { return pvec[0]; } - inline double* p0y() + double* p0y() { return pvec[1]; } - inline double* p1x() + double* p1x() { return pvec[2]; } - inline double* p1y() + double* p1y() { return pvec[3]; } - inline double* p2x() + double* p2x() { return pvec[4]; } - inline double* p2y() + double* p2y() { return pvec[5]; } - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; public: ConstraintPointOnPerpBisector(Point& p, Line& l); ConstraintPointOnPerpBisector(Point& p, Point& lp1, Point& lp2); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintPointOnPerpBisector() {}; + ConstraintPointOnPerpBisector() {}; #endif ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - - double error() override; - double grad(double*) override; }; // Parallel class ConstraintParallel: public Constraint { private: - inline double* l1p1x() + double* l1p1x() { return pvec[0]; } - inline double* l1p1y() + double* l1p1y() { return pvec[1]; } - inline double* l1p2x() + double* l1p2x() { return pvec[2]; } - inline double* l1p2y() + double* l1p2y() { return pvec[3]; } - inline double* l2p1x() + double* l2p1x() { return pvec[4]; } - inline double* l2p1y() + double* l2p1y() { return pvec[5]; } - inline double* l2p2x() + double* l2p2x() { return pvec[6]; } - inline double* l2p2y() + double* l2p2y() { return pvec[7]; } @@ -631,7 +646,7 @@ private: public: ConstraintParallel(Line& l1, Line& l2); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintParallel() + ConstraintParallel() {} #endif ConstraintType getTypeId() override; @@ -644,35 +659,35 @@ public: class ConstraintPerpendicular: public Constraint { private: - inline double* l1p1x() + double* l1p1x() { return pvec[0]; } - inline double* l1p1y() + double* l1p1y() { return pvec[1]; } - inline double* l1p2x() + double* l1p2x() { return pvec[2]; } - inline double* l1p2y() + double* l1p2y() { return pvec[3]; } - inline double* l2p1x() + double* l2p1x() { return pvec[4]; } - inline double* l2p1y() + double* l2p1y() { return pvec[5]; } - inline double* l2p2x() + double* l2p2x() { return pvec[6]; } - inline double* l2p2y() + double* l2p2y() { return pvec[7]; } @@ -681,7 +696,7 @@ public: ConstraintPerpendicular(Line& l1, Line& l2); ConstraintPerpendicular(Point& l1p1, Point& l1p2, Point& l2p1, Point& l2p2); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintPerpendicular() + ConstraintPerpendicular() {} #endif ConstraintType getTypeId() override; @@ -694,39 +709,39 @@ public: class ConstraintL2LAngle: public Constraint { private: - inline double* l1p1x() + double* l1p1x() { return pvec[0]; } - inline double* l1p1y() + double* l1p1y() { return pvec[1]; } - inline double* l1p2x() + double* l1p2x() { return pvec[2]; } - inline double* l1p2y() + double* l1p2y() { return pvec[3]; } - inline double* l2p1x() + double* l2p1x() { return pvec[4]; } - inline double* l2p1y() + double* l2p1y() { return pvec[5]; } - inline double* l2p2x() + double* l2p2x() { return pvec[6]; } - inline double* l2p2y() + double* l2p2y() { return pvec[7]; } - inline double* angle() + double* angle() { return pvec[8]; } @@ -735,11 +750,10 @@ public: ConstraintL2LAngle(Line& l1, Line& l2, double* a); ConstraintL2LAngle(Point& l1p1, Point& l1p2, Point& l2p1, Point& l2p2, double* a); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintL2LAngle() + ConstraintL2LAngle() {} #endif ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; double maxStep(MAP_pD_D& dir, double lim = 1.) override; @@ -749,35 +763,35 @@ public: class ConstraintMidpointOnLine: public Constraint { private: - inline double* l1p1x() + double* l1p1x() { return pvec[0]; } - inline double* l1p1y() + double* l1p1y() { return pvec[1]; } - inline double* l1p2x() + double* l1p2x() { return pvec[2]; } - inline double* l1p2y() + double* l1p2y() { return pvec[3]; } - inline double* l2p1x() + double* l2p1x() { return pvec[4]; } - inline double* l2p1y() + double* l2p1y() { return pvec[5]; } - inline double* l2p2x() + double* l2p2x() { return pvec[6]; } - inline double* l2p2y() + double* l2p2y() { return pvec[7]; } @@ -786,11 +800,10 @@ public: ConstraintMidpointOnLine(Line& l1, Line& l2); ConstraintMidpointOnLine(Point& l1p1, Point& l1p2, Point& l2p1, Point& l2p2); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintMidpointOnLine() + ConstraintMidpointOnLine() {} #endif ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; }; @@ -799,27 +812,27 @@ public: class ConstraintTangentCircumf: public Constraint { private: - inline double* c1x() + double* c1x() { return pvec[0]; } - inline double* c1y() + double* c1y() { return pvec[1]; } - inline double* c2x() + double* c2x() { return pvec[2]; } - inline double* c2y() + double* c2y() { return pvec[3]; } - inline double* r1() + double* r1() { return pvec[4]; } - inline double* r2() + double* r2() { return pvec[5]; } @@ -832,17 +845,16 @@ public: double* rd2, bool internal_ = false); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintTangentCircumf(bool internal_) + ConstraintTangentCircumf(bool internal_) { internal = internal_; } #endif - inline bool getInternal() + bool getInternal() { return internal; }; ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; }; @@ -850,31 +862,31 @@ public: class ConstraintPointOnEllipse: public Constraint { private: - inline double* p1x() + double* p1x() { return pvec[0]; } - inline double* p1y() + double* p1y() { return pvec[1]; } - inline double* cx() + double* cx() { return pvec[2]; } - inline double* cy() + double* cy() { return pvec[3]; } - inline double* f1x() + double* f1x() { return pvec[4]; } - inline double* f1y() + double* f1y() { return pvec[5]; } - inline double* rmin() + double* rmin() { return pvec[6]; } @@ -883,11 +895,10 @@ public: ConstraintPointOnEllipse(Point& p, Ellipse& e); ConstraintPointOnEllipse(Point& p, ArcOfEllipse& a); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintPointOnEllipse() + ConstraintPointOnEllipse() {} #endif ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; }; @@ -899,15 +910,11 @@ private: Ellipse e; // writes pointers in pvec to the parameters of crv1, crv2 and poa void ReconstructGeomPointers(); - // error and gradient combined. Values are returned through pointers. - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; public: ConstraintEllipseTangentLine(Line& l, Ellipse& e); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; }; class ConstraintInternalAlignmentPoint2Ellipse: public Constraint @@ -917,13 +924,9 @@ public: Point& p1, InternalAlignmentType alignmentType); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; private: - // error and gradient combined. Values are returned through pointers. - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; // writes pointers in pvec to the parameters of crv1, crv2 and poa void ReconstructGeomPointers(); Ellipse e; @@ -938,13 +941,9 @@ public: Point& p1, InternalAlignmentType alignmentType); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; private: - // error and gradient combined. Values are returned through pointers. - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; // writes pointers in pvec to the parameters of crv1, crv2 and poa void ReconstructGeomPointers(); Hyperbola e; @@ -959,15 +958,11 @@ private: MajorRadiusConic* e2; // writes pointers in pvec to the parameters of crv1, crv2 and poa void ReconstructGeomPointers(); - // error and gradient combined. Values are returned through pointers. - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; public: ConstraintEqualMajorAxesConic(MajorRadiusConic* a1, MajorRadiusConic* a2); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; }; class ConstraintEqualFocalDistance: public Constraint @@ -977,31 +972,26 @@ private: ArcOfParabola* e2; // writes pointers in pvec to the parameters of crv1, crv2 and poa void ReconstructGeomPointers(); - // error and gradient combined. Values are returned through pointers. - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; public: ConstraintEqualFocalDistance(ArcOfParabola* a1, ArcOfParabola* a2); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; }; class ConstraintCurveValue: public Constraint { private: // defines, which coordinate of point is being constrained by this constraint - inline double* pcoord() + double* pcoord() { return pvec[2]; } - inline double* u() + double* u() { return pvec[3]; } - // error and gradient combined. Values are returned through pointers. - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; // writes pointers in pvec to the parameters of crv1, crv2 and poa void ReconstructGeomPointers(); Curve* crv; @@ -1019,9 +1009,6 @@ public: ConstraintCurveValue(Point& p, double* pcoord, Curve& crv, double* u); ~ConstraintCurveValue() override; ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; double maxStep(MAP_pD_D& dir, double lim = 1.) override; }; @@ -1029,31 +1016,31 @@ public: class ConstraintPointOnHyperbola: public Constraint { private: - inline double* p1x() + double* p1x() { return pvec[0]; } - inline double* p1y() + double* p1y() { return pvec[1]; } - inline double* cx() + double* cx() { return pvec[2]; } - inline double* cy() + double* cy() { return pvec[3]; } - inline double* f1x() + double* f1x() { return pvec[4]; } - inline double* f1y() + double* f1y() { return pvec[5]; } - inline double* rmin() + double* rmin() { return pvec[6]; } @@ -1062,11 +1049,10 @@ public: ConstraintPointOnHyperbola(Point& p, Hyperbola& e); ConstraintPointOnHyperbola(Point& p, ArcOfHyperbola& a); #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintPointOnHyperbola() + ConstraintPointOnHyperbola() {} #endif ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; }; @@ -1075,8 +1061,7 @@ public: class ConstraintPointOnParabola: public Constraint { private: - // error and gradient combined. Values are returned through pointers. - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; // writes pointers in pvec to the parameters of crv1, crv2 and poa void ReconstructGeomPointers(); Parabola* parab; @@ -1087,19 +1072,16 @@ public: ConstraintPointOnParabola(Point& p, ArcOfParabola& a); ~ConstraintPointOnParabola() override; #ifdef _GCS_EXTRACT_SOLVER_SUBSYSTEM_ - inline ConstraintPointOnParabola() + ConstraintPointOnParabola() {} #endif ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; }; class ConstraintAngleViaPoint: public Constraint { private: - inline double* angle() + double* angle() { return pvec[0]; }; @@ -1123,7 +1105,6 @@ public: ConstraintAngleViaPoint(Curve& acrv1, Curve& acrv2, Point p, double* angle); ~ConstraintAngleViaPoint() override; ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; }; @@ -1131,7 +1112,7 @@ public: class ConstraintAngleViaTwoPoints: public Constraint { private: - inline double* angle() + double* angle() { return pvec[0]; }; @@ -1158,7 +1139,6 @@ public: ConstraintAngleViaTwoPoints(Curve& acrv1, Curve& acrv2, Point p1, Point p2, double* angle); ~ConstraintAngleViaTwoPoints() override; ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; }; @@ -1167,11 +1147,11 @@ public: class ConstraintSnell: public Constraint { private: - inline double* n1() + double* n1() { return pvec[0]; }; - inline double* n2() + double* n2() { return pvec[1]; }; @@ -1192,8 +1172,7 @@ private: bool flipn1, flipn2; // writes pointers in pvec to the parameters of crv1, crv2 and poa void ReconstructGeomPointers(); - // error and gradient combined. Values are returned through pointers. - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; public: // n1dn2 = n1 divided by n2. from n1 to n2. flipn1 = true instructs to flip ray1's tangent @@ -1207,19 +1186,16 @@ public: bool flipn2); ~ConstraintSnell() override; ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; }; class ConstraintAngleViaPointAndParam: public Constraint { private: - inline double* angle() + double* angle() { return pvec[0]; }; - inline double* cparam() + double* cparam() { return pvec[3]; }; @@ -1247,7 +1223,6 @@ public: double* angle); ~ConstraintAngleViaPointAndParam() override; ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; }; @@ -1256,15 +1231,15 @@ public: class ConstraintAngleViaPointAndTwoParams: public Constraint { private: - inline double* angle() + double* angle() { return pvec[0]; }; - inline double* cparam1() + double* cparam1() { return pvec[3]; }; - inline double* cparam2() + double* cparam2() { return pvec[4]; }; @@ -1292,7 +1267,6 @@ public: double* angle); ~ConstraintAngleViaPointAndTwoParams() override; ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; double error() override; double grad(double*) override; }; @@ -1304,15 +1278,11 @@ private: Line l2; // writes pointers in pvec to the parameters of line1, line2 void ReconstructGeomPointers(); - // error and gradient combined. Values are returned through pointers. - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; public: ConstraintEqualLineLength(Line& l1, Line& l2); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; }; class ConstraintC2CDistance: public Constraint @@ -1320,22 +1290,17 @@ class ConstraintC2CDistance: public Constraint private: Circle c1; Circle c2; - double* d; - inline double* distance() + double* distance() { return pvec[0]; } // writes pointers in pvec to the parameters of c1, c2 void ReconstructGeomPointers(); - // error and gradient combined. Values are returned through pointers. - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; public: ConstraintC2CDistance(Circle& c1, Circle& c2, double* d); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; }; // C2LDistance @@ -1344,22 +1309,17 @@ class ConstraintC2LDistance: public Constraint private: Circle circle; Line line; - double* d; - inline double* distance() + double* distance() { return pvec[0]; } // writes pointers in pvec to the parameters of c, l void ReconstructGeomPointers(); - // error and gradient combined. Values are returned through pointers. - void errorgrad(double* err, double* grad, double* param); + void errorgrad(double* err, double* grad, double* param) override; public: ConstraintC2LDistance(Circle& c, Line& l, double* d); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; }; // P2CDistance @@ -1368,22 +1328,16 @@ class ConstraintP2CDistance: public Constraint private: Circle circle; Point pt; - double* d; - inline double* distance() + double* distance() { return pvec[0]; } void ReconstructGeomPointers(); // writes pointers in pvec to the parameters of c - void - errorgrad(double* err, - double* grad, - double* param); // error and gradient combined. Values are returned through pointers. + void errorgrad(double* err, double* grad, double* param) override; + public: ConstraintP2CDistance(Point& p, Circle& c, double* d); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; }; // ArcLength @@ -1391,22 +1345,16 @@ class ConstraintArcLength: public Constraint { private: Arc arc; - double* d; - inline double* distance() + double* distance() { return pvec[0]; } void ReconstructGeomPointers(); // writes pointers in pvec to the parameters of a - void - errorgrad(double* err, - double* grad, - double* param); // error and gradient combined. Values are returned through pointers. + void errorgrad(double* err, double* grad, double* param) override; + public: ConstraintArcLength(Arc& a, double* d); ConstraintType getTypeId() override; - void rescale(double coef = 1.) override; - double error() override; - double grad(double*) override; }; } // namespace GCS