日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rhino编程语言c井,Rhino插件开发:RhinoScript脚本教程(4):VBScript基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題: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基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。