Foxtable(狐表)用户栏目专家坐堂 → [求助]贝塞尔曲线编程的用法求教。


  共有3718人关注过本帖树形打印复制链接

主题:[求助]贝塞尔曲线编程的用法求教。

帅哥哟,离线,有人找我吗?
夜雨寒风
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:29 积分:352 威望:0 精华:0 注册:2014/1/5 23:03:00
[求助]贝塞尔曲线编程的用法求教。  发帖心情 Post By:2015/4/14 23:57:00 [只看该作者]

帮助文件中的GDI+这节没有对DrawBeziers的用法给出说明,在网上找了很多资料,以下代码在绘图板中能成功画出一条连续点的贝塞尔曲线:

 

Dim ps(10) As Point

 

ps(0) = New Point(700,400)  '第1个点
ps(1) = New Point(700,400)  ‘控制点

 

ps(2) = New Point(702,500)  ‘控制点
ps(3) = New Point(705,500)  ‘第2个点
ps(4) = New Point(708,500)  ‘控制点

 

ps(5) = New Point(707,450)  ‘控制点
ps(6) = New Point(710,450)  ‘第3个点
ps(7) = New Point(713,450)  ‘控制点

 

ps(8) = New Point(715,550)  ‘控制点
ps(9) = New Point(715,550)  ‘第4个点

 

Dim bzs as Point() = {ps(0),ps(1),ps(2),ps(3),ps(4),ps(5),ps(6),ps(7),ps(8),ps(9)}

 

g.DrawBeziers(Pens.Red,bzs)

 

问题是,我要画N多个点的连续贝塞尔曲线,就要用到For...Next或Do...Loop循环,变量bzs应该如何初始化?

 

我有试验过以下方法,但出错。

 

1、直接使用ps变量,g.DrawBeziers(Pens.Red,ps),编译可以通过,但运行时出错。

 

2、先定义一个空的bzs,Dim bzs as Point(),然后准备对bzs赋值,编译都通不过。

 

如何在绘图板中正确使用DrawBeziers?

[此贴子已经被作者于2015/4/14 23:58:55编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ybil
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2015/4/15 8:36:00 [只看该作者]

Dim   bzs As New List(of  Point)
For Each r  As Row In Tables("表A").Rows
    bzs.add(New Point(r("X"),r("Y")))
Next

[此贴子已经被作者于2015/4/15 8:36:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
夜雨寒风
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:29 积分:352 威望:0 精华:0 注册:2014/1/5 23:03:00
  发帖心情 Post By:2015/4/15 17:31:00 [只看该作者]

楼上的方法编译通不过,用New List定义的变量不能用在贝塞尔函数中,我试验了以下代码可行。

Dim bzs as Point() = {}  '定义一个空数组。

Redim bzs(9)

for n as integer = 0 to 9
   .......
   bzs(n) = New Point(x,y)
next

g.DrawBeziers(Pens.Red,bzs)


 回到顶部
帅哥哟,离线,有人找我吗?
夜雨寒风
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:29 积分:352 威望:0 精华:0 注册:2014/1/5 23:03:00
  发帖心情 Post By:2015/4/15 17:36:00 [只看该作者]

既不能用Dim bzs() as Point, 也不能用Dim bzs as New List (of Point), 只能用Dim bzs as Point() = {},Foxtable中好像没有括号()在类型Point后这样的语法吧......

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2015/4/15 17:40:00 [只看该作者]

这个是可以的啊:
Dim bzs(10) as Point

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2015/4/15 17:41:00 [只看该作者]

Dim cnt as integer = Tables("表A").Rows.Count
Dim bzs(cnt) as Point



 回到顶部
帅哥哟,离线,有人找我吗?
FoxMan
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:302 积分:1860 威望:0 精华:0 注册:2012/4/27 11:34:00
  发帖心情 Post By:2015/4/15 17:45:00 [只看该作者]

以下是引用夜雨寒风在2015/4/15 17:31:00的发言:
楼上的方法编译通不过,用New List定义的变量不能用在贝塞尔函数中,我试验了以下代码可行。

Dim bzs as Point() = {}  '定义一个空数组。

Redim bzs(9)

for n as integer = 0 to 9
   .......
   bzs(n) = New Point(x,y)
next

g.DrawBeziers(Pens.Red,bzs)

先集合 再由集合到數組,OK!


 回到顶部
帅哥哟,离线,有人找我吗?
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:321 积分:1916 威望:0 精华:0 注册:2014/8/24 13:36:00
  发帖心情 Post By:2015/4/15 22:06:00 [只看该作者]

如果楼主事先知道 N多个点的值,怎么写都一样,代码量少不到哪里去

如果不知道,就直接用自定义函数,怎么传值都行(反正还得检测点数)

 回到顶部