alpha
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Windows;
|
||||
using System.Windows.Ink;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Animation;
|
||||
|
||||
namespace Ink_Canvas.Helpers
|
||||
{
|
||||
|
||||
public class RectangleSelectionViewer : FrameworkElement
|
||||
{
|
||||
private VisualCollection _children;
|
||||
private DrawingVisual _layer = new DrawingVisual();
|
||||
private Pen defaultPen = new Pen();
|
||||
private Pen lassoPen = new Pen();
|
||||
|
||||
public RectangleSelectionViewer()
|
||||
{
|
||||
_children = new VisualCollection(this) {
|
||||
_layer // 初始化DrawingVisual
|
||||
};
|
||||
defaultPen.Thickness = 2;
|
||||
defaultPen.Brush = new SolidColorBrush(Color.FromRgb(37, 99, 235));
|
||||
defaultPen.DashStyle = DashStyles.Dash;
|
||||
|
||||
lassoPen.Thickness = 6;
|
||||
lassoPen.Brush = new SolidColorBrush(Color.FromRgb(37, 99, 235));
|
||||
lassoPen.DashStyle = new DashStyle(new double[]{0,2},0);
|
||||
lassoPen.DashCap = PenLineCap.Round;
|
||||
lassoPen.StartLineCap = PenLineCap.Round;
|
||||
lassoPen.EndLineCap = PenLineCap.Round;
|
||||
}
|
||||
|
||||
protected override int VisualChildrenCount => _children.Count;
|
||||
|
||||
protected override Visual GetVisualChild(int index)
|
||||
{
|
||||
if (index < 0 || index >= _children.Count) throw new ArgumentOutOfRangeException();
|
||||
return _children[index];
|
||||
}
|
||||
|
||||
public void DrawSelectionBox(Rect rect) {
|
||||
DrawingContext context = _layer.RenderOpen();
|
||||
context.DrawRoundedRectangle(new SolidColorBrush(Color.FromArgb(78, 96, 165, 250)), defaultPen, rect, 4, 4);
|
||||
context.Close();
|
||||
}
|
||||
|
||||
public void DrawLassoLine(PointCollection pts) {
|
||||
DrawingContext context = _layer.RenderOpen();
|
||||
if (pts.Count > 2) {
|
||||
StreamGeometry geometry = new StreamGeometry();
|
||||
var _pts = pts.Clone();
|
||||
_pts.RemoveAt(0);
|
||||
using (StreamGeometryContext ctx = geometry.Open()) {
|
||||
ctx.BeginFigure(pts[0], true , false);
|
||||
ctx.PolyLineTo(_pts,true, true);
|
||||
}
|
||||
context.DrawGeometry(new SolidColorBrush(Colors.Transparent), lassoPen, geometry);
|
||||
} else if (pts.Count == 2) {
|
||||
context.DrawLine(defaultPen, pts[0], pts[1]);
|
||||
} else if (pts.Count == 1) {
|
||||
context.DrawLine(defaultPen, pts[0], pts[0]);
|
||||
}
|
||||
context.Close();
|
||||
}
|
||||
|
||||
public void ClearDrawing() {
|
||||
DrawingContext context = _layer.RenderOpen();
|
||||
context.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user