RhinoScript入门
RhinoScript 是以VB语法作为语言基础的,任何一个RhinoScript脚本运行在当前的Rhino环境中时都可以使用Rhino本身的函数和子程序调用,以及某些Rhino环境变量。注意在脚本或者其他插件中,Rhino的当前环境被称之为“文档(document)”。
RhinoScript实际为文本文档,为了实现各版本之间的兼容性,请使用标准的ASC编码的脚本文件,即使是注释也不要使用中文。一般的RhinoScript格式后缀为rvb。
一,RhinoScript的载入
在使用RhinoScript前需要将rvb文件载入到文档中。常用的方法如下:
如上图所示,可以使用Tools|RhinoScript|Load,来加载rvb文件。也可以在Rhino命令行中输入“LoadScript”命令进行载入。
在菜单或者命令操作之后会有如下的对话框出现:
点击ADD按钮可以加入新的RVB文件到列表中。在列表中选择一个文件,点LOAD即可加载。点REMOVE即可从列表中删除一个文件。
RhinoScript加载规则如下:
如果RVB文件中只包含子程序或者函数的定义,这时候没有“裸语句”, Rhino仅仅检查语法规则,不运行任何一个子程序或者函数。但RVB文件中还包含“裸语句”,这时Rhino会解吸并运行这个脚本。
二,RhinoScript作为命令运行
在RhinoScript被载入之后,这个RVB文件内部的一些函数或者子程序便可以当作特殊命令被使用,但并不是RVB文件内的所有函数或者子程序可以被当作特殊命令使用,只有满足如下条件的子程序才可以被使用。使用条件是:
必须为标准的VB子程序,并且这个子程序不可以带任何参数。
如下一段摘自Rhino4 RhinoScript帮助文档的程序
Sub Test1()
MsgBox "Test1"
End Sub
Sub Test2(strMessage)
祗园寺MsgBox strMessage
End Sub
Function Test3()
MsgBox strMessage
Test3 = strMessage
End Function
其中只有Test1可以被当作命令使用。Test2带有参数,而Test3是函数,所以他们不能被使用。
使用VB子程序的特殊命令是:-RunScript “子程序名称”,注意前面有减号“-”
如上面的代码运行:
-RunScript Test1
就可以调用Test1()子程序
可以用Tools|RhinoScript|Run菜单命令来管理或者运行RhinoScript命令,也可以用RunScript命令完成同样的功能。执行菜单命令或者RunScript命令后会出现如下的对话框。
里面有当前所有可用子程序名称。
下面给出一段实际代码:
'rhomboid.rvb
Function t_rhomboid()
'define local var
Dim ArrPoint(3), PointName(3), LineName(3), Vector, GroupName
'get the first point
ArrPoint(0) = Rhino.GetPoint("input the first point")
If Fal = IsArray(ArrPoint(0)) Then
Exit Function
气血两虚的症状及调理 End If
'get the identifier string of the point, for using
PointName(0) = Rhino.AddPoint(ArrPoint(0))
'get the cond point
ArrPoint(1)=Rhino.GetPoint("input the cond point")
If Fal = IsArray(ArrPoint(1)) Then
Exit Function
End If
PointName(1) = Rhino.AddPoint(ArrPoint(1))
'get the third point合欢花的作用
ArrPoint(2)=Rhino.GetPoint("input the third point")
If Fal = IsArray(ArrPoint(2)) Then
Exit Function
End If
PointName(2) = Rhino.AddPoint(ArrPoint(2))
'init the Vector and ArrPoint(3) into array type
Vector = Array(0,0,0)
ArrPoint(3) = Array(0,0,0)
'calculate the ArrPoint(3)
Vector(0) = ArrPoint(1)(0) - ArrPoint(0)(0)
Vector(1) = ArrPoint(1)(1) - ArrPoint(0)(1)
Vector(2) = ArrPoint(1)(2) - ArrPoint(0)(2)
ArrPoint(3)(0) = ArrPoint(2)(0) + Vector(0)
ArrPoint(3)(1) = ArrPoint(2)(1) + Vector(1)
ArrPoint(3)(2) = ArrPoint(2)(2) + Vector(2)
'add ArrPoint(3) to document.
'you can delete it, while delete all operation of PointName(3)
PointName(3) = Rhino.AddPoint(ArrPoint(3))
'add 4 lines to document.
LineName(0) = Rhino.AddLine(ArrPoint(0), ArrPoint(1))
LineName(1) = Rhino.AddLine(ArrPoint(0), ArrPoint(2))
LineName(2) = Rhino.AddLine(ArrPoint(1), ArrPoint(3))
LineName(3) = Rhino.AddLine(ArrPoint(2), ArrPoint(3))
'delete help points from PointName(0) to PointName(3)
Rhino.DeleteObject(PointName(0))
Rhino.DeleteObject(PointName(1))
Rhino.DeleteObject(PointName(2))
Rhino.DeleteObject(PointName(3))
'make a new group and add 4 lines(from LineName(0) to LineName(3)) to the group
'like this, ur can operate this rhomboid as a single object
GroupName = Rhino.AddGroup()
If Fal = Rhino.IsGroup(GroupName) Then
Exit Function
End If
Rhino.AddObjectToGroup LineName(0), GroupName
Rhino.AddObjectToGroup LineName(1), GroupName
Rhino.AddObjectToGroup LineName(2), GroupName
Rhino.AddObjectToGroup LineName(3), GroupName
'return this gruop name for more operation
t_rhomboid = GroupName
End Function
Sub trb()
t_rhomboid()
End Sub
'-RunScript trb
Rhino.AddAlias "addrh", "_-RunScript trb"
上面一段代码只有一个函数,和一个无参子程序,来提供给Rhino命令使用。整个程序只有一个函数t_rhomboid产生功能。
坛子肉t_rhomboid先让用户输入三个点,然后函数使用这三个点计算第四个点,然后由这四个点连成一个平行四边,并将作为标记的四个点删除,只留下四条线段。并将这四条线段加入到同一个组内,使这个平行四边成为一个对象。
注意最后一行的“裸语句”Rhino.AddAlias "addrh", "_-RunScript trb"。
这是一个Rhino子程序Rhino.AddAlias的调用,作用是给一段标准的Rhino命令起一个“别名”,之后就可以使用这个别名来实现这个Rhino命令的功能。本例中为"_-RunScript trb",注意前面的“_”是不能少的。然后就可以在命令行里输入addrh栾川豆腐来实现-RunScript trb命令的作用,而实际上就是最终调用函数t_rhomboid()。
三,启动Rhino时自动加载RVB文件
一般情况下当然是希望Rhino时自动加载一些RVB,来扩展Rhino的功能,方法如下:
TOOLS|Options
弹出如下对话框:
孩子与狗
选择客厅屏风图片大全RhinoScript一项,在右端方可进行启动加载脚本文件的操作。
另外RhinoScript函数:Rhino.AddStartupScript (strScriptFile [, intIndex])也可以完成这个操作
strScriptFile是一个RVB文件路径,intIndex是一个0起始索引,用来表示这个strScriptFile在加载列表中的加载顺序,0索引先加载。函数成功则返回一个整数,其为加入的新RhinoScript在加载列表中的索引。调用失败返回Null。