#2050 Added Marker Line Style for Line Series by KeithBrio · Pull Request #2051 · oxyplot/oxyplot · GitHub
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 53 additions & 3 deletions Source/Examples/ExampleLibrary/Series/LineSeriesExamples.cs
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,6 @@ public static PlotModel MarkerTypes()
ls.MarkerStroke = OxyColors.Black;
ls.MarkerFill = OxyColors.Green;
ls.MarkerType = (MarkerType)i++;
ls.Title = ls.MarkerType.ToString();
}

return pm;
Expand Down Expand Up @@ -380,8 +379,6 @@ public static PlotModel CatmullRomInterpolation()
[Example("Marker color options")]
public static PlotModel MarkerColorOptions()
{
var result = CreateRandomPoints();

var model = new PlotModel { Title = "Marker color options" };

// Dont specify line or marker color. Defaults will be used.
Expand Down Expand Up @@ -411,6 +408,59 @@ public static PlotModel MarkerColorOptions()
return model;
}

[Example("Marker line style")]
public static PlotModel MarkerLineStyle()
{
var model = new PlotModel { Title = "Marker line style" };

var l = new Legend
{
LegendBackground = OxyColor.FromAColor(220, OxyColors.White),
LegendBorder = OxyColors.Black,
LegendBorderThickness = 1.0
};
model.Legends.Add(l);

// Don't specify line style. Defaults will be used.
var s1 = CreateExampleLineSeries(1);
s1.MarkerType = MarkerType.Circle;
s1.MarkerStroke = OxyColors.DarkCyan;
s1.MarkerStrokeThickness = 2;
s1.MarkerSize = 8;
model.Series.Add(s1);

// Specify line style. Specified line style should be used.
var s2 = CreateExampleLineSeries(4);
s2.MarkerType = MarkerType.Square;
s2.Color = OxyColors.LightBlue;
s2.MarkerStroke = OxyColors.DarkBlue;
s2.MarkerStrokeThickness = 2;
s2.MarkerSize = 8;
s2.MarkerLineStyle = LineStyle.Dot;
model.Series.Add(s2);

var s3 = CreateExampleLineSeries(13);
s3.MarkerType = MarkerType.Diamond;
s3.MarkerFill = OxyColors.Black;
s3.MarkerStroke = OxyColors.HotPink;
s3.MarkerStrokeThickness = 2;
s3.MarkerSize = 8;
s3.MarkerLineStyle = LineStyle.Dot;
model.Series.Add(s3);

var s4 = CreateExampleLineSeries(5);
s4.MarkerType = MarkerType.Triangle;
s4.MarkerFill = OxyColors.OrangeRed;
s4.Color = OxyColors.Orange;
s4.MarkerStroke = OxyColors.DarkRed;
s4.MarkerStrokeThickness = 2;
s4.MarkerSize = 8;
s4.MarkerLineStyle = LineStyle.Dot;
model.Series.Add(s4);

return model;
}

private static List<DataPoint> CreateRandomPoints(int numberOfPoints = 50)
{
var r = new Random(13);
Expand Down
8 changes: 4 additions & 4 deletions Source/Examples/PerformanceTest/EmptyRenderContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ public void CleanUp()
}

