您現在的位置是:首頁 > 旅遊

Rhino外掛開發:RhinoScript指令碼教程(1)

由 深圳樓市閒談 發表于 旅遊2021-11-30
簡介rvb”Load是Rhino的命令,在執行指令碼程式的時候可以看到它顯示在命令列中

指令碼開發用什麼語言

Rhino外掛開發:RhinoScript指令碼教程(1)

2004

11

月,

RhinoScipt

生成的古建築模型

月底的

Rhino/Grasshopper

要開班了

忽然有點感慨。曾經寫過無數的

Rhino

指令碼

程式碼量遠超

CorelDraw

外掛

年輕時的狂熱自己都感動。不敢說是否

Rhino

國內第一人,前

5

總是排得進去的,因為那時連一個可以交流的夥伴都找不到。孤獨地開始,孤獨地前行。

以下的幾期教程是

2007

年寫的,是一本書的一部分,書是跟國防工業出版社籤的一部教程,後來各種忙,書也沒能寫完,很對不起國防工業。如果時間夠用,我還是希望能把這個教程寫完,即使有信心學它的設計師沒幾個。這算是給自己一個交代吧。再說,大量的舊貨也該整理一下放出來交給用得著的人了。有些程式碼由於

Rhino

系統升級和內部函式的變化已經無法正常運行了,也準備花點時間重新修訂一下。

Rhino外掛開發:Rhino指令碼教程(1)

第1章 Hello World!

指令碼語言是一種程式語言。

VB

VC++

等大型程式語言相比,指令碼語言編寫的程式一般不是可以獨立執行的

exe

可執行檔案,而只能依附與某一軟體平臺,在該軟體的環境下執行。因此,多數指令碼語言是為某一軟體量身定做的。

指令碼語言面向的物件大多是軟體的使用者而不是專業的軟體開發人員,因此程式結構簡單,大多是文字檔案,不需要編譯即可直接執行。有些指令碼甚至也不做語法檢查,執行到有錯誤的地方才停下來,如

AutoCAD

的指令碼

AutoLisp

3D

造型軟體來說,指令碼語言的用途在於拓展軟體的造型功能,實現一些複雜的或有規律的形態設計任務,或完成一些靠選單按鈕和滑鼠操作難以實現的建模任務。舉例來說,指令碼可以完成的任務有下面一些:

1)做

100

個球體,讓他們成螺旋狀排列;

2)做

100

個大小形狀都隨機的杯子;

3)在水中投入三個石子,泛起干涉漣漪,做出這個波紋曲面;

4)做一個藤編的花籃,每一根藤條都要做出來;

5)從

。txt

。xls

文件中獲取出點座標資料,並用於曲面造型;

……

Rhino

的指令碼語言稱為

Rhino

,它的語法格式與

VB

完全相同。

Rhino

內部為該指令碼語言設定了若干函式

(如

Rhino 4。0

724

個函式

)用以完成各種

3D

造型任務。本書假設讀者對程式設計沒有任何經驗,因此例項和解釋都從最基礎的開始。如果有讀者已經是程式設計高手,這些粗淺的解釋可以略過不看了。

了對

Rhino

指令碼的

使用方法有一個大致的瞭解,我們寫個程式來執行一個著名的任務。這個程式只有一行:

MsgBox “HelloWorld!”

這個只有一行的程式代替

Rhino

問候人類世界,方式是彈出一個對話方塊,顯示一句話:

Hello World

!。

這個程式執行後在

Rhino

的介面上出現一個對話方塊:

Rhino外掛開發:RhinoScript指令碼教程(1)

我們將在下節圍繞這句友好的問候做一些更細緻的工作。

我們先把這行字儲存起來。為了讓

Rhino

知道這行字是一條指令,還是有些必要的情況需要注意的:

1)引號必須是英文引號,因為

Rhino

不認識任何中文字元,包括中文標點,但引號裡面的內容可以是任何語言;

2)儲存為副檔名為

。rvb

的文字檔案,因為

Rhino

只執行這種格式的指令。

現在我們把這個程式在

Rhino

中執行一次,來認識一下

Rhino

執行

rvb

指令碼的過程。

執行

指令碼

程式的操作命令在

Rhino

Tools

選單

下的

Rhino

子選單中

Rhino

程式

的起動選單

Rhino外掛開發:RhinoScript指令碼教程(1)

rvb

指令碼

的操作命令有

3

載入程式

Load

),

執行程式

Run

和編輯程式

Edit

Load

命令可以載入一個

rvb

程式

執行後彈出如圖

所示的

對話方塊。

Rhino外掛開發:RhinoScript指令碼教程(1)

載入一段

rvb

