📄 mainwindow.cs
字号:
private void AddHollowEllipse_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "Ellipse";
newType = ImageType.Ellipse;
}
private void AddHollowRectangle_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "Rectangle";
newType = ImageType.Rectangle;
}
private void AddFilledEllipse_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "FillEllipse";
newType = ImageType.FillEllipse;
}
private void AddFilledRectangle_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "FillRectangle";
newType = ImageType.FillRectangle;
}
private void AddPath_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "Path";
newType = ImageType.Path;
}
private void btnEraser_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "Eraser";
newType = ImageType.Eraser;
EraserSize = 2;
}
private void btnText_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "Text";
newType = ImageType.Text;
MakeForm();
}
private void btnCircleAt_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "CircleAt";
newType = ImageType.CircleAt;
MakeCircleAt();
}
private void AddPolygon_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "Polygon";
newType = ImageType.Polygon;
}
private void Curve_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "Curve";
newType = ImageType.Curve;
}
private void ClosedCurve_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "ClosedCurve";
newType = ImageType.ClosedCurve;
}
private void btnPick_Click(object sender, System.EventArgs e)
{
this.statusBar.Panels[0].Text = "PickUp";
newType = ImageType.Pick;
}
private void Change_Click(object sender, System.EventArgs e)
{
if(drawingList.Count==0)
return;
picked = false;
drawingListUndo.Add(drawingList[drawingList.Count-1]);
drawingList.RemoveAt(drawingList.Count-1);
regionCollectionUndo.Add(regionCollection[regionCollection.Count-1]);
regionCollection.RemoveAt(regionCollection.Count-1);
pointArrayUndo.Add(pointArray[pointArray.Count-1]);
pointArray.RemoveAt(pointArray.Count-1);
regionArrayCollectionUndo.Add(regionArrayCollection[regionArrayCollection.Count-1]);
regionArrayCollection.RemoveAt(regionArrayCollection.Count-1);
drawImageTypeUndo.Add((ImageType)drawImageType[drawImageType.Count-1]);
drawImageType.RemoveAt(drawImageType.Count-1);
newType = ImageType.Empty;
Drawing.Invalidate();
}
private void NotChange_Click(object sender, System.EventArgs e)
{
if(notchangeList.Count==0)
return;
notchangeListUndo.Add(notchangeList[notchangeList.Count-1]);
notchangeList.RemoveAt(notchangeList.Count-1);
Drawing.Invalidate();
}
private void Change2_Click(object sender, System.EventArgs e)
{
if(drawingListUndo.Count==0)
return;
picked = false;
drawingList.Add(drawingListUndo[drawingListUndo.Count-1]);
drawingListUndo.RemoveAt(drawingListUndo.Count-1);
regionCollection.Add(regionCollectionUndo[regionCollectionUndo.Count-1]);
regionCollectionUndo.RemoveAt(regionCollectionUndo.Count-1);
pointArray.Add(pointArrayUndo[pointArrayUndo.Count-1]);
pointArrayUndo.RemoveAt(pointArrayUndo.Count-1);
regionArrayCollection.Add(regionArrayCollectionUndo[regionArrayCollectionUndo.Count-1]);
regionArrayCollectionUndo.RemoveAt(regionArrayCollectionUndo.Count-1);
drawImageType.Add((ImageType)drawImageTypeUndo[drawImageTypeUndo.Count-1]);
drawImageTypeUndo.RemoveAt(drawImageTypeUndo.Count-1);
Drawing.Invalidate();
}
private void NotChange2_Click(object sender, System.EventArgs e)
{
if(notchangeListUndo.Count==0)
return;
notchangeList.Add(notchangeListUndo[notchangeListUndo.Count-1]);
notchangeListUndo.RemoveAt(notchangeListUndo.Count-1);
Drawing.Invalidate();
}
#endregion
#region 鼠标事件
/// <summary>
/// 鼠标事件
/// </summary>
private void Drawing_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
return;
newPoint = new MousePoint(e.X, e.Y);
switch(newType)
{
case ImageType.Path:
mousePath = new GraphicsPath();
mousePath.AddLine(e.X,e.Y,e.X,e.Y);
break;
case ImageType.Eraser:
eraser = true;
newPoint.EndX = e.X;
newPoint.EndY = e.Y;
Point p = newPoint.StartP;
p.Offset(-2,-2);
newRegion = new Region(new Rectangle(p, new Size(4,4)));
break;
case ImageType.Text:
newForm.Show();
break;
case ImageType.Polygon:
pointCollection.Add(newPoint.StartP);
tempPoint.Add(new DPoint(new Point[1]{newPoint.StartP}, newColor,lineWidth));
Drawing.Invalidate();
break;
case ImageType.Curve:
pointCollection.Add(newPoint.StartP);
tempPoint.Add(new DPoint(new Point[1]{newPoint.StartP}, newColor,lineWidth));
Drawing.Invalidate();
break;
case ImageType.ClosedCurve:
pointCollection.Add(newPoint.StartP);
tempPoint.Add(new DPoint(new Point[1]{newPoint.StartP}, newColor,lineWidth));
Drawing.Invalidate();
break;
case ImageType.Pick:
if(picked == true)
{
for(int k=0;k<regionArrayCollection[regionIndex].Length;k++)
{
if(regionArrayCollection[regionIndex][k].IsVisible(newPoint.StartP))
{
pointIndex = k;
changed = true;
break;
}
else
changed = false;
}
if(changed == true)
break;
}
int m = regionIndex;
if(picked == true)
m = (regionIndex+1)%regionCollection.Count; //循环下一项开始
int n = 0;
for(;n<regionCollection.Count;n++)
{
if(m >= regionCollection.Count)
m = 0;
if(regionCollection[m++].IsVisible(newPoint.StartP))
{
pointViewList = new DShapeList();
regionIndex = m-1;
tempMovePoint = new Point[pointArray[regionIndex].Length];
for(int j=0;j<pointArray[regionIndex].Length;j++)
{
tempMovePoint[j] = pointArray[regionIndex][j];
}
PointView(regionIndex);
Drawing.Invalidate();
picked = true;
if(drawImageType[regionIndex]==(int)ImageType.Path)
{
mousePath = drawingList[regionIndex].pathChange(mousePath,true);
}
changed = false;
break;
}
else
{
pointViewList = new DShapeList();
Drawing.Invalidate();
picked = false;
}
}
break;
}
}
private void Drawing_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
return;
newPoint.EndX = e.X;
newPoint.EndY = e.Y;
this.statusBar.Panels[1].Text="Point:"+e.X.ToString() + "," + e.Y.ToString();
switch(newType)
{
case ImageType.Path:
mousePath.AddLine(e.X,e.Y,e.X,e.Y);
break;
case ImageType.Eraser:
Point p = newPoint.EndP;
p.Offset(-EraserSize,-EraserSize);
newRegion = new Region(new Rectangle(p, new Size(EraserSize*2,EraserSize*2)));
notchangeList.Add(new DEraser(newPoint.EndP, newColor, EraserSize));
break;
case ImageType.Pick:
if(picked == true&&changed !=true)
{
mouseMove = true;
int MoveX = newPoint.EndP.X-newPoint.StartP.X;
int MoveY = newPoint.EndP.Y-newPoint.StartP.Y;
RegionMove(regionIndex, MoveX,MoveY);
if(drawImageType[regionIndex]!=(int)ImageType.Path)
{
drawingList[regionIndex].pointchange(pointArray[regionIndex]);
}
else
{
regionPath = (GraphicsPath)mousePath.Clone();
Matrix translateMatrix = new Matrix();
translateMatrix.Translate(MoveX, MoveY);
regionPath.Transform(translateMatrix);
drawingList[regionIndex].pathChange(regionPath,false);
}
PointChange(regionIndex);
}
if(changed ==true&&drawImageType[regionIndex]!=(int)ImageType.Path)
{
mouseMove = true;
pointArray[regionIndex][pointIndex] = newPoint.EndP;
if(drawImageType[regionIndex]==(int)ImageType.Rectangle
||drawImageType[regionIndex]==(int)ImageType.FillRectangle
||drawImageType[regionIndex]==(int)ImageType.Ellipse
||drawImageType[regionIndex]==(int)ImageType.FillEllipse)
{
tempChangePoint = new MousePoint(pointArray[regionIndex][1-pointIndex].X, pointArray[regionIndex][1-pointIndex].Y);
tempChangePoint.EndX = pointArray[regionIndex][pointIndex].X;
tempChangePoint.EndY = pointArray[regionIndex][pointIndex].Y;
regionCollection[regionIndex] = new Region(tempChangePoint.Rect);
}
drawingList[regionIndex].pointchange(pointArray[regionIndex]);
PointChange(regionIndex);
}
break;
}
Drawing.Invalidate();
}
private void Drawing_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
switch(newType)
{
case ImageType.Point:
//加顶点
tempPointArray = new Point[1]{newPoint.StartP};
pointArray.Add(tempPointArray);
//加顶点区域
Point2Region(tempPointArray);
regionArrayCollection.Add(tempRegion);
//加图元区域
newPoint.StartP.Offset(-2,-2);
regionCollection.Add(new Region(new Rectangle(newPoint.StartP, new Size((int)lineWidth*4, (int)lineWidth*4))));
drawImageType.Add(ImageType.Point);
//加图元
drawingList.Add(new DPoint(tempPointArray,newColor,lineWidth));
break;
case ImageType.Line:
//加顶点
tempPointArray = new Point[2]{newPoint.StartP,newPoint.EndP};
pointArray.Add(tempPointArray);
//加顶点区域
Point2Region(tempPointArray);
regionArrayCollection.Add(tempRegion);
//加图元区域
if(Math.Abs((float)(newPoint.StartP.Y-newPoint.EndP.Y)/(float)(newPoint.StartP.X-newPoint.EndP.X))<=1)
{
regionPath = new GraphicsPath(new Point[]{
new Point(newPoint.StartP.X,newPoint.StartP.Y-10),
new Point(newPoint.EndP.X,newPoint.StartP.Y-10),
new Point(newPoint.EndP.X,newPoint.EndP.Y+10),
new Point(newPoint.StartP.X,newPoint.EndP.Y+10),
new Point(newPoint.StartP.X,newP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -