// -------------------------------------------------------------------------------------------------------------------- // // Copyright (c) 2014 OxyPlot contributors // // -------------------------------------------------------------------------------------------------------------------- namespace ExampleLibrary { using System.Collections.Generic; using OxyPlot; using OxyPlot.Axes; [Examples("Custom axes"), Tags("Axes")] public static class CustomAxisExamples { public class ArrowAxis : LinearAxis { public override void Render(IRenderContext rc, int pass) { base.Render(rc, pass); var points = new List(); if (this.IsHorizontal()) { var xmax = this.Transform(this.ActualMaximum); points.Add(new ScreenPoint(xmax + 4, this.PlotModel.PlotArea.Bottom - 4)); points.Add(new ScreenPoint(xmax + 18, this.PlotModel.PlotArea.Bottom)); points.Add(new ScreenPoint(xmax + 4, this.PlotModel.PlotArea.Bottom + 4)); //// etc. } else { var ymax = this.Transform(this.ActualMaximum); points.Add(new ScreenPoint(this.PlotModel.PlotArea.Left - 4, ymax - 4)); points.Add(new ScreenPoint(this.PlotModel.PlotArea.Left, ymax - 18)); points.Add(new ScreenPoint(this.PlotModel.PlotArea.Left + 4, ymax - 4)); //// etc. } rc.DrawPolygon(points, OxyColors.Black, OxyColors.Undefined, 0, this.EdgeRenderingMode); } } [Example("ArrowAxis")] public static PlotModel CustomArrowAxis() { var model = new PlotModel { PlotAreaBorderThickness = new OxyThickness(0), PlotMargins = new OxyThickness(60, 60, 60, 60) }; model.Axes.Add(new ArrowAxis { Position = AxisPosition.Bottom, AxislineStyle = LineStyle.Solid }); model.Axes.Add(new ArrowAxis { Position = AxisPosition.Left, AxislineStyle = LineStyle.Solid }); return model; } } }