酒喝多了,吐槽:无聊,很无聊。。整个论坛就没好玩的,新手就只有问题问题问题问题问题。高手就只有语重心长语重心长语重心长语重心长。辩论也只有对骂对骂对骂对骂对骂对骂。有那精力有那水平想点东西来做好不好?就剩我这种门外汉瞎j8在弄在玩。我承认我是闲的大把时间玩,你们上班都很累了,你们做的都是拿来赚钱的,不能放出来。累了你上店里放松去,别上网啊。毛伯伯甩出去小妹妹「大哥」「老公」「亲爱的」叫得亲热,比这听「前辈」「高人」「大牛」爽多了。谁来介绍点乐子啊,人生太无聊了。我的智商已经无限低了。………………下周开始戒赌戒票。。去大学蹭课。。先来PS的
再来刚做的,极其简单。
思路很简单1.曲线由一组Point表示节点
2.鼠标移动节点实际是修改单个Point
3.插入删除Point
4.一个节点是一个手柄Handle,就是一个小方块
5.在Paint里画出一条经过所有节点的曲线DrawCurve
6.随便画个十字准星表示当前节点
7.鼠标按下,判断是否在某个已有节点里,如果有,标记之,否则添加新节点
8.鼠标按下且移动,如果已有节点,则节点坐标为鼠标坐标
9.刷新画图懒得写分析什么的了。画图的时候分层就行。背景
准星
曲线
手柄代码贴出来自己看。节点:
List<Point> points;手柄
Rectangle getHandle(Point p)
{
Rectangle rect = new Rectangle(
p.X - 3,
p.Y - 3,
6,
6);
return rect;
}
判断一个点Point在不在手柄里
bool isInside(Point p, Rectangle rect)
{
return rect.Contains(p);
}
判断点在不在曲线的某个节点里 bool isHandle(Point p)
{
foreach (Point pt in points)
{
if (isInside(p, getHandle(pt)))
{
downIndex = points.IndexOf(pt);
downPoint = pt;
current = pt;
return true;
}
} return false;
}
画手柄
void drawHandle(Graphics g, Point p)
{
if (points.IndexOf(p) == downIndex)
g.FillRectangle(
Brushes.Black,
getHandle(p));
else
g.DrawRectangle(
Pens.Black,
getHandle(p));
}
画曲线
void drawCurve(Graphics g)
{
g.DrawCurve(Pens.Black, points.ToArray());
}
画十字准星(交叉线)
void drawCrosshair(Graphics g, Point p)
{
g.DrawLine(
Pens.Gray,
0, p.Y,
clientRect.Width,
p.Y);
g.DrawLine(
Pens.Gray,
p.X,
0,
p.X,
clientRect.Height);
}
拖动
protected override void OnMouseMove(MouseEventArgs e)
{
mousePoint = e.Location;
if (mouseDown)
{
if (Current != null)
{
Current = mousePoint;
} Refresh();
}
}
完整代码看这里下载源码
再来刚做的,极其简单。
思路很简单1.曲线由一组Point表示节点
2.鼠标移动节点实际是修改单个Point
3.插入删除Point
4.一个节点是一个手柄Handle,就是一个小方块
5.在Paint里画出一条经过所有节点的曲线DrawCurve
6.随便画个十字准星表示当前节点
7.鼠标按下,判断是否在某个已有节点里,如果有,标记之,否则添加新节点
8.鼠标按下且移动,如果已有节点,则节点坐标为鼠标坐标
9.刷新画图懒得写分析什么的了。画图的时候分层就行。背景
准星
曲线
手柄代码贴出来自己看。节点:
List<Point> points;手柄
Rectangle getHandle(Point p)
{
Rectangle rect = new Rectangle(
p.X - 3,
p.Y - 3,
6,
6);
return rect;
}
判断一个点Point在不在手柄里
bool isInside(Point p, Rectangle rect)
{
return rect.Contains(p);
}
判断点在不在曲线的某个节点里 bool isHandle(Point p)
{
foreach (Point pt in points)
{
if (isInside(p, getHandle(pt)))
{
downIndex = points.IndexOf(pt);
downPoint = pt;
current = pt;
return true;
}
} return false;
}
画手柄
void drawHandle(Graphics g, Point p)
{
if (points.IndexOf(p) == downIndex)
g.FillRectangle(
Brushes.Black,
getHandle(p));
else
g.DrawRectangle(
Pens.Black,
getHandle(p));
}
画曲线
void drawCurve(Graphics g)
{
g.DrawCurve(Pens.Black, points.ToArray());
}
画十字准星(交叉线)
void drawCrosshair(Graphics g, Point p)
{
g.DrawLine(
Pens.Gray,
0, p.Y,
clientRect.Width,
p.Y);
g.DrawLine(
Pens.Gray,
p.X,
0,
p.X,
clientRect.Height);
}
拖动
protected override void OnMouseMove(MouseEventArgs e)
{
mousePoint = e.Location;
if (mouseDown)
{
if (Current != null)
{
Current = mousePoint;
} Refresh();
}
}
完整代码看这里下载源码
http://download.csdn.net/detail/zhao4zhong1/4055807够楼主玩多长时间捏?
(^_^)
说对一半,大牛上CSDN只是来看业内新闻的,不逛论坛。
Bezier曲线的节点不在曲线上,除了两端以外。
搞硬件这种成本高周期长的尚且如此,怎么玩软件的论坛没玩个什么名堂出来?
没错!其实我写的很清楚了,DrawCurve(),不是DrawBezier()
bug多,不崩溃不报错,逻辑问题懒得改
2.点击检测的矩阵区域和手柄区一样,使得点到方框上等于点到方框外
3.状态更新不及时欢迎找bug,改bug,然后贴到这里来。
2.点击检测的矩阵区域和手柄区一样,使得点到方框上等于点到方框外
3.状态更新不及时