NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 18696|回复: 18
打印 上一主题 下一主题

[在线求助] 一个关于函数的问题。

[复制链接]
跳转到指定楼层
1m
发表于 2011-12-14 21:08:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟最近在看rhinoscript101,看到数组的时候有一些问题,希望高人能给些帮助。

Call main()
Sub main()
Dim i,j
i=array(10,10,20)
Call addvector(i,j)

End Sub

Function addvector(ByVal vecdir,ByVal ptbase)
On Error Resume Next
addvector=Null

If isnull(ptbase) Or Not isarray(ptbase) Then
  ptbase=array(0,0,0)
End If
Dim pttip

pttip=rhino.pointadd(ptbase,vecdir)
If Not(err.number=0) Then Exit Function


addvector=rhino.AddLine(ptbase,pttip)
If Not(err.number=0) Then Exit Function
If isnull(addvector) Then Exit Function


Call rhino.CurveArrows(addvector,2)
End Function

我用上面的代码执行出来的就是从原点画出来的一个箭头,没什么问题。由于没有给ptbase这个点,所以箭头从原点画出来。但是我改了一下,变成下面的之后


Dim i,j
i=array(10,10,20)
Call addvector(i,j)



Function addvector(ByVal vecdir,ByVal ptbase)
On Error Resume Next
addvector=Null

If isnull(ptbase) Or Not isarray(ptbase) Then
  ptbase=array(0,0,0)
End If
Dim pttip

pttip=rhino.pointadd(ptbase,vecdir)
If Not(err.number=0) Then Exit Function


addvector=rhino.AddLine(ptbase,pttip)
If Not(err.number=0) Then Exit Function
If isnull(addvector) Then Exit Function


Call rhino.CurveArrows(addvector,2)
End Function


就是去掉了前面的call main()的过程,为什么箭头就不从原点画出来了呢。而且,在这种情况下,我给了j=array(-10,-10,-10),运行脚本,向量从(-10,-10,-10)画出,然后我删去j=array(-10,-10,-10)之后在运行脚本,向量还是从(-10,-10,-10)画出,不知道这是为什么。我想可能是数据存储的原因吧。希望有高手能解答一下。谢谢了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
2m
发表于 2011-12-15 10:24:52 | 只看该作者
沙发。。。。。。
3m
发表于 2011-12-15 10:24:53 | 只看该作者
不懂编程,呼唤大神解答……{:3_51:}
4m
 楼主| 发表于 2011-12-15 12:29:25 | 只看该作者
今天来看下,自己顶下,希望有高手能解答下。
5m
发表于 2011-12-15 12:31:44 | 只看该作者
还没学到rhinoscript呢。还在grasshopper折腾。坐看啊。
6m
发表于 2011-12-15 13:35:07 | 只看该作者
哎~~~ 好可怜啊~~~
7m
发表于 2011-12-15 14:28:42 | 只看该作者
我<rhinoscript参数建模> 书中第13-16页以及第30页提到,sub是为了命名新的子程序,sub过程以sub开头,以end sub结束,你的sub没有结束,function的返回的参数值,其运行结果会保存在内存中
头像被屏蔽
8m
发表于 2011-12-15 14:32:07 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
9m
发表于 2011-12-15 14:53:00 | 只看该作者
8# gzblake

On Error Resume Next
调试过程中应该慎用,不过调试过程中偶尔确实会使用,有助于一步一步排除问题,完成后发布出来的经常会加上这句
10m
 楼主| 发表于 2011-12-15 15:39:01 | 只看该作者
有点理解了。就是说我去掉main()之后第一次函数的返回值存储在了内存中。而因为这个sub没有end sub所以以后每次运行程序的时候其实都是这个返回值。是么,ps:代码中的err.number=0是什么意思 7# uuuf8
11m
发表于 2011-12-15 15:54:27 | 只看该作者
10# ninesuns

就是没错误发生
头像被屏蔽
12m
发表于 2011-12-15 16:57:38 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
13m
发表于 2011-12-15 22:00:13 | 只看该作者
感谢楼主分享!!
14m
 楼主| 发表于 2011-12-15 23:48:56 | 只看该作者
按照你说的方法,就是先赋予j=(-10,-10,-10)作为向量的起点,然后删掉j,在用call rhino.addpoint(j)的方法把点弄出来,这个点确实就在(-10,-10,-10),我不知道这代表着什么,希望能解释一下。 12# gzblake
15m
 楼主| 发表于 2011-12-15 23:59:20 | 只看该作者
又试了一下,把犀牛整个关掉,然后重新打开犀牛,把那段没有sub 的脚本,就是我出问题的脚本运行,因为没有dim j,所以程序默认从原点开始画箭头,然后我又dim j=(-10,-10,-10),箭头就从(-10,-10,-10)开始画,之后删掉dim=j,箭头依旧从(-10,-10,-10),然后call rhino.addpoint(j),就算是删掉j=(-10,-10,-10),点依旧从(-10,-10,-10)。希望能得到解释。希望对大神们有帮助。 12# gzblake
16m
发表于 2011-12-16 22:35:24 | 只看该作者
编程确实不会啊。不好意思咯
头像被屏蔽
17m
发表于 2011-12-17 00:54:01 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
18m
发表于 2011-12-20 18:28:23 | 只看该作者
18# gzblake 在sub和function之外定义的变量都是全局变量,全局变量在重新赋值前一直都是初始话时的值
19m
发表于 2012-3-25 21:15:59 | 只看该作者
学习学习~~~~学习学习~~~~

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-5-11 23:44 , Processed in 0.063262 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表