Matrix ProjectionForAxis(Rect area, double scale) { switch (Side) { case Side.Bottom: return(MatrixSupport.ProjectionFor(area.Left, area.Top + AxisMargin, scale, 1)); case Side.Top: return(MatrixSupport.ProjectionFor(area.Left, area.Bottom - AxisMargin, scale, 1)); case Side.Left: return(MatrixSupport.ProjectionFor(area.Right - AxisMargin, area.Top, 1, scale)); case Side.Right: return(MatrixSupport.ProjectionFor(area.Left + AxisMargin, area.Top, 1, scale)); default: throw new NotImplementedException($"Not Implemented: {Side}"); } }
Matrix ProjectionFor(Rect area, bool reverse = false) { switch (Side) { case Side.Bottom: return(MatrixSupport.ProjectionFor( reverse ? area.Right : area.Left, area.Top + AxisLineThickness + 2 * AxisMargin, reverse ? -1 : 1, 1 )); case Side.Top: return(MatrixSupport.ProjectionFor( reverse ? area.Right : area.Left, area.Top + AxisLineThickness + 2 * AxisMargin, reverse ? -1 : 1, -1 )); case Side.Left: return(MatrixSupport.ProjectionFor( area.Right, area.Top, -area.Width - AxisLineThickness - 2 * AxisMargin, reverse ? -1 : 1 )); case Side.Right: return(MatrixSupport.ProjectionFor( area.Left + AxisLineThickness + 2 * AxisMargin, area.Top, 1, reverse ? -1 : 1 )); default: throw new NotImplementedException($"Not Implemented: {Side}"); } }