📄 example.cs
字号:
DShapeList tempPoint = new DShapeList();
private void BeziersBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
return;
newPoint = new MousePoint(e.X, e.Y);
switch(newType)
{
case MainWindow.ImageType.CircleAt:
star[starCount++] = newPoint.StartP;
tempPoint.Add(new DPoint(new Point[]{newPoint.StartP}, Color.DarkRed,1));
BeziersBox.Invalidate();
break;
case MainWindow.ImageType.Beziers:
tpointCollection.Add(newPoint.StartP);
newPoint.StartP.Offset(-2,-2);
Rectangle r = new Rectangle(newPoint.StartP,new Size(4,4));
Region rr = new Region(r);
regionCollection.Add(rr);
Point startp2 = newPoint.StartP;
startp2.Offset(4,4);
pointList.Add(new DHollowRectangle(new Point[]{newPoint.StartP,startp2},Color.DarkRed,1));
BeziersBox.Invalidate();
break;
case MainWindow.ImageType.Set:
for(int i=0;i<regionCollection.Count;i++)
{
if(regionCollection[i].IsVisible(newPoint.StartP))
{
newPoint = new MousePoint(e.X,e.Y);
beziersPoint = i;
BezierIndex = Found(i);
pointChange = true;
break;
}
}
break;
}
}
private void BeziersBox_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
return;
newPoint.EndX = e.X;
newPoint.EndY = e.Y;
switch(newType)
{
case MainWindow.ImageType.Set:
if(pointChange ==false)
return;
newPoint.EndP.Offset(-2,-2);
Rectangle r = new Rectangle(newPoint.EndP,new Size(4,4));
Region rr = new Region(r);
regionCollection[beziersPoint]=rr;
pointCollection[beziersPoint]=newPoint.EndP;
Point[] p = MakePoints();
Point endp2 = newPoint.StartP;
endp2.Offset(4,4);
pointList[beziersPoint] = new DHollowRectangle(new Point[]{newPoint.EndP,endp2},Color.DarkRed, 1);
beziersList[BezierIndex] = new DBeziers(p,Color.Black,1);
break;
}
BeziersBox.Invalidate();
}
private void BeziersBox_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
switch(newType)
{
case MainWindow.ImageType.Line:
drawingList.Add(new DPLine(newPoint.StartP,newPoint.EndP,Color.Black,style,scap,ecap));
break;
case MainWindow.ImageType.Rectangle:
drawingList.Add(new DPRectangle(newPoint.Rect,Color.Blue,style));
break;
case MainWindow.ImageType.CircleAt:
if(starCount ==10)
{
pointChange = true;
starCount=0;
tempPoint = new DShapeList();
}
break;
case MainWindow.ImageType.Set:
pointChange = false;
break;
}
BeziersBox.Invalidate();
}
private void BeziersBox_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
switch(newType)
{
case MainWindow.ImageType.Line:
g.DrawLine(stylePen,newPoint.StartP,newPoint.EndP);
break;
case MainWindow.ImageType.Rectangle:
g.DrawRectangle(stylePen,newPoint.Rect);
break;
case MainWindow.ImageType.CircleAt:
tempPoint.DrawList(g);
if(starCount == 0&&pointChange==true)
{
GraphicsPath path = new GraphicsPath();
path.AddLines(star);
PathGradientBrush pthGrBrush = new PathGradientBrush(path);
pthGrBrush.CenterColor = Color.FromArgb(255, 255, 0, 0);
Color[] colors = {
Color.FromArgb(255, 0, 0, 0),
Color.FromArgb(255, 0, 255, 0),
Color.FromArgb(255, 0, 0, 255),
Color.FromArgb(255, 255, 255, 255),
Color.FromArgb(255, 0, 0, 0),
Color.FromArgb(255, 0, 255, 0),
Color.FromArgb(255, 0, 0, 255),
Color.FromArgb(255, 255, 255, 255),
Color.FromArgb(255, 0, 0, 0),
Color.FromArgb(255, 0, 255, 0)};
pthGrBrush.SurroundColors = colors;
e.Graphics.FillPath(pthGrBrush, path);
}
break;
case MainWindow.ImageType.Beziers:
Rectangle r = new Rectangle(newPoint.StartP,new Size(4,4));
g.DrawRectangle(new Pen(Color.DarkRed),r);
break;
}
drawingList.DrawList(g);
pointList.DrawList(g);
beziersList.DrawList(g);
}
private void Line_Click(object sender, System.EventArgs e)
{
newType = MainWindow.ImageType.Line;
}
private void Rectangle_Click(object sender, System.EventArgs e)
{
newType = MainWindow.ImageType.Rectangle;
}
private void FiveStar_Click(object sender, System.EventArgs e)
{
newType = MainWindow.ImageType.CircleAt;
}
private void Bezier_Click(object sender, System.EventArgs e)
{
newType = MainWindow.ImageType.Beziers;
}
private void Exit_Click(object sender, System.EventArgs e)
{
this.Close();
}
private void Finish_Click(object sender, System.EventArgs e)
{
if(newType != MainWindow.ImageType.Beziers)
return;
if((tpointCollection.Count%3)!=1 || (tpointCollection.Count==1))
{
MessageBox.Show("Please input points%3 = 1");
return;
}
pointNumber.Add(tpointCollection.Count);
Point[] point = new Point[tpointCollection.Count];
int i = 0;
foreach(Point newP in tpointCollection)
{
point[i++]=newP;
}
beziersList.Add(new DBeziers(point,Color.Black,1));
BeziersBox.Invalidate();
pointCollection.AddRange(point);
pointSum.Add(pointCollection.Count);
tpointCollection.RemoveRange(0,tpointCollection.Count);
}
private void Clear_Click(object sender, System.EventArgs e)
{
beziersList = new DShapeList();
pointList = new DShapeList();
tpointCollection = new PointCollection();
pointCollection = new PointCollection();
regionCollection = new NewRegion();
beziersPoint = 0;
BezierIndex = 0;
pointNumber = new Number();
pointSum = new Number();
drawingList = new DShapeList();
pointChange = false;
star = new Point[10];
starCount = 0;
tempPoint = new DShapeList();
newType = MainWindow.ImageType.Empty;
this.BeziersBox.Image=null;
BeziersBox.Invalidate();
}
private void Change_Click(object sender, System.EventArgs e)
{
newType = MainWindow.ImageType.Set;
}
private int Found(int i)
{
int j;
for(j=0;j<pointSum.Count;j++)
{
if(i<pointSum[j])
break;
}
return j;
}
private Point[] MakePoints()
{
int start;
int count;
count = pointNumber[BezierIndex];
Point[] npoint = new Point[count];
if(BezierIndex ==0)
start = 0;
else
start = pointSum[BezierIndex-1];
for(int k=0;k<count;k++)
{
npoint[k]=pointCollection[start++];
}
return npoint;
}
private void AddPoint_Click(object sender, System.EventArgs e)
{
newType = MainWindow.ImageType.Beziers;
}
private void Dash_Click(object sender, System.EventArgs e)
{
style = DashStyle.Dash;
stylePen.DashStyle = DashStyle.Dash;
}
private void DashDot_Click(object sender, System.EventArgs e)
{
style = DashStyle.DashDot;
stylePen.DashStyle = DashStyle.DashDot;
}
private void DashDotDot_Click(object sender, System.EventArgs e)
{
style = DashStyle.DashDotDot;
stylePen.DashStyle = DashStyle.DashDotDot;
}
private void Dot_Click(object sender, System.EventArgs e)
{
style = DashStyle.Dot;
stylePen.DashStyle = DashStyle.Dot;
}
private void Solid_Click(object sender, System.EventArgs e)
{
style = DashStyle.Solid;
stylePen.DashStyle = DashStyle.Solid;
}
private void LineCap_Click(object sender, System.EventArgs e)
{
stylePen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
stylePen.StartCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;
ecap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
scap = System.Drawing.Drawing2D.LineCap.RoundAnchor;
}
private void PrintScreen_Click(object sender, System.EventArgs e)
{
SavePic s = new SavePic();
this.BeziersBox.Image = s.newImage;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -