本文整理汇总了C#中IRenderContext.DrawMarkers方法的典型用法代码示例。如果您正苦于以下问题:C# IRenderContext.DrawMarkers方法的具体用法?C# IRenderContext.DrawMarkers怎么用?C# IRenderContext.DrawMarkers使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IRenderContext
的用法示例。
在下文中一共展示了IRenderContext.DrawMarkers方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: RenderPoints
/// <summary>
/// Renders the transformed points.
/// </summary>
/// <param name="rc">
/// The render context.
/// </param>
/// <param name="clippingRect">
/// The clipping rect.
/// </param>
/// <param name="pointsToRender">
/// The points to render.
/// </param>
protected void RenderPoints(IRenderContext rc, OxyRect clippingRect, IList<ScreenPoint> pointsToRender)
{
var screenPoints = pointsToRender;
if (this.Smooth)
{
// spline smoothing (should only be used on small datasets)
var resampledPoints = ScreenPointHelper.ResamplePoints(pointsToRender, this.MinimumSegmentLength);
screenPoints = CanonicalSplineHelper.CreateSpline(resampledPoints, 0.5, null, false, 0.25);
}
// clip the line segments with the clipping rectangle
if (this.StrokeThickness > 0 && this.ActualLineStyle != LineStyle.None)
{
this.RenderSmoothedLine(rc, clippingRect, screenPoints);
}
if (this.MarkerType != MarkerType.None)
{
rc.DrawMarkers(
pointsToRender,
clippingRect,
this.MarkerType,
this.MarkerOutline,
new[] { this.MarkerSize },
this.MarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness);
}
}
示例2: Render
/// <summary>
/// Renders the LineSeries on the specified rendering context.
/// </summary>
/// <param name="rc">The rendering context.</param>
/// <param name="model">The owner plot model.</param>
public override void Render(IRenderContext rc, PlotModel model)
{
if (this.ActualPoints.Count == 0)
{
return;
}
this.VerifyAxes();
double minDistSquared = this.MinimumSegmentLength * this.MinimumSegmentLength;
var clippingRect = this.GetClippingRect();
// Transform all points to screen coordinates
// Render the line when invalid points occur
var dashArray = this.ActualDashArray;
var actualColor = this.GetSelectableColor(this.ActualColor);
var points = new ScreenPoint[2];
var markerPoints = this.MarkerType != MarkerType.None ? new List<ScreenPoint>(this.ActualPoints.Count) : null;
foreach (var point in this.ActualPoints)
{
if (!this.IsValidPoint(point))
{
continue;
}
points[0] = this.Transform(point.X, this.Base);
points[1] = this.Transform(point.X, point.Y);
if (this.StrokeThickness > 0 && this.ActualLineStyle != LineStyle.None)
{
rc.DrawClippedLine(
clippingRect,
points,
minDistSquared,
actualColor,
this.StrokeThickness,
dashArray,
this.LineJoin,
false);
}
if (markerPoints != null)
{
markerPoints.Add(points[1]);
}
}
if (this.MarkerType != MarkerType.None)
{
rc.DrawMarkers(
clippingRect,
markerPoints,
this.MarkerType,
this.MarkerOutline,
new[] { this.MarkerSize },
this.MarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness);
}
}
示例3: RenderLineAndMarkers
/// <summary>
/// Renders the transformed points as a line (smoothed if <see cref="LineSeries.Smooth"/> is <c>true</c>) and markers (if <see cref="MarkerType"/> is not <c>None</c>).
/// </summary>
/// <param name="rc">The render context.</param>
/// <param name="clippingRect">The clipping rectangle.</param>
/// <param name="pointsToRender">The points to render.</param>
protected virtual void RenderLineAndMarkers(IRenderContext rc, OxyRect clippingRect, IList<ScreenPoint> pointsToRender)
{
var screenPoints = pointsToRender;
if (this.Smooth)
{
// spline smoothing (should only be used on small datasets)
var resampledPoints = ScreenPointHelper.ResamplePoints(pointsToRender, this.MinimumSegmentLength);
screenPoints = CanonicalSplineHelper.CreateSpline(resampledPoints, 0.5, null, false, 0.25);
}
// clip the line segments with the clipping rectangle
if (this.StrokeThickness > 0 && this.ActualLineStyle != LineStyle.None)
{
this.RenderLine(rc, clippingRect, screenPoints);
}
if (this.MarkerType != MarkerType.None)
{
var markerBinOffset = this.MarkerResolution > 0 ? this.Transform(this.MinX, this.MinY) : default(ScreenPoint);
rc.DrawMarkers(
clippingRect,
pointsToRender,
this.MarkerType,
this.MarkerOutline,
new[] { this.MarkerSize },
this.ActualMarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness,
this.MarkerResolution,
markerBinOffset);
}
}
示例4: Render
/// <summary>
/// Renders the series on the specified rendering context.
/// </summary>
/// <param name="rc">The rendering context.</param>
public override void Render(IRenderContext rc)
{
if (Points.Count == 0)
{
return;
}
if (Points.Count % 2 != 0)
{
throw new InvalidOperationException("The number of points should be even.");
}
if (this.XAxis == null || this.YAxis == null)
{
throw new InvalidOperationException("Axis has not been defined.");
}
var clippingRect = GetClippingRect();
var screenPoints = Points.Select(this.Transform).ToList();
var verticalLines = new List<ScreenPoint>();
for (int i = 0; i < screenPoints.Count; i += 2)
{
if (screenPoints[i].DistanceToSquared(screenPoints[i + 1]) < this.StrokeThickness)
{
screenPoints[i] = new ScreenPoint(screenPoints[i].X - (this.StrokeThickness * 0.5), screenPoints[i].Y);
screenPoints[i + 1] = new ScreenPoint(screenPoints[i].X + (this.StrokeThickness * 0.5), screenPoints[i].Y);
}
if (this.ShowVerticals && i > 0 && Math.Abs(screenPoints[i - 1].X - screenPoints[i].X) < this.Epsilon)
{
verticalLines.Add(screenPoints[i - 1]);
verticalLines.Add(screenPoints[i]);
}
}
rc.DrawClippedLineSegments(clippingRect, screenPoints, this.ActualColor, this.StrokeThickness, this.LineStyle.GetDashArray(), this.LineJoin, false);
rc.DrawClippedLineSegments(clippingRect, verticalLines, this.ActualColor, this.StrokeThickness / 3, LineStyle.Dash.GetDashArray(), this.LineJoin, false);
rc.DrawMarkers(screenPoints, clippingRect, this.MarkerType, null, this.MarkerSize, this.MarkerFill, this.MarkerStroke, this.MarkerStrokeThickness);
}
示例5: Render
/// <summary>
/// Renders the LineSeries on the specified rendering context.
/// </summary>
/// <param name="rc">
/// The rendering context.
/// </param>
/// <param name="model">
/// The owner plot model.
/// </param>
public override void Render(IRenderContext rc, PlotModel model)
{
if (this.Points.Count == 0)
{
return;
}
this.VerifyAxes();
var clippingRect = this.GetClippingRect();
Action<IList<ScreenPoint>, IList<ScreenPoint>> renderPoints = (lpts, mpts) =>
{
var lineStyle = this.ActualLineStyle;
// clip the line segments with the clipping rectangle
if (this.StrokeThickness > 0 && lineStyle != LineStyle.None)
{
var verticalStrokeThickness = double.IsNaN(this.VerticalStrokeThickness)
? this.StrokeThickness
: this.VerticalStrokeThickness;
if (!verticalStrokeThickness.Equals(this.StrokeThickness) || this.VerticalLineStyle != lineStyle)
{
var hlpts = new List<ScreenPoint>();
var vlpts = new List<ScreenPoint>();
for (int i = 0; i + 2 < lpts.Count; i += 2)
{
hlpts.Add(lpts[i]);
hlpts.Add(lpts[i + 1]);
vlpts.Add(lpts[i + 1]);
vlpts.Add(lpts[i + 2]);
}
rc.DrawClippedLineSegments(
hlpts,
clippingRect,
this.GetSelectableColor(this.ActualColor),
this.StrokeThickness,
lineStyle,
this.LineJoin,
false);
rc.DrawClippedLineSegments(
vlpts,
clippingRect,
this.GetSelectableColor(this.ActualColor),
verticalStrokeThickness,
this.VerticalLineStyle,
this.LineJoin,
false);
}
else
{
rc.DrawClippedLine(
lpts,
clippingRect,
0,
this.GetSelectableColor(this.ActualColor),
this.StrokeThickness,
lineStyle,
this.LineJoin,
false);
}
}
if (this.MarkerType != MarkerType.None)
{
rc.DrawMarkers(
mpts,
clippingRect,
this.MarkerType,
this.MarkerOutline,
new[] { this.MarkerSize },
this.MarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness);
}
};
// Transform all points to screen coordinates
// Render the line when invalid points occur
var linePoints = new List<ScreenPoint>();
var markerPoints = new List<ScreenPoint>();
double previousY = double.NaN;
foreach (var point in this.Points)
{
if (!this.IsValidPoint(point, this.XAxis, this.YAxis))
{
renderPoints(linePoints, markerPoints);
linePoints.Clear();
markerPoints.Clear();
previousY = double.NaN;
//.........这里部分代码省略.........
示例6: Render
/// <summary>
/// Renders the series on the specified rendering context.
/// </summary>
/// <param name="rc">The rendering context.</param>
public override void Render(IRenderContext rc)
{
var actualPoints = this.ActualPoints;
var actualPoints2 = this.ActualPoints2;
int n0 = actualPoints.Count;
if (n0 == 0)
{
return;
}
this.VerifyAxes();
double minDistSquared = this.MinimumSegmentLength * this.MinimumSegmentLength;
var clippingRect = this.GetClippingRect();
rc.SetClip(clippingRect);
// Transform all points to screen coordinates
IList<ScreenPoint> pts0 = new ScreenPoint[n0];
for (int i = 0; i < n0; i++)
{
pts0[i] = this.XAxis.Transform(actualPoints[i].X, actualPoints[i].Y, this.YAxis);
}
int n1 = actualPoints2.Count;
IList<ScreenPoint> pts1 = new ScreenPoint[n1];
for (int i = 0; i < n1; i++)
{
int j = this.Reverse2 ? n1 - 1 - i : i;
pts1[j] = this.XAxis.Transform(actualPoints2[i].X, actualPoints2[i].Y, this.YAxis);
}
if (this.Smooth)
{
var rpts0 = ScreenPointHelper.ResamplePoints(pts0, this.MinimumSegmentLength);
var rpts1 = ScreenPointHelper.ResamplePoints(pts1, this.MinimumSegmentLength);
pts0 = CanonicalSplineHelper.CreateSpline(rpts0, 0.5, null, false, 0.25);
pts1 = CanonicalSplineHelper.CreateSpline(rpts1, 0.5, null, false, 0.25);
}
var dashArray = this.ActualDashArray;
// draw the clipped lines
rc.DrawClippedLine(
clippingRect,
pts0,
minDistSquared,
this.GetSelectableColor(this.ActualColor),
this.StrokeThickness,
dashArray,
this.LineJoin,
false);
rc.DrawClippedLine(
clippingRect,
pts1,
minDistSquared,
this.GetSelectableColor(this.ActualColor2),
this.StrokeThickness,
dashArray,
this.LineJoin,
false);
// combine the two lines and draw the clipped area
var pts = new List<ScreenPoint>();
pts.AddRange(pts1);
pts.AddRange(pts0);
// pts = SutherlandHodgmanClipping.ClipPolygon(clippingRect, pts);
rc.DrawClippedPolygon(clippingRect, pts, minDistSquared, this.GetSelectableFillColor(this.ActualFill), OxyColors.Undefined);
var markerSizes = new[] { this.MarkerSize };
// draw the markers on top
rc.DrawMarkers(
clippingRect,
pts0,
this.MarkerType,
null,
markerSizes,
this.MarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness,
1);
rc.DrawMarkers(
clippingRect,
pts1,
this.MarkerType,
null,
markerSizes,
this.MarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness,
1);
rc.ResetClip();
//.........这里部分代码省略.........
示例7: Render
/// <summary>
/// Renders the series on the specified rendering context.
/// </summary>
/// <param name="rc">The rendering context.</param>
/// <param name="model">The owner plot model.</param>
public override void Render(IRenderContext rc, PlotModel model)
{
if (this.Points.Count == 0)
{
return;
}
base.VerifyAxes();
double minDistSquared = this.MinimumSegmentLength * this.MinimumSegmentLength;
var clippingRect = this.GetClippingRect();
// Transform all points to screen coordinates
var points = this.Points;
int n0 = points.Count;
IList<ScreenPoint> pts0 = new ScreenPoint[n0];
for (int i = 0; i < n0; i++)
{
pts0[i] = this.XAxis.Transform(points[i].X, points[i].Y, this.YAxis);
}
int n1 = this.points2.Count;
IList<ScreenPoint> pts1 = new ScreenPoint[n1];
for (int i = 0; i < n1; i++)
{
int j = this.Reverse2 ? n1 - 1 - i : i;
pts1[j] = this.XAxis.Transform(this.points2[i].X, this.points2[i].Y, this.YAxis);
}
if (this.Smooth)
{
var rpts0 = ScreenPointHelper.ResamplePoints(pts0, this.MinimumSegmentLength);
var rpts1 = ScreenPointHelper.ResamplePoints(pts1, this.MinimumSegmentLength);
pts0 = CanonicalSplineHelper.CreateSpline(rpts0, 0.5, null, false, 0.25);
pts1 = CanonicalSplineHelper.CreateSpline(rpts1, 0.5, null, false, 0.25);
}
// draw the clipped lines
rc.DrawClippedLine(
pts0,
clippingRect,
minDistSquared,
this.GetSelectableColor(this.ActualColor),
this.StrokeThickness,
this.ActualLineStyle,
this.LineJoin,
false);
rc.DrawClippedLine(
pts1,
clippingRect,
minDistSquared,
this.GetSelectableColor(this.ActualColor),
this.StrokeThickness,
this.ActualLineStyle,
this.LineJoin,
false);
// combine the two lines and draw the clipped area
var pts = new List<ScreenPoint>();
pts.AddRange(pts1);
pts.AddRange(pts0);
// pts = SutherlandHodgmanClipping.ClipPolygon(clippingRect, pts);
rc.DrawClippedPolygon(pts, clippingRect, minDistSquared, this.GetSelectableFillColor(this.Fill), null);
// draw the markers on top
rc.DrawMarkers(
pts0,
clippingRect,
this.MarkerType,
null,
new[] { this.MarkerSize },
this.MarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness,
1);
rc.DrawMarkers(
pts1,
clippingRect,
this.MarkerType,
null,
new[] { this.MarkerSize },
this.MarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness,
1);
}
示例8: Render
/// <summary>
/// Renders the series on the specified rendering context.
/// </summary>
/// <param name="rc">
/// The rendering context.
/// </param>
/// <param name="model">
/// The owner plot model.
/// </param>
public override void Render(IRenderContext rc, PlotModel model)
{
if (this.Points.Count == 0)
{
return;
}
OxyRect clippingRect = this.GetClippingRect();
var points = this.Points;
int n = points.Count;
var groupPoints = new Dictionary<int, IList<ScreenPoint>>();
var groupSizes = new Dictionary<int, IList<double>>();
ScreenPoint[] allPoints = null;
double[] markerSizes = null;
if (this.ColorAxis == null)
{
allPoints = new ScreenPoint[n];
markerSizes = new double[n];
}
// Transform all points to screen coordinates
for (int i = 0; i < n; i++)
{
var dp = new DataPoint(points[i].X, points[i].Y);
double size = double.NaN;
double value = double.NaN;
var scatterPoint = points[i] as ScatterPoint;
if (scatterPoint != null)
{
size = scatterPoint.Size;
value = scatterPoint.Value;
}
if (double.IsNaN(size))
{
size = this.MarkerSize;
}
var screenPoint = this.XAxis.Transform(dp.X, dp.Y, this.YAxis);
if (this.ColorAxis != null)
{
if (!double.IsNaN(value))
{
int group = this.ColorAxis.GetPaletteIndex(value);
if (!groupPoints.ContainsKey(group))
{
groupPoints.Add(group, new List<ScreenPoint>());
groupSizes.Add(group, new List<double>());
}
groupPoints[group].Add(screenPoint);
groupSizes[group].Add(size);
}
}
else
{
// ReSharper disable PossibleNullReferenceException
allPoints[i] = screenPoint;
markerSizes[i] = size;
// ReSharper restore PossibleNullReferenceException
}
}
var binOffset = this.XAxis.Transform(this.MinX, this.MaxY, this.YAxis);
// Draw the markers
if (this.ColorAxis != null)
{
var markerIsStrokedOnly = this.MarkerType == MarkerType.Plus || this.MarkerType == MarkerType.Star
|| this.MarkerType == MarkerType.Cross;
foreach (var group in groupPoints)
{
var color = this.ColorAxis.GetColor(group.Key);
rc.DrawMarkers(
group.Value,
clippingRect,
this.MarkerType,
this.MarkerOutline,
groupSizes[group.Key],
color,
markerIsStrokedOnly ? color : this.MarkerStroke,
this.MarkerStrokeThickness,
this.BinSize,
binOffset);
}
}
//.........这里部分代码省略.........
示例9: Render
/// <summary>
/// Renders the LineSeries on the specified rendering context.
/// </summary>
/// <param name="rc">The rendering context.</param>
/// <param name="model">The owner plot model.</param>
public override void Render(IRenderContext rc, PlotModel model)
{
if (this.ActualPoints.Count == 0)
{
return;
}
this.VerifyAxes();
var clippingRect = this.GetClippingRect();
var dashArray = this.ActualDashArray;
var verticalLineDashArray = this.VerticalLineStyle.GetDashArray();
var lineStyle = this.ActualLineStyle;
var verticalStrokeThickness = double.IsNaN(this.VerticalStrokeThickness)
? this.StrokeThickness
: this.VerticalStrokeThickness;
var actualColor = this.GetSelectableColor(this.ActualColor);
Action<IList<ScreenPoint>, IList<ScreenPoint>> renderPoints = (lpts, mpts) =>
{
// clip the line segments with the clipping rectangle
if (this.StrokeThickness > 0 && lineStyle != LineStyle.None)
{
if (!verticalStrokeThickness.Equals(this.StrokeThickness) || this.VerticalLineStyle != lineStyle)
{
// TODO: change to array
var hlpts = new List<ScreenPoint>();
var vlpts = new List<ScreenPoint>();
for (int i = 0; i + 2 < lpts.Count; i += 2)
{
hlpts.Add(lpts[i]);
hlpts.Add(lpts[i + 1]);
vlpts.Add(lpts[i + 1]);
vlpts.Add(lpts[i + 2]);
}
rc.DrawClippedLineSegments(
clippingRect,
hlpts,
actualColor,
this.StrokeThickness,
dashArray,
this.LineJoin,
false);
rc.DrawClippedLineSegments(
clippingRect,
vlpts,
actualColor,
verticalStrokeThickness,
verticalLineDashArray,
this.LineJoin,
false);
}
else
{
rc.DrawClippedLine(
clippingRect,
lpts,
0,
actualColor,
this.StrokeThickness,
dashArray,
this.LineJoin,
false);
}
}
if (this.MarkerType != MarkerType.None)
{
rc.DrawMarkers(
clippingRect,
mpts,
this.MarkerType,
this.MarkerOutline,
new[] { this.MarkerSize },
this.MarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness);
}
};
// Transform all points to screen coordinates
// Render the line when invalid points occur
var linePoints = new List<ScreenPoint>();
var markerPoints = new List<ScreenPoint>();
double previousY = double.NaN;
foreach (var point in this.ActualPoints)
{
if (!this.IsValidPoint(point))
{
renderPoints(linePoints, markerPoints);
linePoints.Clear();
markerPoints.Clear();
previousY = double.NaN;
//.........这里部分代码省略.........
示例10: Render
//.........这里部分代码省略.........
var topWhiskerTop = this.Transform(item.X, item.UpperWhisker);
var topWhiskerBottom = this.Transform(item.X, item.BoxTop);
var bottomWhiskerTop = this.Transform(item.X, item.BoxBottom);
var bottomWhiskerBottom = this.Transform(item.X, item.LowerWhisker);
rc.DrawClippedLine(
clippingRect,
new[] { topWhiskerTop, topWhiskerBottom },
0,
strokeColor,
this.StrokeThickness,
dashArray,
OxyPenLineJoin.Miter,
true);
rc.DrawClippedLine(
clippingRect,
new[] { bottomWhiskerTop, bottomWhiskerBottom },
0,
strokeColor,
this.StrokeThickness,
dashArray,
OxyPenLineJoin.Miter,
true);
// Draw the whiskers
if (this.WhiskerWidth > 0)
{
var topWhiskerLine1 = this.Transform(item.X - halfWhiskerWidth, item.UpperWhisker);
var topWhiskerLine2 = this.Transform(item.X + halfWhiskerWidth, item.UpperWhisker);
var bottomWhiskerLine1 = this.Transform(item.X - halfWhiskerWidth, item.LowerWhisker);
var bottomWhiskerLine2 = this.Transform(item.X + halfWhiskerWidth, item.LowerWhisker);
rc.DrawClippedLine(
clippingRect,
new[] { topWhiskerLine1, topWhiskerLine2 },
0,
strokeColor,
this.StrokeThickness,
null,
OxyPenLineJoin.Miter,
true);
rc.DrawClippedLine(
clippingRect,
new[] { bottomWhiskerLine1, bottomWhiskerLine2 },
0,
strokeColor,
this.StrokeThickness,
null,
OxyPenLineJoin.Miter,
true);
}
if (this.ShowBox)
{
// Draw the box
var rect = this.GetBoxRect(item);
rc.DrawClippedRectangleAsPolygon(clippingRect, rect, fillColor, strokeColor, this.StrokeThickness);
}
if (!this.ShowMedianAsDot)
{
// Draw the median line
var medianLeft = this.Transform(item.X - halfBoxWidth, item.Median);
var medianRight = this.Transform(item.X + halfBoxWidth, item.Median);
rc.DrawClippedLine(
clippingRect,
new[] { medianLeft, medianRight },
0,
strokeColor,
this.StrokeThickness * this.MedianThickness,
null,
OxyPenLineJoin.Miter,
true);
}
else
{
var mc = this.Transform(item.X, item.Median);
if (clippingRect.Contains(mc))
{
var ellipseRect = new OxyRect(
mc.X - this.MedianPointSize,
mc.Y - this.MedianPointSize,
this.MedianPointSize * 2,
this.MedianPointSize * 2);
rc.DrawEllipse(ellipseRect, fillColor, OxyColors.Undefined, 0);
}
}
}
// Draw the outlier(s)
var markerSizes = outlierScreenPoints.Select(o => this.OutlierSize).ToList();
rc.DrawMarkers(
clippingRect,
outlierScreenPoints,
this.OutlierType,
null,
markerSizes,
fillColor,
strokeColor,
this.StrokeThickness);
}
示例11: Render
/// <summary>
/// Renders the LineSeries on the specified rendering context.
/// </summary>
/// <param name="rc">
/// The rendering context.
/// </param>
/// <param name="model">
/// The owner plot model.
/// </param>
public override void Render(IRenderContext rc, PlotModel model)
{
if (this.Points.Count == 0)
{
return;
}
if (this.XAxis == null || this.YAxis == null)
{
Trace("Axis not defined.");
return;
}
double minDistSquared = this.MinimumSegmentLength * this.MinimumSegmentLength;
var clippingRect = this.GetClippingRect();
// Transform all points to screen coordinates
// Render the line when invalid points occur
var markerPoints = new List<ScreenPoint>();
foreach (var point in this.Points)
{
if (!this.IsValidPoint(point, this.XAxis, this.YAxis))
{
continue;
}
var p0 = this.Transform(point.X, this.Base);
var p1 = this.Transform(point.X, point.Y);
if (this.StrokeThickness > 0 && this.ActualLineStyle != LineStyle.None)
{
rc.DrawClippedLine(
new[] { p0, p1 },
clippingRect,
minDistSquared,
this.GetSelectableColor(this.ActualColor),
this.StrokeThickness,
this.ActualLineStyle,
this.LineJoin,
false);
}
markerPoints.Add(p1);
}
if (this.MarkerType != MarkerType.None)
{
rc.DrawMarkers(
markerPoints,
clippingRect,
this.MarkerType,
this.MarkerOutline,
new[] { this.MarkerSize },
this.MarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness);
}
}
示例12: Render
/// <summary>
/// Renders the series on the specified rendering context.
/// </summary>
/// <param name="rc">The rendering context.</param>
public override void Render(IRenderContext rc)
{
var actualPoints = this.ActualPoints;
var actualPoints2 = this.points2;
int n0 = actualPoints.Count;
if (n0 == 0)
{
return;
}
this.VerifyAxes();
double minDistSquared = this.MinimumSegmentLength * this.MinimumSegmentLength;
var clippingRect = this.GetClippingRect();
rc.SetClip(clippingRect);
// Transform all points to screen coordinates
IList<ScreenPoint> pts0 = new List<ScreenPoint>();
for (int i = 0; i < n0; i++)
{
pts0.Add(this.XAxis.Transform(actualPoints[i].X, actualPoints[i].Y, this.YAxis));
}
int n1 = actualPoints2.Count;
IList<ScreenPoint> pts1 = new ScreenPoint[n1];
for (int i = 0; i < n1; i++)
{
int j = n1 - 1 - i;
pts1[j] = this.XAxis.Transform(actualPoints2[i].X, actualPoints2[i].Y, this.YAxis);
}
if (this.Smooth)
{
var rpts0 = ScreenPointHelper.ResamplePoints(pts0, this.MinimumSegmentLength);
// var rpts1 = ScreenPointHelper.ResamplePoints(pts1, this.MinimumSegmentLength);
pts0 = CanonicalSplineHelper.CreateSpline(rpts0, 0.5, null, false, 0.25);
// pts1 = CanonicalSplineHelper.CreateSpline(rpts1, 0.5, null, false, 0.25);
}
var dashArray = this.ActualDashArray;
var dashArray2 = this.ActualDashArray2;
var limit = this.YAxis.Transform(this.Limit);
if (limit < clippingRect.Top)
{
limit = clippingRect.Top;
}
if (limit > clippingRect.Bottom)
{
limit = clippingRect.Bottom;
}
var markerSizes = new[] { this.MarkerSize };
var bottom = clippingRect.Bottom;
var top = clippingRect.Top;
clippingRect.Top = limit;
clippingRect.Height = bottom - limit;
// draw the clipped lines belove the limit line
rc.DrawClippedLine(
clippingRect,
pts0,
minDistSquared,
this.GetSelectableColor(this.ActualColor2),
this.StrokeThickness,
dashArray2,
this.LineJoin,
false);
// combine the two lines and draw the clipped area
var pts = new List<ScreenPoint>();
pts.AddRange(pts1);
pts.AddRange(pts0);
// fill the area belove the limit line
rc.DrawClippedPolygon(clippingRect, pts, minDistSquared, this.GetSelectableFillColor(this.ActuallFill2), OxyColors.Undefined);
// draw the markers on line belove the limit line
rc.DrawMarkers(
clippingRect,
pts0,
this.MarkerType,
null,
markerSizes,
this.MarkerFill2,
//.........这里部分代码省略.........
示例13: RenderLineAndMarkers
protected override void RenderLineAndMarkers(IRenderContext rc, OxyRect clippingRect, IList<ScreenPoint> pointsToRender) {
if (Smooth) {
pointsToRender = CatmullRomSplineHelper.CreateSpline(ScreenPointHelper.ResamplePoints(pointsToRender, MinimumSegmentLength), 0.5,
0.25 / _smoothessMultipler);
}
if (StrokeThickness > 0.0 && ActualLineStyle != LineStyle.None) {
RenderLine(rc, clippingRect, pointsToRender);
}
if (MarkerType != MarkerType.None) {
var binOffset = MarkerResolution > 0 ? Transform(MinX, MinY) : new ScreenPoint();
rc.DrawMarkers(clippingRect, pointsToRender, MarkerType, MarkerOutline, new[] { MarkerSize }, ActualMarkerFill, MarkerStroke,
MarkerStrokeThickness, MarkerResolution, binOffset);
}
}
示例14: Render
/// <summary>
/// Renders the series on the specified rendering context.
/// </summary>
/// <param name="rc">The rendering context.</param>
public override void Render(IRenderContext rc)
{
// determine render range
var xmin = this.XAxis.ActualMinimum;
var xmax = this.XAxis.ActualMaximum;
this.WindowStartIndex = this.UpdateWindowStartIndex(this.abovePoints, this.GetPointX, xmin, this.WindowStartIndex);
this.WindowStartIndex2 = this.UpdateWindowStartIndex(this.belowPoints, this.GetPointX, xmin, this.WindowStartIndex2);
double minDistSquared = this.MinimumSegmentLength * this.MinimumSegmentLength;
var clippingRect = this.GetClippingRect();
rc.SetClip(clippingRect);
var areaContext = new TwoColorAreaRenderContext
{
Points = this.abovePoints,
WindowStartIndex = this.WindowStartIndex,
XMax = xmax,
RenderContext = rc,
ClippingRect = clippingRect,
MinDistSquared = minDistSquared,
Reverse = false,
Color = this.ActualColor,
Fill = this.ActualFill,
MarkerFill = this.MarkerFill,
MarkerStroke = this.MarkerStroke,
DashArray = this.ActualDashArray,
Baseline = this.Limit
};
this.RenderChunkedPoints(areaContext);
areaContext.Points = this.belowPoints;
areaContext.Reverse = this.Reverse2;
areaContext.Color = this.ActualColor2;
areaContext.Fill = this.ActualFill2;
areaContext.MarkerFill = this.MarkerFill2;
areaContext.MarkerStroke = this.MarkerStroke2;
areaContext.DashArray = this.ActualDashArray2;
if (this.IsPoints2Defined)
{
areaContext.Baseline = this.ConstantY2;
}
this.RenderChunkedPoints(areaContext);
if (!this.IsPoints2Defined)
{
var markerSizes = new[] { this.MarkerSize };
double limit = this.Limit;
var points = this.ActualPoints;
var aboveMarkers = new List<ScreenPoint>();
var belowMarkers = new List<ScreenPoint>();
this.markerStartIndex = this.UpdateWindowStartIndex(points, this.GetPointX, xmin, this.markerStartIndex);
int markerClipCount = 0;
for (int i = this.markerStartIndex; i < points.Count; i++)
{
var point = points[i];
(point.y >= limit ? aboveMarkers : belowMarkers).Add(this.XAxis.Transform(point.x, point.y, this.YAxis));
markerClipCount += point.x > xmax ? 1 : 0;
if (markerClipCount > 1)
{
break;
}
}
rc.DrawMarkers(
clippingRect,
aboveMarkers,
this.MarkerType,
null,
markerSizes,
this.MarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness,
1);
rc.DrawMarkers(
clippingRect,
belowMarkers,
this.MarkerType,
null,
markerSizes,
this.MarkerFill2,
this.MarkerStroke2,
this.MarkerStrokeThickness,
1);
}
rc.ResetClip();
}
示例15: Render
/// <summary>
/// Renders the series on the specified rendering context.
/// </summary>
/// <param name="rc">The rendering context.</param>
public override void Render(IRenderContext rc)
{
this.VerifyAxes();
var actualPoints = this.ActualPoints;
if (actualPoints == null || actualPoints.Count == 0)
{
return;
}
var actualPoints2 = this.ActualPoints2;
if (actualPoints2 == null || actualPoints2.Count == 0)
{
return;
}
int startIdx = 0;
int startIdx2 = 0;
double xmax = double.MaxValue;
if (this.IsXMonotonic)
{
// determine render range
var xmin = this.XAxis.ActualMinimum;
xmax = this.XAxis.ActualMaximum;
this.WindowStartIndex = this.UpdateWindowStartIndex(actualPoints, point => point.X, xmin, this.WindowStartIndex);
this.WindowStartIndex2 = this.UpdateWindowStartIndex(actualPoints2, point => point.X, xmin, this.WindowStartIndex2);
startIdx = this.WindowStartIndex;
startIdx2 = this.WindowStartIndex2;
}
double minDistSquared = this.MinimumSegmentLength * this.MinimumSegmentLength;
var clippingRect = this.GetClippingRect();
rc.SetClip(clippingRect);
var areaContext = new AreaRenderContext
{
Points = actualPoints,
WindowStartIndex = startIdx,
XMax = xmax,
RenderContext = rc,
ClippingRect = clippingRect,
MinDistSquared = minDistSquared,
Reverse = false,
Color = this.ActualColor,
DashArray = this.ActualDashArray
};
var chunksOfPoints = this.RenderChunkedPoints(areaContext);
areaContext.Points = actualPoints2;
areaContext.WindowStartIndex = startIdx2;
areaContext.Reverse = this.Reverse2;
areaContext.Color = this.ActualColor2;
var chunksOfPoints2 = this.RenderChunkedPoints(areaContext);
if (chunksOfPoints.Count != chunksOfPoints2.Count)
{
rc.ResetClip();
return;
}
// Draw the fill
for (int chunkIndex = 0; chunkIndex < chunksOfPoints.Count; chunkIndex++)
{
var pts = chunksOfPoints[chunkIndex];
var pts2 = chunksOfPoints2[chunkIndex];
// pts = SutherlandHodgmanClipping.ClipPolygon(clippingRect, pts);
// combine the two lines and draw the clipped area
var allPts = new List<ScreenPoint>();
allPts.AddRange(pts2);
allPts.AddRange(pts);
rc.DrawClippedPolygon(
clippingRect,
allPts,
minDistSquared,
this.GetSelectableFillColor(this.ActualFill),
OxyColors.Undefined);
var markerSizes = new[] { this.MarkerSize };
// draw the markers on top
rc.DrawMarkers(
clippingRect,
pts,
this.MarkerType,
null,
markerSizes,
this.MarkerFill,
this.MarkerStroke,
this.MarkerStrokeThickness,
//.........这里部分代码省略.........