「玩一玩」带节点的曲线,可以鼠标拖动节点,类似PS

Conmajia 2012-06-26 10:47:58
加精
酒喝多了,吐槽:无聊,很无聊。。

整个论坛就没好玩的,

新手就只有问题问题问题问题问题。

高手就只有语重心长语重心长语重心长语重心长。

辩论也只有对骂对骂对骂对骂对骂对骂。

有那精力有那水平想点东西来做好不好?就剩我这种门外汉瞎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();
}
}


完整代码看这里

下载源码
...全文
4992 139 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
139 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落的神庙 2013-11-14
  • 打赏
  • 举报
回复
起晚了没占到前排
CZLJ2008 2013-11-14
  • 打赏
  • 举报
回复
牛牛牛!!!!!!!
kxyzjm62 2013-11-14
  • 打赏
  • 举报
回复
不错哦 支持下
zhoujk 2013-11-14
  • 打赏
  • 举报
回复
这个贴子早点出现就好了,前段时间为了在网页上实现贝塞尔曲线,没少花精力
wenping0313 2013-11-13
  • 打赏
  • 举报
回复
不错,还是很有参考价值的。
Ki1381 2013-10-22
  • 打赏
  • 举报
回复
野比君的创意+分享精神才是最珍贵的
木_玉 2013-10-22
  • 打赏
  • 举报
回复
谢谢分享,刚好是所需要的
shenmj2012 2012-10-14
  • 打赏
  • 举报
回复
还不错的设计,有点意思
  • 打赏
  • 举报
回复
背景那块白色和那条线是怎么画出来的?
  • 打赏
  • 举报
回复
大侠,我想问一下:那个在form里面的控件mouseDragCurve1是怎么做的?可以讲一讲么???
szgrape 2012-07-06
  • 打赏
  • 举报
回复
[Quote=引用 125 楼 的回复:]
引用 124 楼 的回复:

比比干嘛的啊,天天啤酒烤鱼好滋润啊

闲来写点东西娱乐

你干嘛的呢,方便透露一下么


失业闲人
[/Quote]

这么才气外漏的人还能失业,哥等人真的是干不了程序员了
whpa008 2012-07-05
  • 打赏
  • 举报
回复
神奇的曲线,有趣!!
黑石课堂 2012-07-05
  • 打赏
  • 举报
回复
不知道楼主能不能看到。
一般在网上到处拉屎的人。在生活中多是性格温和的人。
早恋 2012-07-05
  • 打赏
  • 举报
回复
实话说,不服不行
Conmajia 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 124 楼 的回复:]

比比干嘛的啊,天天啤酒烤鱼好滋润啊

闲来写点东西娱乐

你干嘛的呢,方便透露一下么
[/Quote]

失业闲人
szgrape 2012-07-05
  • 打赏
  • 举报
回复
比比干嘛的啊,天天啤酒烤鱼好滋润啊

闲来写点东西娱乐

你干嘛的呢,方便透露一下么
zdzcool 2012-07-05
  • 打赏
  • 举报
回复
呵呵,不错哦。
tyj_130 2012-07-04
  • 打赏
  • 举报
回复
果断学习 拍砖 哈哈 鼓掌
tyj_130 2012-07-04
  • 打赏
  • 举报
回复
什么意思啊??头晕哦
Conmajia 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 118 楼 的回复:]

很不错,你把这些最后总结个Demo库就更好了。支持。
[/Quote]
http://blog.csdn.net/conmajia/article/details/7599862
加载更多回复(96)

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