原标题:Rhino插件开发:RhinoScript脚本教程(4):VBScript基础

这一期写得非常艰难(虽然是十年前写的),因为讲编程基础语法最无聊。但我还是硬着头皮整理完格式并发出来了,我希望学生们自己看看弄明白,上课时就不用再讲这些东西了,就可以拿出宝贵的课堂时间来操练各种实战案例。

创意之代码以后还会发很多教程,除了CorelDraw、Rhino以外,还会有参数化软件(如Solidworks)的二次开发教程,目的都差不多,就是希望能跟同好们多讨论一些有价值的问题,而不是搞成一个编程培训班。

写得有点马虎,将就看吧。公众号的文字编辑平台非常糟糕,乱七八糟的代码格式也懒得改了,没使用截图是为了方便直接拷贝代码运行,下次我会附一个格式正确的截图在后面以增强阅读体验。

第3章VB基础

本期结合Rhino的具体操作集中介绍一些Rhino编程中常用的VB基本语法知识。如果已经会用这种语言,那么本节可以跳过去了。

为了节省篇幅,这里只介绍与Rhin有关的内容。VB语言结构简洁清晰,非常容易学,即使没有任何编程基础也可以很快上手。如果本章学会后认为有必要了解更多,以便在程序中增加一些有趣的花样,那么可以去查阅VB的帮助文档自学。

3.1变量与数组

程序用变量用来保存信息,如数值、名称、模型、灯光、材质等等,并可以在必要的时候改变一个变量的值。

在VB中可以使用Dim语句定义一个变量:

Dim a

如果要定义多个变量,可使用同一个Dim语句,各变量间用逗号隔开:

Dim a, b, c,d

在VB中定义变量不需要指定变量类型,上面所定义的a、b、c、d可以是整数、浮点数、布尔值、字符串,特殊情况下甚至可以是数组。在Rhino程序中,变量还可以表示用户建立的物体,如点、线、曲面、灯光、材质等。

一个变量的具体类型是在赋值中确定的,VB使用等号“=”对变量赋值,下面是一些赋值语句:

a=7

b=3.1415926

c=”这是一个字符串变量”

d=Rhino.GetObject("选择一个物体")

上述语句中,a被赋予整数型变量,b被赋予浮点数变量,c被赋予字符串变量(字符串赋值要用双引号括起来)。d被赋予一个物体,Rhino.GetObject()是Rhino提供的选择物体函数,提示用户在场景中选择一个物体并将该物体作为函数返回值赋给变量d,以后用户就可以通过变量d对该物体进行操作,如移动、旋转、复制、隐藏、删除等。有关内容在后面的章节中还要详细讲解。

变量也可以不用Dim语句定义直接使用,这样变量第一次使用时被自动定义。但是这里作者建议所有变量使用前都预先定义,因为假如由于打字错误把变量名打错,系统会认为这是一个新变量,而且不给出错误提示。在大型程序中,这样的错误很难寻找。为了避免这种错误,可以在程序的最前面加上下列语句:

Option Explicit

该语句强制规定所有变量都必须用DIM语句定义后才能使用,否则给出错误提示。

数组是一系列编了序号的变量,数组必须定义后才能使用,定义数组也使用Dim语句:

Dim a(9)

上面的语句定义了一个具有10个元素的数组,因为VB的数组元素标号从0开始,所以定义a(9)就可以了。

数组中的每一个元素都是一个变量,可以单独进行赋值和操作。VB不要求数组中各变量的值保持类型一致,如:

a(0)=9 ’整数

a(1)=7.8 ’浮点数

a(2)=”这是一个数组变量” ’字符串

a(3)=a(0)+a(1) ’浮点数

VB中的变量和数组可以在程序中任何位置定义。如果需要长度可变的数组,用下面两个语句实现:

Dim a()

Redim a(2)

第一句中的变量括号是空的,第二句用Redim重定义时再指定它的长度,以后还可以使用Redim改变数组长度。用Redim语句重新定义后,原数组中的数据将被丢弃。如果要保留原数据,可以使用带Preserve关键字的重定义语句:

Redim Preserve a(9)

这样,数组从a(0)到a(2)中的数据将被保留。

也可以定义二维数组:

Dim a(2,3)

a(0,0)=1

a(0,1)=2.5

a(1,0)=”二维数组”

a(1,1)=”Rhino”