/// <inheritdoc/>
public void DrawEllipse(OxyRect extents, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public void DrawEllipse(OxyRect extents, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
}

/// <inheritdoc/>
public void DrawEllipses(IList<OxyRect> extents, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public void DrawEllipses(IList<OxyRect> extents, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
}

Expand Down Expand Up @@ -75,12 +75,12 @@ public void DrawPolygons(IList<IList<ScreenPoint>> polygons, OxyColor fill, OxyC
}

/// <inheritdoc/>
public void DrawRectangle(OxyRect rectangle, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public void DrawRectangle(OxyRect rectangle, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray)
{
}

/// <inheritdoc/>
public void DrawRectangles(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public void DrawRectangles(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray)
{
}

Expand Down
4 changes: 2 additions & 2 deletions Source/OxyPlot.Pdf/PdfRenderContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public void Dispose()
}

/// <inheritdoc/>
public override void DrawEllipse(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public override void DrawEllipse(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
this.SetSmoothingMode(this.ShouldUseAntiAliasingForEllipse(edgeRenderingMode));

Expand Down Expand Up @@ -179,7 +179,7 @@ public override void DrawPolygon(
}

/// <inheritdoc/>
public override void DrawRectangle(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public override void DrawRectangle(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
this.SetSmoothingMode(this.ShouldUseAntiAliasingForRect(edgeRenderingMode));
if (fill.IsVisible())
Expand Down
8 changes: 4 additions & 4 deletions Source/OxyPlot.SkiaSharp/SkiaRenderContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public void Dispose()
}

/// <inheritdoc/>
public void DrawEllipse(OxyRect extents, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public void DrawEllipse(OxyRect extents, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
if (!fill.IsVisible() && !(stroke.IsVisible() || thickness <= 0))
{
Expand All @@ -110,7 +110,7 @@ public void DrawEllipse(OxyRect extents, OxyColor fill, OxyColor stroke, double
}

/// <inheritdoc/>
public void DrawEllipses(IList<OxyRect> extents, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public void DrawEllipses(IList<OxyRect> extents, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
if (!fill.IsVisible() && (!stroke.IsVisible() || thickness <= 0))
{
Expand Down Expand Up @@ -315,7 +315,7 @@ public void DrawPolygons(
}

/// <inheritdoc/>
public void DrawRectangle(OxyRect rectangle, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public void DrawRectangle(OxyRect rectangle, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
if (!fill.IsVisible() && !(stroke.IsVisible() || thickness <= 0))
{
Expand All @@ -338,7 +338,7 @@ public void DrawRectangle(OxyRect rectangle, OxyColor fill, OxyColor stroke, dou
}

/// <inheritdoc/>
public void DrawRectangles(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public void DrawRectangles(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused parameter (issue throughout file)

@KeithBrio KeithBrio Nov 15, 2023 •

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@VisualMelon What would your expectation to solve this be here to solve this?

Add a new specific method on IRenderContext and use it appropriately in calling classes?

As I noted initially, I hacked into these changes for my personal project years ago, and not familiar with the architecture or the design philosophy, so any direction is greatly appreciated.

{
if (!fill.IsVisible() && !(stroke.IsVisible() || thickness <= 0) || rectangles.Count == 0)
{
Expand Down
16 changes: 8 additions & 8 deletions Source/OxyPlot.Wpf/CanvasRenderContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,21 +99,21 @@ public CanvasRenderContext(Canvas canvas)
public TextFormattingMode TextFormattingMode { get; set; }

///<inheritdoc/>
public override void DrawEllipse(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public override void DrawEllipse(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
this.DrawEllipses(new[] { rect }, fill, stroke, thickness, edgeRenderingMode);
this.DrawEllipses(new[] { rect }, fill, stroke, thickness, edgeRenderingMode, dashArray);
}

///<inheritdoc/>
public override void DrawEllipses(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public override void DrawEllipses(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
if (rectangles.Count == 0)
{
return;
}

var path = this.CreateAndAdd<Path>();
this.SetStroke(path, stroke, thickness, edgeRenderingMode);
this.SetStroke(path, stroke, thickness, edgeRenderingMode, LineJoin.Miter, dashArray);
if (!fill.IsUndefined())
{
path.Fill = this.GetCachedBrush(fill);
Expand Down Expand Up @@ -263,21 +263,21 @@ public override void DrawPolygons(
}

///<inheritdoc/>
public override void DrawRectangle(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public override void DrawRectangle(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
this.DrawRectangles(new[] { rect }, fill, stroke, thickness, edgeRenderingMode);
this.DrawRectangles(new[] { rect }, fill, stroke, thickness, edgeRenderingMode, dashArray);
}

///<inheritdoc/>
public override void DrawRectangles(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public override void DrawRectangles(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
if (rectangles.Count == 0)
{
return;
}

var path = this.CreateAndAdd<Path>();
this.SetStroke(path, stroke, thickness, edgeRenderingMode);
this.SetStroke(path, stroke, thickness, edgeRenderingMode, LineJoin.Miter, dashArray);
if (!fill.IsUndefined())
{
path.Fill = this.GetCachedBrush(fill);
Expand Down
4 changes: 2 additions & 2 deletions Source/OxyPlot.Wpf/XamlRenderContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public XamlRenderContext(Canvas canvas) : base(canvas)
public double BalancedLineDrawingThicknessLimit { get; set; }

///<inheritdoc/>
public override void DrawEllipses(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public override void DrawEllipses(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
if (rectangles.Count == 0)
{
Expand Down Expand Up @@ -224,7 +224,7 @@ public override void DrawPolygons(
}

///<inheritdoc/>
public override void DrawRectangles(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
public override void DrawRectangles(IList<OxyRect> rectangles, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
if (rectangles.Count == 0)
{
Expand Down
13 changes: 12 additions & 1 deletion Source/OxyPlot/Annotations/PointAnnotation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,17 @@ public PointAnnotation()
/// <value>The shape.</value>
public MarkerType Shape { get; set; }

/// <summary>
/// Gets or sets the marker line style. The default is <see cref="OxyPlot.LineStyle.Automatic" />.
/// </summary>
/// <value>The line style.</value>
public LineStyle MarkerLineStyle { get; set; }

/// <summary>
/// Gets the actual dash array for the marker.
/// </summary>
protected double[]? ActualMarkerDashArray => this.MarkerLineStyle.GetDashArray();

/// <summary>
/// Gets or sets a custom polygon outline for the point marker. Set <see cref="Shape" /> to <see cref="MarkerType.Custom" /> to use this property.
/// </summary>
Expand All @@ -71,7 +82,7 @@ public override void Render(IRenderContext rc)

this.screenPosition = this.Transform(this.X, this.Y);

rc.DrawMarker(this.screenPosition, this.Shape, this.CustomOutline, this.Size, this.Fill, this.Stroke, this.StrokeThickness, this.EdgeRenderingMode);
rc.DrawMarker(this.screenPosition, this.Shape, this.CustomOutline, this.Size, this.Fill, this.Stroke, this.StrokeThickness, this.EdgeRenderingMode, this.ActualMarkerDashArray);

if (this.Text != null &&
!string.IsNullOrEmpty(this.Text))
Expand Down
6 changes: 4 additions & 2 deletions Source/OxyPlot/Pdf/PdfRenderContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ public void Save(Stream s)
/// <param name="stroke">The stroke color.</param>
/// <param name="thickness">The thickness.</param>
/// <param name="edgeRenderingMode">The edge rendering mode. This is not supported and will be ignored.</param>
public override void DrawEllipse(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
/// <param name="dashArray">The dash array.</param>
public override void DrawEllipse(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray)
{
var isStroked = stroke.IsVisible() && thickness > 0;
var isFilled = fill.IsVisible();
Expand Down Expand Up @@ -208,7 +209,8 @@ public override void DrawPolygon(
/// <param name="stroke">The stroke color.</param>
/// <param name="thickness">The stroke thickness.</param>
/// <param name="edgeRenderingMode">The edge rendering mode. This is not supported and will be ignored.</param>
public override void DrawRectangle(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode)
/// <param name="dashArray">The dash array.</param>
public override void DrawRectangle(OxyRect rect, OxyColor fill, OxyColor stroke, double thickness, EdgeRenderingMode edgeRenderingMode, double[] dashArray = null)
{
var isStroked = stroke.IsVisible() && thickness > 0;
var isFilled = fill.IsVisible();
Expand Down
12 changes: 8 additions & 4 deletions Source/OxyPlot/Rendering/RenderContext/IRenderContext.cs
Loading