程式的操作順序如下:

1)點

Add

按鈕從標準檔案列表框中選擇副檔名為

。rvb

的檔案,確定後文件的全路徑顯示在左側列表框中,如圖

所示

。可以反覆使用

Add

按鈕新增多個

。rvb

檔案。

Rhino外掛開發:RhinoScript指令碼教程(1)

2)

點選選擇所要載入的

rvb

檔案,按

Load

按鈕載入。載入後加載對話方塊消失,

Rhino

開始執行該

rvb

檔案中的程式。我們這個程式

執行後在螢幕上顯示前面所示的訊息框。

Remove

按鈕可以從檔案列表中刪除選中的

rvb

檔案

——

只是從左邊框裡刪除,檔案仍然存在。

Edit

按鈕可以開啟選中的

rvb

檔案並進行編輯。

Close

按鈕關閉對話方塊。

Run

命令可以執行

rvb

指令碼中定義的子過程,執行後彈出如下對話方塊:

Run

命令介面

Rhino外掛開發:RhinoScript指令碼教程(1)

我們這個只有一行的程式裡沒有定義任何子過程,因此左邊框裡是空的。子過程的定義方法後面會詳細提到。

Edit

命令可以開啟

rvb

檔案進行編輯,並隨時執行。執行

Edit

命令後彈出如下對話方塊。

Edit

命令介面

Rhino外掛開發:RhinoScript指令碼教程(1)

Merge

按鈕可以從檔案列表中

選擇

rvb

檔案並將程式內容插入到左側編輯框中當前游標位置,當編輯框為空時相當於開啟一個新檔案。按

Merge

按鈕並選擇我們的程式檔案,可以在左邊看到我們寫過的程式,如圖所示。

VB

Rhino

內部定義好的命令(稱為

保留字

,程式設計的時候不能使用這些保留字為變數名)用藍色顯示

出,我們可以在這裡修改我們的程式。

Edit

命令編輯

HelloWorld

程式

Rhino外掛開發:RhinoScript指令碼教程(1)

Save

按鈕儲存當前編輯的

rvb

檔案。

Run

按鈕執行當前編輯框中的

rvb

檔案,其作用相當於

Load

按鈕。

右下方的圖釘圖示按下後可以在執行當前檔案時保持編輯框為開啟狀態,否則按下

Run

按鈕後編輯框消失。

rvb

程式是一個文字檔案,因此用

ASCII

碼文字檔案編輯器就可以編寫了,如

Windows

自帶的記事本。記事本對於編寫

RVB

程式並不是一個很好的工具,這裡作者推薦的一個文字編輯軟體是

EditPlus

EditPlus

中有

VB

模板,使用該模板編寫

RVB

程式可以得到清晰的介面顯示,各種保留字都顯示以不同的色彩,非常方便:

EditPlus

編輯介面

Rhino外掛開發:RhinoScript指令碼教程(1)

為了進一步鞏固剛剛建立起來的信心,我們再來編寫一個

HelloWorld

一樣簡單的程式,這次要讓

Rhino

建立一個球體。

Rhino。AddSphereArray(0,0,0), 5。0

把上面這行程式儲存

Ex1-2Ball。rvb

,用執行

Ex1-1HelloWorld。rvb

同樣的方法執行一遍,會發現在座標原點位置出現了一個球體。

我們來看看這行簡單的程式如何做到這點的。這行程式有三段:

第一段

Rhino。AddSphere

是函式名,它告訴

Rhino

我們要建立一個球體;

第二段

Array(0,0,0)

和第三段

5。0

稱為引數,它們告訴

Rhino

我們要建立一個什麼樣的球體:

Array(0,0,0)

表示球心座標,

5。0

表示球的半徑;引數之間用英文逗號隔開。

如果想建一個不同大小的球,只要把

5。0

改一下就行了

——

注意,半徑必須大於零。

可能我們的讀者還覺得不過癮:要是能夠隨心所欲的建立大小不一的球而不用每次都改程式就好了。實現這個功能的程式也只有一行:

Rhino。AddSphereArray(0,0,0), Rhino。RealBox (“

輸入球體半徑

”, 5。0 )

執行這個程式,會彈出一個對話方塊:

Rhino外掛開發:RhinoScript指令碼教程(1)

在程式中我們用

Rhino。RealBox (“

輸入球體半徑

”, 5。0 )

代替了半徑值

5。0

Rhino。RealBox

Rhino。AddSphere

一樣是一個函式,其作用就是彈出一個對話方塊,然後把使用者輸入的數值告訴函式

Rhino。AddSphere

。這個函式有兩個引數,“輸入球體半徑”表示顯示在對話方塊上的提示文字,

