92 lines
2.7 KiB
C#
92 lines
2.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace Io.Github.Kerwinxu.LibShapes.Core.State
|
|
{
|
|
public class ShapeRectSelect:State
|
|
{
|
|
|
|
protected PointF endPoint;
|
|
|
|
private Pen penSelectShape = new Pen(Color.Black)
|
|
{ // 选择框的画笔
|
|
DashStyle = DashStyle.Dash,
|
|
Width = 0.2f
|
|
};
|
|
|
|
public ShapeRectSelect(UserControlCanvas canvas, PointF start_pointF) : base(canvas, start_pointF)
|
|
{
|
|
|
|
}
|
|
public ShapeRectSelect(UserControlCanvas canvas) : base(canvas)
|
|
{
|
|
|
|
}
|
|
|
|
public void Draw(Graphics g)
|
|
{
|
|
// 这个其实是绘制一个矩形。
|
|
g.DrawRectangle(
|
|
penSelectShape,
|
|
startPoint.X,
|
|
startPoint.Y,
|
|
endPoint.X-startPoint.X,
|
|
endPoint.Y - startPoint.Y);
|
|
}
|
|
|
|
public override void LeftMouseDown(PointF pointF)
|
|
{
|
|
startPoint = pointF; // 只是保存开始地址
|
|
base.LeftMouseDown(pointF);
|
|
}
|
|
|
|
public override void LeftMouseMove(PointF pointF)
|
|
{
|
|
// 保存
|
|
endPoint = pointF;
|
|
this.canvas.Refresh(); // 刷新。
|
|
|
|
//base.LeftMouseMove(pointF);
|
|
}
|
|
|
|
public override void LeftMouseUp(PointF pointF)
|
|
{
|
|
// 这里看一下是否有选择图形
|
|
endPoint = pointF;
|
|
var _rect = new RectangleF(startPoint.X, startPoint.Y, endPoint.X - startPoint.X, endPoint.Y - startPoint.Y);
|
|
var _shapes = this.canvas.shapes.getSelectShapes(_rect);
|
|
if (_shapes!=null && _shapes.Count > 0)
|
|
{
|
|
// 要更改成选择模式
|
|
this.canvas.state = new StateSelected(this.canvas);
|
|
// 如果只是选择了一个。
|
|
if (_shapes.Count == 1)
|
|
{
|
|
this.canvas.changeSelect(_shapes[0]); //
|
|
}
|
|
else
|
|
{
|
|
var multi = new Shape.ShapeMultiSelect();
|
|
multi.shapes.AddRange(_shapes);
|
|
this.canvas.changeSelect(multi); // 这个只是通知,但起始这个做不了修改的。
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// 说明没有选择图形
|
|
this.canvas.changeSelect(null);
|
|
this.canvas.state = new StateStandby(this.canvas);
|
|
}
|
|
|
|
this.canvas.Refresh();
|
|
|
|
//base.LeftMouseUp(pointF);
|
|
}
|
|
}
|
|
}
|