Use relative tolerance for axis-parallel autoconstrainter.

This works better than absolute tolerance in display pixels
for small lines.
This commit is contained in:
EvilSpirit 2015-11-19 11:30:31 +06:00 committed by whitequark
parent c6194d439c
commit 3c917ebac9

View File

@ -1026,13 +1026,13 @@ GraphicsWindow::SuggestedConstraint GraphicsWindow::SuggestLineConstraint(hReque
ptA->PointGetExprsInWorkplane(ActiveWorkplane(), &au, &av); ptA->PointGetExprsInWorkplane(ActiveWorkplane(), &au, &av);
ptB->PointGetExprsInWorkplane(ActiveWorkplane(), &bu, &bv); ptB->PointGetExprsInWorkplane(ActiveWorkplane(), &bu, &bv);
Expr *du = au->Minus(bu); double du = au->Minus(bu)->Eval();
Expr *dv = av->Minus(bv); double dv = av->Minus(bv)->Eval();
const double TOLERANCE = 10.0; const double TOLERANCE_RATIO = 0.02;
if(fabs(du->Eval()) * scale < TOLERANCE) if(fabs(dv) > LENGTH_EPS && fabs(du / dv) < TOLERANCE_RATIO)
return SUGGESTED_VERTICAL; return SUGGESTED_VERTICAL;
else if(fabs(dv->Eval()) * scale < TOLERANCE) else if(fabs(du) > LENGTH_EPS && fabs(dv / du) < TOLERANCE_RATIO)
return SUGGESTED_HORIZONTAL; return SUGGESTED_HORIZONTAL;
else else
return SUGGESTED_NONE; return SUGGESTED_NONE;