学习C#的一点一滴(18)

开发CAD中的一些简单指令

首先先定义一大堆有用的东西
Graphics g;
bool picked = false;
int Sx = 0, Sy = 0, Mx = 0, My = 0, Ex = 0, Ey = 0;
int StartX = 0, StartY = 0, EndX = 0, EndY = 0;
int Step = 0;
bool b = false;
bool f = false;

直线

然后在鼠标按下的指令里面写画线的函数
if (e.Button == MouseButtons.Left)
{
Step += 1;
if (Step == 1)
{
StartX = e.X;
StartY = e.Y;
g = this.CreateGraphics();
g.FillEllipse(Brushes.White, e.X, e.Y, 2, 2);
}
if (Step == 2)
{
EndX = e.X;
EndY = e.Y;
g = this.CreateGraphics();
g.FillEllipse(Brushes.White, e.X, e.Y, 2, 2);
Pen p = new Pen(Color.White, 1);
g.DrawLine(p, StartX, StartY, EndX, EndY);
}
if (Step == 3)
{
StartX = EndX;
StartY = EndY;
EndX = e.X;
EndY = e.Y;
g = this.CreateGraphics();
g.FillEllipse(Brushes.White, e.X, e.Y, 2, 2);
Pen p = new Pen(Color.White, 1);
g.DrawLine(p, StartX, StartY, EndX, EndY);
}
if (Step == 4)
{
StartX = EndX;
StartY = EndY;
EndX = e.X;
EndY = e.Y;
g = this.CreateGraphics();
g.FillEllipse(Brushes.White, e.X, e.Y, 2, 2);
Pen p = new Pen(Color.White, 1);
g.DrawLine(p, StartX, StartY, EndX, EndY);
}
if (Step == 5)
{
StartX = EndX;
StartY = EndY;
EndX = e.X;
EndY = e.Y;
g = this.CreateGraphics();
g.FillEllipse(Brushes.White, e.X, e.Y, 2, 2);
Pen p = new Pen(Color.White, 1);
g.DrawLine(p, StartX, StartY, EndX, EndY);
}
}
if (e.Button == MouseButtons.Right)
{
Step = 0;
picked = false;
}//直线

三点画曲线

Step += 1;
if (Step == 1)
{
Sx = e.X;
Sy = e.Y;
g = this.CreateGraphics();
g.FillEllipse(Brushes.White, e.X, e.Y, 2, 2);
}
if (Step == 2)
{
Mx = e.X;
My = e.Y;
g = this.CreateGraphics();
g.FillEllipse(Brushes.White, e.X, e.Y, 2, 2);
}
if (Step == 3)
{
Ex = e.X;
Ey = e.Y;
g = this.CreateGraphics();
g.FillEllipse(Brushes.White, e.X, e.Y, 2, 2);
Pen p = new Pen(Color.White, 1);
Point[] points =
{
new Point(Sx,Sy),
new Point(Mx,My),
new Point(Ex,Ey)
};
g.DrawCurve(p, points, 1);
Step = 0;
}
}//三点画曲线

拾取的方法

#region 拾取
g = CreateGraphics();
GraphicsPath gp = new GraphicsPath();
gp = Definegp();
RectangleF rect = gp.GetBounds();
//如果拾取点位于曲线的包围矩形中
if (rect.Contains(e.X, e.Y))
{
if(e.Button == MouseButtons.Left)
{
// 如果拾取点在曲线的轮廓上可见
if (gp.IsOutlineVisible(e.X, e.Y, Pens.Black))
{
picked = true;
//曲线被拾取
}
}
}
//曲线被拾取时用红色表示 否则用黑色表示
if (picked)
{
//g.DrawPath(new Pen(Color.White, 2), gp);//幻影
Pen apen = new Pen(Color.Red, 2);
//apen.DashStyle = DashStyle.Dash;//虚线的意思
g.DrawPath(apen, gp);
}
else
{
g.DrawPath(new Pen(Color.White, 2), gp);
}
#endregion

中点

另外中点的话就是如果判断已经拾取上了的话就选择每个函数的起点和中点去他们的一半就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值