01=Introduction to RhinoScript (Marcos and Scripts)
An short introduction to RhinoScript
假 使从字面上来直译,RhinoScript可以翻译为「犀牛脚本」。RhinoScript是架构在VB(Visual Basic)语言之上的Rhino专属程序语言,大致上又可分做Marco与Script两大部分。以下简单地说明Marco与Script两者之间的差 别。
Marcos = Static (fixed, linear sequence)
Scripts = Dynamic (non-linear)
‧flow control (skipping and repeating lines)
‧variable control (logical and mathematical operations)
‧input and output (user interaction)
简单地说,在Rhino中的 Marcos (可以称做宏)就像是一个口令一个动作的叫Rhino帮我们执行「动作」(actions)。Marco 的命令行是线性、静态的,意思就是说,如果我们下了一百条指令,Rhino就会从第一条、第二条、第三条、、、这样一路执行到第一百条命令,无法跳跃也无法重复执行某个命令。相对而言,Scripts 则是动态且非线性的。首先,透过 Flow Control 我们可以跳过或者重复某些命令行,而Variable Control 则可以让我们创造出逻辑与数学的运算,Input and Output (I/O)则是使用者与Rhino之间的互动,使用者可以送进许多种类型的资料 (data),再经过运算之后以许多种数据形态输出。
本文的主要目的在于说明 Marcos 与 Scripts 之间的差别,之后将进一步对 Scripts 的语法、功能与运用方式做进一步的说明与提供范例。
02=Introduction to RhinoScript (Syntax)
An Short Intorduction to RhinoSricpt
在 了解 Marcos 与 Scripts 之间的差别之后,我们首先开始来介绍一点简单的「语法
」(syntax)。在计算机程序语言中的语法,其实就跟我们学英文或其他外国语言一般,我们需要背单 字也需要学文法,而在此的语法就有点像是文法。因此,语法就是一种「成套」(a set)的规则组合。于是乎,当然也就会有所谓合法与不合法的语法,只不过,一般日常生活中,如果我们说出不合文法的语句,人基本上还可以透过上下文来猜 懂。但是,计算机就没这么聪明了,如果我们写出不合语法的命令行,计算机不但不会去猜,根本就不理会,只会告诉我们:「描述方式有误」、「语法不合规定」等警 告句,告诉我们必须回头去检查到底是哪句命令行说错了。
RhinoScript 所使用的VB语言的语法基本上算是简单的,已经非常接近日常的口语,这算是非信息背景用户的一大福音(版主也是这两个月才真的开始学程序)。所以,以下我们就来简单说明一下在Rhino中会用到的几种基本语法。
如果我们要画一条线,我们大概会这么说:「画一条线,起点在坐标(0,0,0)的位置,端点在(10,0,0)的位置。」同样地,在Rhino的Marco命令行我们可以这么下指令(请开启Tools\Commands\Marco Editor):
_Line 0,0,0 10,0,0
然而,如果我们不是在Marco中,而是在Script的环境下(请开启Tools\RhinoScript\Edit),会有两种说法。一种就像是直接在comparisonsRhino工作接口中的Command列下指令一般,可以这样讲:
Rhino.Command "_Line 0,0,0 10,0,0"
另一种讲法,则是呼叫RhinoScript中内部建构的许多Methods(超过200种),所以我们应该写成:
Call Rhino.AddLine(Array(0,0,0), Array(10,0,0))
基 本上,本文的目的不在于将所有指令或者Rhino内建的Methods解说完毕,用意只在于很简单地说明在计算机语言中的语法与日常用语中文法的关系。差别 只在于,「计算机还挺很忠心的,我们叫他做啥,他就会做啥」(这是陈教授的名言之一)。所以,如果指令下了,Rhino却没反应,决不是Rhino有错,赶 紧回头检查自己的命令行是否下错了。
此外,如果要详细了解VB的语法可以参考网络上的Microsoft教学手册,可以免费下载 并且有中文版。如果想详细了解RhinoScript中所有Methods的语法,请开启 Help\Plug-ins\RhinoScript,这里头详细记载了每个Mehods的用途、语法以及回传 (return)值等说明,当然,如果各位不心急的话,之后我们也会一一提到。
03=Introduction to RhinoScript(Loops-1)
An short introduction to RhinoScript
在 了解RhinoScript的基本语法之后,我们这次要说明的是VB中的「循环」(Loops)种类与概念。VB的循环基本上可以分为三种:(1) Next (计数循环)、(2) Do...Loop (条件式循环)、(3) In...Next (数组循环)。三种循环的特与用法各有不同,端看在何种需要来选择。举例来说,计数循环顾名思义就是指当我们已经知道某一个数量时所使用;而条件式循环 则是循环本身具有条件的设定功能,透过条件的符合与不符合判断可以决定进入循环或者离开循环;数组循环则是将在一个「数组」(array)中的对象一一取 出来执行某些命令动作。将上述的循环种类与表达方式整理如下:
(1) 计数循环
&Next
(2) 条件式循环
Loop (前侧式)
Loop (前侧式)
&Loop While (后测式)
&Loop Until (后测式)
&Loop (无穷)
&Wend (如果为真)
(3) 数组循环
In...Next
接下来,我们就一一说明上述的循环运用方式以及提供简易的范例。先从计数循环说起,如果我们执行下列程序,我们可以在Rhino工作接口的Command列看到Rhino当我们印出"1"。
Dim A: A=1
Call Rhino.Print(A)
以此类堆,如果我们要依序印出"1 2 3 4 5 6 7 8",当然可以很辛苦地这么写:
Dim A: A=1
Dim B: B=2
Dim C: C=3
Dim D: D=4
Dim E: E=5
Dim F: F=6
Dim G: G=7
Dim H: H=8
Call Rhino.Print(A)
Call Rhino.Print(B)
Call Rhino.Print(C)
Call Rhino.Print(D)
Call Rhino.Print(E)
Call Rhino.Print(F)
Call Rhino.Print(G)
Call Rhino.Print(H)
但是计算机如果真的只能这么笨地一个口令一个动作,那我会请各位现在就放弃吧!这时候如果我们运用计数循环,为得到同样的结果,可以改成这么写:
Dim i
For i = 1 To 8
Call Rhino.Print(i)
Next
这就是所谓的计数循环,当我们已知某个数量(从1到8),就可以利用计数循环重复执
行某个动作,而在此所定义的 "i" 是个变量,每次重新进入循环时,"i" 值会被替换为下一个数字。
因此,如果我们很快地将计数循环结合RhinoScript Methods,试着执行下列的指令看看:
Dim StratPoint, EndPoint
Dim i
For i = 0 To 10
StartPoint = Array ( i*10, 0, 0)
EndPoint = Array ( i*10, 10, 0)
Call Rhino.AddLine(StartPoint, EndPoint)
Next
我 们可以很快地得到11条线,每条线的长度都是10,间距也都是10,第一条线的起点为(0,0,0)终点为(0,10,0),每个下一条线则是间距上一条 线10的单位的并行线。如果善加利用计数循环与函数规则,就可以做出许多复杂的形体,不仅可省下许多力气,也可能会产生出一些出乎意料的形体。这次只是简 单地介绍了计数循环的最基本用法,之后我们分别会再说明其他种类循环的基本用法,并且提供一些比较复杂的循环组合运用方式。
04=Intorduction to RhinoScript (Loops-2 & Comparisons)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论