二维数组同样也可以使用Redim语句进行重新定义。不过Rhino很少用到二维数组,即使表达曲面网格控制点也是用一维数组,所以这里就不多做介绍了。

3.2运算符与表达式

VB中运算符的作用是对常量或变量的值进行运算得到一个新值。算术计算中的加减乘除号都是运算符,另外VB中还有一些通常的算术运算中没有的运算符。

VB中常用的运算符如下表所示。

类别

运算符

功能

例子

运算结果

数学运算符

+

相加

3+5

8

-

相减

12-7

5

*

相乘

4*8

32

/

除以

12/5

2.4

整除

125

2

^

指数

2^10

1024

MOD

取余数

12 MOD 5

2

连接运算符

&

字符串连接

“A”&“BC”

“ABC”

+

字符串连接

“A”+“BC”

“ABC”

比较运算符

=

等于

12+7=19

TRUE

<>

不等于

12+7<>19

FALSE

<

小于

3<5

TRUE

>

大于

3>5

FALSE

<=

小于或等于

2+5<=7

TRUE

>=

大于或等于

2+5>=7

TRUE

逻辑运算符

AND

3>5 AND 3<5

FALSE

NOT

NOT 3>5

TRUE

OR

3>5 OR 3<5

TRUE

XOR

异或

3>5 XOR 3<5

TRUE

VB的运算符有四类:数学运算符、连接运算符、比较运算符和逻辑运算符。

数学运算符共有7个,用来进行值的数学运算,其原理比较简单,不再赘述。

连接运算符用来连接两个字符串,即将两个字符串合并为一个新的字符串。连接运算符有两个:“&”和“+”,两者的使用方法完全一样。但是一般建议使用“&”而不是“+”,因为“+”同时也可作为数学运算符使用,当被操作的值不是字符串时可能会出现不希望的结果。而使用“&”进行运算时,如果值不是字符串,则强制性转为字符串然后连接,运算结果为字符串。

比较运算符用来对两个表达式进行比较,运算结果为布尔值,即“真”或者“假”,VB中用常量TRUE和FALSE来表示。如果比较结果是正确的,则返回“真”(True),如3<5的值为True。如果比较结果是错误的,则返回“假”(False),如3>=5的值为FALSE。

逻辑运算符有四个,常用于条件判断语句,它们对两个表达式进行逻辑运算,运算结果也是布尔值。

上面提到了表达式的概念。表达式是指由运算符连接起来的一系列变量、值或函数,下面是一些表达式的例子:

3+5+12/x

sin(180/5)^2+cos(180/5)^2

geometryType=”圆柱体”

A>0

A>=0 And A<=1

每个表达式都有一个值,就是运算符的运算结果。表达式可以像变量一样在程序语句中使用。

在一个表达式中进行多个运算时,每一部分都会按预先确定的顺序进行计算求解,这个顺序被称为运算符优先级。括号可改变优先级的顺序,强制优先处理表达式的某部分。括号内的操作总是比括号外的操作先被执行。但是在括号内,仍保持正常的运算符优先级。

当表达式有多种运算符时,先处理算术运算符,接着处理比较运算符,然后再处理逻辑运算符。所有比较运算符有相同的优先级,即按它们出现的顺序从左到右进行处理。算术运算符按下列优先级进行处理:指数运算(^)、负数(-)、乘除(*, /)、整除 ()、求余数 (MOD)、加减 (+, -);逻辑运算符按下列优先级进行处理:相等(=)、不等(<>)、小于()、小于或等于(<=)、大于或等于(>=)。

3.3子过程

子过程是一段用以完成某种任务的程序代码,一般用于将过长的程序分解成多个独立的部分,使程序结构清晰明了。下面的代码定义了一个名为mySub的子过程:

Sub mySub(myMessage)

MsgBox myMessage

End Sub

Sub和End Sub两行之间是子过程的程序代码,mySub是子过程名,其后括号里的myMessage是子过程的参数,如果有多个参数,用逗号隔开。

在程序中调用上述子过程的语句为:

mySub “这是一个子过程”

“这是一个子过程”是参数myMessage的值,在子过程执行时它将替代子过程中的myMessage变量,即MsgBoxmyMessage语句的执行结果相当于下列语句:

MsgBox “这是一个子过程”

执行结果一样,只是对话框中的内容变成了“这是一个子过程”。

3.4常用函数

最常用的函数是数学函数,VB的数学运算函数有11个,如下表:

函数名

