Files
DynamicDataDisplay/PointMarkers/TrianglePointMarker.cs
2024-02-23 00:46:06 -05:00

50 lines
1.7 KiB
C#

using System.Windows;
using System.Windows.Media;
using System;
namespace Microsoft.Research.DynamicDataDisplay.PointMarkers
{
/// <summary>Class that renders triangular marker at every point of graph</summary>
public class TrianglePointMarker : ShapePointMarker
{
public override void Render(DrawingContext dc, Point screenPoint)
{
Point? pt0 = null;
Point? pt1 = null;
Point? pt2 = null;
if (Orientation.Equals("up"))
{
pt0 = Point.Add(screenPoint, new Vector(-Size / 2, Size / 2));
pt1 = Point.Add(screenPoint, new Vector(0, -Size / 2));
pt2 = Point.Add(screenPoint, new Vector(Size / 2, Size / 2));
}
else
{
pt0 = Point.Add(screenPoint, new Vector(-Size / 2, -Size / 2));
pt1 = Point.Add(screenPoint, new Vector(0, Size / 2));
pt2 = Point.Add(screenPoint, new Vector(Size / 2, -Size / 2));
}
StreamGeometry streamGeom = new StreamGeometry();
using (var context = streamGeom.Open()) {
context.BeginFigure(pt0.Value, true, true);
context.LineTo(pt1.Value, true, true);
context.LineTo(pt2.Value, true, true);
}
dc.DrawGeometry(Fill, Pen, streamGeom);
}
public String Orientation
{
get { return (String)GetValue(OrientationProperty); }
set { SetValue(OrientationProperty, value); }
}
public static readonly DependencyProperty OrientationProperty =
DependencyProperty.Register(
"Orientation",
typeof(String),
typeof(TrianglePointMarker),
new FrameworkPropertyMetadata("up")
);
}
}