Sketcher Constraints: small code refactor
Unifying first checks in grad().
This commit is contained in:
parent
8660d9a914
commit
9cc2ff7944
|
@ -84,6 +84,18 @@ double Constraint::maxStep(MAP_pD_D &dir, double lim)
|
|||
return lim;
|
||||
}
|
||||
|
||||
int Constraint::findParamInPvec(double *param)
|
||||
{
|
||||
int ret = -1;
|
||||
for( int i=0 ; i<pvec.size() ; i++ ){
|
||||
if ( param == pvec[i] ) {
|
||||
ret = i;
|
||||
break;
|
||||
};
|
||||
};
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Equal
|
||||
ConstraintEqual::ConstraintEqual(double *p1, double *p2)
|
||||
{
|
||||
|
@ -1095,11 +1107,7 @@ double ConstraintEllipseTangentLine::error()
|
|||
double ConstraintEllipseTangentLine::grad(double *param)
|
||||
{
|
||||
//first of all, check that we need to compute anything.
|
||||
int i;
|
||||
for( i=0 ; i<pvec.size() ; i++ ){
|
||||
if ( param == pvec[i] ) break;
|
||||
};
|
||||
if ( i == pvec.size() ) return 0.0;
|
||||
if ( findParamInPvec(param) == -1 ) return 0.0;
|
||||
|
||||
double deriv;
|
||||
errorgrad(0, &deriv, param);
|
||||
|
@ -1225,11 +1233,7 @@ double ConstraintInternalAlignmentPoint2Ellipse::error()
|
|||
double ConstraintInternalAlignmentPoint2Ellipse::grad(double *param)
|
||||
{
|
||||
//first of all, check that we need to compute anything.
|
||||
int i;
|
||||
for( i=0 ; i<pvec.size() ; i++ ){
|
||||
if ( param == pvec[i] ) break;
|
||||
};
|
||||
if ( i == pvec.size() ) return 0.0;
|
||||
if ( findParamInPvec(param) == -1 ) return 0.0;
|
||||
|
||||
double deriv;
|
||||
errorgrad(0, &deriv, param);
|
||||
|
@ -1308,11 +1312,7 @@ double ConstraintEqualMajorAxesEllipse::error()
|
|||
double ConstraintEqualMajorAxesEllipse::grad(double *param)
|
||||
{
|
||||
//first of all, check that we need to compute anything.
|
||||
int i;
|
||||
for( i=0 ; i<pvec.size() ; i++ ){
|
||||
if ( param == pvec[i] ) break;
|
||||
};
|
||||
if ( i == pvec.size() ) return 0.0;
|
||||
if ( findParamInPvec(param) == -1 ) return 0.0;
|
||||
|
||||
double deriv;
|
||||
errorgrad(0, &deriv, param);
|
||||
|
@ -1398,11 +1398,7 @@ double ConstraintEllipticalArcRangeToEndPoints::error()
|
|||
double ConstraintEllipticalArcRangeToEndPoints::grad(double *param)
|
||||
{
|
||||
//first of all, check that we need to compute anything.
|
||||
int i;
|
||||
for( i=0 ; i<pvec.size() ; i++ ){
|
||||
if ( param == pvec[i] ) break;
|
||||
};
|
||||
if ( i == pvec.size() ) return 0.0;
|
||||
if ( findParamInPvec(param) == -1 ) return 0.0;
|
||||
|
||||
double deriv;
|
||||
errorgrad(0, &deriv, param);
|
||||
|
@ -1502,11 +1498,7 @@ double ConstraintAngleViaPoint::error()
|
|||
double ConstraintAngleViaPoint::grad(double *param)
|
||||
{
|
||||
//first of all, check that we need to compute anything.
|
||||
int i;
|
||||
for( i=0 ; i<pvec.size() ; i++ ){
|
||||
if ( param == pvec[i] ) break;
|
||||
};
|
||||
if ( i == pvec.size() ) return 0.0;
|
||||
if ( findParamInPvec(param) == -1 ) return 0.0;
|
||||
|
||||
double deriv=0.;
|
||||
|
||||
|
@ -1622,11 +1614,7 @@ double ConstraintSnell::grad(double *param)
|
|||
{
|
||||
|
||||
//first of all, check that we need to compute anything.
|
||||
int i;
|
||||
for( i=0 ; i<pvec.size() ; i++ ){
|
||||
if ( param == pvec[i] ) break;
|
||||
};
|
||||
if ( i == pvec.size() ) return 0.0;
|
||||
if ( findParamInPvec(param) == -1 ) return 0.0;
|
||||
|
||||
double deriv;
|
||||
errorgrad(0, &deriv, param);
|
||||
|
|
|
@ -94,6 +94,7 @@ namespace GCS
|
|||
virtual double grad(double *);
|
||||
// virtual void grad(MAP_pD_D &deriv); --> TODO: vectorized grad version
|
||||
virtual double maxStep(MAP_pD_D &dir, double lim=1.);
|
||||
int findParamInPvec(double* param);//finds first occurence of param in pvec. This is useful to test if a constraint depends on the parameter (it may not actually depend on it, e.g. angle-via-point doesn't depend on ellipse's b (radmin), but b will be included within the constraint anyway. Returns -1 if not found.
|
||||
};
|
||||
|
||||
// Equal
|
||||
|
|
Loading…
Reference in New Issue
Block a user