首次提交:本地项目同步到Gitea
This commit is contained in:
73
LibShapes/Core/State/StateSelected.cs
Normal file
73
LibShapes/Core/State/StateSelected.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using Io.Github.Kerwinxu.LibShapes.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Io.Github.Kerwinxu.LibShapes.Core.State
|
||||
{
|
||||
|
||||
|
||||
public class StateSelected:State
|
||||
{
|
||||
public StateSelected(UserControlCanvas canvas, PointF start_pointF) : base(canvas, start_pointF)
|
||||
{
|
||||
|
||||
}
|
||||
public StateSelected(UserControlCanvas canvas) : base(canvas)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void LeftMouseDown(PointF pointF)
|
||||
{
|
||||
// 首先判断一下是否在这个选择矩形的范围内
|
||||
// 在的话就是更改模式了,比如更改尺寸和移动。我这个在选择框上是更改尺寸,而在内部是移动
|
||||
// 如果不在,就转成待机模式
|
||||
// 1. 这里判断一下是否在矩形框的范围内
|
||||
GraphicsPath path = new GraphicsPath();
|
||||
// 这里要判断一下是否是ShapeMultiSelect
|
||||
if (this.canvas.SelectShape is Shape.ShapeMultiSelect)
|
||||
{
|
||||
// 那么最简单的方式是取消所有的选择,然后运行待机模式的选择
|
||||
this.canvas.changeSelect(null);
|
||||
this.canvas.state = new StateStandby(this.canvas);
|
||||
this.canvas.state.LeftMouseDown(pointF);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果选择的图形是其他类型
|
||||
// 看看是否被选择了吧。
|
||||
var rect = this.canvas.SelectShape.GetBounds(this.canvas.shapes.GetMatrix());
|
||||
// 放大范围,
|
||||
// 这里根据宽度和高度的情况酌情放大范围
|
||||
float select_tolerance = 1;
|
||||
if (rect.Width < 4 || rect.Height < 4) select_tolerance = Math.Min(rect.Height, rect.Width) / 4;
|
||||
|
||||
rect.X -= select_tolerance;
|
||||
rect.Y -= select_tolerance;
|
||||
rect.Width += select_tolerance * 2;
|
||||
rect.Height += select_tolerance * 2;
|
||||
path.AddRectangle(rect);
|
||||
// 判断是否
|
||||
if (path.IsVisible(pointF))
|
||||
{
|
||||
this.canvas.state = new StateChanging(this.canvas, pointF);
|
||||
this.canvas.state.LeftMouseDown(pointF);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 转成待机模式
|
||||
this.canvas.changeSelect(null);
|
||||
this.canvas.state = new StateStandby(this.canvas);
|
||||
this.canvas.state.LeftMouseDown(pointF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//base.LeftMouseDown(pointF);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user