NCF参数化建筑论坛

标题: 一个关于函数的问题。 [打印本页]

作者: ninesuns    时间: 2011-12-14 21:08
标题: 一个关于函数的问题。
小弟最近在看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)画出,不知道这是为什么。我想可能是数据存储的原因吧。希望有高手能解答一下。谢谢了。
作者: 金星云    时间: 2011-12-15 10:24
沙发。。。。。。
作者: s.k.    时间: 2011-12-15 10:24
不懂编程,呼唤大神解答……{:3_51:}
作者: ninesuns    时间: 2011-12-15 12:29
今天来看下,自己顶下,希望有高手能解答下。
作者: Alien风中の翅膀    时间: 2011-12-15 12:31
还没学到rhinoscript呢。还在grasshopper折腾。坐看啊。
作者: ping58972    时间: 2011-12-15 13:35
哎~~~ 好可怜啊~~~
作者: uuuf8    时间: 2011-12-15 14:28
我<rhinoscript参数建模> 书中第13-16页以及第30页提到,sub是为了命名新的子程序,sub过程以sub开头,以end sub结束,你的sub没有结束,function的返回的参数值,其运行结果会保存在内存中
作者: gzblake    时间: 2011-12-15 14:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: uuuf8    时间: 2011-12-15 14:53
8# gzblake

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

就是没错误发生
作者: gzblake    时间: 2011-12-15 16:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: heshiyi1990    时间: 2011-12-15 22:00
感谢楼主分享!!
作者: ninesuns    时间: 2011-12-15 23:48
按照你说的方法,就是先赋予j=(-10,-10,-10)作为向量的起点,然后删掉j,在用call rhino.addpoint(j)的方法把点弄出来,这个点确实就在(-10,-10,-10),我不知道这代表着什么,希望能解释一下。 12# gzblake
作者: ninesuns    时间: 2011-12-15 23:59
又试了一下,把犀牛整个关掉,然后重新打开犀牛,把那段没有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
作者: JiangLi.arch    时间: 2011-12-16 22:35
编程确实不会啊。不好意思咯
作者: gzblake    时间: 2011-12-17 00:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: wenchongyun    时间: 2011-12-20 18:28
18# gzblake 在sub和function之外定义的变量都是全局变量,全局变量在重新赋值前一直都是初始话时的值
作者: hj31415926    时间: 2012-3-25 21:15
学习学习~~~~学习学习~~~~




欢迎光临 NCF参数化建筑论坛 (http://ncf-china.com/) Powered by Discuz! X3.2