public override void MoveBarInDirection(MovementDirection movementDirection, float distance, CaliperComponent component) { CaliperComponent adjustedComponent = MoveCrossbarInsteadOfSideBar(movementDirection, component) ? CaliperComponent.Apex : component; if (adjustedComponent == CaliperComponent.Apex) { base.MoveBarInDirection(movementDirection, distance, CaliperComponent.CrossBar); } // TODO: test this // We use smaller increments for angle calipers, otherwise movement is too large. distance = distance / 2.0f; if (movementDirection == MovementDirection.Left) { distance = -distance; } switch (adjustedComponent) { case CaliperComponent.LeftBar: angleBar1 -= (float)(DegreesToRadians(distance)); break; case CaliperComponent.RightBar: angleBar2 -= (float)(DegreesToRadians(distance)); break; default: break; } }
// NB: Window coordinates origin are upper left corner, like iOS, not like macOS public virtual void MoveBarInDirection(MovementDirection movementDirection, float distance, CaliperComponent component) { if (component == CaliperComponent.NoComponent) { return; } CaliperComponent adjustedComponent = MoveCrossbarInsteadOfSideBar(movementDirection, component) ? CaliperComponent.CrossBar : component; if (adjustedComponent == CaliperComponent.CrossBar) { MoveCrossbarInDirection(movementDirection, distance); return; } if (movementDirection == MovementDirection.Up || movementDirection == MovementDirection.Left) { distance = -distance; } // TODO: make sure directions are correct, c.f. iOS version switch (adjustedComponent) { case CaliperComponent.LeftBar: case CaliperComponent.UpperBar: Bar1Position += distance; break; case CaliperComponent.RightBar: case CaliperComponent.LowerBar: Bar2Position += distance; break; default: break; } }
public static String ComponentName(CaliperComponent component) { switch (component) { case CaliperComponent.LeftBar: return("left bar"); case CaliperComponent.RightBar: return("right bar"); case CaliperComponent.CrossBar: return("crossbar"); case CaliperComponent.UpperBar: return("upper bar"); case CaliperComponent.LowerBar: return("lower bar"); case CaliperComponent.Apex: return("apex"); default: return("unknown component"); } }
protected bool MoveCrossbarInsteadOfSideBar(MovementDirection movementDirection, CaliperComponent component) { if (component == CaliperComponent.CrossBar || component == CaliperComponent.Apex) { return(false); } return((Direction == CaliperDirection.Horizontal && (movementDirection == MovementDirection.Up || movementDirection == MovementDirection.Down)) || (Direction == CaliperDirection.Vertical && (movementDirection == MovementDirection.Left || movementDirection == MovementDirection.Right))); }