功能

例子

返回值

Abs

取绝对值

Abs(-0.5)

0.5

Atn

计算正切值

4*Atn(1)

3.1415926(弧度角)

Cos

计算余弦值

Cos(0)

1

Exp

e(自然对数底)

Exp(1)

e(2.718282)

Fix,Int

取整数部分

Int(99.9)

99

Log

自然对数

Log(1)

0

Rnd

返回一个随机数

Rnd

0.24

Sgn

返回数字的符号

Sgn(-15)

-1

Sin

计算正弦

Sin(3.1415926/2)

1

Sqr

开方

Sqr(9)

3

Tan

正切

Tan(3.1415926/4)

1

数学函数比较简单,也很容易理解,这里就不一一解释了,只对数学函数的应用作如下一些说明:

1)三角函数的参数或返回值如果是角度,则都使用弧度来表示,即用3.1415926来表示180度。我们可以借助这个特点来获得一个精确的圆周率值:4*Atn(1)。

2)Int 和 Fix 函数的功能都是删除参数的小数部分并返回以整数表示的结果。二者的区别在于如果参数为负数时,Int函数返回小于或等于参数的第一个负整数,而 Fix 函数在返回大于或等于参数的第一个负整数。例如,Int(-8.4)返回值为-9,而 Fix(-8.4)的返回值为-8。

3)Log函数计算出的是以e为底的自然对数,用数学公式来表达则写作“ln”,若要计算以n为底的x的对数,可用表达式Log(x) /Log(n)来实现。

4)Rnd函数一般不带参数使用,返回一个0与1之间的随机数,每次使用Rnd函数返回的随机数都是不同的。如果要返回一个A与B之间的随机数(A

5)VB在上述11个数学函数的基础上派生了一批数学函数,如下表:

派生数学函数

函数表达式

正割

Sec(X) = 1 / Cos(X)

余割

Cosec(X) = 1 / Sin(X)

余切

Cotan(X) = 1 / Tan(X)

反正弦

Arcsin(X) = Atn(X / Sqr(-X * X + 1))

反余弦

Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)

反正割

Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) -1) * (2 * Atn(1))

反余割

Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))

反余切

Arccotan(X) = Atn(X) + 2 * Atn(1)

双曲正弦

HSin(X) = (Exp(X) - Exp(-X)) / 2

双曲余弦

HCos(X) = (Exp(X) + Exp(-X)) / 2

双曲正切

HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))

双曲正割

HSec(X) = 2 / (Exp(X) + Exp(-X))

双曲余割

HCosec(X) = 2 / (Exp(X) - Exp(-X))

双曲余切

HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))

反双曲正弦

HArcsin(X) = Log(X + Sqr(X * X + 1))

反双曲余弦

HArccos(X) = Log(X + Sqr(X * X - 1))

反双曲正切

HArctan(X) = Log((1 + X) / (1 - X)) / 2

反双曲正割

HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)

反双曲余割

HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) +1) / X)

反双曲余切

HArccotan(X) = Log((X + 1) / (X - 1)) / 2

以 N 为底的对数

LogN(X) = Log(X) / Log(N)

输入输出函数用于用户交互,供VB程序在执行过程中获取用户的输入数据和向用户显示运行结果。因为VB没有提供集成界面工具,所以输入输出函数就承担了用户交互的主要任务。

比较常用的输入输出函数有两个:MsgBox和InputBox。

MsgBox是VB的输出函数,它显示一个对话框,告知用户程序运行结果。最简单的MsgBox 函数就是弹出一个对话框,并在对话框中显示一个字符串,如:

MsgBox “Hello world!”

这个语句我们已经在第一个例子里见过了。

如果希望对话框上显示一个“确定”按钮,则可以再加一个参数:

MsgBox “Hello world!”, 0

第二个参数“0”表示在对话框上增加一个“确定”按钮:

第二个参数表示按钮的类型,其含义如下:

0——只显示确定按钮;

1——显示确定和取消按钮;

2——显示放弃、重试和忽略按钮;

3——显示是、否和取消按钮;

4——显示是和否按钮;

5——显示重试和取消按钮;

16——显示临界信息图标;

32——显示警告查询图标;

48——显示警告消息图标;

64——显示信息消息图标;

其他参数值的含义就不在此一一列举了,可以用关键词“MsgBox 函数”搜索光盘中的VB帮助文件弄清楚。

