以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]贝塞尔曲线编程的用法求教。 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=66855) |
-- 作者:夜雨寒风 -- 发布时间:2015/4/14 23:57:00 -- [求助]贝塞尔曲线编程的用法求教。 帮助文件中的GDI+这节没有对DrawBeziers的用法给出说明,在网上找了很多资料,以下代码在绘图板中能成功画出一条连续点的贝塞尔曲线:
Dim ps(10) As Point
ps(0) = New Point(700,400) \'第1个点
ps(2) = New Point(702,500) ‘控制点
ps(5) = New Point(707,450) ‘控制点
ps(8) = New Point(715,550) ‘控制点
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 -- 发布时间: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编辑过]
|
-- 作者:夜雨寒风 -- 发布时间: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) |
-- 作者:夜雨寒风 -- 发布时间:2015/4/15 17:36:00 -- 既不能用Dim bzs() as Point, 也不能用Dim bzs as New List (of Point), 只能用Dim bzs as Point() = {},Foxtable中好像没有括号()在类型Point后这样的语法吧...... |
-- 作者:狐狸爸爸 -- 发布时间:2015/4/15 17:40:00 -- 这个是可以的啊: Dim bzs(10) as Point
|
-- 作者:狐狸爸爸 -- 发布时间:2015/4/15 17:41:00 -- Dim cnt as integer = Tables("表A").Rows.Count Dim bzs(cnt) as Point |
-- 作者:FoxMan -- 发布时间: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! |
-- 作者:游 -- 发布时间:2015/4/15 22:06:00 -- 如果楼主事先知道 N多个点的值,怎么写都一样,代码量少不到哪里去 如果不知道,就直接用自定义函数,怎么传值都行(反正还得检测点数)
|