5。0

表示預設的半徑值。這個函式的返回值就是使用者的輸入,如果使用者沒有輸入,則返回預設值。點選

OK

後,在座標原點位置會出現一個以使用者輸入值為半徑的球體。

相信到這裡有些人已經開始雄心萬丈了,既然能隨心所欲的建立球體,那麼建立一輛汽車應該方式也差不多。

是這樣。

這個只有一行的程式具備了一個外掛模組的基本功能:使用者資料的輸入和造型系統的響應。大型外掛的功能也不過是更多的輸入資料和更復雜的系統響應而已,比如輸入姿態引數構造一個人體模型。我們將在後面的章節中逐步講解如何讓這個只有一行的程式發展成一個功能豐富的外掛。

這裡還有一個不太如意的地方:每次都從選單進入我們的程式顯然太麻煩了,而且也不夠酷,要是能在介面上擁有一個按鈕就好了。現在我們就專為這個程式建一個按鈕放在介面上。這個工作與程式設計無關,但顯然是大家都有興趣知道的。

Tools

選單下的

Toolbar Layout

項進入工具條設定介面:

工具條設定介面

Rhino外掛開發:RhinoScript指令碼教程(1)

建立新工具條

Rhino外掛開發:RhinoScript指令碼教程(1)

Toolbar

選單下的

new

命令建一個新的工具條,設定工具條的名字和大小,如上圖。按“確定”生成工具條,新工具條的名稱顯示在工具條列表框裡,現在它可以像所有的其他工具條一樣使用了。新工具條只有一個按鈕,如果想增加按鈕,在工具條列表中右擊新工具條,從彈出選單中選擇“

Add Button

”。

關閉工具條介面,把新工具條拖動到你想要他呆的位置。現在工具條上的按鈕是空白的,點選也不會有任何反應。現在我們給工具按鈕設定任務。

按住

Shift

鍵點選按鈕,出現如圖所示介面:

按鈕設定介面

Rhino外掛開發:RhinoScript指令碼教程(1)

一個按鈕可以設定兩個指令,分別用左鍵和右鍵操作,左右鍵的指令分別寫在下方兩個框內。這個按鈕我們只設置一個質量,寫作左邊框裡,用滑鼠左鍵操作,指令如下:

-Load “F:RhinoPublishExamplesEx1-3Ball。rvb”

Load

Rhino

的命令,在執行指令碼程式的時候可以看到它顯示在命令列中。前面的短橫線(減號)表示執行

Load

命令但是不彈出對話方塊。因為彈出對話方塊就必須透過使用者響應關掉它才能進行下一步動作,這是我們不希望的,我們要讓後面的工作自動進行。實際上,這個短橫線對所有的

Rhino

命令都起作用,可以自己試一下。命令前面加上這個短橫線後,對話方塊中所有的選項都以字元的形式出現在命令列中。

Load

後面引號中的字元是我們剛編好的程式名和全路徑。注意,引號中不能有任何空格,因為空格會被當作回車鍵來處理,空格後面的字元全部忽略。

中部兩個輸入框是左右鍵的命令提示,即滑鼠從按鈕上滑過時顯示的按鈕功能提示。左上方是為這個按鈕設定下拉工具條,從列表框中選擇要顯示的下拉工具條即可。

左上方的兩個按鈕是為工具條設定影象,可以自己畫按鈕圖案,也可以選擇一幅點陣圖來載入:

設定按鈕圖案

Rhino外掛開發:RhinoScript指令碼教程(1)

點選“確定”,按鈕設定完畢。

這排按鈕是古建築外掛,我做的

HelloWorld

”幾乎是任何一個與程式設計打交道的人最先接觸的任務,相信我們對

Rhino

能幹什麼已經有了初步的概念,即使你從來沒有編寫過一行程式。

First thing the first先講到這裡,看幾個圖增強下信心,這是我的學生碩士論文裡的圖。

Rhino

生成的籃子

Rhino外掛開發:RhinoScript指令碼教程(1)

籃子結構細節

Rhino外掛開發:RhinoScript指令碼教程(1)

Rhino生成的檯燈及其細節

Rhino外掛開發:RhinoScript指令碼教程(1)

Rhino外掛開發:RhinoScript指令碼教程(1)

Rhino外掛開發:RhinoScript指令碼教程(1)

Rhino外掛開發:RhinoScript指令碼教程(1)

Rhino外掛開發:RhinoScript指令碼教程(1)

Rhino外掛開發:RhinoScript指令碼教程(1)

Rhino外掛開發:RhinoScript指令碼教程(1)

Rhino外掛開發:RhinoScript指令碼教程(1)

推薦文章