MsgBox的返回值是一个整数,代表用户按下的按钮,其含义如下:

1——按下的是确定按钮

2——按下的是取消按钮

3——按下的是放弃按钮

4——按下的是重试按钮

5——按下的是忽略按钮

6——按下的是是按钮

7——按下的是否按钮

用户当然清楚自己按下的是哪个按钮,返回值的意义是让程序知道用户按下了哪个按钮,以便进行不同的处理,如调用不同的函数。下面是一个有意思的程序,当用户按下一个按钮,程序把按钮上的字做成3D模型摆在场景当中。

Option Explicit

Sub show_button_pressed()

Dim button_pressed

button_pressed=MsgBox("HelloWorld!",1)

If button_pressed=1 Then Command "-TextObject确定0,0,0 " '如果按下了确定按钮

If button_pressed=2 Then Command "-TextObject取消0,0,0 " '如果按下了取消按钮

End Sub

Show_button_pressed

在show_button_pressed子过程中,首先定义了一个变量button_pressed,这个变量用于存储MsgBox执行后的返回值,也是用户按下的按钮编号。注意,当MsgBox函数的返回值需要赋给一个变量时,它的参数外面要加括号,这样就可以把这个函数的调用作为一个表达式来使用。

后面两个If……Then语句可以理解为“如果……就……”,后面还要详细讲解这种语句的用法,这里只要明白它的用途即可。第一个If……Then语句的作用是:如果button_pressed=1(按下的是确定按钮),就建立“确定”两个字的3D模型。Command"-TextObject 确定0,0,0 " 的作用是在场景中建立3D文字模型,“确定”为文字内容,“0,0,0”为文字模型左下角坐标。Command 函数的用法将在3.3节中作详细介绍,这里也只需明白它的用途即可。第二个If……Then语句的作用是:如果button_pressed=2(按下的是取消按钮),就建立“取消”两个字的3D模型。

脚本调用后,出现带两个按钮的对话框:

如果按下“确定按钮”,对话框消失,场景坐标原点处出现“确定”二字的3D模型:

如果按下的按钮是“取消”,则建立的3D文字模型为“取消”二字。文字模型的字体、厚度、斜度、笔画粗细等特征皆可在Command语句中指定,由于程序中没有这些特征作特别规定,因此Rhino全部采用默认值来建模。

如果还希望对话框上有个标题,则可以加上标题参数(也是一个字符串),即把上面程序中的MsgBox语句作如下修改:

Button_pressed=MsgBox(“Helloworld!”,0, “按钮文字3D模型”)

运行结果:

InputBox是VB的输入函数,其功能是获取用户输入。InputBox函数执行时弹出一个标准对话框,提示用户输入数据。它的返回值就是用户的输入。

下面是一个InputBox函数应用的例子程序,这个程序也是制作3D文字模型——用户输入什么Rhino就做什么:

Sub show3Dchar()

Dim characters

characters=InputBox("请输入要建模的文字:" )

Rhino.Command "-TextObject " & characters & " 0,0,0 "

End Sub

show3Dchar

InputBox的返回值被存储在characters变量中,Command函数则把characters变量中的内容做成3D模型。

上面的脚本程序加载后,出现一个带两个按钮的标准对话框:

输入所要显示的内容,然后按“确定”按钮,场景中就会出现输入内容的3D模型,如图,作者输入的是自己的网名(好怀念这个名字啊):

InputBox和MsgBox一样也可以输入标题,并且还可以指定打开对话框时的默认输入。对上述程序中的InputBox函数作如下修改:

characters=InputBox("请输入要建模的文字:", “Rhino将建立任意输入文字的3D模型”, “Hello World !”)

执行后会出现如图对话框:

InputBox还有更详细的设定,读者可以查阅光盘中的VB帮助文档。

再介绍一个常用函数:Array函数。

Array函数的功能是把一系列数据或变量组成一个数组,它的参数是构成数组的元素,返回值是数组。

下面的语句把5个数字组成一个数组:

Dim arr1,arr2

Dim a,b,c,d,e

a=2.0

b=a^2

c=b*5.5

d=c-12.0

e=d/2.0

arr1=Array(a,b,c,d,e)

arr2=Array(2.0,a^2, b*5.5, c-12.0, d/2.0)

Array函数的参数可以是变量(数值变量或字符串变量)、常数、数组、表达式等。如果Array函数的返回值被赋予一个变量,则该变量就是数组名,如上例中的arr1和arr2。可以用数组元素编号对其中的元素进行操作,如arr1(0)的值为a,arr1(4)的值为e。

Array函数在Rhino最广泛的用途就表达坐标位置。坐标位置有三个坐标分量,因此用有三个元素的数组来表达。

3.5 控制结构

3.5.1 条件结构

条件结构用If语句完成,即实现“如果……就……,否则……”这样一种程序语句的控制执行功能。

If语句有三种格式,下面逐一讲解。

If语句的第一种格式是最简单的,它的功能是实现“如果……就……”,其格式如下:

If条件表达式Then语句组

如果条件表达式的值为真,则执行Then后面的语句,否则跳过去。如果语句组较长,一行写不下,则可以逐行列在后面,并在最后加上End If以结束IF语句。形式如下:

If条件表达式Then

语句组

End If

来看一个程序:

Sub createSphere(radius) ‘参数radius表示球体半径

If radius>0 Then ‘判断球体半径是否为正

Rhino.AddSphere Array(0,0,0), radius ‘以radius为半径在坐标原点建立球体

End If

End Sub

createSphereRhino.GetReal("请输入球体半径")

上述代码的功能是在坐标原点建立一个球体,球体半径由用户在命令行上输入,如图:

程序的If语句判断调用语句给的radius参数值是否为正,若是,则在坐标原点建立一个球体,否则跳过建立球体的语句。

上述代码中用到了两个Rhino函数:和Rhino.GetReal。Rhino.AddSphere函数的作用是在指定位置以指定半径建立一个球体,位置和半径为该函数的参数。Rhino.GetReal要求用户从命令行输入一个实数,并以该实数作为函数返回值,字符串“请输入球体半径”是显示在命令行的提示语。关于Rhino函数的使用方法,后面还要作详细介绍。

IF语句的第二种格式实现“如果……就……,否则……”,其格式如下:

If条件表达式Then

语句组1

Else

语句组2

End If

我们仍然沿用上一个程序代码。上一个程序在给出的radius参数小于零时跳过建立球体的语句,即什么也不做。现在我们加上一条语句,在条件表达式不为真(radius小于零)时显示一个提示框,以使用户明白为什么没有建立球体。

Sub createSphere(radius)

If radius>0 Then

Rhino.AddSphere Array(0,0,0), radius

Else ‘球体半径不为正

MsgBox “Sorry!输入的球体半径不为正,无法建立球体”

End If

End Sub

createSphereRhino.GetReal("请输入球体半径")

加载上述代码,并在命令行输入一个负值,如-10。则会得到如图提示:

If语句的第二种格式处理两种情况,当有多种情况需要处理时,就用到了If语句的第三种格式:

If条件表达式1 Then

语句组1

ElseIf条件表达式2

语句组2

ElseIf条件表达式3

语句组3

……

Else

语句组n+1

End If

该语句处理一个以上的条件,先检查条件表达式1,为真则执行语句组1,然后跳出IF语句执行End If后面的语句。如果条件表达式1为假,则跳过语句组1检查条件表达式2,依此类推。如果所有条件表达式都为假,则执行Else后的语句组n+1。

SubcreateSphere(radius)

If radius>100 Then ‘判断球体半径是否大于100

Rhino.AddSphere Array(0,0,0), radius ‘以radius为半径建立一个球体

ElseIf radius>50 Then ‘判断球体半径是否大于50

Rhino.AddSphere Array(0,0,radius/2), radius/2 ‘以radius/2为半径建立两个球体

Rhino.AddSphere Array(0,0,-radius/2), radius/2

ElseIf radius>0 Then

Rhino.AddSphere Array(0,0,radius/2), radius/4 ‘以radius/4为半径建立四个球体

Rhino.AddSphere Array(0,0,-radius/2), radius/4

Rhino.AddSphere Array(0,radius/2,0), radius/4

Rhino.AddSphere Array(0,-radius/2,0), radius/4

Else ‘球体半径不为正

MsgBox “Sorry!输入的球体半径不为正,无法建立球体!”

End If

End Sub

createSphereRhino.GetReal("请输入球体半径")

上述代码仍然沿用了前面建立球体的程序。它的功能是:输入半径大于100时,建立一个球体,输入半径在50到100之间时,建立两个球体,但半径缩小为给定半径参数的1/2,输入半径在0到50之间时,建立4个球体,半径缩小为给定半径参数的1/4。如果输入半径为负,仍如前显示错误信息。

3.5.2 循环结构

循环结构的用途是让程序重复执行一个语句组,直到达到指定重复次数或满足一定的条件为止。本节介绍两种常用的循环语句:计数循环语句和条件循环语句。

计数循环语句可以让程序重复执行语句组达到指定的次数,其格式如下:

For循环变量=起始值To终止值[Step步长值]

语句组

Next

循环变量作为计数器使用,第一次循环时赋予初始值,循环语句组每被执行一次循环变量增加一个步长值,直到达到终止值,循环结束。“Step 步长值”可以省略不写,此时步长值默认为1。

Dim i, radius

radius=5 ‘球体的初始半径

Sub createBalls(n) ‘n为球体个数

Fori=1 To n ‘总共建立n个球体

Rhino.AddSphere Array(i*30,0,0), radius+i ‘各球体在X轴上间隔30,半径依次+1

Next

End Sub

createBallsRhino.GetInteger("请输入球体个数")

上述代码的功能还是建立球体。程序加载后提示用户输入球体个数作为子过程createBalls的n参数的值。调用子过程后建立一系列(n个)球体,这些球体沿X轴排列,间隔为30,且半径依次+1。函数中Array(i*30,0,0)用来计算球体中心坐标,radius+i用来计算每个球体的半径。i作为循环变量,其起始值为1,终止值为nu,步长取默认值1,因此循环次数为n次,也就是说Rhino.AddSphere语句要被执行n次,建立n个球体。程序运行结果如图(输入的球体个数为10)。

条件循环语句设定循环条件,循环执行语句组直至循环条件不再满足为止。其格式如下:

Do While循环条件

语句组

Loop

当循环条件为真时,执行语句组,直至循环条件为假。

SubcreateRandomBalls(n)

Dimi, radius

i=0 ‘计数变量赋初值0

Do While i

radius=10*Rnd + 2 ‘随机产生球体半径,范围为2~12

Rhino.AddSphere Rhino.GetPoint(“现在球体个数:”+CStr(i)+",输入新球体位置"), radius

i=i+1 ‘计数器加1

Loop

MsgBox CStr(n)+”个球体已经输入完毕!”

End Sub

createRandomBallsRhino.GetInteger("请输入球体个数")

上述代码建立若干个球体。球体的个数和位置由用户给定,球体的半径由随机函数产生。i为计数变量,每建立一个球体加1,当循环条件(i

循环中,程序显示当前球体的个数并要求用户在命令行输入新就建球体的坐标值。当所建的球体已经达到用户输入的球体个数时,循环结束,显示一个对话框报告指定数量的球体已经输入完毕,如图:

3.5.3 选择结构

选择结构根据选择变量的值来决定执行不同的语句组。其格式为:

Select Case选择变量

Case值1

语句组1

Case值2

语句组2

Case值3

语句组3

……

Case Else

语句组n+1

End Select

执行SELECT语句时,先比较选择变量与后面各Case值,如果与某一Case值相同,则执行该Case的语句组。如果选择变量与任何一Case值都不相同,则执行Case Else后的语句组。Case语句组执行完毕后跳出选择语句执行End Select后的语句。

Sub createGeometry(geometryType)

Select Case geometryType

Case “圆柱体”

Rhino.AddCylinder Array(0,0,0), Array(0,0,20) , 5 ‘建立一个圆柱体

Case“圆锥体”

Rhino.AddCone Array(0,0,0),Array(0,0,20), 10 ‘建立一个圆锥体

Case“圆环体”

Rhino.AddTorus Array(0,0,0), 20, 5 ‘建立一个圆环体

Case Else

Rhino.AddSphere Array(0,0,0), 10 ‘建立一个球体

End Select

End Sub

createGeometryRhino.GetString("请输入几何体类别")

上述代码的功能是根据用户的输入建立相应的几何体。程序加载后,提示用户在命令行输入要建立的几何体类别,用户输入的字符串作为调用createGeometry函数的geometryType参数的值使用。在createGeometry函数中,Select语句以geometryType为选择变量。当用户输入“圆柱体”(输入时不加引号),选择变量geometryType与第一个Case的值相同,因此执行语句组1,建立一个圆柱体。输入“圆锥体”或“圆环体”时,分别执行相应的Case语句组。当输入的字符串不与任何一个Case的值相同时,执行Case Else,建立一个球体。几何体建立完毕后跳出。返回搜狐,查看更多

责任编辑:

rhino编程语言c井,Rhino插件开发:RhinoScript脚本教程(4):VBScript基础相关推荐

  1. rhino编程语言c井,运用Rhino实现自定义函数

    使用Rhino实现自定义函数 因为一些特别的要求,系统要提供一个自定义的文本框,让用户输入自定义的计算,系统要提供对用户输入的内容的解析和结果计算功能.经过一些搜索.查找和分析,选择使用Rhino和B ...

  2. 教程:Nodejs大漠插件开发游戏脚本实战(二)搭建项目

    一.使用nvm-windows安装Nodejs 上一篇文章我们说过我们需要用到32位的Nodejs,而且因为一些特殊原因,我们要用到指定的版本.为了不影响我们其他项目的开发,这里用到一个Nodejs的 ...

  3. 一个不错的shell 脚本教程 入门级

    一个不错的shell 脚本教程 入门级 投稿:mdxy-dxy 字体:[增加 减小] 类型:转载 时间:2011-10-11 我要评论 一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂 ...

  4. BAT 批处理脚本教程

    BAT 批处理脚本教程 第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统 ...

  5. 3D MAX脚本教程1

    本文转载自http://jiurong995294.blog.163.com/blog/static/195133243201192531546490/ 方便以后须要时候使用 为什么要学习3D MAX ...

  6. 第一章 ArcGIS Pro python高级脚本教程介绍

    文章的很多内容来自于ESRI出版的 Advanced Python Scripting for ArcGIS Pro 一书,该书也提供了实验数据与免费的PDF书籍,可以通过官网链接下载. 不想仅仅做一 ...

  7. 不错的shell 脚本教程

    [url]http://neoman.iteye.com/blog/1485862[/url] 超强视频教程推荐]方老师shell脚本讲座. 特别适合新手,也是老手复习的好资料 下载地址: (一)sh ...

  8. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/ 转载于:https://www.cnblogs.com/pegasu ...

  9. ASP脚本语言之vbscript用法

    常用的脚本语言有 Javascript 和 VBscript . 使用哪种语言需先设定.如上节代码中的<%@ LANGUAGE="JSCRIPT"   ...    %> ...

  10. expect脚本教程_Expect脚本SSH示例教程

    expect脚本教程 Expect script is a great linux/unix utility. I have to deal with a lot of unix servers in ...

最新文章

  1. 11gR2 RAC启用iptables导致节点宕机问题处理
  2. ABAP:判断是否汉字
  3. c语言编译及下载环境变量,windows 下使用g++ 编译器-Go语言中文社区
  4. 精选| 2020年12月R新包推荐(第49期)
  5. 【Java_基础】java中static与final关键字的区别
  6. pe_xscan作了3点更新 1
  7. 关于SIM900A模块的学习心得
  8. linux ipk,openwrt下ipk生成过程及原理
  9. OPPO Enco X无线降噪耳机体验评测,加钱变强!
  10. 简单的收支记账软件的实现详细解释(不连接数据库)
  11. Wampserver修改默认浏览器、默认编辑器的解决办法
  12. Python处理视频文件的实用姿势
  13. C/C++基础进阶篇:C++11 中引入的 delete 描述符使用场景
  14. Jemeter温故而知新
  15. 数据库函数之日期函数
  16. ScreenToGif,让你一用就爱上的电脑端GIF动图制作软件
  17. xshell里面使用黑色背景时蓝色字体看不清楚的解决方法
  18. 樱桃牌-高逼格键盘敲代码贼爽!包邮送你!
  19. [18调剂]浙江工商大学2018年硕士研究生调剂预通知
  20. 百度地图调用加载显示Marker,并添加点击事件

热门文章

  1. Eclipse SVN插件Subclipse和Subversive简介
  2. 一套键鼠控制多台电脑的使用方法,快收藏
  3. Python数据结构判断括号是否匹配
  4. 存储服务器内的温度检测信号线 用线,常用的3线和4线电阻温度检测器介绍
  5. matlab r2008a下载,Matlab+R2008a下载地址及安装教程
  6. 怎样在EDIUS中进行快速抠图
  7. 【SketchUp插件】10款吊炸天的SU插件,拿走不谢!
  8. 推荐一款录屏软件——EV录屏
  9. oracle空间查询
  10. 电信笔试C语言,2021中国电信考试试题附答案(12)